8

Tengo una imagen de destino para buscar una curva a lo largo de sus bordes y una imagen de plantilla que contiene la curva. Lo que necesito lograr es encontrar la mejor coincidencia de la curva en la imagen de la plantilla dentro de la imagen objetivo, y en función del puntaje, para averiguar si hay una coincidencia o no. Eso también incluye la rotación y el cambio de tamaño de la curva. La imagen objetivo puede ser la salida de un detector Canny Edge si eso facilita las cosas.Coincidencia de un patrón de curva con los bordes de una imagen

Estoy considerando usar OpenCV (usando Python o Processing/Java o si esos tienen acceso limitado a las funciones requeridas luego usando C) para hacer cosas prácticas y eficientes, sin embargo no pude averiguar si puedo usar cualquier funciones (o una combinación de ellas) en OpenCV que son utilizables para hacer este trabajo. He estado leyendo la documentación de OpenCV y al principio pensé que Contours podía hacer este trabajo; sin embargo, todos los ejemplos muestran formas cerradas en oposición a mi caso en el que necesito hacer coincidir una curva abierta con una parte de un borde.

¿Hay alguna manera de hacerlo mediante el uso de OpenCV o con cualquier código o algoritmo conocido que sugiera?

Estas son algunas imágenes que ilustran el problema:

Template image containing the curve to be searched for

Input image to be searched for the template curve and to be matched to its edges; this can also be an edge-image, the output of a Canny Edge detector rather than the unprocessed input image

Resulting match - includes rotation and resizing

Respuesta

2

Mi primer pensamiento fue Generalized Hough Transform. Sin embargo, no conozco ninguna buena implementación para eso.

Me gustaría probar SIFT o SURF primero en la imagen de canny edge. Por lo general, se usa para encontrar áreas 2d, no 1d contornos, pero si toma el cuadro delimitador mínimo alrededor de su contorno y lo utiliza como patrón de búsqueda, debería funcionar.

OpenCV tiene una aplicación para eso: Features2D + Homography to find a known object

Un problema puede estar recibiendo una buena imagen de borde, esas formas negras en la parte posterior podría ser una distracción.

Véase también esta respuesta Stackoverflow: Image Processing: Algorithm Improvement for 'Coca-Cola Can' Recognition

+0

Gracias, voy a tratar estos y volver aquí para dar información sobre mis resultados o conclusiones. – ali

+1

¿Alguna suerte, Ali? Consulte también esta pregunta, que hace referencia a la suya: http://stackoverflow.com/questions/14530790/image-processing-match-curves-from-one-image-to-another – Rethunk

+0

Gracias Rehunk, no he visto su comentar hasta ahora; mucho tiempo ... No tenía una solución real, sino una solución parcial que hacía el trabajo cada vez más lento; rotaciones lentas y sin rotación: utilicé la correlación de correlación simple redimensionando la plantilla a diferentes tamaños, pero no directamente con la curva de la imagen, sino en una imagen de borde codificada por colores donde cada punto de borde tenía un color correspondiente para su pendiente, del mismo modo la curva de plantilla se codificó con colores en función de la pendiente de la curva en cada punto. Luego comparé esos colores por correlación y los resultados fueron correctos para una solución limitada/práctica ... – ali

Cuestiones relacionadas