Оптимальный подход к обнаружению листообразных форм в opencv

Я начал экспериментировать с OpenCV для проекта, над которым я работаю.
Для этого проекта я выращиваю растения в горшках. Статические изображения разных стадий развития берутся сверху (см. Рисунок ниже).

Original picture

Цель состоит в том, чтобы обнаружить и в конечном итоге измерить (то есть размер) листья растущих растений на разных стадиях развития.
Я попробовал наивный подход использования Canny Edge Detecting, однако он не работает так хорошо (см. Рисунок ниже), потому что он также обнаруживает небольшие края в почве (независимо от того, какой порог я использовал).

Canny edge detection

Я думаю, что лучший подход - сначала сегментировать изображение по цвету, а затем использовать некоторый алгоритм обнаружения краев для обнаружения листьев.
Есть ли лучший способ сделать это?

Структура листа известна заранее. Могу ли я использовать алгоритм машинного обучения / классификации для получения еще лучших результатов?

Я тоже не думал, как измерить размер листьев? Есть ли какие-нибудь общие шаблоны для измерения размера и других дескрипторов? (может быть, на картинке есть эталонный объект известного размера?).

Наконец, я также должен иметь дело с окклюзией в некоторой степени. На фотографиях этого не видно, но на более поздних этапах разработки мне, возможно, придется иметь дело с перекрывающимися листьями.Есть ли какие-либо подходы, чтобы справиться с этим?

Я не могу смещать картинку в свою пользу (т.е. затемнение почвы и т.д.), поскольку могут быть тысячи растений , которым необходимо быть обработанным.

Подытоживая мои вопросы:

  • Как лучше всего определять листья в почве (см. Рисунки)?
  • Может ли алгоритм машинного обучения улучшить обнаружение?
  • Как я могу измерить размер листьев?
  • Как бороться с закупоркой / перекрытием листьев?

Я был бы очень благодарен за некоторые указатели или идеи.

Обновление (на основе комментариев Jeff7):

Сначала я провел сегментацию цвета со средним сдвигом вместе с алгоритмом заливки и получил следующее изображение:

mean shift color segmentation

Теперь, когда я запускаю обнаружение краев + findcontours на этой картинке результаты намного лучше:

Contours

12
задан Ümit 22 February 2012 в 10:46
поделиться