Привіт, спільнота з розпізнавання образів
У мене є серйозна проблема щодо сегментації зображення. Сценарій - це атмосфера всередині печі, яка змушує мою голову божевільною. І мені потрібно виявити контури об'єктів з різних матеріалів (скло, кераміка, Al, Ir, ..) за короткий проміжок часу (<10 секунд), а не лише для одного особливого випадку. Мені також потрібен контур в послідовному рядку пікселів для коду. Тому необхідний також ланцюговий код або так званий кордон / контур, тому відкриті отвори - це не добре. На задньому плані - нелінійні шуми, приблизно від пилу, частинок або дещо іншого, які час від часу з’являються.
Пропозиції Matlab або OpenCV вітаються.
Щоб зробити це більш зрозумілим, я розмістив ще одне зображення своєї мети та напівпрозорий об’єкт, який також потрібно виявити. Також додаткові приклади, які потрібно пам’ятати.
Як ви бачите на Зображенні №1, у правій частині зображення та поблизу зовнішнього контуру зірки, що є об’єктом, є частинки. Також загальний контраст не дуже хороший. Сам об’єкт стоїть на підземці, що не має значення для виявлення контуру. На зображенні №2 зображений напівпрозорий об'єкт, що також можливо.
Я хочу знайти контур / периметр цього об’єкта, як на наступному екрані (червона лінія). Два прямокутника (жовтий) позначають початкову (ліву) та кінцеву точку (праворуч). Синя лінія - це нехтування.
Спочатку я думав, що зможу вирішити проблему тієї брудної атмосфери просто фільтрами. Але після поважної кількості вкладеного часу я просто зрозумів, що мені потрібно значно зменшити або зменшити шум, щоб збільшити контраст переднього плану та фону. Я спробував багато методів, таких як вирівнювання гістограми, адаптаційне вирівнювання Otsu, лінійні фільтри (наприклад, гаусси), нелінійні фільтри (медіана, дифузія), активні контури, k-засоби, нечіткі c-засоби, а також Canny для чистого Виявлення країв у поєднанні з морфологічними операторами.
- Кенні: Частинки та атмосфера викликають дірки, але мені потрібен повний контур предмета. Однак із закриттям, розширенням морфологічних операторів це недостатньо добре. У Кенні все ще найкращі результати з усіх методів, які я вивчав через гістерезис.
- Активні контури: Вони також працюють на ребрах / градієнтах, вони діють абсолютно божевільно після ініціалізації всередині об'єкта, що, можливо, викликано картою ребер, що призводить до відкритого об’єкта. Наскільки мені відомо, контур повинен бути закритим. Пробували його з різними похідними (GVF / VFC / Classic Snake).
- k-Значення: Результати включають атмосферу печі через туманний фон. Те саме для нечітких-с-засобів. Я вибрав два кластери через відмежування об’єкта від фону. Більше кластерів призводить до слабших результатів.
- Гістограма / Оцу: Через дуже близьку сіру інтенсивність (імхо!) Вона об'єднує об'єкт з фоном. Спробували це локальними та глобальними методами.
- Фільтри: Особливо GLPF або інші LPF змащують краї, що не так добре і навіть не зменшує туманну атмосферу.
- Нелінійні фільтри зберігають краї. Більшість з них займає занадто багато часу для обчислення великих зображень. Зараз скористався швидким двостороннім фільтром. Результати дивіться нижче.
Тому жоден метод недостатньо хороший для етапів після обробки, оскільки отримані результати об'єктного сегмента погано конкурують з існуючим алгоритмом. Цей існуючий алгоритм дуже локальний, тому він працює для цього дуже особливого сценарію.
Тож я запитую вас, якщо я щось зовсім пропустив ... Я більше не маю уявлення, як обробити і як я повинен отримати хороші контурні результати, не маючи прогалин чи дірок. Чи можливо це, не вносивши багато змін на CCD та фізичне середовище? Спасибі заздалегідь!
Останній підхід поки що (після довгої ночі експериментів з МО):
- Двосторонній фільтр (збереження краю, але згладжування однорідних ділянок)
- Кенні (Сигма = 2, Поріг = [0,04 0,08])
- Морфологічні операції (МО):
bwareopen
,closing
,remove
&bridge
bwlabel
для вибору лише периметра контуру, який видаляє небажані шуми. ще немає оновлених скріншотів, але це працює для зірки. скло має внутрішній контур, який з'єднаний із зовнішнім контуром, що також можна побачити на скріншоті нижче.
Тому я боюся, що мені потрібен спеціальний алгоритм для проходження зовнішнього контуру. Це буде деякий пошук сусідства / проти годинникової стрілки. Цей крок / проти годинникової стрілки може перемикатися, якщо є кутова точка. якщо є зазор, збільште радіус і подивіться ще раз. якщо є два чи більше можливих наступних пункту, візьміть той, хто отримав той же напрямок, що і попередній. Як ви вважаєте, чи має сенс цей алгоритм контурного сліду?