Mostrando entradas con la etiqueta Visión Computacional. Mostrar todas las entradas
Mostrando entradas con la etiqueta Visión Computacional. Mostrar todas las entradas

miércoles, 22 de mayo de 2013

Presentación Final



Detección de flash (cámaras) en museos


  

Propósito 

El propósito del proyecto es la detección de flash de las cámaras mediante técnicas de visión computacional, estos serán grabados con una cámara y se extraerá la imagen y se procesara para tener como resultado, la ubicación de donde proviene el flash.





Justificación

Principalmente el aspecto científico, la luz tan potente del flash puede deteriorar una pintura valiosa. El Xenon, presente en los tubos de flash se utiliza para pruebas de envejecimiento acelerado en distintos productos. Los flash causan que ciertos pigmentos de las pinturas se rompan y pierdan su vibración y color.

Otro aspecto es el económico, así se aseguran que las fotos no tengan la calidad necesaria para venderse.





Descripción textual


El programa detecta el flash de las cámaras en una secuencia de imágenes. Se procesa la imagen para saber de dónde proviene el flashazo.


Diseño del software






Pasos:


Una vez que se detectan pixeles blancos en la imagen, se toma una captura.






Teniendo la imagen con mucha iluminación, se aplica escala de grises a la imagen.




Se aplica binarización a la imagen para obtener los puntos más blancos, y se identifican los puntos blancos.




Se aplica dilatación y se marca la ubicación de donde proviene el flash en la imagen original.





Herramientas/librerias utilizadas

La librería utilizada para el proyecto fue OpenCV para Python, esto para habilitar la cámara web.

Numpy, para realizar los cálculos de las imágenes.


Técnicas de visión utilizadas

  • Escala de grises
  • Binarización
  • Dilatación
  • Diferencia


Evaluación de Desempeño

Se realizaron pruebas en cuanto a rendimiento/calidad y la resolución más óptima para el equipo utilizado era (640, 480).
Entre más variación de colores tenía el entorno más tarda en procesar.




Se utilizó un equipo con estas características:

Procesador: Core 2 Duo.

Memoria RAM: 3 Gb.

Sistema Operativo: Linux Ubuntu



Tiempo de ejecución



Debilidades

Una de las principales debilidades es cuando existan varias personas en la misma zona con cámara y tomen foto al mismo tiempo.


Trabajo a futuro

Mejorar detección, eliminando el ruido en la imagen.

Implementarlo con las cámaras utilizadas en los museos.


Repositorio





Video:







Presentación:


jueves, 9 de mayo de 2013

Detección de esquinas

Para esta entrega se pidió detectar esquinas, esto mediante el método de diferencia de filtro mediano.


  • Primero se realiza la escala de grises
  • Después se utiliza un filtro medio
  • Ya con el filtro, se realiza es sacar la diferencia entre la imagen de escala de grises y la imagen que se genero con el filtro medio
Código:



Imágenes/resultado:







jueves, 2 de mayo de 2013

Detección de polígonos

En esta entrega se pidio identificar, clasifica y etiquetar polígonos.



El procedimiento para detectarlo es
  • Cargar la imagen
  • Convertirla a escala de grises
  • Aplicar convolución discreta
  • Aplicar BFS

Código:




En la imagen resultante solo logre detectar la línea.

jueves, 25 de abril de 2013

Laboratorio 7

En este laboratorio se hablara sobre el preprocesamiento de la detección de agujeros.
Se mostraran los histogramas que se generaron.

Estos son los datos generados de forma Horizontal:


En 
Vertical:


Imagen binarizada:




Imagen Final:


martes, 23 de abril de 2013

Detección de agujeros


Para esta tarea se nos pidió detectar agujeros en una imagen.
Los agujeros que se detecten se deben marcar con un borde morado oscuro y un relleno morado claro.

• Un tono ligeramente diferente en cada agujero.
• Se marca el centro de cada agujero con un punto amarillo.
• Al centro de cada agujero se agrega una etiqueta del ID del agujero.
• El programa imprime un listado que indica para cada ID el tamaño del
agujero (como porcentajes del tamaño de la imágen).
• Publicación en el blog siguiendo las instrucciones de siempre.




Código:











jueves, 18 de abril de 2013

Laboratorio 6

Para esta entrega de laboratorio se pidio identificar los elipses y marcarlos con un ID/círculo, y sacar porcentaje de los elipses que se detectaran en la tarea anterior.

La detección de elipses se encuentra en mi entrada anterior.

Código:


Etiquetas e identificación en elipses.




Porcentaje:



martes, 16 de abril de 2013

Detección de elipses

En esta entrega se nos pidio detectar elipses en una imagen.
Para realizar esta detección es necesario realizar la detección de bordes, en tareas anteriores ya hemos realizado esto.
Primero realizaremos la detección de bordes y se crea un filtro de estos puntos con respecto a los diferentes gradientes.




Se calcula centro:







Se detecta elipse:


Imagen de entrada:


Salida:
Imagen de entrada:



Salida:



miércoles, 6 de marzo de 2013

Laboratorio 5

Para esta entrega, tendremos que detectar circulos pero ahora el parametro del radio no está predefinido.

Al igual que la tarea de detección de circulos con un mismo radio, emplearemos estas ecuaciones:








Código:

El resultado no fue el esperado:



lunes, 4 de marzo de 2013

Tarea 4 Detección de círculos


En esta tarea se nos pidió realizar un código que detectara círculos.
Para poder realizar esto hay que calcular para cada pixel el gradiente en “x” y en “y”
Después se calcula Cos y Sin.
Teniendo estos valores se puede calcular los posibles centros del círculo:


Código:



En cuanto al resultado, no logre terminarlo.

miércoles, 27 de febrero de 2013

Laboratorio 4


Para esta entrega se nos pidió realizar la detección de líneas diagonales.


Código:

martes, 26 de febrero de 2013

Tarea 3 Detección de líneas




En esta tarea consiste en la detección de líneas en una imagen, el cual utilizamos la transformada de hough.


Para esto hay que sacar “rho” en cada píxel, esto nos da la dirección que tiene.
Para los gradientes de x y y se utiliza la siguiente ecuación:


Para sacar gradiente en X y Y se utilizó la máscara de sobel, ya que esta ya la habíamos utilizado en una Tarea anterior.

Código:




Resultado: No logre detectar las líneas.

miércoles, 20 de febrero de 2013

Laboratorio 3


Para esta entrega de laboratorio se nos pidió obtener Convex Hull de una imagen.

Para la realización de esto fue necesario usar el algoritmo utilizado en la Tarea 2:


Además se necesitaban 2 imágenes con fondo negro y con alguna figura con líneas blancas.




Utilice el algoritmo de Jarvis march el cual se inicia en algún punto extremo del contorno, y en cada paso se prueba cada punto de los puntos y se encuentra cual hace la vuelta más larga hacia la derecha.





Código:



Resultado:






domingo, 17 de febrero de 2013

Tarea 2


Para esta entrada se nos pidió:
  • Agregar una rutina que detecta todos los componentes conexos separados por bordes.
  • El componente más grande debe suponerse ser el fondo, y colorearse gris.
  • Los demás dibujos se les asignan colores fuertes. Colocando el borde en blanco y un punto negro en el centro indicando el centro de masa.



Antes de hacer la detección de formas se tiene que pasar la imagen a escala de grises:



Luego aplicar una máscara (convolución):






Y finalmente la binarización de la imagen:




Una vez realizado esto se procede a la detección de formas:






Resultado:






Repositorio.
https://github.com/Sergiohdz/VisionComputacional


miércoles, 13 de febrero de 2013

Laboratorio 2


Para esta entrega se nos pidió generar Ruido sal y pimienta en una imagen y después eliminarla.
Al generar el ruido sal y pimienta, hay que tener en cuenta la intensidad (que tanto se pone en la imagen) y la polarización (que tan negros y blancos son los puntos).
Y eliminar ruido sal y pimienta, esto con alguna combinación de filtrado/umbrales.

La imagen que utilice fue la siguiente:




Generar ruido sal y pimienta.
Esto lo realice con 2 variables random que serán las 2 coordenadas de la imagen (píxel) x,y. Y otra variable para generar un número aleatorio entre 0 y 255 para tener diferentes tonos de blancos/negros (polarización).


Código:



Támbien se puede modificar la intensidad y polarización del ruido sal y pimienta, aquí muestro otros ejemplos de la imagen.

Intensidad 15% Polarización 0-245


Intensidad 30% Polarización 80-255


Intensidad 60% Polarización 155-255


Una vez generado el ruido, se realiza la eliminación/disminución de esté.
Esto lo realice sacando un promedio de los vecinos del píxel que se le haya aplicado ruido sal y pimienta.





Después se realiza un filtro para disminuir un poco más el ruido sal y pimienta en la imagen.






Aquí otro ejemplo de la generación/eliminación del ruido sal y pimienta.