El problema esta mejor explicado en la presentación de esta semana de la clase:
http://elisa.dyndns-web.com/~elisa/teaching/comp/vision/formas.pdf
Esta publicación servirá de reporte para la tarea mencionada anteriormente.
Preprocesamiento
El preprocesamiento necesario para poder implementar los conocimientos adquiridos en esta semana es: calcular una imagen binaria que muestre los bordes de la imagen. Esto fue la ultima tarea para esta clase, para más detalle puedes verla en la siguiente publicación:
http://maxkalavera.blogspot.mx/2013/02/tarea-1-deteccion-de-bordes.html
DFS(Depth-first search)
El algoritmo DFS es un algoritmo de búsqueda de profundidad en un grafo, se empieza en un nodo raíz y se visitan de manera recursiva los vecinos del nodo, después de un número de repeticiones, se puede llegar a visitar todos los nodos alcanzables por el nodo raíz.
[Imagen obtenida de:"http://upload.wikimedia.org/wikipedia/commons/7/7f/Depth-First-Search.gif"]
En el procesamiento de imágenes de esta tarea, se utilizó dicho algoritmo para diferenciar una figura de otra, poniendo el nodo raíz dentro de una figura, en cualquier pixel de la figura. El algoritmo DFS se va a encargar de visitar de manera recursiva todos los vecinos, expandirse como un virus y abarcar todos los vecinos ignorando los píxeles donde haya un borde. Esto nos ayudara a dividir la imagen en diferentes grupos de píxeles aislados de otros.
Continuidad
Para poder detectar figuras con el algoritmo DFS necesitamos por fuerza que nuestros bordes sean completamente continuos ya que de no ser así el coloreado por fuera de los bordes se filtrara a la figura haciéndola no diferenciable del fondo o de otra figura.
Para lograr esto se utilizó un filtro de promediado de los vecinos, es decir se toma un pixel y sus vecinos y se calcula el promedio de esos valores, este valor se coloca en el pixel en el que trabajamos y se hace la misma operación para cada pixel en la imagen. Esto es muy parecido al filtro de media que aplicamos para la primera tarea de laboratorio. Esté filtro hará que se expandan de manera inteligente los bordes detectados con anterioridad. En la siguiente imagen los bordes detectados se encuentran dibujados de color blanco con el valor entero 255, al aplicar un promediado los pixeles que se encuentren entre un vecino blanco hacia un lado (valor entero de 255) y un vecino negro a un lado (valor entero de 0), al promediarlos éste pixel tomará el valor de 127. Entre más vecinos blancos tenga mayor será la intensidad de blanco de este pixel, expandiendo así los colores blancos que representan el borde, alrededor de los pixeles blancos.
http://maxkalavera.blogspot.mx/2013/02/laboratorio-1-escala-de-grises-umbrales.html
El filtro de promedio hace que se difuminen los bordes y empiecen a juntarse, aplicando un filtro de umbral después de eso, se puede lograr que los bordes queden mas uniformes y que no haya espacios entre los bordes y el fondo de la imagen.
Calculando centros de masa
Los centros de masa fueron calculados tomando todos los puntos dentro de una figura y sacando el promedio de sus coordenadas en la imagen.
Resultado
Los filtros utilizados para procesar la imagen se pueden encontrar en el repositorio de la clase:
https://github.com/MaxHernandez/Vision_computacional
El código de a continuación es el que se utilizó para generar la imagen que se muestra a continuación donde se parte en figuras nuestra feliz imagen. Se dibuja un punto rojo para mostrar los centros de masa de la figura.
Código
https://github.com/MaxHernandez/Vision_computacional
Imagen original
Imagen tratada para detección de bordes
Imagen tratada para detección de formas
Referencias:
http://en.wikipedia.org/wiki/Depth-first_search





Los centros de masa no convencen. Lo de componentes está bien. 4 pts.
ResponderBorrar