Para ésta tarea se debieron programar las rutinas para detectar polígonos con base en las líneas rectas detectadas en la imagen. Para ello se utilizó la Transformada de Hough.
Teoría
- Trabajar con la imagen en escala de grises.
- Detectar los bordes, altamente recomendable que los bordes sean continuos.
- Separar los polígonos por su borde, es decir, agrupar los pixeles contiguos utilizando alguna técnica como BFS.
- A cada lista de borders, aplicar la convolucion discreta, en este caso se elegieron 2 máscaras de Sobel
- A partir de las matrices de gradientes obtenidas, calcular la pendiente local para cada pixel.
- Agrupar los pixeles con la misma pendiente. Cada grupo representa un posible segmento, eliminar aquellos grupos que generan ruido, por ejemplo, si tienen pocos pixeles.
- Ordenar los pixeles de cada segmento para obtener los puntos teóricos inicial y final.
Las imagen utilizada para las pruebas fueron las siguientes:
Original | |
---|---|
Binarizada | |
Contornos |
La prueba realizada fue muy simple, detección de bordes e identificación del posible segmento, sin embargo podemos notar que se obtenía mucho ruido.
Se cubren los requisitos de detectar bordes y agrupar los objetos por su borde, aplicar la convolución discreta para obtener las gradientes y calcular las pendientes, y de agrupar los segmentos por su pendiente.
Resultados
Sin embargo, aquí aplico a las pendientes la función floor al valor de la pendiente lo que parece limpiar un poco los resultados.
Cabe mencionar que las lineas dibujadas corresponden a los segmentos detectados, se puede ver, por ejemplo, en el pentágono algunos segmentos detectados cubren en realidad 2 lados de la figura y en el caso del hexágono hasta 3 lados.
Código
En el repositorio encuentran la implementación completa en código, la carpeta marcada como Tarea 8.
- Elisa Schaeffer | http://elisa.dyndns-web.com/~elisa/teaching/comp/vision/poligonos.pdf
Pues, tiene sus detalles en agrupar bien las direcciones de gradiente. 6 pts.
ResponderEliminar