En gráficos por computadora , la cuantificación de color o cuantificación de imágenes en color es la cuantificación aplicada a espacios de color ; es un proceso que reduce el número de colores distintos utilizados en una imagen , generalmente con la intención de que la nueva imagen sea lo más similar visualmente posible a la imagen original. Los algoritmos informáticos para realizar la cuantificación de color en mapas de bits se han estudiado desde la década de 1970. [1] La cuantificación de color es fundamental para mostrar imágenes con muchos colores en dispositivos que solo pueden mostrar un número limitado de colores, generalmente debido a limitaciones de memoria, y permite una compresión eficiente de ciertos tipos de imágenes.
El nombre "cuantificación de color" se utiliza principalmente en la literatura de investigación sobre gráficos por ordenador; en las aplicaciones, se utilizan términos como generación de paleta optimizada , generación de paleta óptima o profundidad de color decreciente . Algunos de estos términos son engañosos, ya que las paletas generadas por algoritmos estándar no son necesariamente las mejores posibles.
La mayoría de las técnicas estándar tratan la cuantificación del color como un problema de agrupamiento de puntos en un espacio tridimensional, donde los puntos representan los colores que se encuentran en la imagen original y los tres ejes representan los tres canales de color. Casi cualquier algoritmo de agrupamiento tridimensional se puede aplicar a la cuantificación del color, y viceversa. Una vez que se ubican los grupos, normalmente se promedian los puntos de cada grupo para obtener el color representativo al que se asignan todos los colores de ese grupo. Los tres canales de color suelen ser rojo, verde y azul , pero otra opción popular es el espacio de color Lab , en el que la distancia euclidiana es más coherente con la diferencia perceptual.
El algoritmo más popular con diferencia para la cuantificación del color, inventado por Paul Heckbert en 1979, es el algoritmo de corte de mediana . Se utilizan muchas variaciones de este esquema. Antes de esta época, la mayor parte de la cuantificación del color se realizaba utilizando el algoritmo de población o el método de población , que básicamente construye un histograma de rangos de igual tamaño y asigna colores a los rangos que contienen la mayor cantidad de puntos. Un método popular más moderno es la agrupación mediante octrees , concebido por primera vez por Gervautz y Purgathofer y mejorado por el investigador de Xerox PARC Dan Bloomberg.
Si la paleta es fija, como suele ser el caso en los sistemas de cuantificación de color en tiempo real como los que se utilizan en los sistemas operativos, la cuantificación de color se realiza normalmente utilizando el algoritmo de "distancia en línea recta" o "color más cercano", que simplemente toma cada color en la imagen original y encuentra la entrada de paleta más cercana, donde la distancia se determina por la distancia entre los dos puntos correspondientes en el espacio tridimensional. En otras palabras, si los colores son y , queremos minimizar la distancia euclidiana :
Esto descompone efectivamente el cubo de color en un diagrama de Voronoi , donde las entradas de la paleta son los puntos y una celda contiene todos los colores asignados a una única entrada de paleta. Existen algoritmos eficientes de geometría computacional para calcular diagramas de Voronoi y determinar en qué región se encuentra un punto determinado; en la práctica, las paletas indexadas son tan pequeñas que suelen ser excesivas.
La cuantificación de color se combina frecuentemente con el tramado , que puede eliminar artefactos desagradables como las bandas que aparecen al cuantificar gradientes suaves y dar la apariencia de una mayor cantidad de colores. Algunos esquemas modernos para la cuantificación de color intentan combinar la selección de paleta con el tramado en una etapa, en lugar de realizarlos de forma independiente.
Se han inventado otros métodos mucho menos utilizados que utilizan enfoques completamente diferentes. El algoritmo Local K-means, concebido por Oleg Verevka en 1995, está diseñado para su uso en sistemas de ventanas donde se fija un conjunto básico de "colores reservados" para su uso por parte del sistema y se pueden mostrar simultáneamente muchas imágenes con diferentes esquemas de color. Es un esquema de postagrupamiento que realiza una estimación inicial de la paleta y luego la refina iterativamente.
En los primeros días de la cuantificación del color, el algoritmo de agrupamiento k-means se consideró inadecuado debido a sus altos requisitos computacionales y sensibilidad a la inicialización. En 2011, M. Emre Celebi volvió a investigar el rendimiento de k-means como cuantificador de color. [2] Demostró que una implementación eficiente de k-means supera a una gran cantidad de métodos de cuantificación del color.
El algoritmo NeuQuant, de alta calidad pero lento, reduce las imágenes a 256 colores mediante el entrenamiento de una red neuronal de Kohonen "que se autoorganiza mediante el aprendizaje para adaptarse a la distribución de colores en una imagen de entrada. Al tomar la posición en el espacio RGB de cada neurona se obtiene un mapa de colores de alta calidad en el que los colores adyacentes son similares". [3] Es particularmente ventajoso para imágenes con gradientes.
Por último, uno de los métodos más nuevos es la cuantificación espacial del color , concebida por Puzicha, Held, Ketterer, Buhmann y Fellner de la Universidad de Bonn , que combina el tramado con la generación de paletas y un modelo simplificado de la percepción humana para producir resultados visualmente impresionantes incluso para cantidades muy pequeñas de colores. No trata la selección de paletas estrictamente como un problema de agrupamiento, ya que los colores de los píxeles cercanos en la imagen original también afectan al color de un píxel. Vea las imágenes de muestra.
En los primeros tiempos de las PC, era habitual que los adaptadores de vídeo admitieran solo 2, 4, 16 o (eventualmente) 256 colores debido a las limitaciones de la memoria de vídeo; preferían dedicar la memoria de vídeo a tener más píxeles (mayor resolución) en lugar de más colores. La cuantificación del color ayudó a justificar esta disyuntiva al hacer posible la visualización de muchas imágenes de alta definición en colores en modos de 16 y 256 colores con una degradación visual limitada. Muchos sistemas operativos realizan automáticamente la cuantificación y el tramado al visualizar imágenes de alta definición en colores en un modo de vídeo de 256 colores, lo que era importante cuando los dispositivos de vídeo limitados a 256 modos de color eran dominantes. Las computadoras modernas pueden mostrar ahora millones de colores a la vez, muchos más de los que puede distinguir el ojo humano, lo que limita esta aplicación principalmente a los dispositivos móviles y al hardware heredado.
En la actualidad, la cuantificación del color se utiliza principalmente en imágenes GIF y PNG . GIF, durante mucho tiempo el formato de mapa de bits animado y sin pérdida más popular en la World Wide Web , solo admite hasta 256 colores, lo que requiere cuantificación para muchas imágenes. Algunos de los primeros navegadores web restringían las imágenes para que usaran una paleta específica conocida como colores web , lo que provocaba una grave degradación de la calidad en comparación con las paletas optimizadas. Las imágenes PNG admiten colores de 24 bits, pero a menudo se pueden hacer mucho más pequeñas en tamaño de archivo sin mucha degradación visual mediante la aplicación de la cuantificación del color, ya que los archivos PNG usan menos bits por píxel para las imágenes paletizadas.
El número infinito de colores disponibles a través de la lente de una cámara es imposible de mostrar en una pantalla de computadora; por lo tanto, convertir cualquier fotografía a una representación digital implica necesariamente algún tipo de cuantificación. En términos prácticos, el color de 24 bits es lo suficientemente rico como para representar casi todos los colores perceptibles por los humanos con un error lo suficientemente pequeño como para ser visualmente idénticos (si se presentan fielmente), dentro del espacio de color disponible . [ cita requerida ] Sin embargo, la digitalización del color, ya sea en un detector de cámara o en una pantalla, limita necesariamente el espacio de color disponible. En consecuencia, hay muchos colores que pueden ser imposibles de reproducir, independientemente de cuántos bits se utilicen para representar el color. Por ejemplo, es imposible en los espacios de color RGB típicos (comunes en los monitores de computadora) reproducir la gama completa de colores verdes que el ojo humano es capaz de percibir.
Con los pocos colores disponibles en las primeras computadoras, los distintos algoritmos de cuantificación generaban imágenes de salida con un aspecto muy diferente. Como resultado, se dedicó mucho tiempo a escribir algoritmos sofisticados para que fueran más realistas.
Muchos formatos de archivos de imagen admiten colores indexados .
Una paleta de imagen completa normalmente selecciona 256 colores "representativos" para toda la imagen, donde cada píxel hace referencia a cualquiera de los colores de la paleta, como en los formatos de archivos GIF y PNG.
Una paleta de bloques normalmente selecciona 2 o 4 colores para cada bloque de 4x4 píxeles, utilizado en BTC , CCC , S2TC y S3TC .
Muchos editores de gráficos de mapa de bits incluyen compatibilidad integrada para cuantificación de color y la realizan automáticamente al convertir una imagen con muchos colores a un formato de imagen con menos colores. La mayoría de estas implementaciones permiten al usuario establecer exactamente la cantidad de colores deseados. Algunos ejemplos de dicha compatibilidad son:
La cuantificación del color también se utiliza para crear efectos de posterización , aunque la posterización tiene el objetivo ligeramente diferente de minimizar la cantidad de colores utilizados dentro del mismo espacio de color y normalmente utiliza una paleta fija.
Algunos editores de gráficos vectoriales también utilizan cuantificación de color, especialmente para técnicas de trama a vector que crean trazados de imágenes de mapa de bits con la ayuda de la detección de bordes .