Detectar ríos serpenteantes en imágenes

14

Tengo superficies: con un atributo medido (variable) en cada superficie: . La mayoría de las superficies tendrán una distribución aleatoria del atributo a través de la superficie, pero algunas superficies (las interesantes) mostrarán un patrón de río serpenteante:nortezyo(X,y)unyo(X,y)

ingrese la descripción de la imagen aquí

Necesito su ayuda para llegar a una medida que nos diga cuál de las superficies es más probable que tenga ese patrón.norte

Hay muchos mapas posibles con el mismo histograma que se muestra a continuación; entonces la medida necesita "recompensar" la continuidad espacial. Para ilustrar esto, he creado una imagen aleatoria con casi el mismo histograma que la imagen del río: ingrese la descripción de la imagen aquí

Por lo tanto, las estadísticas de imagen en la entropía solo pueden ser parte de la solución.

Aquí hay un ejemplo de una imagen sin un patrón de río serpenteante: ingrese la descripción de la imagen aquí

Mis imágenes son sintéticas (hechas en Matlab). En la vida real, la imagen sin el patrón puede tener algo más de continuidad espacial en forma de pequeñas burbujas de valor similar.

Aquí están las imágenes en escala de grises:

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Andy
fuente
1
¿Puedes publicar imágenes reales (sin eje, paleta, histograma, para que podamos probar diferentes algoritmos?). Además: ¿el "río serpenteante" es realmente un seno, o puede tener alguna forma?
Niki Estner
1
Hola nikie En mi ejemplo (datos sintéticos hechos en Matlab) el río es un seno. En la vida real es "senoidal"; a veces se extiende desde la línea central, a veces no.
Andy

Respuestas:

13

Una medida muy simple sería comparar cada fila de la imagen con la fila de arriba, permitiendo un cambio horizontal.

He pirateado juntos este algoritmo simple en Mathematica:

Mean[MapThread[
  Function[{line1, line2},
   Min[Table[Norm[line1 - RotateLeft[line2, shift]], {shift, -5, 5}]]
   ], {s[[2 ;;]], s[[;; -2]]}]]

Simplemente toma cada par de filas adyacentes, gira una de las filas en -5..5 píxeles y toma la distancia euclidiana más pequeña. Esto produce una distancia euclidiana para cada par de filas. Simplemente tomo la media (pero dependiendo de sus datos reales, una media o mediana truncada podría ser más robusta).

Estos son los resultados que obtengo de muestras generadas artificialmente (Fórmula: Normalizar (ruido aleatorio * (factor 1) + señal * factor))

ingrese la descripción de la imagen aquí

Si trazo el resultado contra la intensidad de la señal, el algoritmo parece medir bastante bien la "intensidad de la señal del río serpenteante":

ingrese la descripción de la imagen aquí

EDITAR : Olvidé normalizar las muestras de entrada. Se corrigió que una nueva imagen de resultado cargada

Niki Estner
fuente
Buena respuesta. Sin embargo, creo que su medida puede ser engañada por otras curvas continuas, como la línea recta. Lo mejoraría un poco cambiando el último paso para ajustar un seno a los puntos (x, y) que haya encontrado, con cierta amplitud, fase y frecuencia. Entonces, la amplitud puede servir como medida de la "fuerza del río".
Andrey Rubshtein
4

Parece que estás en el camino correcto con ese histograma. Si esta es una imagen representativa de su muestra, entonces ese histograma muestra que las imágenes donde está presente el patrón serpenteante podrían detectarse simplemente examinando si contienen valores por encima de un cierto umbral.

Aparte de esto, puede intentar obtener la entropía de cada imagen. Eso le dará un número por imagen que caracteriza su aleatoriedad. Después de eso, puede obtener un histograma de las entropías de sus imágenes. Si está seguro de que las imágenes se dividen claramente en "totalmente aleatorio" y "aleatorio con meandro" (es decir, menos aleatorio), el histograma de las entropías será bimodal. El modo izquierdo corresponderá a imágenes con menor entropía y, por lo tanto, menos aleatoriedad (es más probable que contenga un patrón serpenteante) y viceversa para el modo derecho.

(Por cierto, MATLAB incluye una función relevante )

EDITAR: Como respuesta a los comentarios de OP y la posterior carga de más información sobre el problema, aquí hay un punto adicional a esta respuesta:

La entropía aún funcionaría, pero no el caso simple simple sin memoria descrito por la fórmula de Shannon (donde se supone que cada muestra de una serie de tiempo es independiente de las anteriores).

Como alternativa más simple, puede intentar examinar las características de la autocorrelación de la imagen .

AUTOMÓVIL CLUB BRITÁNICO
fuente
Hola a_a. Creo que las estadísticas de imagen son parte de la solución, pero es necesario ponderar los píxeles vecinos de alguna manera para recompensar la continuidad espacial (ver el Mapa de atributos aleatorios arriba).
Andy
Hola, estoy de acuerdo y he aumentado la respuesta.
A_A