Codificación Golomb


La codificación Golomb es un método de compresión de datos sin pérdidas que utiliza una familia de códigos de compresión de datos inventados por Solomon W. Golomb en la década de 1960. Los alfabetos que siguen una distribución geométrica tendrán un código de Golomb como código de prefijo óptimo , [1] lo que hace que la codificación de Golomb sea muy adecuada para situaciones en las que la ocurrencia de valores pequeños en el flujo de entrada es significativamente más probable que los valores grandes.

La codificación de Rice (inventada por Robert F. Rice ) denota el uso de un subconjunto de la familia de códigos de Golomb para producir un código de prefijo más simple (pero posiblemente subóptimo). Rice utilizó este conjunto de códigos en un esquema de codificación adaptativa ; La "codificación de Rice" puede referirse a ese esquema adaptativo o al uso de ese subconjunto de códigos de Golomb. Mientras que un código Golomb tiene un parámetro ajustable que puede ser cualquier valor entero positivo, los códigos Rice son aquellos en los que el parámetro ajustable es una potencia de dos. Esto hace que los códigos de Rice sean convenientes para su uso en una computadora, ya que la multiplicación y la división por 2 se pueden implementar de manera más eficiente en aritmética binaria .

Rice se sintió motivado a proponer este subconjunto más simple debido al hecho de que las distribuciones geométricas a menudo varían con el tiempo, no se conocen con precisión, o ambos, por lo que seleccionar el código aparentemente óptimo podría no ser muy ventajoso.

La codificación Rice se utiliza como etapa de codificación de entropía en varios métodos de compresión de imágenes sin pérdida y de datos de audio .

La codificación de Golomb usa un parámetro ajustable M para dividir un valor de entrada x en dos partes: q , el resultado de una división por M , y r , el resto. El cociente se envía en codificación unaria , seguido del resto en codificación binaria truncada . Cuando , la codificación de Golomb es equivalente a la codificación unaria.

Los códigos de Golomb-Rice se pueden considerar como códigos que indican un número por la posición del contenedor ( q ) y el desplazamiento dentro del contenedor ( r ). La figura de ejemplo muestra la posición qy el desplazamiento r para la codificación del entero x usando el parámetro de Golomb-Rice M = 3 , con probabilidades de origen siguiendo una distribución geométrica con p (0) = 0.2 .


Ejemplo de codificación de Golomb para una fuente x con distribución geométrica, con parámetro p (0) = 0.2 , usando código de Golomb con M = 3 . El código de 2 bits 00 se utiliza el 20% del tiempo; los códigos de 3 bits 010, 011 y 100 se utilizan más del 38% del tiempo; Se necesitan 4 bits o más en una minoría de casos. Para esta fuente, entropía = 3.610 bits; para este código con esta fuente, tasa = 3.639 bits; por lo tanto, redundancia = 0,030 bits o eficiencia = 0,992 bits por bit.
Esta imagen muestra la redundancia, en bits, del código Golomb, cuando M se elige de manera óptima, para 1 - p (0) ≥ 0.45
Relaciones de compresión del experimento del algoritmo de Rice codificado por Golomb