Esta crónica ha sido aprobado por expertos así aseguramos la exactitud de este enunciado.
Solución:
Lo básico primero:
La segmentación Mean Shift es una técnica de homogeneización local que es muy útil para amortiguar las diferencias de sombreado o tonalidad 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 de rango-r y cuyo valor está dentro de una distancia d.
El cambio medio toma generalmente 3 entradas:
- Una función de distancia para medir distancias entre píxeles. Por lo general, la distancia euclidiana, pero podría usarse cualquier otra función de distancia bien definida. La distancia de Manhattan es otra opción útil a veces.
- Un radio. Todos los píxeles dentro de este radio (medido según la distancia anterior) se tendrán en cuenta para el cálculo.
- Una diferencia de valor. De todos los píxeles dentro del radio r, tomaremos solo aquellos cuyos valores estén dentro de esta diferencia para calcular la media
Tenga en cuenta que el algoritmo no está bien definido en los bordes, 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.
Miremos el centro de tu matriz:
153 153 153 153
147 96 98 153
153 97 96 147
153 153 147 156
Con elecciones razonables para el radio y la distancia, los cuatro píxeles centrales obtendrán el valor de 97 (su media) y serán diferentes de los píxeles adyacentes.
Vamos a calcularlo en Mathematica. En lugar de mostrar los números reales, mostraremos un código de colores para que sea más fácil entender lo que está sucediendo:
El código de colores para su matriz es:
Entonces tomamos un cambio medio razonable:
MeanShiftFilter[a, 3, 3]
Y obtenemos:
Donde todos los elementos centrales son iguales (a 97, por cierto).
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” obtiene 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 la cantidad de clústeres de salida por adelantado es algo así como la agrupación en clústeres de Kmeans.
Se ejecuta de esta manera para su matriz:
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
O:
Lo cual es muy similar a nuestro resultado anterior, pero como puede ver, ahora solo tenemos tres niveles de salida.
HTH!
Una segmentación Mean-Shift funciona de la siguiente manera:
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 textura)
Las ventanas de búsqueda se distribuyen en el espacio de funciones.
La cantidad de ventanas, el tamaño de la ventana y las ubicaciones iniciales son arbitrarias para este ejemplo, algo que se puede ajustar según las aplicaciones específicas.
Iteraciones de desplazamiento medio:
1.) Se calculan las medias de las muestras de datos dentro de cada ventana
2.) Las ventanas se CAMBIAN a las ubicaciones iguales a sus medias previamente calculadas
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 en la respuesta de Belisarius. Elegir diferentes tamaños de ventana y ubicaciones iniciales puede producir resultados diferentes.