Обнаружение областей объекта в изображении opencv

В настоящее время мы пытаемся обнаружить области объекта на изображениях медицинских инструментов, используя методы, доступные в OpenCV, версия C ++. Пример изображения показан ниже:

Вот шаги, которые мы выполняем:

Преобразование изображения в оттенки серогоПрименение медианного фильтраНайти края с помощью фильтра sobelПреобразовать результат в двоичное изображение, используя порог 25Скелетонизируйте изображение, чтобы у нас были аккуратные краяНахождение X крупнейших подключенных компонентов

Этот подход отлично работает для изображения1 и вот результат:

Желтые границы - это обнаруженные подключенные компоненты.Прямоугольники только для того, чтобы подчеркнуть наличие подключенного компонента.Чтобы получить понятные результаты, мы просто удалили подключенные компоненты, которые полностью находятся внутри любого другого, поэтому конечный результат выглядит примерно так:

Пока что все было хорошо, но другой пример изображения усложнил нашу работу, показанную ниже.

Небольшое светло-зеленое полотенце под объектами приводит к следующему изображению:

После фильтрации регионов, как мы делали ранее, мы получили это:

Очевидно, это не то, что нам нужно ... мы исключаем что-то вроде этого:

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

Заранее спасибо.

Ответы на вопрос(1)

Ваш ответ на вопрос