Thursday, May 10, 2018

Un método de dithering muy fácil de implementar


Las computadoras y sus correspondientes impresoras, son básicas en el trabajo moderno. En muchísimas empresas se trabaja con equipo de cómputo e imprimen contínuamente sus reportes, resultados, documentos, hojas de cálculo, gráficas, etcétera. Y aunque hoy en día hay muchas impresoras que pueden imprimir en color, en ocasiones esto es un gasto extra que en ocasiones no se justifica. De hecho, muchas impresiones en blanco y negro son suficientemente buenas.
Pues bien, si se tiene una gráfica en color y la impresora que se usa solamente imprime en blanco y negro, ¿cómo es que puede imprimir imágenes en tonos de gris? Tómese en cuenta que hablamos de una impresora que tiene un cartucho de tinta negra y ya, es decir, sólo tiene opción a dos colores: blanco (no imprime nada) y negro (imprime un punto con tinta negra).

La solución a este problema se llama dithering y es algo que se analiza en el proceso digital de imágenes. Aquí la idea es sacar ventaja de cómo el cerebro se encarga de interpretar las imágenes que el ojo le manda. Por ejemplo, si se quiere imprimir un color magenta, lo que se hace es un tramado de la siguiente manera, considerando por ejemplo, que sólo se tienen dos colores, rojo y azul:



Como puede verse, se hace una cuadrícula y se ponen alternadamente los colores. Y entonces hacemos dicha cuadrícula más chica cada vez hasta que ya el rojo y el azul no se ven y entonces el ojo interpreta el tramado como magenta. Así, podemos simular un color aunque no necesariamente tengamos esa tinta en particular para imprimirlo. Esto se llama dithering genéricamente.

El mecanismo de dithering se usa en las impresiones de revistas, periódicos y libros desde hace muchos años. Hay diversas técnicas y de las más usadas ha sido la de semitonos, la cual ya hemos analizado en unocero (buscar semitonos). Muchos libros y revistas en color usan en ocasiones cuatro tintas, y con ellas generan los colores necesarios usando estos tramados que dejan de ser visibles a la vista común, aunque con un cuentahilos pueden observarse.

Sin embargo, el dithering ha sido muy estudiado quizás desde que Floyd y Steinberg en 1968 (poner referencia wikipedia) escribieron un novedoso artículo indicando una nueva idea para procesar imágenes y ditherizarlas (valga la expresión). Esto dio pie a que otros investigadores hallaran otras matrices de ditherización y el cuadro se completó. Un trabajo sencillo de seguir puede verse aquí (ver tannerhelland), en donde explica los métodos de dithering más comunes.

Uno de esos métodos es el dithering al azar, el cual es sencillo pero de alguna manera funciona muy bien con algún tipo de imágenes en particular, sobre todo aquellas en donde hay gradientes, es decir, difuminación de color, por ejemplo, de oscuro a claro. Lo interesante del método de dithering al azar es que es muy fácil de entender y además, ilustra muy bien cómo el sistema puede simular diferentes tonos usando solamente dos colores, en este caso blanco y negro.

Hay que decir que este sistema de dithering no es muy usado porque en general las imágenes a ditherizar no tienen las características que lo hacen aceptable, pero es una muy sencilla introducción del problema de imprimir una imagen cuando se tienen menos colores que los que son necesarios.
Lo que se hace es simple, para cada punto en la pantalla, 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.

El código en Delphi es este:



Un par de ejemplos pueden mostrar la idea y la bondad de este dithering particular:



En el caso del degradado de grises (el gradiente), el resultado es bastante aceptable, pero ya en el caso de la imagen del David de Miguel Angel, el resultado ya no me gusta tanto. Sin embargo, como ya dijimos, en algunos casos la naturaleza de la imagen ayuda, por ejemplo, esta:






Quien le interese usar mi programa con este y otros métodos de dithering, entre otras cosas, puede pedírmelo a morsa@la-morsa.com.

No comments: