Hemos visto ya en unocero, uno de los esquemas más sencillos para hacer dithering de una fotografía, es decir, tomar una imagen con 256 tonos de gris, por ejemplo, y convertirla solamente a dos colores, buscando que la imagen no pierda tanta información como para que no pueda ser reconocida.
El proceso de dithering se encuentra en muchas de las cosas que hacemos con cotidianidad. Por ejemplo, los periódicos, revistas y libros, imprimen con pocas tintas y tienen que “simular” que se tienen más colores, cosa que hacen haciendo un entramado de los colores disponibles para así engañar al ojo aunque en realidad estamos engañando al cerebro, quien es el que interpreta las imágenes que perciben los ojos.
Aquí hablamos de uno de los esquemas más sencillos, el dithering al azar, el cual dado cada punto de una imagen, se genera un número al azar en el rango de 0 a 255. Si el valor al azar es mayor que el valor del pixel, entonces se pinta un punto blanco, sino, se pinta uno negro. Así de simple. Otros esquemas de dithering, de los cuales hablaremos próximamente, como en el caso del sistema de Floyd-Steinberg, usa una matriz que toma valores muy específicos y se aplican a los pixeles de cierta manera, lo que al final da como resultado una imagen ditherizada mucho mejor que la que se puede realizar con el método al azar.
Pues bien, tomemos la imagen de Lena, un clásico del proceso digital de imágenes y apliquémosle el esquema de Floyd-Steinberg. Este será el resultado:
Lena (imagen original)
Lena (dithering Floyd-Steinberg)
Puede verse que la imagen se ve relativamente bien pero la pregunta entonces es, ¿dada una imagen ditherizada, podemos regresarla a la imagen original? La respuesta simple es NO. La razón de esto es que cuando una imagen se ditheriza, se pierde información y por ende, en principio al menos no es posible reconstruirla y regresar a la imagen original. De hecho, esto es parecido a lo que se ha intentado por años, colorizar fotografías en blanco y negro (tonos de gris). En algunos casos es posible si se tiene información externa, por ejemplo, en el caso de las fotografías de la Segunda Guerra Mundial, probablemente en algún museo se encuentren las ropas que usaban los soldados en ese momento histórico y entonces se puede tener una referencia sobre el color, el cual desde luego, se perdió en una foto en tonos de gris.
Buscando más información encontré un artículo que salió en la revista Dr. Dobbs Journal, ya desaparecida. El autor, Allen Stenger, intenta precisamente regresar a la imagen original a partir de una imagen ditherizada. El artículo puede leerse aquí.
Aunque el trabajo de Stenger no es difícil de seguir, podemos tomar dos elementos fundamentales: toma una matriz de 4×4 pixeles y le aplica una convolución, es decir, un proceso aritmético de sumas y restas entre los pixeles de interés para así lograr efectos como hacer más borrosa una imagen, o bien, hacerla con más detalles, o encontrar los bordes, entre muchos efectos posibles. La convolución de imágenes (y de señales), es un tema común y es relativamente sencillo de hacer.
Pues bien, Stenger sugiere una matriz de 4×4 pixeles para hacer un filtro “blur”, el cual hace que la imagen sea más borrosa. La idea de esto es que la imagen ditherizada se convierta -en lo posible- en tonos de gris. Desde luego esto tiene sus limitaciones pero es una idea razonable. Curiosamente Stenger usa una matriz par y el punto de interés, es decir, en donde se aplica la convolución de la matriz, es el de la esquina inferior izquierda. Una vez realizada esta convolución, Stenger usa una matriz de 3×3 pixeles para usar un nuevo filtro de convolución: “sharpen”, que busca que se enfaticen los detalles de la imagen.
Decidí probar la idea de Stenger y usando unas rutinas de convolución para Delphi, que pueden descargarse de este sitio, apliqué los filtros de convolución, aunque no usé como Stenger el de 4×4, sino que usé uno de 3×3. Probablemente en algún momento decida ver si el filtro de 4×4 mejora significativamente el resultado final.
He aquí las pruebas. Más arriba aparece la imagen de Lena, la original. La siguiente imagen es Lena ditherizada con Floyd-Steinberg. Ahora estos son los resultados de usar los dos filtros de convolución: la tercera imagen es el proceso inverso usando las rutinas de convolución que hallé.
Lena (filtro de convolución blur)
Lena (filtro de convolución blur + sharpen)
¿Cómo lo valora el lector de unocero? ¿Es una buena idea para tratar de recuperar la imagen original? ¿Algo así como “de lo perdido lo encontrado”?