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