Привет CV / Сообщество распознавания образов,
У меня есть серьезная проблема относительно сегментации изображения. Сценарий - это атмосфера в печи, которая заставляет мою голову сходить с ума. И мне нужно обнаружить контуры объектов из разных материалов (стекло, керамика, Al, Ir, ...) за короткий промежуток времени (<10 секунд), а не только для одного особого случая. Мне также нужен контур в последовательном ряду пикселей для кода. Поэтому также необходим код цепи или так называемое следование границе / контуру, поэтому открытые отверстия не годятся. На заднем плане - нелинейные шумы, примерно от пыли, частиц или чего-то еще, которые появляются время от времени.
Предложения Matlab или OpenCV приветствуются.
Чтобы сделать это более понятным, я разместил еще одно изображение своей цели и полупрозрачный объект, который также должен быть обнаружен. Также есть дополнительные примеры, о которых нужно знать.
Как вы можете видеть на изображении № 1, в правой части изображения и рядом с внешним контуром звезды, являющейся объектом, есть частицы. Также общий контраст не очень хороший. Сам объект стоит под землей, что не имеет отношения к обнаружению контура. На изображении № 2 показан полупрозрачный объект, что также возможно.
Я хочу найти контур / периметр этого объекта, как на следующем экране (красная линия). Два прямоугольника (желтый) обозначают начальную (слева) и конечную точку (справа). Синяя линия игнорируется.
Сначала я думал, что смогу решить проблему этой грязной атмосферы с помощью только фильтров. Но после того, как я потратил много времени, я только что понял, что мне нужно значительно улучшить или уменьшить шум, чтобы увеличить контраст переднего и заднего плана. Я пробовал много методов, таких как выравнивание по гистограмме, адаптивное выравнивание по Оцу, линейные фильтры (например, гаусс), нелинейные фильтры (медиана, диффузия), активные контуры, k-Means, Fuzzy-c-means, а также Canny для чистого Обнаружение края в сочетании с морфологическими операторами.
- Canny: Частицы и атмосфера вызывают дыры, но мне нужен полный контур объекта. Тем не менее, с закрытием, расширением морфологических операторов это недостаточно хорошо. У Кенни все еще лучшие результаты из всех методов, которые я изучал из-за гистерезиса.
- Активные контуры: они также работают с краями / градиентами, они действуют совершенно сумасшедшими после инициализации внутри объекта, что, возможно, вызвано картой краев, приводящей к «открытому» объекту. Насколько я знаю, контур должен быть замкнут. Пробовал с разными производными (GVF / VFC / Classic Snake).
- k-средства: результаты включают атмосферу печи, из-за туманного фона. То же самое для нечетких с-средств. Я выбрал два кластера из-за отделения объекта от фона. Чем больше кластеров, тем слабее результаты.
- Гистограмма / Оцу: Из-за очень близких оттенков серого (imho!), Он сливает объект с фоном. Пробовал с локальными и глобальными методами.
- Фильтры: особенно GLPF или другие LPF смазывают края, что не так хорошо и даже не уменьшает туманную атмосферу.
- Нелинейные фильтры сохраняют края. Большинство из них занимает слишком много времени для расчета больших изображений. Взял быстрый двусторонний фильтр на данный момент. Результаты см. Ниже.
Поэтому ни один метод не подходит для этапов постобработки, поскольку полученные результаты сегмента объекта плохо конкурируют с существующим алгоритмом. Этот существующий алгоритм очень локальный, и поэтому он работает для этого очень особого сценария.
Поэтому я спрашиваю вас, если я что-то упустил полностью ... У меня нет дальнейшей идеи, как обрабатывать и как я должен получить хорошие результаты контура, не имея пробелов или дыр. Возможно ли это без внесения большого количества изменений ПЗС и физическая среда? Заранее спасибо!
Последний подход на данный момент (после долгой ночи экспериментов с МО):
- Двусторонний фильтр (сохранение краев, но сглаживание однородных областей)
- Canny (Sigma = 2, Threshold = [0,04 0,08])
- Морфологические операции (МО):
bwareopen
,closing
,remove
&bridge
bwlabel
для выбора только периметра контура, который удаляет нежелательные шумы. обновленных скриншотов пока нет, но работает на звезду. стекло имеет внутренний контур, который связан с внешним контуром, что также можно увидеть на скриншоте ниже.
Поэтому я боюсь, что мне нужен специальный алгоритм обхода внешнего контура. Это будет поиск окрестности по часовой стрелке / против часовой стрелки. Этот шаг по часовой стрелке / против часовой стрелки может переключаться, если есть угловая точка. если есть разрыв, увеличьте радиус и посмотрите снова. если есть два или более возможных следующих пункта, возьмите тот, который получил то же направление, что и предыдущий. Как вы думаете, этот алгоритм следования контуру имеет смысл?