Вот вопрос к специалистам по обработке изображений.
Я работаю над сложной проблемой компьютерного зрения. Задача состоит в том, чтобы сосчитать устьицы (отмеченные ниже) на изображениях DIC микроскопии. Эти изображения устойчивы к большинству поверхностных методов обработки изображений, таких как морфологические операции и обнаружение краев. Это также отличается от других задач подсчета клеток.
Я использую OpenCV. Мой план состоит в том, чтобы рассмотреть потенциально полезные функции для дискриминации устьиц.
- Классификаторы текстуры
- DCT (дискретное косинусное преобразование / анализ в частотной области)
- LBP (локальные двоичные шаблоны)
- HOG (гистограмма ориентированных градиентов)
- Надежные детекторы функций (я скептически отношусь)
- Харрис углы
- SIFT, SURF, STAR и т. Д.
- Каскадный классификатор Хаара / Особенности альта-Джонса
И, возможно, разработать новый дескриптор функции. Я оставляю выбор классификатора на данный момент.
Что я пропустил? Как бы вы решили это? Решения для подобных проблем обнаружения объекта были бы очень полезны.
Образцы изображений здесь .
После полосового фильтра:
Обнаружение ловких краев не обещает. Некоторые области изображения не в фокусе:
источник
Ответы:
Извините, я не знаю OpenCV, и это скорее этап предварительной обработки, чем полный ответ:
Во-первых, вам не нужен детектор краев. Детектор кромки преобразует переходы (например, из темного в светлое):
в гребни (яркие линии на темном), как это:
Другими словами, он выполняет дифференциацию.
Но на ваших изображениях есть свет, сияющий вниз в одном направлении, который показывает нам рельеф трехмерной поверхности. Мы воспринимаем это как линии и края, потому что мы привыкли видеть вещи в 3D, но на самом деле это не так, поэтому детекторы краев не работают, а сопоставление с шаблоном не будет легко работать с повернутыми изображениями (идеальный вариант). совпадение при повороте на 0 градусов фактически полностью отменило бы на 180 градусов, потому что свет и темнота совпали бы друг с другом).
Если высота одной из этих лабиринтных линий выглядит так со стороны:
тогда функция яркости при освещении с одной стороны будет выглядеть так:
Это то, что вы видите на своих изображениях. Облицовочная поверхность становится ярче, а задняя поверхность становится темнее. Таким образом, вы не хотите дифференцироваться. Вам необходимо интегрировать изображение по направлению освещения, и оно даст вам исходную карту высот поверхности (приблизительно). Тогда будет проще сопоставлять вещи, будь то через преобразование Хафа, сопоставление с шаблоном или что-то еще.
Я не уверен, как автоматизировать поиск направления освещения. Если это одинаково для всех ваших изображений, отлично. В противном случае вам придется найти самую большую контрастную линию и предположить, что свет перпендикулярен ей или чему-то еще. Для моего примера я повернул изображение вручную в правильном направлении со светом слева:
Вам также необходимо удалить все низкочастотные изменения в изображении, чтобы выделить только быстро меняющиеся линейные элементы. Чтобы избежать звона артефактов, я использовал 2D Gaussian Blur, а затем вычел это из оригинала:
Интеграция (накопленная сумма) может легко убежать, что приводит к горизонтальным полосам. Я удалил их с другим гауссовым верхним проходом, но только в горизонтальном направлении:
Теперь устьицы - это белые эллипсы, а не белые в некоторых местах и черные в других.
Оригинал:
Интегрированное:
Преобразование Хафа может быть использовано для обнаружения таких ребристых эллипсов, сделанных из «краевых пикселей», хотя это действительно дорого для вычислений и памяти, и они не являются идеальными эллипсами, так что это должен быть немного «неаккуратный» детектор. Я никогда не делал этого, но есть много результатов Google для " обнаружения крутого эллипса ". Я бы сказал, что если вы обнаружите один эллипс внутри другого, в пределах пространства поиска определенного размера, его следует считать стомой.
Также см:
источник
Первое, что я бы попробовал, - это сопоставление шаблонов с шаблонами, повернутыми для всех углов с некоторым шагом. Вращающийся шаблон необходим здесь. Также выбор шаблона может быть нетривиальным - может быть несколько с различным освещением, и он может быть размытым, чтобы учесть разницу в формах.
http://en.wikipedia.org/wiki/Template_matching#Template-based_matching_and_convolution
Далее - HOG выглядит многообещающе здесь. Другим решением может быть использование сильного детектора углов, такого как Moravec или Shi-Tomasi (с не максимальным подавлением) и поиск групп из 2 углов или 3-4 углов на одной линии в качестве кандидатов. После нахождения кандидатов вы можете применить активный контур для проверки (не уверен, что это действительно поможет, но это возможно)
http://en.wikipedia.org/wiki/Corner_detector
http://en.wikipedia.org/wiki/Active_contour
Еще одна возможность - использовать преобразование Хафа для эллипсов, возможно, с не 2, а 3-4 свободными параметрами.
источник
Частичный ответ. Поиск кандидатов с Mathematica:
источник
Я бы начал с использования чувствительного детектора краев (например, величины градиента с низким порогом), а затем использовал преобразование Хафа, чтобы попытаться найти эллипсы. Кэнни все еще может работать. Я уверен, что есть параметры, которые вы можете настроить, чтобы сделать его более чувствительным и подобрать размытые края.
источник