Объяснение сегментации изображения с использованием Mean Shift - PullRequest
100 голосов
/ 28 января 2011

Может ли кто-нибудь помочь мне понять, как на самом деле работает сегментация Mean Shift?

Вот матрица 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

Используя вышеприведенную матрицу, можно ли объяснить, как сегментация по среднему сдвигу будет разделять 3 разных уровня чисел?

Ответы [ 2 ]

194 голосов
/ 29 января 2011

Сначала основы:

Сегментация Среднее смещение - это метод локальной гомогенизации, который очень полезен для демпфирования затенения или различий в тональности локализованных объектов.Пример лучше многих слов:

enter image description here

Действие: заменяет каждый пиксель на среднее значение пикселей в окрестности range-r, значение которого находится на расстоянииd.

Среднее смещение обычно принимает 3 входа:

  1. Функция расстояния для измерения расстояний между пикселями.Обычно евклидово расстояние, но может использоваться любая другая четко определенная функция расстояния. Манхэттенское Расстояние иногда является еще одним полезным выбором.
  2. Радиус.Все пиксели в пределах этого радиуса (измеренные в соответствии с указанным выше расстоянием) будут учтены для расчета.
  3. Разница значений.Из всех пикселей внутри радиуса r мы возьмем только те, значения которых находятся в пределах этой разницы, для расчета среднего

Обратите внимание, что алгоритм не очень хорошо определен на границах, поэтому различные реализации дадут вамразные результаты там.

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

Давайте посмотрим на центр вашей матрицы:

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

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

Рассчитаем это в Mathematica .Вместо того, чтобы показывать действительные числа, мы будем отображать цветовую кодировку, чтобы было легче понять, что происходит:

Цветовая кодировка для вашей матрицы:

enter image description here

Затем мы берем разумное среднее смещение:

MeanShiftFilter[a, 3, 3]

И получаем:

enter image description here

Где все центральные элементы равны (до 97, кстати).

Вы можете повторять несколько раз с Mean Shift, пытаясь получить более однородную окраску.После нескольких итераций вы получите стабильную неизотропную конфигурацию:

enter image description here

В это время должно быть ясно, что вы не можете выбратьсколько «цветов» вы получите после применения 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}}  

Или:

enter image description here

Что очень похожек нашему предыдущему результату, но, как вы можете видеть, теперь у нас есть только три выходных уровня.

HTH!

156 голосов
/ 29 июля 2013

Сегментация Mean-Shift работает примерно так:

Данные изображения преобразуются в пространство признаков feature space

В вашем случае все, что у вас есть, это:Значения интенсивности, поэтому пространство признаков будет только одномерным.(Вы можете, например, вычислить некоторые текстурные объекты, и тогда ваше пространство объектов будет двухмерным - и вы будете сегментироваться на основе текстуры и текстуры)

Окна поискараспределены по пространству объектов enter image description here

Количество окон, размер окна и начальное расположение для этого примера являются произвольными - что-то, что можно точно настроить в зависимости от конкретных приложений

Итерации среднего сдвига:

1.) Средние значения выборок данных в каждом окне вычисляются enter image description here

2.) Окна сдвигаются в положения, равные их ранее вычисленным средним значениям enter image description here

Шаги 1.) и 2.) повторяются до схождения, т.е. все окна устоялисьв конечных местоположениях enter image description here

Окна, которые оказываются в тех же местах, объединяются enter image description here

Данные сгруппированы в соответствии соконные обходы enter image description here

... например, все данные, пройденные окнами, которые оказались, скажем, в местоположении «2», сформируют кластер, связанный с этим местоположением.

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

...