Может ли кто-нибудь помочь мне понять, как на самом деле работает сегментация среднего сдвига?
Вот матрица 8x8, которую я только что составил
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 разных уровня чисел?
Ответы:
Сначала основы:
Сегментация среднего сдвига - это метод локальной гомогенизации, который очень полезен для ослабления затенения или различий тональности локализованных объектов. Пример лучше многих слов:
Действие: заменяет каждый пиксель средним значением пикселей в окрестности диапазона r, значение которого находится в пределах расстояния d.
Среднее смещение обычно принимает 3 значения:
Обратите внимание, что алгоритм не четко определен на границах, поэтому разные реализации дадут вам разные результаты там.
Я НЕ буду обсуждать здесь кровавые математические детали, поскольку их невозможно показать без правильной математической записи, недоступной в StackOverflow, а также потому, что их можно найти в других источниках .
Посмотрим на центр вашей матрицы:
При разумном выборе радиуса и расстояния четыре центральных пикселя получат значение 97 (их среднее значение) и будут отличаться от соседних пикселей.
Давайте посчитаем это в Mathematica . Вместо того, чтобы показывать фактические числа, мы будем отображать цветовую кодировку, чтобы было легче понять, что происходит:
Цветовая кодировка вашей матрицы:
Затем берем разумный средний сдвиг:
И получаем:
Где все центральные элементы равны (97, BTW).
Вы можете повторить несколько раз со средним сдвигом, пытаясь получить более однородную окраску. После нескольких итераций вы придете к стабильной неизотропной конфигурации:
В это время должно быть ясно, что вы не можете выбрать, сколько «цветов» вы получите после применения среднего сдвига. Итак, давайте покажем, как это сделать, потому что это вторая часть вашего вопроса.
Что вам нужно, чтобы иметь возможность заранее установить количество выходных кластеров, так это что-то вроде кластеризации Kmeans .
Для вашей матрицы это работает так:
Или:
Это очень похоже на наш предыдущий результат, но, как вы можете видеть, теперь у нас есть только три выходных уровня.
HTH!
источник
Сегментация среднего сдвига работает примерно так:
Данные изображения преобразуются в пространство функций
В вашем случае все, что у вас есть, это значения интенсивности, поэтому пространство функций будет только одномерным. (Вы можете, например, вычислить некоторые особенности текстуры, и тогда ваше пространство признаков будет двухмерным - и вы будете сегментировать на основе интенсивности и текстуры)
Окна поиска распределены по пространству функций
Количество окон, размер окон и начальные местоположения в этом примере произвольны - это то, что можно точно настроить в зависимости от конкретных приложений.
Итерации среднего сдвига:
1.) Среднее значение выборок данных в каждом окне вычисляется.
2.) Окна СДВИГАЮТСЯ в положения, равные их ранее вычисленным средним.
Шаги 1.) и 2.) повторяются до тех пор, пока все окна не займут окончательные места.
Окна, которые оказываются в одних и тех же местах, объединяются.
Данные группируются в соответствии с обходами окон.
... например, все данные, через которые прошли окна, которые оказались, скажем, в позиции «2», будут формировать кластер, связанный с этим местом.
Таким образом, эта сегментация (по совпадению) даст три группы. Просмотр этих групп в исходном формате изображений может выглядеть примерно как последнее изображение в ответе Велизария . Выбор разных размеров окна и начального расположения может дать разные результаты.
источник