Обработка изображений небольших кругов 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, а затем смотрели из центра каждой ячейки). Я думал, что из списка контуров большинство из них будет иметь вершины бутылок (которые вы можете протестировать с использованием материала с фактором формы), однако один из них будет иметь большой прямоугольник. Если бы вы могли найти конечности прямоугольника (от самого большого контура по площади), то удалите его с третьего изображения, вы останетесь с частичными кругами. Если вы затем контур проследили эти частичные кружки и использовали смесь факторов формы/кривой и т.д., Может помочь? И да, удачи снова!