Color indexado

En computación, el color indexado es una técnica para administrar los colores de las imágenes digitales de forma limitada, con el fin de ahorrar memoria de la computadora y almacenamiento de archivos, mientras se acelera la actualización de la pantalla y las transferencias de archivos. Es una forma de compresión de cuantificación vectorial.

Cuando una imagen se codifica de esta manera, la información de color no se transmite directamente por los datos de píxeles de la imagen, sino que se almacena en una pieza de datos separada denominada paleta: una matriz de elementos de color. Cada elemento de la matriz representa un color, indexado por su posición dentro de la matriz. Las entradas individuales a veces se conocen como registros de color. Los píxeles de la imagen no contienen la especificación completa de su color, sino solo su índice en la paleta. Esta técnica a veces se denomina pseudocolor o color indirecto, ya que los colores se tratan indirectamente.

Quizás el primer dispositivo que admitió colores de paleta fue un buffer de marco de acceso aleatorio, descrito en 1975 por Kajiya, Sutherland y Cheadle. Esto admite una paleta de 256 colores RGB de 36 bits.

Tamaño de paleta
La paleta misma almacena una cantidad limitada de colores distintos; 4, 16 o 256 son los casos más comunes. Estos límites a menudo son impuestos por el hardware del adaptador de pantalla de la arquitectura de destino, por lo que no es una coincidencia que esos números sean potencias exactas de dos (el código binario): 22 = 4, 24 = 16 y 28 = 256. Mientras que 256 valores pueden ser encajar en un solo byte de 8 bits (y luego un único píxel de color indexado también ocupa un solo byte), los índices de píxeles con 16 (4 bits, un nibble) o menos colores se pueden agrupar en un solo byte (dos nibbles por byte, si se emplean 16 colores, o cuatro píxeles de 2 bits por byte si se usan 4 colores). A veces, se pueden usar valores de 1 bit (2 colores) y luego se pueden empaquetar hasta 8 píxeles en un solo byte; tales imágenes se consideran imágenes binarias (a veces denominadas imágenes de mapa de bits o binivel) y no una imagen de color indexada.

Si se pretende una superposición de video simple a través de un color transparente, una entrada de paleta está específicamente reservada para este propósito, y se descuenta como un color disponible. Algunas máquinas, como la serie MSX, tenían el color transparente reservado por el hardware.

Las imágenes en color indexadas con tamaños de paleta más allá de 256 entradas son raras. El límite práctico es de alrededor de 12 bits por píxel, 4.096 índices diferentes. Utilizar 16 bpp indexados o más no proporciona los beneficios de la naturaleza de las imágenes de color indexadas, debido a que el tamaño de la paleta de colores en bytes es mayor que los datos de imagen en bruto. Además, se pueden usar modos de color RGB directo útiles desde 15 pb y superior.

Si una imagen tiene muchos matices de color sutiles, es necesario seleccionar un repertorio limitado de colores para aproximar la imagen utilizando la cuantización del color. Tal paleta es frecuentemente insuficiente para representar la imagen con precisión; las funciones difíciles de reproducir, como los degradados, aparecerán en bloques o en tiras (bandas de colores). En esos casos, es habitual emplear el difuminado, que mezcla píxeles de diferentes colores en patrones, explotando la tendencia de la visión humana de difuminar los píxeles cercanos, dando un resultado visualmente más cercano al original.

Colores y paletas
La forma en que se codifican los colores dentro del mapa de la paleta de colores de una determinada imagen de color indexada depende de la plataforma de destino.

Primeras técnicas de color
Muchas computadoras personales y hogareñas antiguas tenían paletas de hardware muy limitadas que podían producir un conjunto muy pequeño de colores. En estos casos, el valor de cada píxel se asigna directamente a uno de estos colores. Ejemplos bien conocidos incluyen Apple II, Commodore 64 y IBM PC CGA, todos los cuales incluyen hardware que podría producir un conjunto fijo de 16 colores. En estos casos, una imagen puede codificar cada píxel con 4 bits, seleccionando directamente el color que se utilizará. Sin embargo, en la mayoría de los casos, el hardware de la pantalla admite modos adicionales donde solo se puede usar un subconjunto de esos colores en una sola imagen, una técnica útil para ahorrar memoria. Por ejemplo, el modo de resolución 320 × 200 de la CGA podría mostrar solo cuatro de los 16 colores a la vez. Como las paletas eran totalmente exclusivas, una imagen generada en una plataforma no puede verse directamente en otra.

Otras máquinas de esta época tenían la capacidad de generar un conjunto de colores más grande, pero generalmente solo permitían que un subconjunto de esas se usara en cualquier imagen. Los ejemplos incluyen la paleta de 256 colores en máquinas Atari de 8 bits o los 4.096 colores del terminal VT241 en el modo de gráficos ReGIS. En estos casos, era común que la imagen solo permitiera visualizar un pequeño subconjunto del número total de colores a la vez, hasta 16 a la vez en Atari y VT241. En general, estos sistemas funcionaban de manera idéntica para sus hermanos menos coloridos, pero una diferencia clave era que había demasiados colores en la paleta para codificar directamente en los datos de píxeles dada la cantidad limitada de memoria de video. En su lugar, usaron una tabla de búsqueda de colores (CLUT) donde los datos de cada píxel apuntaban a una entrada en el CLUT, y el CLUT se configuró bajo el control del programa. Esto significaba que los datos de CLUT de la imagen tenían que almacenarse junto con los datos de imagen en bruto para poder volver a producir la imagen correctamente.

RGB
Las paletas de hardware basadas en colores de video componente como YPbPr o similares generalmente fueron reemplazadas a mediados de la década de 1980 por el modelo de color RGB más flexible, en el que se puede obtener un color determinado mezclando diferentes cantidades de los tres colores primarios rojo, verde y azul. Aunque la cantidad total de colores depende del número de niveles por primario y de una implementación de hardware determinada (un RGB de 9 bits proporciona 512 combinaciones, un RGB de 12 bits proporciona 4.096, etc.), en este modelo Digital- Los convertidores analógicos (DAC) pueden generar colores, lo que simplifica el diseño del hardware, mientras que el software puede tratar el número por niveles utilizados de forma abstracta y administrar los colores RGB de una manera independiente del dispositivo. Con los colores almacenados en formato RGB dentro de las paletas de los archivos de imágenes indexadas, cualquier imagen puede mostrarse (mediante las transformaciones apropiadas) en cualquier sistema de este tipo, independientemente de la profundidad de color utilizada en la implementación del hardware.

En la actualidad, los formatos de hardware y archivos de imágenes que se ocupan de imágenes en color indexado administran casi exclusivamente colores en formato RGB, la codificación estándar de facto es la llamada Truecolor o RGB de 24 bits, con 16.777.216 colores diferentes posibles. Sin embargo, las imágenes de color indexadas no están genuinamente restringidas a una codificación de color RGB de 24 bits; las paletas de imagen pueden contener cualquier tipo de codificación de color. Por ejemplo, el formato de archivo PDF admite color indexado en otros espacios de color, notablemente CMYK, y Adobe Distiller convertirá las imágenes por defecto a color indexado siempre que el número total de colores en una imagen sea igual o inferior a 256. Al usar RGB, los formatos de archivo TIFF y PNG pueden almacenar opcionalmente trillizos RGB con una precisión de 16 bits (65.536 niveles por componente) que rinde un total de 48 bits por píxel. Una extensión propuesta para el estándar TIFF permite paletas de colores no RGB, pero esto nunca se implementó en el software debido a razones técnicas. La tabla de mapas de color del modo de color indexado de formato de archivo BMP almacena sus entradas en orden BGR en lugar de RGB, y tiene (en la versión actual) un byte no utilizado adicional para que coincida con la alineación de palabras de 32 bits durante el procesamiento, pero es esencialmente aún una codificación de color RGB de 24 bits. (Una versión anterior del formato BMP utilizaba tres bytes por entrada de tabla de mapas de color de 24 bits, y muchos archivos en ese formato todavía están en circulación, por lo que muchos programas modernos que leen archivos BMP admiten ambas variaciones).

Arreglos de píxeles de bits
A excepción de los modos gráficos de muy baja resolución, las computadoras personales y domésticas raras veces implementaron un diseño «direccionable por todos los píxeles», es decir, la capacidad de cambiar un solo píxel a cualquiera de los colores disponibles de forma independiente. Sus limitaciones provienen de emplear áreas de color de atributo o de color separadas, lo que genera efectos de choque de atributos. Además, los bits de píxel y / o las líneas de escaneo de la memoria de video generalmente se organizaban de forma extraña para el hardware del generador de video (lo que ahorraba costos de hardware en un mercado competitivo), pero a veces creaba dificultades para las personas que escribían programas gráficos. . Los bits de un píxel en imágenes de color indexado, direccionables en todos los píxeles, no siempre son contiguos en la memoria de video o archivos de imagen (es decir, la organización gruesa no siempre se usa). Algunos hardware de video, como los modos gráficos de 16 colores de Enhanced El adaptador de gráficos (EGA) y Video Graphics Array (VGA) para IBM PC compatibles o el buffer de video Amiga están dispuestos como una serie de planos de bits (en una configuración llamada planar), en la que los bits relacionados de un solo píxel se dividen entre varios mapas de bits independientes Por lo tanto, los bits de píxel están conceptualmente alineados a lo largo del eje Z 3D. (El concepto de «profundidad» aquí no es el mismo que el de la profundidad de píxeles).

Los primeros formatos de archivo de imagen, como PIC, almacenaron poco más que un simple volcado de memoria del buffer de video de una máquina determinada.

Algunos formatos de archivos de imagen indexados como el Formato de Intercambio de Gráficos (GIF) permiten que las líneas de escaneo de la imagen se organicen en forma intercalada (no en orden lineal), lo que permite que aparezca una versión de baja resolución en la pantalla mientras se está descargando , para que el usuario de la computadora pueda tener una idea de su contenido durante los segundos antes de que llegue toda la imagen.

Como se ve aquí, la imagen se ha dividido en cuatro grupos de líneas: el grupo A contiene cada cuarta línea, el grupo B contiene las líneas inmediatamente siguientes en el grupo A, el grupo C también contiene las líneas inmediatamente siguientes en el grupo B y el grupo D contiene las líneas restantes, que se encuentran entre las líneas del grupo C (inmediatamente arriba) y las líneas del grupo A (inmediatamente debajo). Estos se almacenan en el archivo en el orden A, C, B, D, de modo que cuando se transmite el archivo, el segundo grupo recibido (C) se encuentra centrado entre las líneas del primer grupo, produciendo el más espacialmente uniforme y reconocible imagen posible, compuesta de solo dos de los grupos de líneas. La misma técnica se puede aplicar con más grupos (por ejemplo, ocho), en cuyo caso en cada paso, el siguiente grupo que se envía contiene líneas situadas en o cerca de los centros de las bandas restantes que aún no están llenos de datos de imagen. Este método, con cuatro u ocho grupos de líneas, se usó comúnmente en la primera parte de la World Wide Web durante la segunda mitad de los años noventa. En lugar de dejar el fondo (negro) como se muestra en la ilustración anterior, la imagen parcial a menudo se presentaba en la pantalla al duplicar cada línea para llenar el espacio debajo de ella hasta la siguiente línea de imagen recibida. El resultado final fue una imagen continua con una resolución vertical disminuida que aumentaría a una resolución completa en unos pocos segundos a medida que llegaban las partes posteriores de los datos de la imagen.

Ventajas
El color indexado ahorra mucha memoria, espacio de almacenamiento y tiempo de transmisión: con color verdadero, cada píxel necesita 24 bits o 3 bytes. Una imagen sin compresión Truecolor de 640 × 480 VGA típica necesita 640 × 480 × 3 = 921,600 bytes (900 KiB). Limitando los colores de la imagen a 256, cada píxel necesita solo 8 bits, o 1 byte cada uno, por lo que la imagen de ejemplo ahora solo necesita 640 × 480 × 1 = 307.200 bytes (300 KiB), más 256 × 3 = 768 bytes adicionales para almacenar el mapa de paleta en sí mismo (suponiendo RGB), aproximadamente un tercio del tamaño original. Las paletas más pequeñas (4 bits 16 colores, 2 bits 4 colores) pueden empacar los píxeles aún más (a una sexta o una doceava parte), obviamente a costa de la precisión del color.

El color indexado fue ampliamente utilizado en computadoras personales tempranas y hardware de adaptadores de pantalla para reducir costos (principalmente al requerir menos de los costosos chips RAM) pero también para administración de imágenes conveniente con CPUs de potencia limitada (del orden de 4 a 8 MHz) ), almacenamiento de archivos (cintas de cassette y disquetes de baja densidad). Entre los sistemas de gráficos por ordenador más importantes (o incluso exclusivos) que utilizan paletas de pseudocolor en la década de 1980 se incluyen CGA, EGA y VGA (para PC compatibles con IBM), Atari ST y Amiga’s OCS y AGA.

Los archivos de imagen intercambiados a través de la red Compuserve a principios de la década de 1990 fueron encapsulados en el formato GIF. Más tarde, las páginas web HTML usaron el GIF junto con otros formatos de archivo de color indexados como PNG, para intercambiar imágenes de color limitado rápidamente y almacenarlas en un espacio de almacenamiento limitado.

La mayoría de los formatos de archivos de imagen que admiten imágenes en color indexadas también suelen admitir algunos esquemas de compresión, mejorando su capacidad para almacenar las imágenes en archivos más pequeños.

Se pueden lograr fácilmente interesantes efectos coloreados y artísticos alterando la paleta de colores de las imágenes de color indexadas, por ejemplo, para producir imágenes de tono sepia coloreadas. Debido a la naturaleza separada del elemento asociado de la paleta de las imágenes de color indexadas, son ideales para reasignar imágenes en escala de grises en colores falsos mediante el uso de paletas de colores falsos.

La superposición de video simple se puede lograr fácilmente a través de la técnica de color transparente.

Al manipular los registros de hardware de color (tabla de búsqueda de colores o CLUT) del adaptador de pantalla en los modos de gráficos de colores indexados, se pueden lograr efectos de animación de color de pantalla completa sin redibujar la imagen, es decir, con un bajo costo de tiempo de CPU; un solo cambio de los valores de registro afecta a toda la pantalla a la vez. La animación del mapa de colores, también conocida como Color cycling, se usa ampliamente en la demostración. La pantalla de logotipo de arranque de Microsoft Windows en Windows 95, 98, ME y 2000 Professional (que usa el modo de visualización a color VGA 320x200x256 porque es el máximo común denominador en todas las PC) emplea esta técnica para la barra de gradiente de desplazamiento en la parte inferior de la pantalla ; la imagen es una imagen estática sin píxeles reescritos después de que se muestra inicialmente. Las imágenes personalizadas de la pantalla de inicio podrían tocar los colores ciclados para animar otras partes de las imágenes.

Desventajas
La principal desventaja de usar color indexado es el conjunto limitado de colores simultáneos por imagen. Las pequeñas paletas de 4 o 16 colores son todavía aceptables para imágenes pequeñas (iconos) o gráficos muy simples, pero para reproducir imágenes de la vida real se vuelven casi inútiles. Algunas técnicas, como la cuantización del color, el antialiasing y el difuminado combinados pueden crear imágenes indexadas de 256 colores comparables a la original hasta un nivel aceptable.

Las imágenes en color indexado dependen en gran medida de sus propias paletas de colores. Excepto por algunas paletas de colores fijos bien conocidas (como la del Color Graphics Adapter-CGA), las tablas de mapas de color y / o datos de imágenes en bruto no se pueden intercambiar de manera confiable entre diferentes archivos de imagen sin algún tipo de mapeo intermedio. Además, si se pierde la paleta de colores original de una imagen indexada dada, puede ser casi imposible restaurarla. Aquí hay un ejemplo de lo que sucede cuando una imagen de color indexada (el loro anterior) se ha asociado con una paleta de colores incorrecta:

Los modos gráficos en color indexados para adaptadores de pantalla tienen el límite de 16 o 256 colores impuesto por el hardware. Las imágenes en color indexadas con paletas ricas pero incompatibles solo se pueden mostrar con precisión de una en una, como en una presentación de diapositivas. Cuando es necesario mostrar varias imágenes juntas, como en un mosaico de miniaturas, a menudo se utiliza una paleta común o maestra, que abarca tantas tonalidades diferentes como sea posible en un solo conjunto, lo que limita la disponibilidad general del color exacto.

La siguiente imagen es un mosaico de cuatro imágenes de color indexadas diferentes con una sola paleta maestra compartida de 6-8-5 niveles RGB más 16 grises adicionales. Tenga en cuenta la gama limitada de colores utilizados para cada imagen, y cuántas entradas de paleta se dejan sin usar.

El Mosaico de muestra de color indexado no alcanza el límite de 24 bits para la paleta RGB completa. El VGA para PC compatibles de IBM, por ejemplo, solo proporciona una paleta RGB de 18 bits con 262.144 colores diferentes posibles en modos gráficos en color indexados en 16 y 256.
Algunos programas de edición de imágenes permiten aplicar la corrección gamma a una paleta para archivos de imágenes en color indexados. En general, aplicar una corrección gamma directamente al mapa de color es una mala práctica, debido a que se pierden los valores de color RGB originales. Es mejor aplicar la corrección gamma con el hardware de la pantalla (la mayoría de los adaptadores de pantalla modernos son compatibles con esta característica), o como un paso intermedio activo del software de renderizado a través de la gestión del color, que preserva los valores de color originales. Solo cuando las imágenes de color indexadas están destinadas a sistemas que carecen de cualquier tipo de calibración de color, y no están destinados a ser multiplataforma, la corrección de gamma se puede aplicar a la tabla de colores en sí.