Codificacion Aritmetica
Codificacion Aritmetica
Codificacion Aritmetica
El tamao de la memoria necesario para almacenar este cdigo puede que no est
disponible.
La decodificacin de un cdigo de este tamao puede ser un proceso altamente
ineficiente y consumidor de tiempo.
Si la estadstica cambia aunque sea ligeramente puede hacer que el cdigo sea
ineficiente.
Problema: para codificar una secuencia de longitud en Huffman se requieren
palabras de cdigo para todas las posibles secuencias de longitud .
( = )
Ejemplo:
Considere el alfabeto de tres letras = { , , } con ( ) = . , ( ) = . ,
( ) = . .Usando el mapeo propuesto () = . , () = . , () = Esto
parte el intervalo unitario como se muestra en la ilustracin 1.
() + ()
() = , () = . ,
() =
() = . , () = ,
Usando las ecuaciones que permiten calcular los limites inferior y superior de manera
iterativa y suponiendo () = y () = . El primer elemento de la secuencia resulta en
la siguiente actualizacin:
() = + ( )
=
() = + ( ) ,
= ,
O sea, el identificador de la secuencia estar en el intervalo [, . ). El segundo elemento
de la secuencia es . Usando las ecuaciones de actualizacin tenemos:
() = + (. ) ()
= + (. ) .
= .
() = + (. ) ()
= + (. )
= .
Por consiguiente, el intervalo que contiene el identificador de la secuencia es
[. , . ]. El tercer elemento es , lo que resulta en las siguientes ecuaciones de
actualizacion:
() = . + (. . ) ()
= . + (. . ) .
= .
Y por lo tanto el intervalo que contiene la secuencia es [. , . ).
Continuando con el ltimo elemento, las ecuaciones de actualizacin dan lo siguiente:
() = . + (. . ) ()
= . + (. . ) .
= .
() = . + (. . ) ()
= . + (. . ) .
= .
Y el identificador para la secuencia se puede generar como
() + ()
. + .
=
= .
( ) =
( ) =
( ) =
( ) =
( ) =
Se puede generar un cdigo binario para esta fuente como se muestra en la tabla 3. La
cantidad
se obtiene usando la ecuacin (. ). La representacin binaria de
se trunca
a (/()) + para obtener el cdigo binario.
Smbolo
En Binario (
) + Cdigo
()
.
.
.
.
.
.
. .
.
. .
.
Descifrando un identificador
Dado el identificador obtenido en el ejemplo anterior trataremos de imitar al codificador para
obtener la secuencia representada por este identificador. El valor del identificador es
. . El intervalo que contiene este identificador es un subconjunto de todos los
intervalos contenidos en el proceso de codificacin. La estrategia de decodificacin ser
decodificar los elementos en la secuencia de tal manera que los limites inferior () ()
siempre contengan el valor del identificador para cada . arrancamos con () = () =
. Despus de decodificar el primer elemento de la secuencia , los lmites inferior y
superior llegan a ser:
() = + ( ) ( )
= ( )
() = + ( ) ( )
= ( )
En otras palabras, el intervalo que contiene el identificador es [ ( ), ( )).
Necesitamos encontrar el valor de para el cual . est en el intervalo
[ ( ), ( )). Si hacemos = , el intervalo es [, . ), Si hacemos = , el
intervalo es [. , . ), Si hacemos = , el intervalo es [. , ). Como .
esta en el intervalo [, . ) escogemos = . Repetimos este procedimiento para el
segundo elemento , usando los valores actualizados para () ()
() = + (. ) ( )
= . ( )
() = + (. ) ( )
= . ( )
Si hacemos = , el intervalo actualizado es [0, 0.64), el cual no contiene el identificador.
Luego no puede ser . Si hacemos = , el intervalo actualizado es [0.64, 0.656), el
cual tampoco contiene el identificador. Si hacemos = , el intervalo actualizado es
[0.656, 0.8), el cual s contiene el valor . del identificador. Luego el segundo
elemento en la secuencia es . Sabiendo cual es el segundo elemento de la secuencia,
podemos actualizar los valores de () y () y encontrar el elemento , el cual nos dar un
intervalo que contiene el identificador:
() = . + (. . ) ( )
= . + . ( )
() = . + (. . ) ( )
= . + . ( )
Sin embargo, las expresiones resultantes son cansonas en esta forma. Para hacer las
comparaciones ms fciles, podriamos restar el valor de () tanto de los limites como del
identificador. O sea, encontramos el valor de para el cual el intervalo [.
( ), . ( )) contiene . . = . . O, podramos
hacerlo an ms simple y dividir el valor del identificador residual de . por .
para obtener . , y encontrar el valor de para el cual . cae en el intervalo
[ ( ), ( )) . Inmediatamente vemos que el nico valor de para el cual es
posible esto es . Substituyendo para en las ecuaciones de actualizacin, podemos hallar
los nuevos valores de () () . Podemos ahora encontrar el elemento al calcular los
lmites inferior y superior as
() = . + (. . ) ( )
= . + . ( )
() = . + (. . ) ( )
= . + . ( )
Otra vez podemos restar () del identificador para conseguir . . =
. y encontrar el valor de para el cual el intervalo [. ( ),
. ( )) contiene a . . Para hacer las comparaciones ms simples,
podemos dividir el valor residual del identificador por . para conseguir . y
encontrar el valor de para el cual . est contenido en [ ( ), ( )). Podemos
ver que aquel valor es = y hemos decodificado la secuencia completa. Observe que
nosotros sabamos la longitud de la secuencia anticipadamente y, por lo tanto, sabamos
cuando parar.
El algoritmo de decodificacin:
1.
2.
3.
4.
5.
Inicialice () = () =
Para cada encuentre = ( () )/(() () )
Encuentre el valor de para el cual ( ) ( )
Actualice () ()
Contine hasta que la secuencia completa haya sido decodificada
No toma muchos smbolos en una secuencia antes que la rata de codificacin para el cdigo
aritmtico llegue a estar cerca de la entropa. Sin embargo, recordando que para los cdigos
Huffman, si tomamos bloques de m smbolos juntos, la rata de codificacin es
() () +
Mensaje
()
()
.
.
.
.
.
.
.
.
.
.
.
.
. .
. .
.
.
. .
. .
. .
.
.
. .
. .
. .
() en binario
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
+1
()
Cdigo
Aplicaciones
Para la capa de baja resolucin el codificador usa uno de dos diferentes vecinos
mostrados en la ilustracin 2.
El pxel X es el que va a ser codificado, mientras que los que van a ser usados como templates
(plantillas) son marcados como O o A, los cuales son previamente codificados y estn
disponibles tanto para el codificador como para el decodificador.
n y l n .
De igual manera se podra haber mantenido un extremo y el tamao del Intervalo. Esta es la
aproximacin adoptada en el codificador QM, el cual conserva el extremo inferior y el
n u n l n
An
An An 1 FX xn FX xn 1
An 1 P xn
l n l n 1 An 1 FX xn 1
En vez de tratar directamente con 0s y 1s puestos por la fuente, el codificador QM los mapea
en el smbolo ms probable (MPS) y en el smbolo menos probable (LPS).
Si 0 representa un pxel negro y 1 representa un pxel blanco entonces en una imagen
mayormente negra el 0 ser el MPS y el uno el LPS.
Denotando la probabilidad de ocurrencia del LPS en el contexto C por qc y mapeando el
MPS al subintervalo mas bajo la ocurrencia de un smbolo MPS resulta en las siguientes
ecuaciones de actualizacin:
l n l n 1
An An 1 1 qc
Mientras que la ocurrencia de un LPS resultara en las siguientes ecuaciones de actualizacin:
l n l n 1 An 1 1 qc
An An 1qc
Para hacer la implementacin del codificador ms simple el comit recomend varias
desviaciones del algoritmo de codificacin estndar, evitando las multiplicaciones al asumir
Si
An cae por debajo de 0.75 se hace un proceso de reescalamiento hasta que el valor de
A n .
La probabilidad qc del LPS para el contexto C se actualiza cada vez que el reescalamiento
toma lugar y el contexto C es activo. Una lista ordenada de valores es hecha en una tabla para
qc . Cada vez que tiene lugar un reescalamiento el valor de qc es cambiado al prximo valor
ms bajo o ms alto en la tabla dependiendo de si el reescalamiento fue causado por la
ocurrencia de un LPS o de un MPS.
En una situacin no estacionaria puede suceder que el smbolo asignado al LPS ocurra mas
frecuentemente que el smbolo asignado al MPS lo cual es detectado cuando qc An qc
. En esta situacin se reversa la asignacin. Esta prueba debe realizarse cada vez que una
rescalizacion toma lugar.
El decodificador QM opera de manera similar al codificador descrito.
La transmisin progresiva
Busca poder transmitir imgenes de ms baja resolucin utilizando menos bits.
El estndar recomienda generar un pxel de ms baja resolucin por cada bloque
de 2*2 en la imagen de ms alta resolucin. El nmero de imgenes de ms baja resolucin
(llamadas capas) no se especifica en el estndar.
Un mtodo directo para generar una capa de ms baja resolucin es reemplazar cada bloque
de 2*2 con el valor promedio de los cuatro pxeles, reduciendo la resolucin por dos en las
direcciones vertical y horizontal. El problema es cuando la mitad de los pxeles es blanco y
la mitad negra.
En vez de hacer lo anterior el estndar especifica un mtodo de reduccin de resolucin
basado en tablas. La tabla es indexada por los pxeles vecinos mostrados en la ilustracin 4.
Ilustracin 4: pixeles utilizados para determinar el valor del pixel de ms bajo nivel
Los crculos representan los pxeles de la capa de ms baja resolucin y los cuadrados
representan los pxeles de la capa de ms alta resolucin.
Cada pxel contribuye un poco al ndice. La tabla se forma calculando la expresin
4e 2b d f h a c g i 3B C A
Si el valor de esta expresin es mayor a 4.5 el pxel X es tentativamente declarado 1. Las
imgenes de ms baja resolucin pueden ser usadas para codificar las imgenes de ms alta
resolucin. La especificacin hace esto usando los pxeles de ms baja resolucin como
parte del contexto para codificar las imgenes de ms alta resolucin (ver ilustracin 5).
Se usan diez pxeles en cada contexto. Si se incluyen los 2 bits requeridos para indicar el
t que est siendo usado, se usaran 12 bits para indicar el contexto, lo cual indica que
habr 4096 contextos diferentes.
El desempeo de la codificacin aritmtica se puede observar en las tablas 5 y 6 obtenidas a
partir de la codificacin de las imgenes de la ilustracin 6.
Tabla 5: Compresin lograda al usar codificacin aritmtica adaptativa de los valores de los pixeles
Tabla 6: compresin lograda al usar codificacin aritmtica adaptativa para los pixeles diferencia.