Як видалити певний фон із зображення?


11

помаранчевий

Це було зображення, отримане після фільтрації Габора ... Чи є спосіб видалення ліній всередині зображення, крім яскраво-білого закругленого дефекту.

Спробували іншу орієнтацію фільтра gabor, щоб отримати наступний результат:

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

Після встановлення порогу: Що нормально, але не чудово

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

Після медіанної фільтрації:

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

Спасибі заздалегідь


2
Гарна робота з серединним фільтром. Ви добре на своєму шляху.
Rethunk

Це здається хорошим сценарієм застосування дифузійного фільтра. Крім того , спробуйте запитати в: <br/> dsp.stackexchange.com/ <br> photo.stackexchange.com/ <br>
Денні Varod

Ви застосували середній фільтр після порогу? Якщо так, спробуйте це без порогу.
Денні Варод

Так, я спробував це після встановлення порогу, і я отримав майже такий самий результат, коли і раніше
vini

Відповіді:


12

Якщо вихід вашого фільтра Gábor надійний і коливання ваших даних зображень не настільки велике, що результат виглядає зовсім інакше, то ви можете використовувати наступний підхід (його частини, де вже згадувалося):

  1. Бінарнізуйте друге зображення за допомогою будь-якого алгоритму автоматичного визначення порогу. Діапазон порогів, які будуть працювати, великий, як ви побачите.

  2. Використовуйте алгоритм маркування компонентів, щоб позначити кожну підключену область пікселя унікальним значенням.

  3. Обчисліть для кожного компонента вашого зображення властивість, яка описує, наскільки близький ваш об’єкт до заповненого кола. Для цього можна використовувати, наприклад, компактність . Я використав нижче фракції пікселів в еквівалентному радіусі диска . Цей радіус - це радіус, який має диск з тією ж площею, що і ваш об'єкт.

    1. Площа просто підраховує кількість пікселів вашого об’єкта
    2. Обчислення радіуса кола з урахуванням його площі також має бути керованим
    3. Для пікселя всередині цього радіуса вам потрібен центр кожного об'єкта зображення, але це лише середнє значення всіх позицій об'єкта-пікселів. Якщо ви фізик, то ви знаєте центр мас кількох точкових мас. Це рівнозначно.
    4. Тепер ви обчислюєте для кожного пікселя кожного об’єкта відстань від його центру і перевіряєте, чи менший він від радіуса кола. Розділивши два числа, ви отримаєте частку пікселя всередині та зовні.
  4. Візьміть предмет з найбільшою часткою. Примітка: об’єкти, що мають лише один піксель, отримають значення 1. Отже, ви повинні встановити поріг розміру та брати лише об'єкти, більші, наприклад 10 пікселів.

Щоб побачити, що автоматична бінаризація повинна працювати, ось результати дуже низького та дуже високого порогу:

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

Оновити маркування компонентів

Вибір маркування компонентів не є критичним для вашої програми. Я б запропонував, якщо вам доведеться реалізувати це самостійно, використовувати дуже простий метод. Версія з однією передачею з сайту Вікіпедії дуже проста. В основному ви повторюєте своє бінарне зображення, і коли ви зустрічаєте білий піксель, який не є міткою, ви використовуєте нову мітку для цього об'єкта і починаєте з цього пікселя.

Процес маркування цього об’єкта міткою в основному схожий на заливку. Це на веб-сайті Вікіпедії внутрішні кроки 1-4 в алгоритмі. Ви починаєте з цього міченого пікселя і ставите всіх його сусідів на стек (вони використовували вектор ). Для пікселя на стеці ви перевіряєте, чи він на передньому плані та чи не маркований. Якщо вам доведеться позначити це, ви знову всіх своїх сусідів кладете на стек. Робіть це, поки стек не порожній.

Потім ви продовжуєте сканування через зображення. На відміну від опису на веб-сайті Wiki, вам не потрібно видаляти піксель із початкового зображення, ви просто пропускаєте, коли у зображенні мітки є значення, відмінне від 0.


про який алгоритм маркування компенсантів ви звертаєтесь сюди?
vini

1
@vini, я оновив свій пост. Фонон, спасибі. Ми використовуємо безліч морфологічних заходів і особливо компактність була дуже корисною деякий час тому.

yup great got it :)
vini

6

Кілька ідей:

  1. Відфільтруйте краї, виходячи з щільності міцності кромки. Використовуючи наближення кругового ядра, знайдіть середню силу краю (або якусь іншу міру). Пройдіть через будь-які краї при або над пороговим значенням, встановіть чорні кольори будь-які краї нижче порогового значення.
  2. Використовуйте морфологічну операцію "закриття" (розширення з подальшим ерозією), щоб очистити зображення, а потім використовуйте алгоритм мітки регіону (він також пов'язаний компонент, краплі), щоб знайти всі краплі. Фільтруйте дані краплі за розміром, співвідношенням основних до другорядних осей тощо.
  3. Спробуйте розмиття Гаусса, знайдіть поріг бінаризації, щоб сегментувати світло від темного, а потім фільтруйте краплі, як описано в кроці 2 вище. (Для швидкого наближення гауссової розмитості, стискайте повіки, в основному замикаючись, і прижмуріться до зображення.)
  4. Спробуйте кілька фільтрів у Photoshop або GIMP.

РЕДАКТУВАТИ: після вашого серединного кроку фільтрації ви проходите більшу частину шляху. Хороша робота! Пункт 2, який я запропонував вище (закриття, а потім маркування регіону), - це одна з методик, щоб перенести вас на іншу частину шляху.


yup спробує, що дозволить u knw те, що станеться
vini

1

Можна спробувати активні контури. Незважаючи на те, що це може бути повільно, він може впоратися з таким складним випадком.

Або ви можете використовувати деякі попередні знання для обробки цього зображення. Наприклад, ви знаєте, що річ з блобером "велика" і "пов'язана". Таким чином, коли ви рахуєте кількість кожного підключеного регіону, ви можете його знайти.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.