jueves, 28 de febrero de 2013

Laboratorio - Actividad 4: Detección de Diagonales

Para esta semana, en la entrada de clase, se trabajo para detectar lineas horizontales y verticales.

En esta entrada se mostrara cuando se detectan lineas diagonales y/o de ángulo arbitrario.

En mi entrada anterior explique lo básico para el algoritmo de Hough.

Nota: Como tuve problemas con el código anterior, esta vez me base en un código de mis compañeros y de la Dra. 

Imágenes:

Para detectar las lineas, el código es el siguiente:

Código:

 Los Resultados son los siguientes:

Resultados: 

Problemas con los pixeles .-.

Repositorio:

martes, 26 de febrero de 2013

Clase - Detección de Lineas

Para esta semana, se trabajo para detectar lineas horizontales y verticales en alguna imagen.

Las lineas se muestran en Color Rojo, con un tono para lineas horizontales y otro tono en lineas verticales.

Pero primero que nada, una explicación de lo que se hará:

Transformada de Hough

El algoritmo de la transformada de Hough usa una matriz, llamada acumulador, cuya dimensión es igual al número de parámetros desconocidos del problema. 

Por ejemplo, para detectar la existencia de una recta de la forma y = m*x+n, la dimensión del acumulador sería dos, ya sea su representación en coordenadas cartesianas (m,n) o en coordenadas polares (\rho,\theta), son desconocidos. 


Esto se logra buscando todas las posibles combinaciones de valores para parámetros que describen la figura (los posibles valores se obtienen a partir del acumulador). 


Si es así, se calculan los parámetros de esa figura, y después se busca la posición en el acumulador correspondiente a la figura definida, y se incrementa el valor que hay en esa posición.

Las dos dimensiones del acumulador corresponden a los valores cuantificados para (\rho,\theta).

Para construir el acumulador es necesario discretizar los parámetros que describen la figura. Cada celda del acumulador representa una figura cuyos parámetros se pueden obtener a partir de la posición de la celda.

Por cada punto en la imagen, se buscan todas las posibles figuras a las que puede pertenecer ese punto. 

Las figuras se pueden detectar buscando las posiciones del acumulador con mayor valor (máximos locales en el espacio del acumulador). 

La forma más sencilla de encontrar estos picos es aplicando alguna forma de umbral, pero distintas técnicas podrían dar mejores resultados en distintas circunstancias, determinando donde se encuentran las figuras y cuantas hay.

Por los errores que se pueden cometer detectando bordes, existirán imperfecciones en el espacio acumulador, lo que puede hacer que no sea trivial en encontrar los picos correctos y por tanto las figuras apropiadas.

Aquí se muestra un pseudo-código:
1:    cargar imagen
2:    detectar los bordes en la imagen
3:    por cada punto en la imagen:
4:       si el punto (x,y) esta en un borde:
5:          por todos los posibles ángulos \theta:
6:             calcular \rho para el punto (x,y) con un ángulo \theta
7:             incrementar la posición (\rho,\theta) en el acumulador
8:    buscar las posiciones con los mayores valores en el acumulador
9:    devolver las rectas cuyos valores son los mayores en el acumulador.

Imágenes:



Para detectar lineas, el código es el siguiente:

Código:

Problemas con el código :(

 Los Resultados son los siguientes:

Resultados: 

:(

Repositorio:

jueves, 21 de febrero de 2013

Laboratorio - Actividad 3: Convex hull

Para realizar esta tarea, se necesita el codigo del BFS que anteriormente utilice en tareas anteriores y ahora se mostrara como se colocaron contornos a la imagen con la ayuda del algoritmo "Gift wrapping".

Las imágenes a utilizar es la siguiente:

Imagen:



Ahora, el código:

Código:

Los resultados, son los siguientes:

Resultados:




Localiza los puntos, tuve problemas con hacer las lineas :(

Repositorio:

martes, 19 de febrero de 2013

Clase - Detección de formas

Para esta entrada, se empleo el deteccion de formas, pero primero que nada que se utilizo?

Se uso el algoritmo BFS (Búsqueda en anchura) con la ayuda del pseudo-codigo de la Dra. Elisa.

Que hace el algoritmo?

Algoritmo para recorrer o buscar elementos en un grafo (usado frecuentemente sobre árboles). Intuitivamente, se comienza en la raíz (eligiendo algún nodo como elemento raíz en el caso de un grafo) y se exploran todos los vecinos de este nodo.
A continuación para cada uno de los vecinos se exploran sus respectivos vecinos adyacentes, y así hasta que se recorra todo el árbol.

Ahora, las imágenes a utilizar:

Imágenes:
 

Código:


Resultados:

Solo falta mejorar el código y agregar el etiquetado.

jueves, 14 de febrero de 2013

Laboratorio - Actividad 2: Sal y pimienta

Para esta entrada mostrare ejemplos de conversión de imágenes con el método de Sal y pimienta.

Imágenes a prueba:
Sal y Pimienta 

El programa lo que logra es generar ruido aleatorio en la imagen, con muchos puntos blancos y negros.

Código:

Resultados:

Quitar Sal y Pimienta

Para esta parte del programa, se quitaran los puntos o pixeles que se lograron cambiar en las imagenes anteriores.

Código:

Resultados:

En la primera imagen (Spiderman) y la segunda (rana) después de quitar sal y pimienta, quedan algunos píxeles blancos y negros, pero cumple con lo prometido.

Repositorio:

lunes, 11 de febrero de 2013

Clase - Deteccion de Bordes

Detección de Bordes

Para la detección de bordes, usaremos el filtro de convolucion.

El filtro matriz de convolución usa una primera matriz que es la imagen que será tratada.
La imagen es una colección bidimensional de píxeles en coordenada rectangular.

El filtro examina, sucesivamente, cada píxel de la imagen. Para cada uno de ellos, que se llamará “píxel inicial”, se multiplica el valor de este píxel y los valores de los 8 circundantes por el valor correspondiente del kernel. Entonces se añade el resultado, y el píxel inicial se regula en este valor resultante final.

Bueno ahora que ya se tiene una idea, se hacen las pruebas con las imágenes que seleccione.

Lo primero son las imágenes a prueba:

Imágenes a Prueba:
Ahora, detectaremos los bordes de las imágenes.

Resultados:

* NOTA: En la segunda imagen, esta muy pixelada, por obvias razones hubo problemas al utilizar la escala de grises y después usar convolución.

Tiempo que se tardo el proceso en las imágenes:

En la primera imagen:
En la segunda imagen:
En la tercera imagen:

Ahora, el código completo:

Código:

Pueden visitar mi repositorio:

Repositorio:

lunes, 4 de febrero de 2013

Laboratorio - Actividad 1: Prueba de Imagenes

Para esta entrada mostrare ejemplos de conversión de imágenes a escala de grises y otros métodos.

Imágenes de Prueba:


Conversión a Gris

Código:
Resultado:


Convertir a Binario

Código:
Resultado:


ERROR ....

Con el codigo de Filtro tube algunos errores de codigo, pero aun asi el codigo esta dentro de mi repositorio y esta disponible.


Repositorio: