Bueno, esto puede mostrar que no tomé la clase de procesamiento de imágenes.
Tengo esta plantilla para que coincida con un objeto en las imágenes. Pero el objeto real en las imágenes, por ejemplo, no se ve así, sino la segunda imagen. ¿Qué operaciones debo realizar para que las imágenes como la segunda estén listas para la coincidencia de plantillas? Para su información, la tercera imagen muestra una coincidencia ideal.
En otra idea, ajusto la plantilla a la imagen. Es decir, doy cuatro coordenadas de esquina en la imagen para que coincidan con las de la plantilla. Luego calculará una forma de ajustar la plantilla al área.
ACTUALIZACIÓN: Problema resuelto. Gracias a la respuesta que seleccioné a continuación. Logré aplicar mi plantilla con éxito en la imagen. La última imagen muestra el resultado.
fuente
Respuestas:
La imagen de muestra que publicó tiene una perspectiva relativamente fuerte (no se ve directamente desde la dirección de la superficie normal), lo que puede causar problemas con las técnicas de coincidencia de plantillas que utilizan el procesamiento de bloques. Supongo que debe tomar la imagen con una perspectiva fuerte, por lo que lo primero que queremos hacer es estimar la transformación de la imagen, lo que eliminará la proyección de la perspectiva y dará como resultado una imagen rectificada ("imagen recta").
Corrección de la proyección en perspectiva cuando se conoce la forma
El objetivo final del preprocesamiento es encontrar las esquinas de ese rectángulo gris que es el fondo de la tabla de colores. Comencé simplemente con un umbral con valor constante. La literatura / web tiene mucha información sobre cómo hacer umbrales cuando la imagen tiene iluminación desigual, pero si puede, intente corregir la configuración de imagen de manera que la iluminación sea relativamente uniforme.
Supuse que la tabla de colores ocupa una parte bastante grande de la pantalla, por lo que probablemente sea la región continua más grande de la imagen. Existen muchas funciones de etiquetado en blanco y negro (MATLABs bwlabel, IPPs LabelMarkers, OpenCV tiene una biblioteca externa cvblob) que le dará a cada región conectada distinta su propio índice. Después del etiquetado, puede calcular las áreas de los componentes conectados utilizando un histograma y luego elegir el componente con el área más grande.
Por lo general, es una buena idea llenar los componentes de manera que el componente no tenga agujeros, esto reduce la cantidad de píxeles de borde.
Ahora podemos usar operadores de búsqueda de bordes (utilicé el método basado en gradiente, pero también puede rastrear el borde siguiendo los píxeles blancos que están conectados a píxeles negros) para obtener los píxeles que pertenecen al huésped.
Como el objeto que nos interesa es el rectángulo, ajusté cuatro líneas a los píxeles del borde usando un ajuste de línea robusto (RANSAC). Después de encontrar una nueva línea, eliminé todos los puntos que estaban cerca de la línea encontrada, esto obliga a las operaciones de ajuste posteriores a devolver otros bordes del objeto. Finalmente, cuando se encontraron todos los bordes, calculé todas las posibles intersecciones entre el conjunto de líneas. Del conjunto de puntos resultantes eliminé todos los puntos fuera de la imagen.
Ahora tenemos las esquinas de la tabla de colores y, como conocemos las dimensiones de la tabla, podemos calcular la matriz de transformación (homografía, proyección entre dos planos. Utilice la transformación lineal directa (DLT) para resolver ) entre las coordenadas milimétricas y Las coordenadas del píxel.H H
Esta matriz de transformación se puede usar para transformar la imagen original de modo que la tabla de colores se visualice directamente desde la dirección de la superficie normal.
Como puede verse, solo queda distorsión radial. Cuando usamos la transformación para la transformación de la imagen (interpolación 2D), elegimos las coordenadas de interpolación de tal manera que sepamos la resolución precisa de la imagen, lo que significa que ahora sabemos, por ejemplo, el tamaño de las letras.H
Si aún queremos hacer una coincidencia de plantilla, podemos usar cualquier método decente de coincidencia de plantilla. El método no tiene que ser invariante en rotación / escala ya que la imagen ya está rectificada.
fuente
Comience con la detección de bordes. Luego use la transformación Hough para detectar líneas rectas. Luego, averigua qué líneas son paralelas y cuáles deberían ser perpendiculares. Luego calcule la transformación proyectiva de modo que las líneas que deberían ser perpendiculares sean realmente perpendiculares.
fuente