jueves, 25 de abril de 2013

Actividad 7: Detección de Agujeros

Para ésta semana en el laboratorio, se nos pidió tener la detección de de agujeros.

Importancia:
La detección de agujeros es una de las repuestas que se aplican principalmente en la industria de la manufactura, enfocada principalmente en en la creación de piezas sólidas. Un ejemplo a mencionar es al momento de detectar fisuras u orificios en las piezas que se elaboraron, en la cual ayudan a clasificarlas, ya sea para quitarlas de la línea de producción u obtener las que no tienen imperfecciones.

Desarrollo:
Para poder tener una buena detección de histogramas, recomiendo hacer el uso de filtros o normalizar la imagen, en mi caso lo que emplie fue ordenar la lista, ya que sin el uso de éste, lo que se obtendría sería muchas líneas horizontales y verticales.

from PIL import Image, ImageDraw
from sys import argv
def gray_scale(img):
pixel = img.load()
w, h = img.size
for i in range(w):
for j in range(h):
r, g, b = pixel[i,j]
media = (r+g+b)/3
pixel[i,j] = (media, media, media)
return img
def lista_horizontal(img):
pixel = img.load()
w, h = img.size
return lista_histograma(w, h, pixel, 'horizontal')
def lista_vertical(img):
pixel = img.load()
w, h = img.size
return lista_histograma(h, w, pixel, 'vertical')
def lista_histograma(a, b, pixel, type_l):
lista = list()
for x in range(a):
suma = 0
for y in range(b):
if(type_l == 'horizontal'): suma += int(pixel[x,y][0])
else: suma += int(pixel[y,x][0])
lista.append(suma)
return lista
def lista_minimos(list_hist):
lista = list()
for i in range(len(list_hist)):
try:
if(list_hist[i-1] > list_hist[i] and list_hist[i+1] > list_hist[i]): lista.append(i)
except:
pass
lista.sort()
return lista
def dibujar_lineas(img, horizontal, vertical):
w, h = img.size
draw = ImageDraw.Draw(img)
azul = (0, 255, 0)
verde = (0, 0, 255)
for x in horizontal:
draw.line((x, 0, x, w), azul)
for y in vertical:
draw.line((0, y, h, y), verde)
img.save("histograma.png", 'PNG')
def main():
img = Image.open(argv[1])
img = gray_scale(img)
horizontal = list(lista_horizontal(img))
vertical = lista_vertical(img)
horizontal = lista_minimos(horizontal)
vertical = lista_minimos(vertical)
img = Image.open(argv[1])
dibujar_lineas(img, horizontal, vertical)
main()
view raw gistfile1.py hosted with ❤ by GitHub

[imagen original]

[primeros resultados]

[imagen sin filtros]

[imagen sin filtro]



Resultados







Referencia:
http://elisa.dyndns-web.com/~elisa/teaching/comp/vision/agujeros.pdf

3 comentarios: