Detección de agujeros
Un agujero es una figura elíptica donde existe una hendidura y por lo
tanto un cambio de intensidad de la luz, aprovechando esto es fácil
detectar una imagen donde existe un agujero.Estas técnicas pueden ser utilizadas para miles de aplicaciones entre ellas puede ser medir la calidad de la superficie de un producto, o para desviar agujeros que puedan presentar un obstaculo a autos robots.
La técnica que estaremos programando en esta clase sera la de utilizar matrices con patrones de agujeros, y buscando por patrones parecidos en la imagen. Dado que esta técnica puede tomar mucho tiempo de procesamiento si se buscan los patrones en toda la imagen, necesitamos reducir el espacio de búsqueda de los patrones, para lo cual utilizaremos un histograma de los cambios de intensidad en cada linea o columna de pixeles en la imagen.
Con la practica de laboratorio de esta semana generamos un código que nos redujo el espacio de búsqueda de patrones de agujeros en la imagen.
Características del patrón
El primer paso fue identificar el patrón de búsqueda, para eso tome varias fotos a un grupo de agujeros en un pedazo de cartón, tomando uno como muestra y sabiendo la posición del agujero extraje, la matriz del agujero y obtuve cuando variaba un valor de otro dividiendo todos los valores entre el número mas pequeño encontrado.
La matriz de 11x11 obtenida fue la siguiente:
[[ 1.67, 1.67, 1.68, 1.66, 1.66, 1.65, 1.66, 1.65, 1.65, 1.66, 1.65], [1.68, 1.66, 1.61, 1.50, 1.43, 1.43, 1.50, 1.61, 1.65, 1.66, 1.65], [1.66, 1.61, 1.39, 1.08, 1.07, 1.09, 1.42, 1.50, 1.61, 1.66, 1.65], [1.65, 1.39, 1.08, 1.03, 1.00, 1.04, 1.09, 1.45, 1.65, 1.66, 1.65], [1.65, 1.28, 1.03, 1.00, 1.00, 1.00, 1.07, 1.45, 1.65, 1.66, 1.65], [1.68, 1.28, 1.03, 1.01, 1.01, 1.01, 1.07, 1.51, 1.66, 1.66, 1.65], [1.68, 1.59, 1.28, 1.03, 1.03, 1.07, 1.46, 1.65, 1.66, 1.66, 1.65], [1.70, 1.70, 1.59, 1.34, 1.34, 1.46, 1.66, 1.66, 1.66, 1.66, 1.65], [1.70, 1.69, 1.69, 1.68, 1.68, 1.68, 1.66, 1.66, 1.66, 1.65, 1.65], [1.69, 1.69, 1.69, 1.69, 1.69, 1.68, 1.68, 1.66, 1.66, 1.66, 1.65], [1.69, 1.69, 1.69, 1.69, 1.69, 1.68, 1.68, 1.66, 1.66, 1.66, 1.65]]Aunque no todos los orificios son iguales, los demás orificios deben de ser muy parecidos a este tomando en cuenta que la distancia a la cámara es la misma y los orificios fueron hechos con el mismo artefacto.
Los orificios que tome como patrón tienen un radio aproximado de 5 píxeles reduciendo el tamaño de la imagen a un máximo de 128x128, tiene fondo oscuro y va incrementando la intensidad de la luz conforme se acerca a las orillas.
La Medición del parecido se hizo de la misma forma que se aplica una mascara de convolución a un píxel (en nuestro caso a nuestro supuesto centro del orificio obtenido con los histogramas), recorriendo todos los vecinos y aplicando una operación entre la celda del patrón y el valor que se superpone en la imagen. La diferencia es que la operación aplicada es un factor absoluto de la resta entre la celda del patrón y el valor que le corresponde en la imagen. Sumando las operaciones en cada celda se obtuvo una aproximación numérica del cuanto se parece el patrón a los vecinos del lugar donde supuestamente esta el orificio.
Código
Resultados
| Original | Salida |
![]() |
![]() |
max@max-laptop:~/Dropbox/vision_computacional/tarea6$ python hole.py lb7-1.png
Porcentaje del agujero con respecto a la imagen
Agujero: H1 0.204427083333%
Agujero: H2 0.160807291667%
Agujero: H3 0.136067708333%
Tiempo de corrida: 1.7956700325
| Original | Salida |
![]() |
![]() |
max@max-laptop:~/Dropbox/vision_computacional/tarea6$ python hole.py lb7-2.png
Porcentaje del agujero con respecto a la imagen
Agujero: H1 0.0706380208333%
Agujero: H2 0.0670572916667%
Tiempo de corrida: 1.49644517899
En la tercera y ultima imagen no fue posible detectar la posición de los agujeros debido a que como puede verse en la búsqueda vertical de posibles agujeros se confunden los tres como si fueran un solo orificio, lo que provoca que el patrón buscado no quede en el centro y no sea detectado.
| Original | Salida del histograma |
![]() |
![]() |
max@max-laptop:~/Dropbox/vision_computacional/tarea6$ python hole.py lb7-3.png Porcentaje del agujero con respecto a la imagen Tiempo de corrida: 0.777371883392
Referencias:
http://elisa.dyndns-web.com/~elisa/teaching/comp/vision/agujeros.pdf





Para el último podría ser útil rotar la imagen de entrada para desalinear los agujeros. Se me hace que además tiene mucho ruido y se podría mejorarse la selección de umbral. 4 pts.
ResponderBorrarNo pues Yolo, no me funciono, me dio error en "call(['gnuplot', 'hole.plot'])" en subprocess no tengo eso
ResponderBorrar