El proposito de éste programa es, como cabría esperar, el reconocimiento de formas y colores para posteriormente enviar los datos procesados a un brazo robot que coje las piezas de la forma y color indicadas.
El programa fue desarrollado en Visual c++ y consta básicamente de las siguientes técnicas de procesado de imagenes:
- Aplicación de filtros de media y mediana.
- Conversión del espacio de colores RGB a HSI
- Binarización de objetos del color elegido.
- Clusterización y separación de los diferentes objetos en búferes diferentes.
- Detección de bordes.
- Cálculo de la Transformada de Hough.
ACTUALIZACIÓN: Codigo fuente en: reconocimiento-de-formas-y-colores-2
Lo primero que se ejecuta es un algoritmo de media repetido unas 10 veces, se utiliza para pulir los defectos encontrados en la superficie de las piezas, tales como arañazos, surcos y falta de pintura en algunas partes.
A continuación se realiza una mediana con el fin de homogeneizar la imagen.
Se observa la imagen original y la aplicación de medias y mediana a ésta.
A continuación se ejecuta un algoritmo de clusterización de píxeles basado en la vecindad del píxel actual.
Es decir, se recorre la imagen desde arriba hacia abajo y de izquierda a derecha y al encontrar un píxel a uno se comprueban los píxeles ya recorridos y si se encuentra alguno en el entorno definido se añade dicho píxel al objeto anterior, en caso contrario se incrementa el contador de objetos y se añade el píxel a un nuevo objeto.
Además se dispone de una matriz de píxeles con el número de objeto al que corresponde cada píxel.
Después se separan los objetos encontrados en búferes de imagen diferentes para mostrarlos posteriormente, además calculamos su área en píxeles.
Si el objeto tiene menos de un 0.7% del área de la foto se desecha como objeto no válido.
A continuación se escriben por pantalla todos los objetos detectados, en caso de ser válidos se escribe también su área.
Luego se calcula el centroide de los objetos válidos y se muestra por pantalla.
Posteriormente decidimos la clase de objeto que es cada uno mediante una relación de perímetro cuadrado partido por área.
Y procedemos a escribir por pantalla la clase de objeto que es.
A continuación se encuentra un resumen de los objetos detectados y se nos pide la elección del tipo de figura.
Si elegimos una figura que se ha encontrado pasaremos al cálculo de la matriz de Hough de la figura correspondiente.
Además se escribirá un fichero en Matlab llamado hough.m que contendrá las diferentes matrices de Hough encontradas (en el caso de que se encontraran dos rectángulos azules por ejemplo).
Posteriormente se calcula el número de máximos correspondiente a cada tipo de figura (tres para triangulo, cuatro para rectángulos y cuadrados).
Por ejemplo esta sería una secuencia de imágenes del programa:
Objetos azules detectados
Primer objeto azul
Segundo objeto azul
Y aquí se observa las matrices de Hough correspondientes:
Rectángulo azul
Triangulo azul
Se observan claramente los máximos correspondientes a las líneas de borde del rectángulo y triángulo.
Si quereis el código fuente o el ejecutable pedidlo en los comentarios y os lo paso.
0 comentarios:
Publicar un comentario