Detección de contornos rectangulares
Identificación de contornos rectangulares
Algoritmo de detección de contornos rectangulares
Algoritmo de reconocimiento de patrones
La visión por computador
es una herramienta de gran utilidad para el control automático y la robótica.
Una de las aplicaciones de la visión por computador es el reconocimiento de
caracteres, que se puede utilizar para la identificación de matrículas o el
procesamiento de documentos escaneados.
En este trabajo se plantea
el problema de la identificación de grupos de caracteres numéricos en imágenes
tomadas de un vídeo.
Se trata de identificar un
conjunto de caracteres numéricos de color negro y de unas proporciones
determinadas dispuestos sobre un rectángulo blanco. La imagen se toma con una
cámara cuya posición y orientación no están relacionadas con el objeto que se
desea identificar. Además se desea que este algoritmo sea robusto frente a
cambios en la iluminación. Para resolver este problema se plantean los
siguientes pasos:
-
Localización
del contorno rectangular en la imagen.
-
Homografía
de la imagen, considerando el tamaño y la orientación del contorno rectangular.
-
Reconocimiento de los caracteres.
La arquitectura software
del programa está formada por dos clases, visión y reconocedor y un bucle principal llamado calisto. En la clase visión se definen los algoritmos de reconocimiento de contornos
rectangulares y la homografía. En la clase reconocedor se define el algoritmo de
reconocimiento de caracteres, que consulta una base de datos donde se han
definido los caracteres.

Figura
1. Diagrama de clases
Para la captura de la imagen se ha utilizado la interfaz video4linux y las librerías de visión OpenCV. Esta interfaz
homogeniza el acceso a las imágenes con independencia de la cámara que se
utilice. En esta aplicación se ha utilizado la cámara webcam Logitech Quickcam
for Notebooks, cuya resolución es 640x480 y toma video VGA a 15 frames por
segundo.
La detección de contornos se realiza mediante la aplicación del filtro de Canny a la imagen tomada y transformada a escala de grises.
El filtro de Canny es un algoritmo de detección de contornos que optimiza una serie de condiciones para que, al convolucionar el filtro de Canny con la imagen se produzca un máximo local donde existe un contorno, eliminando el efecto ruido. Dichas condiciones son:
- Error: se deben detectar todos y sólo los contornos.
- Localización: la distancia entre el píxel señalado como contorno y el contorno real debe ser tan pequeña como se pueda.
- Respuesta: no debe identificar varios píxeles como contorno cuando exista sólo un único contorno.
Estas tres condiciones se expresan de forma matemática:



Después de aplicar el filtro de Canny, se hace una dilatación de la imagen para eliminar los agujeros entre los segmentos de los contornos.


Para la identificación de los contornos rectangulares se aplica un algoritmo basado en el número de vértices lados del contorno y el ángulo entre los lados. Para ello, lo primero que se hace es buscar los contornos cerrados en la imagen resultante de la aplicación del filtro de Canny. A continuación se aproximan los contornos por polígonos. Si los contornos tienen cuatro vértices después de la aproximación polinomial, su área es mayor que un tamaño determinado (para filtrar el ruido) y son convexos, se consideran candidatos a contornos rectangulares. A continuación se calcula el ángulo entre los lados de cada contorno. Si los ángulos son cercanos a 90º, se consideran contornos rectangulares. El margen de error de la medida de los ángulos debe calcularse para tener un algoritmo suficientemente robusto frente a orientaciones de la cámara. Es importante recordar que uno de lo objetivos de este algoritmo en no ser dependientes de la posición de la cámara y, por tanto, detectar contornos rectangulares en imágenes muy deformadas. Por ello, el margen de error del máximo ángulo entre lados del contorno es de ±30º
Se han utilizado las funciones de la librería OpenCv para visualizar el resultado de la detección de contornos rectangulares.
La homografía se realiza teniendo en cuenta que se conoce el tamaño real del rectángulo en el que están dispuestos los caracteres. Cada carácter se encuentra alojado en un rectángulo blanco de tamaño fijo, de manera que la relación entre la anchura y la altura es de 70/100. Las dimensiones del rectángulo final serán:
- Altura fija y proporcional a 100
- Anchura fija y proporcional a 70 x n_caracteres
Como sabemos las dimensiones reales del contorno rectangular, podemos aplicar una homografía a toda la imagen, de manera que obtenemos el dbjuo del carácter en la orientación y posición adecuada.
La homografía que nos da la posición real de los objetos en función de la posición en l imagen responde a la ecuación:
![]()

La matriz de M se calcula utilizando los datos de las dimensiones reales del rectángulo y los datos de dónde se encuentra el rectángulo en la imagen. En la figura se puede ver un ejemplo ficticio de cómo se deformaría la imagen al aplicar la homografía al rectángulo que está contenido en ella:




Una vez obtenida la imagen de magnitudes reales a través de la homografía descrita anteriormente, se recorta la imagen para obtener únicamente la parte correspondiente a los caracteres. Cada carácter ocupa una nueva imagen recortada, a la que se le aplicará el reconocedor.
El reconocimiento de caracteres se realiza a través de una base de datos de patrones.
Actualmente se dispone de 5 patrones, correspondientes a las 5 primeras cifras, que servirán para determinar la eficiencia del algoritmo.





Figura 8. Base de datos


El algoritmo de reconocimiento de caracteres toma las imágenes obtenidas tras aplicar la homografía y recortar las imágenes y las compara con las imágenes de la base de datos.
Para hacer esta comparación, se hace aplica un umbral a la imagen que se quiere comparar y se invierte el resultado. También se invierten los niveles de gris en los patrones. A continuación se hace la correlación entre ambas imágenes, mediante una multiplicación de los niveles de gris en cada píxel de la imagen. A continuación se obtiene la media de los niveles de gris de la imagen resultante de la multiplicación. El patrón que de cómo resultado mayor valor medio será el que más se parece a la imagen real.
Los resultados del algoritmo de detección de contornos rectangulares han sido muy satisfactorios. El tiempo medio de ejecución de la aplicación es de 200 milisegundos, resultado bastante satisfactorio, si tenemos en cuenta que la cámara toma imágenes a 15 frames por segundo. El filtro de Canny ha dado un resultado satisfactorio en la detección de contornos, con resultados buenos en diferentes ambiente y con diferentes tipos de luces (luz solar, luz fluorescente, luz halógena). La detección de formas rectangulares mediante el algoritmo basado en el número de vértices del contorno y el ángulo entre los lados ha dado muy buenos resultados.
El algoritmo de reconocimiento de números mediante el uso de la homografía y el reconocimiento de patrones ha acertado en prácticamente el 100% de las pruebas, en los casos de números de uno, dos y tres dígitos. La homografía permite obtener un carácter que se puede comparar fácilmente con los patrones.






