Para las pruebas se utilizó la siguiente imagen:
Grayscale
El método que utilicé para convertir la imagen a grayscale fue sencillo. Basto con recorrer cada pixel de la imagen original utilizando una matriz con todos los pixeles (librería PIL de Python). Para cada pixel, se localizaba el mayor valor R, G o B. Dicho valor, ya sea se colocaba 3 veces en el mismo pixel en otra imagen de salida para proporcionar una escala de gris, o una sola vez dependiendo del formato de la imagen de salida. Por ejemplo:
Pixel_Original = (200, 100, 5)
Mayor(Pixel_Original) = 200
Pixel_Nuevo = (200, 200, 200) ó Pixel_Nuevo = (200)
Esto convierte una imagen a color RGB a una escala de grises. También es posible utilizar un promedio de los 3 valores RGB, o el menor. Los resultados son visiblemente similares, aunque se puede notar que utilizando el valor mayor, la escala de grises es un poco más brillantes(por elegir mayor, elegimos proximidad a blanco). De igual manera, al utilizar el menor valor la imagen se observaría más oscura. Por esto es deseable elegir un promedio entre los 3 para obtener un valor más estable. He aquí las comparaciones:
Filtro Mayor
Filtro Menor
Filtro Promedio
Código:
Binarización
La binarización de una imagen es el proceso de convertir los valores de cada pixel a 0 o 1(0 o 255). Para hacer esto normalmente se utiliza un valor umbral con el cual comparamos para saber si cambiar el pixel a 0 o 255. Por esto mismo usualmente las herramientas como OpenCV solicitan que la imagen esté previamente en escala de grises, para simplemente comparar el valor de gris con el umbral y convertirlo a binario. En este caso, el programa automáticamente convierte a escala de grises y de ahí binariza la imagen dependiendo de cada valor de gris. El funcionamiento es el siguiente:
Pixel_Original = 174
Umbral = 127
Pixel_Original >= Umbral por lo tanto Pixel_Nuevo = 255
ó
Pixel_Original = 33
Umbral = 127
Pixel_Original < Umbral por lo tanto Pixel_Nuevo = 0
Las imagenes resultantes utilizando diferentes umbrales pueden observarse a continuación:
Umbral 220
Umbral 127
Umbral 50
Código
Blur
Blur es un método para dar un aspecto borroso a la imagen, utilizando las medias o promedios de los elementos vecinos a un pixel, comúnmente el pixel mismo y sus vecinos inferior, superior, izquierdo y derecho. Por ejemplo:
Pixel_Actual = (200, 10, 100), Pixel_Superior = (200, 20, 100), Pixel_Inferior = (230, 15, 110), Pixel_Derecho = (130, 20, 120), Pixel_Izquierdo = (150, 30, 110)
--Promediamos valores R, G, y B por separado de todos los pixeles --
Pixel_Actual = (Prom(R), Prom(G), Prom(b))
Pixel_Actual = (182, 19, 108)
En caso de que no exista algún pixel vecino(por ejemplo si el pixel actual es el pixel en las coordenadas 0,0 solo tendría vecino derecho e inferior) se omite el cálculo de los demás y simplemente se promedia con el número de vecinos existentes.
Es posible aplicar el mismo filtro más de una vez para hacer cada vez mas borrosa la imagen hasta dejarla irreconocible. Las imagenes al aplicar un número determinado de filtros se pueden ver a continuación:
5 veces
10 veces
20 veces
Código
Herramienta "interactiva"
Con el uso de Tkinter, me di a la tarea de hacer una pequeña herramienta donde se pudieran probar todos éstos filtros sobre una imagen. La función es simple, carga la imagen en una ventana donde se encuentran botones para aplicar los diferentes filtros a una imagen, con posibilidad de combinarlos. Además todas las modificaciones se hacen sobre un archivo separado, por lo cual es posible volver a la imagen original presionando reset. La herramienta se ve así:
Bien; ojo con la ortografía o empiezo a quitar puntos. Ahora van 10 pts.
ResponderEliminar