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:
Después
de que se pasa la imagen a escala de grises se aplicará la máscara, en este
caso utilice el operador Sobel.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
Código
en donde se aplica la máscara:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
Tiempo de ejecución: 13.21 seg
Aquí les muestro otro ejemplo:
Aquí les muestro otro ejemplo:
Imagen Normal:
Imagen Blanco y Negro:
Imagen con Máscara:
Imagen Binarizada:
Tiempo de ejecución: 10.43 seg
Repositorio:
https://github.com/Sergiohdz/VisionComputacional
1 comentario:
Está muy corto, no reportas los tiempos, faltan algunos acentos. Igual que a Cris, te quito un punto: 4 pts.
Publicar un comentario