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:
Por supuesto, también pueden estar en una 'escala' diferente, como se puede ver en esta familia:
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.
Y, por supuesto, como gran final, existe la posibilidad clara de este escenario 'extremo':
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).
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?