¿Alguien podría ayudarme a comprender cómo funciona realmente la segmentación de Mean Shift?
Aquí hay una matriz de 8x8 que acabo de hacer.
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
Usando la matriz anterior, ¿es posible explicar cómo la segmentación de cambio medio separaría los 3 niveles diferentes de números?
Respuestas:
Primero lo básico:
La segmentación de cambio medio es una técnica de homogeneización local que es muy útil para amortiguar las diferencias de tonalidad o sombreado en objetos localizados. Un ejemplo es mejor que muchas palabras:
Acción: reemplaza cada píxel con la media de los píxeles en una vecindad rango-r y cuyo valor está dentro de una distancia d.
El cambio medio toma generalmente 3 entradas:
Tenga en cuenta que el algoritmo no está bien definido en las fronteras, por lo que diferentes implementaciones le darán resultados diferentes allí.
NO discutiré los detalles matemáticos sangrientos aquí, ya que son imposibles de mostrar sin la notación matemática adecuada, no están disponibles en StackOverflow, y también porque se pueden encontrar en buenas fuentes en otros lugares .
Veamos el centro de su matriz:
Con opciones razonables de radio y distancia, los cuatro píxeles centrales obtendrán el valor de 97 (su media) y serán diferentes de los píxeles adyacentes.
Calculémoslo en Mathematica . En lugar de mostrar los números reales, mostraremos un código de colores, por lo que es más fácil comprender lo que está sucediendo:
El código de colores para su matriz es:
Luego tomamos un cambio medio razonable:
Y obtenemos:
Donde todos los elementos centrales son iguales (a 97, BTW).
Puede iterar varias veces con Mean Shift, tratando de obtener una coloración más homogénea. Después de algunas iteraciones, llega a una configuración no isotrópica estable:
En este momento, debe quedar claro que no puede seleccionar cuántos "colores" obtendrá después de aplicar Mean Shift. Entonces, mostremos cómo hacerlo, porque esa es la segunda parte de su pregunta.
Lo que necesita para poder establecer el número de clústeres de salida de antemano es algo así como el clúster Kmeans .
Funciona de esta manera para su matriz:
O:
Lo cual es muy similar a nuestro resultado anterior, pero como puede ver, ahora solo tenemos tres niveles de salida.
HTH!
fuente
Una segmentación Mean-Shift funciona así:
Los datos de la imagen se convierten en espacio de características.
En su caso, todo lo que tiene son valores de intensidad, por lo que el espacio de características solo será unidimensional. (Puede calcular algunas características de textura, por ejemplo, y luego su espacio de características sería bidimensional, y estaría segmentando según la intensidad y la textura)
Las ventanas de búsqueda se distribuyen por el espacio de funciones.
El número de ventanas, el tamaño de la ventana y las ubicaciones iniciales son arbitrarios para este ejemplo, algo que se puede ajustar según las aplicaciones específicas.
Iteraciones de cambio medio:
1.) Se calculan las MEDIAS de las muestras de datos dentro de cada ventana
2.) Las ventanas se desplazan a las ubicaciones iguales a sus medias calculadas previamente
Los pasos 1.) y 2.) se repiten hasta la convergencia, es decir, todas las ventanas se han asentado en las ubicaciones finales
Las ventanas que terminan en las mismas ubicaciones se fusionan
Los datos se agrupan de acuerdo con los recorridos de la ventana.
... por ejemplo, todos los datos que fueron atravesados por ventanas que terminaron en, digamos, la ubicación "2", formarán un grupo asociado con esa ubicación.
Entonces, esta segmentación producirá (casualmente) tres grupos. Ver esos grupos en el formato de imagen original podría parecerse a la última imagen de la respuesta de belisarius . La elección de diferentes tamaños de ventana y ubicaciones iniciales puede producir resultados diferentes.
fuente