Я начал экспериментировать с OpenCV для проекта, над которым я работаю.
Для этого проекта я выращиваю растения в горшках. Статические изображения разных стадий развития берутся сверху (см. Рисунок ниже).
Цель состоит в том, чтобы обнаружить и в конечном итоге измерить (то есть размер) листья растущих растений на разных стадиях развития.
Я попробовал наивный подход использования Canny Edge Detecting, однако он не работает так хорошо (см. Рисунок ниже), потому что он также обнаруживает небольшие края в почве (независимо от того, какой порог я использовал).
Я думаю, что лучший подход - сначала сегментировать изображение по цвету, а затем использовать некоторый алгоритм обнаружения краев для обнаружения листьев.
Есть ли лучший способ сделать это?
Структура листа известна заранее. Могу ли я использовать алгоритм машинного обучения / классификации для получения еще лучших результатов?
Я тоже не думал, как измерить размер листьев? Есть ли какие-нибудь общие шаблоны для измерения размера и других дескрипторов? (может быть, на картинке есть эталонный объект известного размера?).
Наконец, я также должен иметь дело с окклюзией в некоторой степени. На фотографиях этого не видно, но на более поздних этапах разработки мне, возможно, придется иметь дело с перекрывающимися листьями.Есть ли какие-либо подходы, чтобы справиться с этим?
Я не могу смещать картинку в свою пользу (т.е. затемнение почвы и т.д.), поскольку могут быть тысячи растений , которым необходимо быть обработанным.
Подытоживая мои вопросы:
Я был бы очень благодарен за некоторые указатели или идеи.
Обновление (на основе комментариев Jeff7):
Сначала я провел сегментацию цвета со средним сдвигом вместе с алгоритмом заливки и получил следующее изображение:
Теперь, когда я запускаю обнаружение краев + findcontours на этой картинке результаты намного лучше: