sábado, 30 de abril de 2011

Guión para convertir de RGB888 (24 bits) a RGB444 (12 bits)

Segúramente conozcas la función de GIMP que permite convertir la imagen en indexado (paletas de hasta 256 colores).

Muchas pantallas LCD de dispositivos portátiles (como teléfonos móviles) no permiten mostrar colores de 24 bits (RGB 888 unos 16 millones de colores diferentes) como en las pantallas normales, sino que van limitados en cuanto a número de colores, a menudo 12 bits (admiten 16 variaciones de rojo, de verde y de azul, en total unos cuatro mil colores). Este proceso no lo puede realizar GIMP de forma directa, como la conversión a indexado.

Hay que destacar que el formato RGB444 es totalmente difernete del indexado. El formato indexado trabaja con referencias, lleva una lista (índice) de colores, y en la imagen solo hay referencias a esa lista. Para mostrar esas imágenes en pantalla, se lee la imagen y en la pantalla se dibujan los colores que son indicados en esa lista. En los formatos RGB888 y RGB444, no hay lista de colores, y el contenido de la imagen son los propios colores, que se dibujan de forma directa en la pantalla.

Si en esas pantallas se muestra una imagen tal cual, sin tratar, los colores quedarán truncados, de forma similar a la función posterizar de GIMP. La forma de evitar esto es relatívamente simple: tratar previamente la imagen para que tenga solo los colores que la pantalla muestra, y además, usar esos colores de forma que se mezclen y creen la apariencia de un color real de 24 bits. Más o menos como la conversión a indexado de GIMP, que la opción de difuminado del color "ninguno" funciona mal en fotos reales porque trunca los colores, en cambio las otras opciones los truncan y los difuminan, de forma que el truncamiento se nota menos.

Este formado te 12 bits se llama RGB444, ya que cada canal se lleva 4 bits, es decir, admite 16 intensidades diferentes, entre todos los canales se admitiría 16×16×16=4096 colores. Si la información admite transparencia se le llama ARGB 4444, ya que son cuatro canales.



Recientemente se ha publicado en el registro de gimp un guión que permite convertir a ARGB4444 en uno o dos clics de ratón (uno para aplanar la imagen y otro para convertir). Si tienes que trabajar con una pantalla de estas puedes este guión te podría venir muy bien para hacer conversiones.

No hay mucho más que decir, salvo dejar unos ejemplos y enlaces para comparar entre RGB888 (imagen original), el formato RGB444 que podría producirse si se trunca el color y el formato RGB444 que produce este guión.
http://en.wikipedia.org/wiki/List_of_monochrome_and_RGB_palettes#24-bit_RGB

Imagen original:


Esto es lo que pasa si se truncan los colores sin más, observa los colores sólidos del asfato o el cielo.


Y así queda si se difumina el color un poco:

Finalmente una ampliación para comparar diréctamente:

Se puede ver que el resultado de este guión es visualmente mucho mejor.

jueves, 21 de abril de 2011

Detección adapativa de bordes

Antes de seguir leyendo, recomiendo que vayas a la página del complemento del blog, y veas las imágenes. Por si mismas explican casi todo lo que hace el filtro.

GIMP tiene varios algoritmos de detección de bordes. Todos ellos pueden producir efectos interesantes, pero ninguno está adaptado a producir una imagen de líneas de un solo píxel de anchura jústamente donde hay bordes y sin producir zonas borrosas.

Desde el blog Tea Driven Design (Daniel Parnham) se ha creado un complemento llamado Adaptive threshold edge detect. Este complemento está basado en un algoritmo del profesor John Robinson de la universidad de York, siendo modificado y adaptado por el autor.

Este algoritmo modificado permite mejorar los resultados en imágenes comprimidas en JPEG. Esto es porque ese modo de compresión introduce artefactos en las imágenes que luego podrían ser revelados por el algoritmo de detección de bordes, empeorando en resultado final y obligando a retocarlo. La segunda imagen de la entrada del blog muestra muy bien este problema. La fila columna de la derecha contiene círculos que fueron comprimidos en JPEG (en la izquierda están intactos). Los de arriba está sin aplicar filtro, los del medio tienen el algoritmo de Canny y los de abajo tienen el creado por este autor.

Un pequeño inconveniente de este algoritmo es que trabaja con toda la imagen a la vez, lo que obliga a usar mucha memoria. No obstante, en ordenadores modernos es difícil llegar a saturar la memoria, sería necesario una imagen de muchas decenas de megapíxeles.

Hacía mucho que no publicaba una entrada, pero este algoritmo me ha motivado.

Enlace interesante con imágenes de ejemplo: Tea Driven Design: Adaptive Threshold Edge Detection in GIMP.

El complemento se puede descargar aquí: http://registry.gimp.org/node/25229
Código fuente (para programadores): https://github.com/parnham/plugins