Как заполнить сложный счетчик в OpenCV

Сценарий

Я пишу программу для обнаружения волос на коже. До сих пор я сделал это...

  1. Загружено исходное изображение и применено ускорение для удаления фона

введите здесь описание изображения

  1. Прикладное обнаружение кожи для получения кожи

введите здесь описание изображения

  1. Выполнено И для получения Волос вместе с другими регионами.

введите здесь описание изображения

  1. Выполнить обнаружение контура для получения контура максимального размера

введите здесь описание изображения

Imgproc.drawContours(mask, contours, maxAreaIndex, new Scalar(255,255,255),1);

Проблема

Когда я пытаюсь заполнить свою маску, полученную при запуске findContour, используя код

Imgproc.drawContours(mask, contours, maxAreaIndex, new Scalar(255,255,255),Core.FILLED);

он заполняет контур как

введите здесь описание изображения

Теперь я не могу использовать это как маску, так как это даст мой результат как

введите здесь описание изображения

чего я не хочу.

Может ли кто-нибудь предложить, как я могу добиться заполненного контура для этой проблемы?


person Abhi9    schedule 07.05.2016    source источник


Ответы (1)


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

ОДНАКО этот метод предполагает, что вы обнаружили на изображении в основном волосы. То, что вы сделали, отличается; вы обнаружили НЕ КОЖУ на своем изображении и предположили, что волосы были самым большим контуром. Делая это, когда вы замыкаете свои контуры, особенно на изображениях, где рубашка человека обрезана выше, вы можете столкнуться с некоторой проблемой, когда вы обнаруживаете рубашку и волосы. Я бы добавил дополнительный шаг в ваш конвейер, где вы пытаетесь выделить рубашку на человеке перед применением этой фильтрации.

Удачи!

person bstadt    schedule 07.05.2016