Documentos de Académico
Documentos de Profesional
Documentos de Cultura
04 Codificacion Aritmetica
04 Codificacion Aritmetica
Rafael Molina y Javier Mateos Depto Ciencias de la Computacin e Inteligencia Artificial Universidad de Granada
Rafael Molina Javier Mateos Tema 4: Codificacin Aritmtica 1
Contenidos
Objetivos del tema Introduccin Codificacin de una secuencia por el cdigo aritmtico Generacin de la etiqueta Descifrado de la etiqueta Generacin del cdigo binario para el cdigo aritmtico Unicidad y eficiencia del cdigo aritmtico Comparacin del cdigo de Huffman y el cdigo aritmtico Aplicaciones El estndar JBIG Codificando imgenes no binarias Resumen Bibliografa
Rafael Molina Javier Mateos Tema 4: Codificacin Aritmtica 2
IV.2 Introduccin.
El cdigo de Huffman garantiza una razn de compresin R que como mucho es superior en 1 bit a la entropa. Puede probarse tambin que otra cota alternativa es pmax+0.086 donde pmax es la probabilidad del smbolo que ocurre con mayor probabilidad. Si el valor de pmax es pequeo, la diferencia entre la codificacin Huffman y entropa es pequea, sin embargo para distribuciones muy descompensadas (sesgadas o skew) pmax puede ser bastante grande y el algoritmo de Huffman se hace bastante ineficiente. Podemos agrupar los smbolos de forma que la distribucin no sea tan descompensada, pero esto no siempre funciona como veremos ahora con un ejemplo.
Rafael Molina Javier Mateos Tema 4: Codificacin Aritmtica 4
Ejemplo IV.2.1 Consideremos una fuente S con el alfabeto A={a1,a2,a3} con las siguiente probabilidades Se cumple P(a1)=0.95, P(a2)=0.02 y P(a3)=0.03 H(S)=0.335 bits/smbolo.
que tiene una longitud media de 1.05 bits/smbolo. Este valor es 3.13 veces la entropa
Rafael Molina Javier Mateos Tema 4: Codificacin Aritmtica 5
los en la de
Letra a1a1 a1a2 a1a3 a2a1 a2a2 a2a3 a3a1 a3a2 a3a3
Probabilidad 0.9025 0.0190 0.0285 0.0190 0.004 0.0006 0.0285 0.0006 0.0009
Su longitud media es 1.222 bits/smbolo (para cada dos smbolos) que por smbolo significa 0.611 que en comparacin con la entropa es 1.82 veces la entropa
La redundancia bajara a valores razonables si ussemos 8 smbolos juntos, pero esto corresponde a 6561 valores a codificar, lo que requiere mucha memoria. Es ms eficiente generar palabras de cdigo por grupos o secuencias de smbolos conforme stos van apareciendo. En la codificacin aritmtica, que ahora veremos, le asignaremos una etiqueta a la secuencia completa que queremos codificar, esta etiqueta ser una fraccin de la unidad. Generaremos un cdigo aritmtico para una secuencia de longitud m sin que tengamos que generar cdigo para todas las posibles secuencias de longitud m.
Rafael Molina Javier Mateos Tema 4: Codificacin Aritmtica 7
La historia del descubrimiento la codificacin aritmtica y la resolucin del problema de la precisin finita de las representaciones en un ordenador es muy interesante. Ver el libro de Sayood (pginas 79-80). Antes de comenzar el desarrollo de la codificacin aritmtica veamos alguna notacin. Comenzamos asignando un nmero a cada posible miembro del alfabeto. Es decir, si A={a1,,am} asignamos Ai i De forma que P(ai)=P(i) y tenemos la funcin de distribucin
FX (i ) = P ( X = k )
k =1
Recordemos que FX(0)=0 y FX(m)=1 Tenemos, por tanto, una particin del intervalo unidad en intervalos disjuntos.
Rafael Molina Javier Mateos Tema 4: Codificacin Aritmtica 10
Supongamos que la secuencia que vamos a codificar comienza por el smbolo ak, entonces la etiqueta que generaremos para la secuencia estar en el intervalo [ FX(k-1), FX(k) ). Dividimos ahora este subintervalo en las mismas proporciones que el intervalo unidad [llevamos el intervalo [0,1) al intervalo [ FX(k-1), FX(k) ) y seguimos dividiendo este intervalo manteniendo las proporciones de F en el intervalo [0,1)
Ejemplo P(a1)=0.5, P(a2)=0.25, P(a3)=0.25 0 Observamos a1 Observamos despus a2
Rafael Molina Javier Mateos Tema 4: Codificacin Aritmtica 11
0.5
0.75
Qu tipo de transformacin estamos realizando sobre el intervalo [0,1)? Para llevar el intervalo [0,1) al intervalo [FX(k-1), FX(k)). La transformacin para x [0,1) es f(x)=(FX(k)-FX(k-1))x + FX(k-1) Si el segundo smbolo observado es aj entonces la codificacin de akaj estar en el intervalo
Ejemplo 4.3.1: Supongamos que el alfabeto viene dado por A={a1,a2,a3} con probabilidades P(a1)=0.7, P(a2)=0.1, P(a3)=0.2 y por tanto con funcin de distribucin F(1)=0.7, F(2)=0.8, F(3)=1 Supongamos que queremos codificar la secuencia a1a2a3 Para codificar a1 sabemos que la etiqueta debe estar en el intervalo [0,0.7)
EN OTRAS PALABRAS, PASAMOS DEL INTERVALO [0,1) AL [0,0.7)
Rafael Molina Javier Mateos Tema 4: Codificacin Aritmtica 13
Para codificar a1a2 sabemos que la etiqueta debe estar en [(0.7-0.0)x0.7+0, (0.7-0.0)*0.8+0) es decir en [0.49,0.56)
EN OTRAS PALABRAS, PASAMOS DEL INTERVALO [0.7, 0.8) DENTRO DEL INTERVALO [0,1) AL SUBINTERVALO DE [0,0.7) DADO POR [(0.7-0.0)x0.7+0, (0.7-0.0)*0.8+0)
Por ltimo para codificar la secuencia a1a2a3 sabemos que la etiqueta debe estar en: [(0.56-0.49)x0.8+0.49, (0.56-0.49)x1+0.49) es decir en [0.546, 0.56)
EN OTRAS PALABRAS, PASAMOS DEL INTERVALO [0.8, 1) DENTRO DEL INTERVALO [0,1) AL SUBINTERVALO DE [0.49,0.56) DADO POR [(0.56-0.49)x0.8+0.49, (0.56-0.49)x1+0.49)
Rafael Molina Javier Mateos Tema 4: Codificacin Aritmtica 14
Como hemos visto, el intervalo I en el que reside la etiqueta de cada secuencia de un tamao dado es disjunto con los intervalos en los que residiran las etiquetas de cualquier secuencia del mismo tamao. Cualquier miembro del intervalo I puede, por tanto, usarse como etiqueta: podemos usar, por ejemplo, el lmite inferior o el punto medio. De momento usaremos el punto medio. Buscaremos ahora una frmula que nos permita calcular la etiqueta de una secuencia. Consideremos una fuente con alfabeto A={a1,a2,,am}. Cul sera la etiqueta de una secuencia de un nico smbolo?
1 1 TX (ai ) = P ( X = k ) + P ( X = i ) = FX (i 1) + P ( X = i ) 2 2 k =1
Tema 4: Codificacin Aritmtica
i 1
15
Ejemplo 4.3.2: Consideremos el lanzamiento de un dado equilibrado. El alfabeto es A={1,2,,6} P(i)=1/6 La etiqueta para el 2 sera TX(2)=P(X=1)+(1/2)P(X=2)=0.25 La del 5 cinco sera TX(5)=[P(X=1)+P(X=2)+P(X=3)+ P(X=4)]+(1/2)P(X=5)=0.75 La tabla siguiente muestra la etiqueta del resto de smbolos
Rafael Molina Javier Mateos Tema 4: Codificacin Aritmtica
i=1, 2, , 6
Resultado 1 3 4 6
16
Como hemos visto en el ejemplo anterior, la codificacin para secuencias de tamao uno es fcil. Para secuencias xi de mayor longitud (m) tenemos que ordenar las secuencias de longitud m y asignar a la secuencia xi la etiqueta
(1)
donde y<x significa que y precede a x en la ordenacin que utilicemos y m denota el tamao de la secuencia. Usaremos en lo que sigue como orden el orden lexicogrfico.
Rafael Molina Javier Mateos Tema 4: Codificacin Aritmtica 17
Ejemplo 4.3.3: Consideremos ahora el caso del lanzamiento dos veces de un dado equilibrado. Utilizando la ecuacin (1) en la transparencia anterior para generar la etiqueta del 13 tendramos que considerar los sucesos: 11, 12, 13 y la etiqueta de esta secuencia sera: TX(13)=P(y=11)+P(y=12)+(1/2)P(y=13) =1/36+1/36+(1/2)(1/36)=5/72 Observa que para generar, por ejemplo, la etiqueta del 56 necesitamos recorrer muchos ms pares de smbolos
Rafael Molina Javier Mateos Tema 4: Codificacin Aritmtica 18
1. Observemos que no hemos tenido que generar la etiqueta de todos los posibles mensajes de longitud dos. 2. Desgraciadamente, parece que al menos hemos de generar todos los mensajes de longitud dos que son menores que el que queremos codificar. 3. Veamos que no es necesario y que los lmites inferior y superior de la etiqueta pueden ser calculados recursivamente.
19
Ejemplo 4.3.4: Consideremos de nuevo el dado y supongamos que queremos codificar la secuencia 322. Vamos a notar s(n) e i(n) los lmites superior e inferior del intervalo donde se encuentra la etiqueta con s(0)=1 e i(0)=0. Es obvio que para el 3 los lmite son s(1)=(s(0)-i(0))FX(3)+i(0)=FX(3) e i(1)=(s(0)-i(0))FX(2)+i(0)=FX(2) para codificar ahora el 2 en este intervalo tenemos s(2)=i(1)+(s(1)-i(1))FX(2) e i(2)= i(1)+(s(1)-i(1))FX(1) y en este nuevo intervalo la codificacin del 2 ser en s(3)=i(2)+(s(2)-i(2))FX(2) e i(3)=i(2)+(s(2)-i(2))FX(1)
Rafael Molina Javier Mateos Tema 4: Codificacin Aritmtica 20
En general, si queremos codificar la secuencia x=(x1,x2,,xn), partiremos de s(0)=1 e i(0)=0 y generaremos el intervalo donde se encuentra la etiqueta k utilizando s(k)=i(k-1)+(s(k-1)-i(k-1))FX(xk-1) e i(k)=i(k-1)+(s(k-1)-i(k-1))FX(xk)
aumentando k hasta llegar a k=n Finalmente utilizaremos como etiqueta de la secuencia TX(x)=(i(n)+s(n))/2
Rafael Molina Javier Mateos
Ejemplo 4.3.5: Consideremos el alfabeto con probabilidades P(1)=0.8, P(2)=0.02, P(3)=0.18 y codifiquemos la secuencia 1321. Tenemos FX(0)=0, FX(1)=0.8, FX(2)=0.82, FX(3)=1 s(0)=1, i(0)=0 s(1)=0.8, i(1)=0 s(2)=i(1)+(s(1)-i(1))FX(3)=0.8, i(2)= i(1)+(s(1)-i(1))FX(2)=0.656 s(3)=i(2)+(s(2)-i(2))FX(2)=0.77408, i(3)=i(2)+(s(2)-i(2))FX(1)=0.7712 i(4)=i(3)+(s(3)-i(3))FX(0)= 0.7712, s(4)=i(3)+(s(3)-i(3))FX(1)= 0.773504 TX(1321)=(0.773504+0.77129)/2=0.772352
Rafael Molina Javier Mateos Tema 4: Codificacin Aritmtica 22
Sea T [0,1). Inicializamos s(0)=1 e i(0)=0. Para cada k=1,2.. (hasta que toda la secuencia haya sido procesada) encuentra t*=(T-i(k-1))/(s(k-1)-i(k-1)) encuentra el ndice xk que cumple FX(xk-1)t*<FX(xk) recalcula s(k) e i(k) usando i(k)=i(k-1)+(s(k-1)-i(k-1))FX(xk-1) s(k)=i(k-1)+(s(k-1)-i(k-1)) FX(xk)
Observa que en los pasos 2.1 y 2.2 lo que hacemos es buscar el valor xk tal que i(k-1)+(s(k-1)-i(k-1))FX(xk-1) etiqueta< i(k-1)+(s(k-1)-i(k-1)) FX(xk)
Ejemplo 4.3.6: descifrado de una etiqueta. Se propone como ejemplo considerar el modelo del ejemplo 4.3.5 y decodificar el valor de la etiqueta T=0.772352.
24
25
Ejemplo 4.4.1: Consideremos una fuente con un alfabeto de tamao cuatro A={a1,a2,a3,a4}. Con las siguientes probabilidades P(a1)=1/2, P(a2)=1/4, P(a3)=1/8, P(a4)=1/8 Veamos en la tabla siguiente cual sera el cdigo binario segn el modelo anterior Smbolo 1 2 3 4
Rafael Molina Javier Mateos
FX 0.5 0.75
TX 0.25 0.625
1 log P( ) + 1
bits
2 3 4 4
la desigualdad de la derecha es cierta. Para probar la desigualdad de la izquierda observemos primero que 1 1 1 1 P(x) (*) = = = ,
l(x)
1 log +1 P(x)
28
adems,
P ( x) , 2 1
2 l (x)
FX (x 1)
TX (x)
FX (x).
(probarlo)
1 2l( x )
< TX ( x) l ( x )
TX (x) l ( x ) > FX (x 1)
Rafael Molina Javier Mateos Tema 4: Codificacin Aritmtica 29
Nos preguntamos ahora cmo de eficiente es el cdigo que hemos generado?. Supongamos que estamos codificando secuencias de longitud m. La longitud media del cdigo aritmtico sera
lAm
30
y por tanto
H ( X m ) l Am H ( X m ) + 2
de donde, para cada smbolo tenemos
H ( X ) lA H ( X ) + 2 / m
As pues, aumentando la longitud de la secuencia nos garantizamos una codificacin tan prxima a la entropa como queramos.
31
Si codificsemos de dos en dos los smbolos la longitud medida del mensaje usando codificacin aritmtica sera 4.5 bits, que lleva a 2.25 bits/smbolo. Recuerda, sin embargo, que la codificacin aritmtica no est pensada para este tipo de distribuciones Sabemos que para el cdigo aritmtico se cumple
H ( X ) lA H ( X ) + 2 / m
Y para el cdigo de Huffman tenemos
H ( X ) lH H ( X ) + 1 / m
As que en principio parece mejor la codificacin Huffman. Sin embargo, recuerda que para el cdigo de Huffman hemos de construir el rbol para todos los posibles km valores (supuesto k el nmero de trminos del alfabeto), algo poco prctico.
Rafael Molina Javier Mateos Tema 4: Codificacin Aritmtica 33
Recuerda que el cdigo de Huffman ser imbatible si las probabilidades son potencias de . La ganancia depende tambin de la fuente. Sabemos que otra cota superior para el cdigo de Huffman es 0.086+pmax, donde pmax es la probabilidad mxima del alfabeto. Si el alfabeto es grande y las probabilidades no estn muy descompensadas la codificacin aritmtica no es muy ventajosa sobre la codificacin Huffman. Pensemos, sin embargo en la codificacin de un fax. Otra ventaja del cdigo aritmtico es la posibilidad de implementar simultneamente varios cdigos aritmticos (slo necesitamos tener varias tablas de probabilidades). Por ltimo, en la codificacin aritmtica podemos cambiar ms fcilmente las probabilidades conforme se va modificando la entrada.
Rafael Molina Javier Mateos Tema 4: Codificacin Aritmtica 34
IV.6 Aplicaciones
En esta seccin analizaremos el estndar JBIG para codificacin de imgenes binarias. Tambin se analizar su extensin a imgenes que no sean binarias y se comparar JBIG con otros mtodos de compresin.
35
El estndar JBIG
Joint Bi-level Image expert Group. Codificacin para imgenes binarias. Grficos e imgenes usando medios tonos (half-tones).
36
25 ppp
50 ppp
100 ppp
200 ppp
Capa base Cada capa se divide en franjas (stripes). Por defecto, 35 franjas en una hoja. Para sistemas con poca memoria.
Rafael Molina Javier Mateos Tema 4: Codificacin Aritmtica
franja
38
Id-1
Id-2
I0
C0 Cd-1 Cd
La resolucin se reduce por 2 en cada capa C0 Cdigo para la capa base. Sirve para reconstruir I0 Id se reconstruye a partir de Id1 y Cd
Usar ms pxeles y ponderarlos: y = 4h+2(e+g+i+k)+(d+f+j+l)-3(B+C)-A= = 4h+2(i+k)+l+(d-A)+2(g-C)+(j-C)+2(e-B)+(f-B) Si (y > 4.5) entonces negro (1) si no blanco (0)
Rafael Molina Javier Mateos Tema 4: Codificacin Aritmtica 42
Modelo
distribucin de probabilidad
estimacin de probabilidad
Smbolos
codificador aritmtico
decodificador aritmtico
Smbolos
CODIFICADOR
DECODIFICADOR
La distribucin de probabilidad de los pxeles blancos y negros se determinan de forma adaptativa basndose en subconjuntos de pxeles que ya han sido codificados
Rafael Molina Javier Mateos Tema 4: Codificacin Aritmtica 46
47
A Pxel adaptativo (AT): un pxel flotante en un vecindario (ya codificado) del patrn. Es til para captar estructuras peridicas de la imagen.
Rafael Molina Javier Mateos Tema 4: Codificacin Aritmtica 49
Contexto Context:
1 1 1 2 1 3 0 4 0 5 1 6 0 7 0 8 1 0 9 10
ndice
Qe Tabla de bsqueda
codificador QM
50
Ejemplos de contextos
1. 9 6 10 7 3 2 4 8 5 1 ? pw = 0.999 pb = 0.001 bits = 13.4% 6. 9 6 10 7 3 2 4 8 5 1 ? pw = 0.206 pb = 0.794 bits = 4.8% 2. 9 6 10 7 3 2 4 8 5 1 ? pw = 0.025 pb = 0.975 bits = 7.8% 7. 9 6 10 7 3 2 4 8 5 1 ? pw = 0.874 pb = 0.126 bits = 4.4% 3. 9 6 10 7 3 2 4 8 5 1 ? pw = 0.201 pb = 0.799 bits = 5.8% 8. 9 6 10 7 3 2 4 8 5 1 ? pw = 0.836 pb = 0.164 bits = 3.5% 4. 9 6 10 7 3 2 4 8 5 1 ? pw = 0.116 pb = 0.884 bits = 5.0% 9. 9 6 10 7 3 2 4 8 5 1 ? pw = 0.660 pb = 0.440 bits = 3.1% 5. 9 6 10 7 3 2 4 8 5 1 ? pw = 0.822 pb = 0.178 bits = 4.9%
51
Codificador QM
Es una modificacin del codificador aritmtico basada en aproximaciones. Usa aritmtica entera y aproxima multiplicacin por suma Los intervalos se representan como lmite inferior (que tambin es la cadena de salida) y amplitud del intervalo. Considera la cadena de entrada como una secuencia de smbolos smbolo ms probable (Most Probable Symbol o MPS) y smbolo menos probable (Least Probable Symbol o LPS) en lugar de smbolos 1 y 0. La probabilidad del LPS es Qe y la del MPS es (1-Qe).
Rafael Molina Javier Mateos Tema 4: Codificacin Aritmtica 52
S A C Qe
smbolo a codificar. amplitud del intervalo. lmite inferior del intervalo (tambin cadena codificada). probabilidad del LPS
Tema 4: Codificacin Aritmtica 53
Problemas: La amplitud del intervalo A tiende a aproximarse a 0. Multiplicacin es costosa. Soluciones: Renormalizacin del intervalo como en codificacin aritmtica clsica. Suponemos que A es prximo a 1 y aproximamos A*Qe por Qe. Por tanto, A*(1 - Qe) lo aproximamos por A - Qe. Necesitamos normalizar para mantener esta hiptesis. Si A<0.75 duplicamos el intervalo para mantener A cercana a 1.0. Esto implica que A [0, 1.5). Usando aritmtica entera de 16 bits: A [000016, FFFF16]. Por tanto, 1 = AAAA16 y 0.75 = 800016.
Rafael Molina Javier Mateos Tema 4: Codificacin Aritmtica 54
Un ltimo problema: Si Qe tiene un valor cercano a 0.5, es posible que el tamao del subintervalo asociado a MPS sea MENOR que el asociado al LPS (AQe < Qe). Solucin: Intercambiar los valores de los smbolos MPS y LPS
56
Para convertir en nmero binario estndar b0b1b2bn a su cdigo Gray g0g1g2gn se siguen las ecuaciones: g0 = b0 gk = bk XOR bk-1
Rafael Molina Javier Mateos Tema 4: Codificacin Aritmtica 58
G3
G4
JBIG
2D-RLE = 2-dimensional RLE [WW92] ORLE = Ordered RLE [NM80] G3 = CCITT Group 3 [YA85] G4 = CCITT Group 4 [YA85]
BLOCK = Hierarchical block coding [KJ80] JBIG = ISO/IEC Standard draft [PM93] RLE = Run-length coding [NM80]
59
60
61
IV.8 Bibliografa
K. Sayood, Introduction to Data Compression, Morgan and Kaufmann, 2000. Curso de compresin de datos impartido en Chalmers University of Technology (Suecia), (clases 10 y 11): material 2003-2004 http://www.s2.chalmers.se/undergraduate/courses0304/ess155/ Curso de compresin de datos impartido en Stony Brook University (NY, USA) (tema 4): http://mnl.cs.stonybrook.edu/class/cse391/2003-spring/ Curso de compresin de imgenes impartido en la University of Joensuu (Finlandia) (tema 6): http://cs.joensuu.fi/pages/koles/imagecomp/imagecomp.html Recomendacin UIT-T T.82: Compresin de imagen binivel progresiva: http://www.itu.int/rec/T-REC-T.82/es
62