Color Cell Compression es un algoritmo de compresión de imágenes con pérdida desarrollado por Campbell et al., [ 1 ] [ 2 ] [ 3 ] en 1986, que puede considerarse un precursor temprano de los algoritmos modernos de compresión de texturas, como S3 Texture Compression y Adaptive Scalable Texture Compression . Está estrechamente relacionado con Block Truncation Coding , [ 4 ] otro algoritmo de compresión de imágenes con pérdida, que precede a Color Cell Compression, en que utiliza la luminancia dominante de un bloque de píxeles para dividir dichos píxeles en dos colores representativos. La principal diferencia entre Block Truncation Coding y Color Cell Compression es que el primero fue diseñado para comprimir imágenes en escala de grises y el segundo para comprimir imágenes en color. Además, Block Truncation Coding requiere que se calcule la desviación estándar de los colores de los píxeles en un bloque para comprimir una imagen, mientras que Color Cell Compression no utiliza la desviación estándar. Sin embargo, ambos algoritmos pueden comprimir una imagen hasta alcanzar efectivamente 2 bits por píxel.




Algoritmo
Compresión
El algoritmo de compresión de celdas de color procesa una imagen en ocho pasos, aunque uno de ellos (el paso n.° 6) es opcional. Aquí se asume que la entrada es una imagen de 24 bits/píxel, tal como se indica en el artículo original, si bien podrían utilizarse otras profundidades de bits .
- Para cada triplete de octetos RGB de 8 bits contenido en cada valor de color de 24 bits en la imagen de entrada, la luminancia NTSCse calcula utilizando la siguiente fórmula: [ 1 ] [ 2 ] [ 3 ]
- La imagen ahora se subdivide en bloques de 4 píxeles por 4 píxeles, y se utiliza la media aritmética de la luminancia de cada píxel en el bloque para seleccionar un valor de luminancia representativo. [ 1 ] [ 2 ] [ 3 ]
- Cada bloque de píxeles se divide en dos grupos. Un grupo está formado por los píxeles del bloque actual cuya luminancia es mayor o igual a la luminancia representativa del bloque. El segundo grupo está formado por los píxeles del bloque actual cuya luminancia es menor que la luminancia representativa del bloque. La pertenencia de un píxel del bloque actual a un grupo determinado se determina mediante un valor binario "0" o "1" en otro mapa de bits independiente de 16 entradas . [ 1 ] [ 2 ] [ 3 ]
- Ahora se seleccionan dos colores representativos de 24 bits para cada bloque de píxeles calculando dos medias aritméticas. La primera media aritmética es la media aritmética de todos los píxeles que pertenecen al primer grupo de píxeles donde la luminancia de cada píxel es un "1" en el mapa de bits de luminancia. El segundo color representativo de 24 bits se selecciona de manera similar, tomando la media aritmética de todos los píxeles de color de 24 bits en el segundo grupo donde cada píxel corresponde a un "0" en el mapa de bits de luminancia. [ 1 ] [ 2 ] [ 3 ]
- El mapa de bits de luminancia se almacena en una ubicación temporal y luego se agregan al mapa de bits los dos colores representativos de 24 bits para el bloque actual. En esta etapa, la imagen se ha comprimido en un mapa de bits de 16 entradas con dos valores binarios de 24 bits agregados. El tamaño total del bloque comprimido es ahora de 16 bits para el mapa de bits de luminancia y dos cantidades binarias de 24 bits para cada color representativo, lo que da como resultado un tamaño total de 64 bits, que, cuando se divide por 16 (el número de píxeles en el bloque), da como resultado 4, es decir, 4 bits por píxel. [ 1 ] [ 2 ] [ 3 ]
- Cada bloque comprimido de píxeles se modifica truncando cada uno de los dos colores representativos de 24 bits a 15 bits. Este paso es opcional, y el algoritmo puede terminar en este punto, si se desea, ya que los bloques comprimidos en esta etapa tienen un tamaño total debits, que, al dividirse por 16, dan como resultado 2,875 bits por píxel. Si se realiza este paso, los valores de color truncados de 15 bits se pueden usar en el siguiente paso para crear un histograma más pequeño . Además, dado que cada vector de color binario de 15 bits se almacena presumiblemente en una palabra de 16 bits, el bit 16 se puede usar para mejorar la calidad de la imagen especificando cuál de las dos tablas de búsqueda se debe usar. [ 1 ] [ 2 ] [ 3 ]
- Se crea un histograma de todos los colores de 24 bits en la imagen original de 24 bits, o en los vectores de color truncados de 15 bits. En una implementación simple, se consulta el histograma para elegir 256 de los colores más utilizados, que luego se colocan en una matriz de 256 entradas, donde cada entrada consta de tres octetos de un valor de color de 24 bits por píxel. El método del histograma para seleccionar los colores más apropiados para la imagen original de 24 bits por píxel puede reemplazarse por un algoritmo de cuantización vectorial, como el algoritmo de corte de mediana o el agrupamiento K-means, que generalmente produce mejores resultados. [ 1 ] [ 2 ] [ 3 ]
- El paso final consiste en tomar el bloque actual de píxeles y determinar qué color de 24 bits por píxel en la tabla de búsqueda de 256 entradas coincide más estrechamente con los dos colores representativos para cada bloque. Los dos índices de 8 bits que apuntan a los colores en la tabla de búsqueda se agregan ahora al mapa de bits de luminancia de 16 bits. Esto produce un tamaño total comprimido debits, que, al dividirse por 16, dan como resultado 2 bits por píxel. [ 1 ] [ 2 ] [ 3 ]
Descompresión
La descompresión es muy sencilla y directa. Para reconstruir cada bloque comprimido de 4 píxeles x 4 píxeles, se consulta el mapa de bits de luminancia de 16 bits para cada bloque. Dependiendo de si un elemento del mapa de bits es 1 o 0, se selecciona uno de los dos índices de 8 bits en la tabla de búsqueda, se desreferencia y se recupera el valor de color correspondiente de 24 bits por píxel. [ 1 ] [ 2 ] [ 3 ]
Rendimiento y calidad de imagen
A pesar de su mecanismo muy simple, el algoritmo ofrece resultados sorprendentemente buenos en imágenes fotográficas, [ 1 ] [ 2 ] [ 3 ] y tiene la ventaja de ser muy rápido de decodificar con hardware limitado. Aunque ha sido superado con creces en relación de compresión por métodos de codificación de transformación de bloques posteriores como JPEG , tiene la ventaja de una descompresión muy simple y un acceso aleatorio rápido a la imagen comprimida.
Variantes y métodos relacionados
Apple Video (RPZA) y S3 Texture Compression emplean el mismo principio de codificación de bloques de 4x4 píxeles basados en dos colores representativos. Refinan la compresión de color (CCC) expandiendo cada entrada del mapa de bits de luminancia a dos bits, donde los dos valores adicionales representan un promedio ponderado: un tercio de un color y dos tercios del otro. Para sortear la patente de S3, se creó la biblioteca Super Simple Texture Compression ( S2TC ) para codificar datos CCC en un formato compatible con los decodificadores S3TC y reinterpretar S3TC como CCC con una mínima pérdida de calidad.
En SGI Vizserver, una variante práctica de color directo codificaba cada bloque de 4 × 4 como una máscara de 16 bits más dos colores RGB565 cuantificados de 16 bits (5 bits de rojo, 6 bits de verde, 5 bits de azul), para 48 bits por bloque o 3 bits por píxel, equivalente a una relación de compresión fija de 8:1 a partir de una entrada RGB de 24 bits. [ 5 ] Vizserver utilizaba esto junto con la compresión de celdas de color interpoladas para la visualización remota, con tasas de compresión que iban de 8:1 a 4:1. [ 6 ]
Véase también
Referencias
- 1 2 3 4 5 6 7 8 9 10 11 Campbell, G.; Defanti, TA; Frederiksen, J.; Joyce, SA; Leske, LA (1986). "Codificación de color completo de dos bits/píxel". Actas de la 13.ª conferencia anual sobre gráficos por computadora y técnicas interactivas - SIGGRAPH '86 . pág. 215. doi : 10.1145/15922.15910 . ISBN 978-0-89791-196-2. S2CID 18392630 .
- 1 2 3 4 5 6 7 8 9 10 11 Pins, Markus (1991). "Extensiones del algoritmo de compresión de celdas de color". Computer Animation '91 . págs. 241–251 . doi : 10.1007/978-4-431-66890-9_17 . ISBN 978-4-431-66892-3.
- 1 2 3 4 5 6 7 8 9 10 11 Lamparter, Bernd Effelsberg, Wolfgang (junio de 2005). "Compresión de celdas de color extendida: un esquema de compresión eficiente en tiempo de ejecución para vídeo por software". Multimedia: Teleservicios avanzados y arquitecturas de comunicación de alta velocidad . Notas de clase en informática. Vol. 868. págs. 181–190 . doi : 10.1007/3-540-58494-3_16 . ISBN 978-3-540-58494-0.
{{cite book}}: CS1 maint: varios nombres: lista de autores ( enlace ) - ↑ Wennersten, P.; Ström, J. (2009). "Compresión alfa basada en tablas" (PDF) . Computer Graphics Forum . 28 (2): 687. doi : 10.1111/j.1467-8659.2009.01409.x . S2CID 7743813 .
- ↑ Fowler, J.; Ward, MO; Ebert, DS (marzo de 2000). Evaluación de SGI Vizserver (PDF) (Informe). Universidad Estatal de Mississippi, Centro de Investigación de Ingeniería.
- ↑ Humphreys, G.; Houston, M.; Ng, R.; Frank, R.; Ahern, S.; Kirchner, PD; Klosowski, JT Un servidor de visualización remota paralela para clústeres (PDF) (Informe). Laboratorio de Gráficos de la Universidad de Stanford.
- Algoritmos de compresión con pérdida
