¿Qué técnicas de procesamiento de imágenes son ideales para esta coincidencia de plantilla invariante de cambio / escala en particular?

17

Un problema que discutí originalmente aquí ha evolucionado, y podría haberse vuelto un poco más simple a medida que lo estudiaba un poco más y obtenía nueva información.

En pocas palabras, me gustaría poder detectar este patrón que se muestra aquí, utilizando técnicas de procesamiento de imágenes / visión por computadora. Como puede ver, el patrón ideal está compuesto por cuatro 'pings'. El reconocimiento de objetos debe ser:

  • Shift Invariant
    • Horizontalmente, la imagen será cíclica. (es decir, empujar a la derecha, sale a la izquierda y viceversa).
    • (Afortunadamente) Verticalmente, no es cíclico. (es decir, presione hacia arriba o hacia abajo y se detendrá).
  • Escala Invariante (Los pings pueden variar en 'grosor' como puede ver).

Podría seguir y seguir al respecto, pero he adjuntado imágenes que cubren lo que quiero decir, vea a continuación:

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

Por supuesto, también pueden estar en una 'escala' diferente, como se puede ver en esta familia:

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

Y finalmente, aquí hay algunos escenarios 'realistas' de lo que realmente podría recibir, donde habría ruido, las filas podrían 'desvanecerse' a medida que avanza hacia la parte inferior y, por supuesto, la imagen tendrá muchas líneas espurias, artefactos etc.

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

Y, por supuesto, como gran final, existe la posibilidad clara de este escenario 'extremo':

ingrese la descripción de la imagen aquí

Entonces, una vez más, me gustaría pedir una guía sobre qué técnicas de visión artificial por computadora debería utilizar aquí para detectar mejor la ocurrencia de mi patrón, donde necesito cambiar y escalar invariablemente como puede ver, y También podrá obtener resultados decentes para los escenarios realistas. (La buena noticia es que NO necesito que sea rotatoriamente invariable). La única idea que he podido llegar hasta ahora es una correlación 2D.

Debo agregar que, en realidad, NO tengo imágenes en color, solo obtendré una mezcla de números, así que supongo que estamos hablando de 'escala de grises'.

¡Gracias por adelantado!

PD: Para lo que vale, probablemente usaré C V abierto.

EDITAR # 1:

Según los comentarios, he agregado los detalles que solicitó aquí:

Para las características que definen los datos, podemos suponer lo siguiente:

  • La longitud horizontal de cada ping puede variar, pero conozco sus límites superior e inferior. SÍ para cualquier cosa dentro de este límite, NO para nada fuera. (Por ejemplo, sé que la longitud de los pings puede ser entre 1 y 3 segundos, por ejemplo).

  • Todos los pings deben estar 'visibles' para SÍ, sin embargo, puede faltar la última fila y aún así quiere decir 'SÍ'. De otra manera no.

  • La longitud vertical (el 'grosor') de cada ping puede variar, pero nuevamente, también conocemos el límite superior e inferior. (Similar a lo que ves en esas imágenes). SÍ para cualquier cosa dentro de ese límite. NO para nada afuera.

  • La altura entre cada ping siempre debe ser la misma para SÍ. Si no lo son, entonces NO. (Ejemplo, puede ver cómo todos los pings son de la misma altura entre sí, ~ 110 en el eje vertical). Entonces, 110 +/- 5 puede ser un SÍ, cualquier otra cosa tiene que ser NO.

Creo que eso es todo, pero hágame saber qué más puedo agregar ... (Además, todo lo que se muestra aquí debe registrarse como SÍ, por cierto).

Spacey
fuente
¿Qué quieres decir cuando dices detect this pattern shown here? ¿Está interesado en aislar la línea roja / amarilla o realmente desea una expresión que calcule la relación entre dichas líneas? Solo encontrar líneas solo podría requerir cierto umbral o segmentación. ¿Qué quieres realmente?
Dipan Mehta
@DipanMehta Perdón por la confusión. Lo que quiero hacer es esto: en primer lugar, no presten atención a los colores (es solo el hecho de que se trazaron), lo que tendré es solo una matriz de números, así que en escala de grises. En segundo lugar, dado que no hay colores, solo me importa el 'patrón' que ves allí con los 4 pings que estás viendo repetir. Por lo tanto, el detector verá variantes de esa plantilla de imagen como se muestra en las imágenes anteriores y dirá 'sí, este patrón existe'. Perdón por la confusión, avíseme si puedo aclarar algo más. ¡Gracias!
Spacey
Ok, entonces, si entiendo correctamente, dado que hay una primera línea en la parte superior, desea averiguar si el saldo también está en el mismo lugar. si es así, ¡concluirías que existe un patrón! ¿Derecho?
Dipan Mehta
@DipanMehta Sí, básicamente, ser capaz de detectar si el patrón que se muestra arriba existe, lo suficientemente robusto como para lidiar con la invariancia de escala y lo suficientemente robusto como para lidiar con la invariancia de turno. ¿Tiene sentido? Gracias,
Spacey
1
Lo que entiendo es si tiene acceso a los datos de origen en el sistema real en el que está trabajando. Si lo hace, entonces puede haber un mejor enfoque que funcione directamente con los datos originales en lugar del formato de espectrograma intermedio en el que se ha centrado.
Jason R

Respuestas:

6

En términos generales, hay dos enfoques principales para resolver este problema:

a. coincidencia de plantilla o
b. coincidir con un modelo parametrizado.

Personalmente, dada la simplicidad del modelo, preferiría el segundo enfoque para este problema.

Paso 1: identifica los blobs de ping

Como primer paso, extraiga las "Cajas", esencialmente los cuadrados amarillo / azul. Un método más simple aquí podría ser limitar la imagen. No parece haber muchas variaciones en el fondo, excepto que a medida que aumenta el ruido, tiende a ser bastante similar a los pings. Por lo tanto, el umbral puede ser global en toda la imagen, y creo que podrá obtener un umbral decente que funcione en todas las imágenes. Sin embargo, el umbral debe ser inteligente para que pueda usar algo como el método de Otsu. Vea esto y esto para más referencia.

Mejora de los bloques.

Una de las cosas buenas que puede hacer para eliminar puntos espurios que se parece a un primer plano de ping donde algunos píxeles dentro de los pings también son azules. Necesita aquí una operación morfológica llamada "Apertura". Aquí está una de las referencias de HIPR . Este tipo de operaciones requiere una forma inteligente que ayuda a preservar formas similares y eliminar otras. En su caso, puede elegir líneas horizontales. Al final de esto, tiene píxeles de fondo y primer plano que separan perfectamente los pings sin tocarse entre sí.

Paso 2: marcar / registrar bloques

Ahora que tiene los blobs más limpios posibles, es hora de marcarlos como 1,2,3,4 o A, B, C, D, etc. Esto generalmente se logra mediante lo que se llama un algoritmo simple. Ejecute cada píxel y, si está tocando con alguna región marcada, y también está en primer plano, asígnelo a ese segmento; de lo contrario, cree uno nuevo. Si encuentra más de 4 segmentos importantes, debe elegir los más relevantes. Aplique algo de heurística aquí en lugar de cualquier algoritmo teórico.

Paso 3: modelado de parámetros

Ahora, una vez que tengamos los 4 candidatos principales más probables de los 4 pings correspondientes, puede identificar los cuadros delimitadores, esencialmente las esquinas superior izquierda e inferior derecha (o la mayoría de los píxeles izquierdo y derecho, así como las filas superior e inferior del blob) . Encuentre el cuadro delimitador, puede multar el centroide de cada cuadro de ping.

Cyo dónde yo{1,2,3,4 4}C1C1

por lo tanto, las distancias entre centroides ahora se pueden calcular:

C1yo[X,y]={C1[X]-Cyo[X],C1[y]-Cyo[y]}

Lyo dónde yo{1,2,3,4 4}

Esencialmente tienes 8 parámetros de vecoter:

1){C1[X],C1[y]}2..4C1yo[X,y]5..8Lyo

Paso 4: Clasificación
En el último paso, ahora necesitamos tener clasificación si hay un patrón de ping sí o no.

Para algo como esto, puede tener un buen marco clasificador bayesiano.

Hay dos hipótesis que tienes

H0: El patrón de ping existe.
H1: el patrón de ping no existe

C1,yo[X]

Primero, estudie muchas imágenes donde sepa que pertenecen a la imagen. Ahora, puede trazar varios histogramas o aplicar algún método de estimación de densidad. Lea la clasificación de patrones por Duda Hart.

C1,yo[X]μ=20,σ=.1

C1,yoH0 0PAG[C1,yo[X]El |H0 0]

Ahora, de los datos de prueba

PAG[H0 0El |C1,yo[X]=X1]C1[X]X1H0 0

Por lo tanto, puedes calcular

PAG[H0 0 El |C1,yo[X]]=PAG[C1,yo[X]El |H0 0]PAG[H0 0]PAG[C1,yo[X]]

Debe combinar esta expresión para la expresión vectorial y debe realizar un gran esfuerzo para poner exactamente la estimación del parámetro a realizar. Pero te dejo con un enfoque básico aquí.

Haga sus propios cálculos, esto será largo, pero aún debe ser bastante intuitivo.

PAG[H0 0El |todos los parámetros]>1/ /2

EDITAR
Dado que ya está definiendo los criterios específicos de 110 +/- 5 píxeles, el último paso puede ser más simple. Probablemente no necesite calcular todas estas probabilidades si su criterio de clasificación es fijo.

Dipan Mehta
fuente
¡Muchas gracias! Tendré que digerir esto y responderle.
Spacey
3

Este problema me parece el problema de detección del intervalo de repetición de pulso + estimación. Necesitaré desarrollar esta respuesta con el tiempo, pero el tipo de algoritmos que funcionan bien en ese problema son la máxima probabilidad en una red .

Peter K.
fuente
Gracias, sí, estaré encantado de escuchar tus opiniones sobre esto. Mientras tanto, revisaré tu enlace.
Spacey
Peter, ¿has tenido tiempo para pensar en esto como lo mencionaste? Me interesaría escuchar sus opiniones sobre el asunto.
Spacey
Acabo de comenzar a jugar de nuevo (abril fue una cancelación). Podría estar equivocado: la forma en que el artículo de Clarkson formula el problema es diferente ... déjame cavar un poco más.
Peter K.