Обработка изображений небольших кругов MATLAB

У меня есть изображение, которое выглядит так:

Bottle

У меня есть задача, в которой я должен объединить все бутылки вокруг их открытия. Я создал простой алгоритм и начал его работать. Мой алгоритм:

  • Порог исходного изображения
  • Сделайте морфологическое открытие в нем
  • Заполните пустые отверстия
  • Отделите часть изображения с помощью реквизитов региона так, чтобы была выбрана только область, эквивалентная устью бутылок.
  • Найдите центроид для каждого и нарисуйте круг вокруг каждой бутылки.

Я сделал в соответствии с вышеприведенным алгоритмом, но у меня есть часть изображения, вокруг которого я рисую круг. Это потому, что я выбрал область, так как область рта бутылки и оставшийся шум почти такой же. И поэтому я дал такую ​​цифру.

Обработка, применяемая к изображению, выглядит следующим образом:

Enter image description here

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

Enter image description here

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

Ответ 1

Приятные примеры изображений, которые вы задаете для своего вопроса!

Одна вещь, которую вы можете использовать для обнаружения оставшихся бутылок (если таковые имеются), - это четко определенная структура размещения бутылок. Сетка размером 4 на 5 бутылки должна быть относительно легко расположена, и когда сетка расположена, вы можете проверить, обнаружена ли бутылка в каждом ожидаемом месте бутылки.

Что касается дополнительной обнаруженной бутылки, вы можете использовать функции формы, такие как

  • эксцентриситет,
  • первый момент Hu
  • соотношение между длиной периметра по площади (которая минимизирована для круга) подробнее здесь

Если вы можете обнаружить сетку, вам должно быть удобно расположить ее как выброс (вдали от ожидаемого места бутылки) и отбросить соответственно.

Удачи вам в вашем проекте!

Ответ 2

Я использовал тот же подход, что и третье предложение midtiby, используя соотношение между площадью и периметром, называемым фактором формы:

4π * Площадь/периметр ^ 2

чтобы обнаружить круги от контурного изображения (от порогового изображения) до большого успеха;

http://www.empix.com/NE%20HELP/functions/glossary/morphometric_param.htm

Что касается 4 необоснованных бутылок, это довольно сложно, если вы не знаете априори о том, на что вы смотрите (как обсуждалось с использованием сетки 4 х 5, а затем смотрели из центра каждой ячейки). Я думал, что из списка контуров большинство из них будет иметь вершины бутылок (которые вы можете протестировать с использованием материала с фактором формы), однако один из них будет иметь большой прямоугольник. Если бы вы могли найти конечности прямоугольника (от самого большого контура по площади), то удалите его с третьего изображения, вы останетесь с частичными кругами. Если вы затем контур проследили эти частичные кружки и использовали смесь факторов формы/кривой и т.д., Может помочь? И да, удачи снова!