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:
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.
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:
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:
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:
Respuestas:
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:
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))
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":
EDITAR : Olvidé normalizar las muestras de entrada. Se corrigió que una nueva imagen de resultado cargada
fuente
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 .
fuente