it-swarm.com.ru

Объяснение сегментации изображения с использованием Mean Shift

Может кто-нибудь помочь мне понять, как на самом деле работает сегментация 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 разных уровня чисел?

100
Sharpie

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

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

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 clustering .

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

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

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

НТН!

194
Dr. belisarius

Сегментация 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", будут образовывать кластер, связанный с этим местоположением.

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

156
mlai