stringtranslate.com

Color indexado

Una imagen en color indexada de 2 bits. El color de cada píxel se representa mediante un número; cada número (el índice ) corresponde a un color en la tabla de colores (la paleta ).

En informática, el color indexado es una técnica para gestionar los colores de las imágenes digitales de forma limitada, con el fin de ahorrar memoria de la computadora y almacenamiento de archivos , al mismo tiempo que 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 transporta directamente por los datos de píxeles de la imagen , sino que se almacena en una pieza de datos separada llamada tabla de búsqueda de color (CLUT) o paleta : una matriz de especificaciones de color. Cada elemento de la matriz representa un color, indexado por su posición dentro de la matriz. Cada píxel de la imagen no contiene la especificación completa de su color, sino solo su índice en la paleta . Esta técnica a veces se conoce como pseudocolor [1] o color indirecto [2] , ya que los colores se direccionan indirectamente.

Historia

Los primeros sistemas de visualización de gráficos que utilizaban colores indexados de 8 bits con búferes de cuadros y tablas de búsqueda de colores incluyen SuperPaint de Shoup (1973) y el búfer de cuadros de video descrito en 1975 por Kajiya, Sutherland y Cheadle. [3] [4] Estos admitían una paleta de 256 colores RGB. SuperPaint utilizaba un búfer de cuadros de registro de desplazamiento , mientras que el sistema de Kajiya et al. utilizaba un búfer de cuadros de acceso aleatorio .

Algunos sistemas anteriores utilizaban color de 3 bits, pero normalmente trataban los bits como bits independientes de encendido/apagado de rojo, verde y azul en lugar de tratarlos conjuntamente como un índice en un CLUT.

Tamaño de la paleta

La paleta en sí misma almacena un número limitado 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 ): 2 2  = 4, 2 4  = 16 y 2 8  = 256. Si bien se pueden ajustar 256 valores en un solo byte de 8 bits (y luego un solo 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 empaquetar juntos en un solo byte (dos nibbles por byte, si se emplean 16 colores, o cuatro píxeles de 2 bits por byte si se utilizan 4 colores). A veces, se pueden usar valores de 1 bit (2 colores) y luego se pueden empaquetar hasta ocho píxeles en un solo byte; Estas imágenes se consideran imágenes binarias (a veces denominadas imágenes de mapa de bits o de dos niveles ) y no imágenes de color indexadas.

Si se pretende realizar una superposición de vídeo sencilla mediante un color transparente , se reserva una entrada de paleta específicamente para este fin y se descarta como color disponible. Algunas máquinas, como la serie MSX , tenían el color transparente reservado por hardware. [5]

Las imágenes en color indexadas con tamaños de paleta superiores a 256 entradas son poco frecuentes. El límite práctico es de alrededor de 12 bits por píxel, 4096 índices diferentes. El uso de 16 bpp o más no ofrece los beneficios de la naturaleza de las imágenes en color indexadas, debido a que el tamaño de la paleta de colores en bytes es mayor que los datos de la imagen en bruto. Además, se pueden utilizar modos directos RGB Highcolor útiles a partir de 15 bpp .

Si una imagen tiene muchos matices de color sutiles, es necesario seleccionar un repertorio limitado de colores para aproximarse a la imagen mediante cuantificación de color . Dicha paleta es con frecuencia insuficiente para representar la imagen con precisión; las características difíciles de reproducir, como los gradientes, aparecerán en bloques o como tiras ( bandas de color ). En esos casos, es habitual emplear tramado , que mezcla píxeles de diferentes colores en patrones, explotando la tendencia de la visión humana a difuminar los píxeles cercanos, dando un resultado visualmente más cercano al original.

A continuación se muestra una imagen típica indexada de 256 colores y su propia paleta (mostrada como un rectángulo de muestras):

Colores y paletas

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

Técnicas de color tempranas

Muchos de los primeros ordenadores personales y domésticos 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 asignaba directamente a uno de estos colores. Algunos ejemplos bien conocidos son el Apple II , el Commodore 64 y el IBM PC CGA , todos ellos con hardware que podí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 a utilizar. Sin embargo, en la mayoría de los casos, el hardware de visualización admite modos adicionales en los que solo se puede utilizar un subconjunto de esos colores en una única imagen, una técnica útil para ahorrar memoria. Por ejemplo, el modo de resolución 320x200 del CGA podía mostrar solo cuatro de los 16 colores a la vez. Como las paletas eran completamente exclusivas, una imagen generada en una plataforma no se puede ver directamente de forma correcta en otra.

Otras máquinas de esta era tenían la capacidad de generar un conjunto más grande de colores, pero generalmente solo permitían que se usara un subconjunto de ellos en cualquier imagen. Algunos ejemplos incluyen la paleta de 256 colores en las máquinas Atari de 8 bits o los 4.096 colores del terminal VT241 en modo gráfico ReGIS . En estos casos era común que la imagen solo permitiera que se mostrara 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 a sus hermanos menos coloridos, pero una diferencia clave era que había demasiados colores en la paleta para codificarlos directamente en los datos de píxeles dada la cantidad limitada de memoria de video . En su lugar, usaban una tabla de búsqueda de colores (CLUT) donde los datos de cada píxel apuntaban a una entrada en la CLUT, y la CLUT se configuraba bajo el control del programa. Esto significaba que los datos CLUT de la imagen tenían que almacenarse junto con los datos de la imagen en bruto para poder reproducir la imagen correctamente.

RGB

Las paletas de hardware basadas en colores de vídeo componente como YPbPr o similares fueron generalmente 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 el número total de colores diferentes 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, y así sucesivamente), en este modelo los convertidores digital-analógicos (DAC) pueden generar los 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 gestionar los colores RGB de una manera independiente del dispositivo. Con colores almacenados en formato RGB dentro de las paletas de archivos de imagen indexados, cualquier imagen se puede mostrar (a través de transformaciones apropiadas) en cualquier sistema de este tipo, independientemente de la profundidad de color utilizada en la implementación del hardware.

En la actualidad, el hardware de visualización y los formatos de archivos de imagen que tratan con imágenes de color indexadas gestionan casi exclusivamente colores en formato RGB, siendo la codificación estándar de facto el denominado color verdadero o RGB de 24 bits , con 16.777.216 colores diferentes posibles . Sin embargo, las imágenes de color indexado no están realmente limitadas a una codificación de color RGB de 24 bits; las paletas de imágenes pueden contener cualquier tipo de codificación de color. Por ejemplo, el formato de archivo PDF admite color indexado en otros espacios de color, en particular CMYK , y Adobe Distiller convertirá de forma predeterminada las imágenes a color indexado siempre que el número total de colores de una imagen sea igual o inferior a 256. Al utilizar RGB, los formatos de archivo TIFF y PNG pueden almacenar opcionalmente los tripletes RGB con una precisión de 16 bits (65.536 niveles por componente), lo que produce un total de 48 bits por píxel. Una extensión propuesta al estándar TIFF permite [6] paletas de colores no RGB, pero esto nunca se implementó en el software debido a razones técnicas. La tabla de mapas de colores del modo de color indexado del formato de archivo BMP almacena sus entradas en orden BGR en lugar de RGB, y tiene (en la versión actual) un byte adicional sin usar para rellenar para cumplir con la alineación de palabras de 32 bits durante el procesamiento, pero esencialmente sigue siendo una codificación de color RGB de 24 bits. (Una versión anterior del formato BMP usaba tres bytes por cada entrada de la tabla de mapas de colores de 24 bits, y muchos archivos en ese formato aún están en circulación, por lo que muchos programas modernos que leen archivos BMP admiten ambas variaciones).

Disposición de bits de píxeles

A excepción de los modos gráficos de muy baja resolución, las primeras computadoras personales y domésticas rara vez implementaban un diseño de "direccionamiento de 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 provenían del uso de áreas de RAM de color o atributos de color independientes , lo que generaba efectos de conflicto de atributos . Además, los bits de píxeles y/o las líneas de escaneo de la memoria de video se organizaban comúnmente de formas extrañas que resultaban convenientes para el hardware del generador de video (lo que ahorraba costos de hardware en un mercado competitivo en cuanto a costos), pero que a veces creaban dificultades para quienes escribían programas gráficos. Los bits de un píxel en imágenes de color indexado y direccionables por píxeles no siempre son contiguos en la memoria de vídeo o en los archivos de imagen (es decir, no siempre se utiliza una organización por partes ). Algunos hardware de vídeo, como los modos gráficos de 16 colores del Enhanced Graphics Adapter (EGA) y Video Graphics Array (VGA) para IBM PC compatibles [7] o el búfer de vídeo de Amiga [8], están dispuestos como una serie de planos de bits (en una configuración denominada planar ), en la que los bits relacionados de un único píxel se dividen entre varios mapas de bits independientes . Por 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 profundidad de píxel ).

Los primeros formatos de archivos de imagen, como PIC , almacenaban poco más que un volcado de memoria del búfer de video de una máquina determinada.

Algunos formatos de archivos de imágenes con colores indexados, como el formato de intercambio de gráficos (GIF), permiten que las líneas de escaneo de la imagen se ordenen de forma intercalada (no en orden lineal), lo que permite que aparezca una versión de baja resolución de la imagen en la pantalla mientras aún se está descargando, de modo que el usuario de la computadora pueda hacerse una idea de su contenido durante los segundos previos a la llegada de la imagen completa. A continuación, se muestra un ejemplo de una descarga intercalada vertical típica en cuatro pasos:

Como se puede ver 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 posteriores a las del grupo A, el grupo C contiene asimismo las líneas inmediatamente posteriores a las del grupo B, y el grupo D contiene las líneas restantes, que se encuentran entre las líneas del grupo C (inmediatamente por encima) y las líneas del grupo A (inmediatamente por debajo). Estas se almacenan en el archivo en el orden A, C, B, D, de modo que cuando se transmite el archivo, el segundo grupo de líneas recibido (C) se encuentra centrado entre las líneas del primer grupo, lo que produce la imagen más uniforme y reconocible espacialmente posible, compuesta por sólo 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 va a enviar contiene líneas que se encuentran en o cerca de los centros de las bandas restantes que aún no están llenas con datos de imagen. Este método, con cuatro u ocho grupos de líneas, se utilizó comúnmente en la World Wide Web temprana durante la segunda mitad de la década de 1990. En lugar de dejar visible el fondo (negro) como en la ilustración anterior, la imagen parcial se presentaba a menudo en la pantalla duplicando cada línea para llenar el espacio debajo de ella hasta la siguiente línea de imagen recibida. El resultado final era una imagen continua con una resolución vertical reducida que aumentaba hasta la 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: utilizando truecolor , cada píxel necesita 24 bits o 3 bytes. Una imagen sin comprimir de color verdadero con una resolución VGA de 640×480 típica necesita 640×480×3 = 921.600 bytes (900 KiB). Si limitamos 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 necesita solo 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 que sea RGB), aproximadamente un tercio del tamaño original. Las paletas más pequeñas (16 colores de 4 bits, 4 colores de 2 bits) pueden compactar los píxeles aún más (hasta una sexta o una doceava parte), obviamente a costa de la precisión del color.

El color indexado se usó ampliamente en los primeros ordenadores personales y en el hardware de los adaptadores de pantalla para reducir costes (principalmente al requerir menos chips de RAM , entonces caros ), pero también para una gestión de imágenes cómoda con CPU de potencia limitada (del orden de 4 a 8 MHz ), almacenamiento de archivos ( cintas de casete y disquetes de baja densidad ). Entre los sistemas de gráficos por ordenador notables que utilizaron extensamente (o incluso exclusivamente) paletas de pseudocolores en la década de 1980 se incluyen CGA , EGA y VGA (para compatibles con IBM PC ), Atari ST y OCS y AGA de Amiga .

Los archivos de imagen intercambiados a través de la red CompuServe a principios de los años 90 se encapsularon en formato GIF . Más tarde, las páginas web HTML utilizaron el formato GIF junto con otros formatos de archivo que admitían colores indexados, como PNG , para intercambiar imágenes con colores limitados 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 algún esquema de compresión , lo que mejora su capacidad para almacenar las imágenes en archivos más pequeños.

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

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

Al manipular los registros de hardware de color ( tabla de consulta de color o CLUT) del adaptador de pantalla en los modos gráficos de color indexados, se pueden lograr efectos de animación de color de pantalla completa sin volver a dibujar 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 de mapa de color, también conocida como ciclo de color , se usa ampliamente en la escena de demostración . La pantalla del logotipo de arranque de Microsoft Windows en Windows 95, 98, ME y 2000 Professional (que usa el modo de visualización de color VGA 320x200x256 porque es el máximo común denominador en todas las PC) emplea esta técnica para la barra de degradado 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 de pantalla de arranque personalizadas podrían aprovechar los colores cíclicos para animar otras partes de las imágenes.

Desventajas

La principal desventaja de utilizar colores indexados es el conjunto limitado de colores simultáneos por imagen. Las paletas pequeñas de 4 o 16 colores aún son 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 cuantificación de color , el anti-aliasing y el dithering combinados pueden crear imágenes indexadas de 256 colores comparables al original hasta un nivel aceptable.

Las imágenes de color indexadas dependen en gran medida de sus propias paletas de colores. A excepción de unas pocas paletas de colores fijas conocidas (como la del adaptador de gráficos de color —CGA), los datos de imagen en bruto y/o las tablas de mapas de colores no se pueden intercambiar de forma fiable entre distintos archivos de imagen sin algún tipo de asignación intermedia. Además, si se pierde la paleta de colores original de una imagen indexada determinada, puede resultar casi imposible recuperarla. A continuación se muestra un ejemplo de lo que ocurre cuando una imagen de color indexada (el loro anterior) se ha asociado con una paleta de colores incorrecta:

Los modos gráficos de color indexado para adaptadores de pantalla tienen el límite de 16 o 256 colores impuesto por el hardware. Las imágenes de color indexado con paletas ricas pero incompatibles solo se pueden mostrar con precisión de a una por vez, 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 tantos tonos diferentes como sea posible en un solo conjunto, lo que limita la disponibilidad general de colores precisos.

La siguiente imagen es un mosaico de cuatro imágenes de colores indexados diferentes, renderizadas con una única paleta maestra compartida de 6-8-5 niveles RGB más 16 grises adicionales. Observe la gama limitada de colores utilizados para cada imagen y la cantidad de entradas de paleta que quedan sin usar.

Muchos dispositivos de visualización de color indexado no alcanzan el límite de 24 bits para la paleta RGB completa. La VGA para PC compatibles con IBM, por ejemplo, solo proporciona una paleta RGB de 18 bits con 262.144 colores diferentes posibles en los modos gráficos de 16 y 256 colores indexados.

Algunos programas de edición de imágenes permiten aplicar la corrección gamma a una paleta para archivos de imágenes de color indexado. 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 visualización (la mayoría de los adaptadores de pantalla modernos admiten esta función) o como un paso intermedio activo del software de renderizado a través de la gestión del color , que conserva los valores de color originales. Solo cuando las imágenes de color indexado están destinadas a sistemas que carecen de cualquier tipo de calibración de color , y no están destinadas a ser multiplataforma, se puede aplicar la corrección gamma a la propia tabla de colores.

Formatos de archivos de imagen que admiten colores indexados

Estos son algunos de los formatos de archivos de imagen más representativos que admiten modos de color indexados. Algunos de ellos admiten otros modos (por ejemplo, color verdadero), pero aquí solo se enumeran los modos de color indexados.

NOTA: la mayoría de los formatos también admitirán una tabla de colores con menos colores que el máximo que una profundidad de bits determinada puede ofrecer.
* Los modos de 64 (verdadero, no EHB), 128 y 256 colores solo están disponibles para el chipset AGA Amiga.
** Soporte nativo para esquemas de compresión propietarios.
*** RLE con saltos Delta propietarios opcionales.

Notas

  1. ^ Charles A. Poynton (2003). Vídeo digital y HDTV: algoritmos e interfaces. Morgan Kaufmann. ISBN 1-55860-792-7.
  2. ^ Gráficos por computadora, Prof. R. Eckert, Lect. #5, febrero de 2001, Binghamton U., NY
  3. ^ "Un buffer de fotogramas de vídeo de acceso aleatorio". Gráficos seminales: esfuerzos pioneros que dieron forma al campo. Vol. 1. Association for Computing Machinery. Julio de 1998. págs. 315–320. ISBN 9781581130522.
  4. ^ James Kajiya; Ivan Sutherland; Edward Cheadle (1975), "Un búfer de cuadros de vídeo de acceso aleatorio", Conferencia IEEE sobre gráficos de computadora, reconocimiento de patrones y estructuras de datos : 1–6
  5. ^ Hoja de datos en línea del chip de video Texas Instruments TMS9918 utilizado en el MSX.
  6. ^ "Especificación del formato de archivo de imagen TIFF" (PDF) . Archivado desde el original (PDF) el 17 de octubre de 2006. Consultado el 16 de octubre de 2006 .
  7. ^ Richard Wilton, Guía del programador para sistemas de vídeo de PC y PS/2, 1987, Microsoft Press. ISBN 1-55615-103-9 
  8. ^ Inc. Commodore-Amiga, Manual de referencia de hardware de Amiga, 1991, Addison-Wesley. ISBN 0-201-56776-8 

Véase también

Referencias

Enlaces externos