Сегментація зображень із застосуванням середнього зсуву


107

Чи може хто-небудь допомогти мені зрозуміти, як насправді працює сегментація середньої зміни?

Ось матриця 8х8, яку я щойно склав

  103  103  103  103  103  103  106  104   
  103  147  147  153  147  156  153  104   
  107  153  153  153  153  153  153  107   
  103  153  147  96   98   153  153  104   
  107  156  153  97   96   147  153  107   
  103  153  153  147  156  153  153  101   
  103  156  153  147  147  153  153  104   
  103  103  107  104  103  106  103  107

Використовуючи вищезазначену матрицю, чи можна пояснити, як середня сегментація Shift розділила б 3 різних рівня чисел?


Три рівні? Я бачу цифри близько 100 і близько 150.
Іван

2
Ну і як його сегментація, я вважав, що числа в середині будуть далеко від крайових чисел, які будуть включені до цього розділу кордону. Ось чому я сказав 3. Я можу помилитися, оскільки не розумію, як працює цей тип сегментації.
Шарпі

О ... можливо, ми приймаємо рівні, щоб означати різні речі. Все добре. :)
Іван

1
Мені подобається прийнята відповідь, але я не думаю, що вона показала всю картину. IMO цей pdf пояснює краще середню сегментацію зрушення (використання прикладу з більшим розміром як приклад краще, ніж 2d я думаю). eecs.umich.edu/vision/teaching/EECS442_2012/lectures/…
Хелін Ван

Відповіді:


204

Основи спочатку:

Сегментація середнього зсуву - це локальна техніка гомогенізації, яка дуже корисна для демпфування затінення або різниці тональності локалізованих об'єктів. Приклад кращий за багато слів:

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

Дія: замінює кожен піксель середнім значенням пікселів у межах діапазону r, значення якого знаходиться на відстані d.

Середній зсув зазвичай займає 3 входи:

  1. Функція відстані для вимірювання відстаней між пікселями. Зазвичай евклідова відстань, але може бути використана будь-яка інша чітко визначена функція відстані. Manhattan Відстань це ще один корисний вибір іноді.
  2. Радіус. Усі пікселі в цьому радіусі (виміряні відповідно до зазначеної відстані) враховуватимуться для розрахунку.
  3. Різниця значення. З усіх пікселів всередині радіуса r ми візьмемо лише ті, значення яких знаходяться в межах цієї різниці для обчислення середнього

Зверніть увагу, що алгоритм недостатньо визначений на кордонах, тому різні реалізації дадуть вам різні результати.

Я НЕ обговорюватимуть тут математичні деталі, оскільки їх неможливо показати без належних математичних позначень, недоступних у StackOverflow, а також тому, що їх можна знайти з хороших джерел деінде .

Давайте розглянемо центр вашої матриці:

153  153  153  153 
147  96   98   153 
153  97   96   147   
153  153  147  156  

При розумному виборі радіуса і відстані чотири центральних пікселя отримають значення 97 (їх середнє значення) і будуть відрізнятися від сусідніх пікселів.

Розрахуємо це в Mathematica . Замість показу фактичних цифр ми покажемо кольорове кодування, тому простіше зрозуміти, що відбувається:

Кольорове кодування для вашої матриці:

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

Тоді ми приймаємо розумний середній зсув:

MeanShiftFilter[a, 3, 3]

І ми отримуємо:

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

Де всі центральні елементи рівні (до 97, BTW).

Ви можете повторити кілька разів із "Середнім зсувом", намагаючись отримати більш однорідне забарвлення. Після кількох ітерацій ви досягаєте стабільної неізотропної конфігурації:

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

Наразі повинно бути зрозуміло, що ви не можете вибрати, скільки «кольорів» ви отримаєте після застосування Mean Shift. Отже, покажемо, як це зробити, адже це друга частина вашого запитання.

Те, що вам потрібно мати можливість задати кількість вихідних кластерів заздалегідь, - це щось на кшталт кластеризації Kmeans .

Він працює таким чином для вашої матриці:

b = ClusteringComponents[a, 3]

{{1, 1, 1, 1, 1, 1, 1, 1}, 
 {1, 2, 2, 3, 2, 3, 3, 1}, 
 {1, 3, 3, 3, 3, 3, 3, 1}, 
 {1, 3, 2, 1, 1, 3, 3, 1}, 
 {1, 3, 3, 1, 1, 2, 3, 1}, 
 {1, 3, 3, 2, 3, 3, 3, 1}, 
 {1, 3, 3, 2, 2, 3, 3, 1}, 
 {1, 1, 1, 1, 1, 1, 1, 1}}  

Або:

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

Що дуже схоже на наш попередній результат, але, як ви бачите, зараз у нас є лише три рівні виходу.

HTH!


Чи є реалізація Matlab середнього зсуву для зображення?
Каушик Ачарія


164

Сегментація Mean-Shift працює приблизно так:

Дані зображення перетворюються в простір функцій особливості простору

У вашому випадку все, що у вас є, - це значення інтенсивності, тому простір функцій буде лише одновимірним. (Ви можете, наприклад, обчислити деякі функції текстури, і тоді ваш простір функцій буде двовимірним - і ви б сегментували на основі інтенсивності та текстури)

Вікна пошуку розподіляються по простору функцій введіть тут опис зображення

Кількість вікон, розмір вікна та початкові місця для цього прикладу довільні - те, що можна точно налаштувати залежно від конкретних програм

Ітерації середнього зсуву:

1.) Значення зразків даних у кожному вікні обчислюються введіть тут опис зображення

2.) Вікна SHIFTed до місць, рівних попередньо обчислюваним засобам введіть тут опис зображення

Етапи 1.) і 2.) повторюються до зближення, тобто всі вікна осіли в кінцевих місцях введіть тут опис зображення

Вікна, які закінчуються на одних і тих же місцях, об'єднуються введіть тут опис зображення

Дані кластеризуються відповідно до віконних переходів введіть тут опис зображення

... наприклад, всі дані, які проходили через вікна, які закінчились, скажімо, на місці "2", утворюватимуть кластер, пов'язаний з цим місцеположенням.

Отже, ця сегментація (випадково) призведе до створення трьох груп. Перегляд цих груп у оригінальному форматі зображення може виглядати приблизно як останній малюнок у відповіді Белісарія . Вибір різних розмірів вікон та початкових місць може призвести до різних результатів.


не може простір бути тривимірним, враховуючи положення кожного пікселя?
Хелін Ван

@HelinWang Так, це могло б.
mlai

Я розумію, як розташоване вікно в просторі функцій 1D, але я не бачу, як ваше пояснення можна застосувати до середніх алгоритмів зсуву, які включають просторову відстань пошуку (наприклад, у пікселях) та спектральну відстань (різниця значень), наприклад як у відповіді доктора belisarius. Чи можете ви це уточнити?
Леннерт

@Lennert Якщо я правильно розумію ваше запитання, то, по суті, ви б зробили додавання піксельних місць (x, y) як функцій або додавання інших функцій на основі розташування до простору кластеризації. Схоже, відповідь Велізарія згадує конкретну реалізацію в Mathematica, яка може зробити щось більш складне. Чи допомагає це?
mlai

1
@Lennert Так, я думаю, ти це отримав. Я можу зрозуміти, чому ви визнали мою відповідь заплутаною Я якось малював свої "вікна" як двовимірні, але насправді намагався зобразити кластеризацію лише на одновимірні спектральні значення. Було б досить приємно візуалізувати середній кластер зсуву в тривимірному просторі зображень з малюнком або анімацією (можливо, один із цих днів, якщо я
знайду
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.