lunes, 11 de febrero de 2013

Tarea 1

Para esta tarea se nos pidió realizar una subrutina para aplicar una máscara de convolución discreta.

Con esa subrutina, calcular por lo menos un gradiente horizontal y un gradiente vertical.
Normalizar la matriz resultante de la manera que perciben factible y útil a [0, 255].
Y realizar la binarización que deje los bordes como zonas blancas y el resto negro.
Utilice el operador Sobel que calcula el gradiente de la intensidad de una imagen en cada píxel.
Lo primero que realice fue convertir la imagen a escala de grises (promediando los colores en rgb y asignándoles el promedio como nuevo valor al pixel).





Código en donde se realiza la escala de grises: 
for x in range(0,1024): #Ancho
for y in range(0,768): #Largo
(r,g,b) = pix[x,y]
promedio=(r+g+b)/3
pix[x,y] =(promedio,promedio,promedio)
view raw escala.py hosted with ❤ by GitHub
Después de que se pasa la imagen a escala de grises se aplicará la máscara, en este caso utilice el operador Sobel.









Código en donde se aplica la máscara:

dirX = ([-1, 0, 1], [-2, 0, 2], [-1, 0, 1])
dirY = ([1, 2, 1], [0, 0, 0], [-1, -2, -1])
for x in range(0,1024-3): #Ancho
for y in range(0,768-3): #Largo
sumDirX=0
sumDirY=0
for i in range(0,3):
for j in range(0,3):
sumDirX +=(pix[x+i,y+j][0]*dirX[i][j])
sumDirY +=(pix[x+i,y+j][0]*dirY[i][j])
potX = pow(sumDirX, 2)
potY = pow(sumDirY, 2)
res = int(math.sqrt(potX+potY))
if res > 255:
res = 255
if res < 0:
res = 0
pix[x,y] = (res, res, res)
view raw mascara.py hosted with ❤ by GitHub



Una vez aplicada la máscara se realiza la binarización de la imagen.
En donde si el promedio del color en RGB del píxel es <= 127 se cambia el valor a (0,0,0) y en caso contrario se cambia a (255,255,255).



Código en donde se realiza la binarización: 

for x in range(0,1024-1): #Ancho
for y in range(0,768-1): #Largo
(r,g,b) = pix[x,y]
promedio=(r+g+b)/3
if promedio<=127:
pix[x,y] =(0,0,0)
else:
pix[x,y] =(255,255,255)
view raw binarizacion.py hosted with ❤ by GitHub


Tiempo de ejecución: 13.21 seg

Aquí les muestro otro ejemplo:

Imagen Normal:





Imagen Blanco y Negro:



Imagen con Máscara:



Imagen Binarizada:



Tiempo de ejecución: 10.43 seg



1 comentario:

Elisa dijo...

Está muy corto, no reportas los tiempos, faltan algunos acentos. Igual que a Cris, te quito un punto: 4 pts.

Publicar un comentario