Esta actividad consistió en realizar un programa, el cual al proporcionarle una imagen convertirla a escala de grises, también determinar umbrales para que los pixeles menores y mayores a esos rangos fueran cambiados a blancos y negros; y por último aplicar filtros a la imagen para que se distorsione.
El algoritmo que utilicé para convertir la imagen a escala de grises consiste en obtener cada uno de los pixeles de la imagen en valores RGB utilizando la función load () de la librería PIL de Python; después de obtener los valores lo que hice fue obtener un promedio de los tres y asignar ese promedio al nuevo pixel, y con la función putpixel() guardar el nuevo pixel; por ejemplo:
pixel = (100,50,90) Entonces: r = 100, g = 50, b = 90 promedio = (r+g+b)/3 NuevoPixel = (promedio, promedio, promedio)
Esta es la parte de la función en python que realiza lo anterior:
pixeles = im.load()
for x in range(ancho):
for y in range(alto):
promedio = sum(pixeles[x,y])/3
gris = (promedio,promedio,promedio)
im.putpixel((x,y),gris)
im.save('gris.png')
Para la parte de los umbrales realicé una función muy similar, sólo que realiza comparaciones con los umbrales para determinar si sobrepasa alguno de los umbrales.
pixeles = im.load()
for x in range(ancho):
for y in range(alto):
promedio = sum(pixeles[x,y])/3
if promedio < umbralNegro:
gris = (0, 0, 0)
elif promedio > umbralBlanco:
gris = (255, 255, 255)
else:
gris = (promedio,promedio,promedio)
im.putpixel((x,y),gris)
im.save('umbrales.png')
Para la distorsión de la imagen lo que realicé fue tomar un pixel y sus vecinos (arriba,abajo,izquierda y derecha) sumarlos y obtener un promedio de sus valores.
for x in range(ancho):
for y in range(alto):
pix = []
pix.append(list(imPixeles[x, y]))
if x > 0:
pix.append(list(imPixeles[x-1, y]))
if y > 0:
pix.append(list(imPixeles[x, y-1]))
if x < ancho-1:
pix.append(list(imPixeles[x+1, y]))
if y < alto-1:
pix.append(list(imPixeles[x, y+1]))
filtro = [sum(i) for i in zip(*pix)]
imPixeles[x,y] = filtro[0]/3, filtro[1]/3, filtro[2]/3
im.save('filtro.png')
El programa muestra en la ventana los cambios realizados y además guarda la imagen en la carpeta donde se encuentra el script del programa.
La imagen que utilicé como prueba es la siguiente:
Al utilizar el programa en terminal se muestra las teclas que puedes presionar para utilizar las funciones y al usar la función de grises la imagen se ve de la siguiente manera:
Al utilizar el programa y usar la función de umbrales con valores de 90 y 180 la imagen se ve de la siguiente manera:
Distorsión de la imagen:
Jugando con los umbrales
Umbrales de 20 y 150
Umbrales de 20 y 100
Umbrales de 99 y 100
Programa
Para utilizar este programa en terminal hay que proporcionarle el nombre de la imagen junto con su extensión en caso de que se encuentre en la misma carpeta o sino proporcionarle toda la ruta. Después en terminal se muestran las opciones que hay:
Presiona
Barra espaciadora -> para cambiar la imagen a escala de grises
Tecla L -> para jugar con los umbrales
Tecla f -> para aplicar filtro
Saludos!
Repositorio donde estaré subiendo más avances y más códigos: https://github.com/JonathanAlvarado/VisionComputacional








OK; 10.
ReplyDelete