En otra parte de este hilo, user1149913 proporciona excelentes consejos (define un modelo probabilístico) y codifica un enfoque poderoso (estimación EM). Quedan dos cuestiones por abordar:
Cómo hacer frente a las desviaciones del modelo probabilístico (que son muy evidentes en los datos de 2011-2012 y algo evidentes en las ondulaciones de los puntos menos inclinados).
Cómo identificar buenos valores iniciales para el algoritmo EM (o cualquier otro algoritmo).
Para abordar el n. ° 2, considere usar una transformación Hough . Este es un algoritmo de detección de características que, para encontrar extensiones lineales de características, se puede calcular de manera eficiente como una transformación de Radón .
Conceptualmente, la transformación de Hough representa conjuntos de líneas. Una línea en el plano se puede parametrizar por su pendiente, , y su distancia, , desde un origen fijo. Un punto en este sistema de coordenadas tanto designa una sola línea. Cada punto en el diagrama original determina un lápiz de líneas que pasan por ese punto: este lápiz aparece como una curva en la transformación de Hough. Cuando las entidades en el diagrama original caen a lo largo de una línea común, o lo suficientemente cerca de una, entonces las colecciones de curvas que producen en la transformación de Hough tienden a tener una intersección común correspondiente a esa línea común. Al encontrar estos puntos de mayor intensidad en la transformación de Hough, podemos leer buenas soluciones al problema original.y x , yxyx,y
Para comenzar con estos datos, primero recorté los elementos auxiliares (ejes, marcas y etiquetas) y, por si acaso, recorté los puntos obviamente externos en la parte inferior derecha y los rocié a lo largo del eje inferior. (Cuando ese material no se recorta, el procedimiento aún funciona bien, ¡pero también detecta los ejes, los marcos, las secuencias lineales de ticks, las secuencias lineales de etiquetas e incluso los puntos que se encuentran esporádicamente en el eje inferior!)
img = Import["http://i.stack.imgur.com/SkEm3.png"]
i = ColorNegate[Binarize[img]]
crop2 = ImageCrop[ImageCrop[i, {694, 531}, {Left, Bottom}], {565, 467}, {Right, Top}]
(Este y el resto del código están en Mathematica ).
A cada punto de esta imagen corresponde un rango estrecho de curvas en la transformación de Hough, visible aquí. Son ondas sinusoidales:
hough2 = Radon[crop2, Method -> "Hough"] // ImageAdjust
Esto hace que se manifieste visualmente el sentido en que la pregunta es un problema de agrupación de líneas : la transformación de Hough lo reduce a un problema de agrupación de puntos , al que podemos aplicar cualquier método de agrupación que nos guste.
En este caso, la agrupación es tan clara que basta el simple procesamiento posterior de la transformación de Hough. Para identificar ubicaciones de mayor intensidad en la transformación, aumenté el contraste y difuminé la transformación en un radio de aproximadamente 1%: eso es comparable a los diámetros de los puntos de la trama en la imagen original.
blur = ImageAdjust[Blur[ImageAdjust[hough2, {1, 0}], 8]]
Limitar el resultado lo redujo a dos pequeñas burbujas cuyos centroides identifican razonablemente los puntos de mayor intensidad: estos estiman las líneas ajustadas.
comp = MorphologicalComponents[blur, 0.777]) // Colorize
(El umbral de se encontró empíricamente: produce solo dos regiones y la más pequeña de las dos es casi lo más pequeña posible).0.777
El lado izquierdo de la imagen corresponde a una dirección de 0 grados (horizontal) y, al mirar de izquierda a derecha, ese ángulo aumenta linealmente a 180 grados. Interpolando, calculo que los dos blobs están centrados a 19 y 57.1 grados, respectivamente. También podemos leer las intersecciones de las posiciones verticales de los blobs. Esta información produce los ajustes iniciales:
width = ImageDimensions[blur][[1]];
slopes = Module[{x, y, z}, ComponentMeasurements[comp, "Centroid"] /.
Rule[x_, {y_, z_}] :> Round[((y - 1/2)/(width - 1)) 180., 0.1]
]
{19., 57.1}
De manera similar, uno puede calcular las intersecciones correspondientes a estas pendientes, dando estos ajustes:
(La línea roja corresponde al pequeño punto rosa en la imagen anterior y la línea azul corresponde a la gota de aguamarina más grande).
En gran medida, este enfoque ha abordado automáticamente el primer problema: las desviaciones de la linealidad difuminan los puntos de mayor intensidad, pero generalmente no los cambian demasiado. Los puntos periféricos francos contribuirán con el ruido de bajo nivel a lo largo de la transformación de Hough, que desaparecerá durante los procedimientos de postprocesamiento.
En este punto, se pueden proporcionar estas estimaciones como valores iniciales para el algoritmo EM o para un minimizador de probabilidad (que, dadas buenas estimaciones, convergerán rápidamente). Sin embargo, sería mejor utilizar un estimador de regresión robusto, como los mínimos cuadrados reponderados de forma iterativa . Es capaz de proporcionar un peso de regresión a cada punto. Los pesos bajos indican que un punto no "pertenece" a una línea. Explote estos pesos, si lo desea, para asignar cada punto a su línea adecuada. Luego, una vez clasificados los puntos, puede usar mínimos cuadrados ordinarios (o cualquier otro procedimiento de regresión) por separado en los dos grupos de puntos.