codificacion aritmetica

download codificacion aritmetica

of 16

Transcript of codificacion aritmetica

  • 7/26/2019 codificacion aritmetica

    1/16

    Codificacin aritmtica

    Es til cuando se tienen fuentes con alfabetos pequeos.

    En el cdigo Huffman si el alfabeto es grande, la probabilidad del smbolo ms probable espequea y la desviacin de la rata de cdigo de la entropa (redundancia) es pequea. Alcontrario si el alfabeto es pequeo en donde la redundancia del cdigo Huffman es grande.

    Esto se resuelve generando un cdigo extendido pero esto a veces es imprctico porque se

    generan alfabetos demasiado grandes, se requieren grandes cantidades de memoria y tiempos

    y recursos exagerados en la decodificacin.

    Ejemplo:

    Considere una fuente que pone letras independientes e idnticamente distribuidas desdeun alfabeto

    {, , }Con el modelo de probabilidad

    . . .

    La entropa para esta fuente es . /. Un cdigo Huffman para esta fuenteest dado en la tabla 1

    Letra cdigo

    Tabla 1: Cdigo Huffman para un alfabeto de tres letras

    La longitud promedio para este cdigo es . /. La diferencia entre la longitudpromedia de cdigo y la entropa, o redundancia, para este cdigo es . /,lo que es el % de la entropa. Esto significa que para codificar esta secuencianecesitaramos ms del doble del nmero de bits prometidos por la entropa.

    Agrupando los smbolos en bloques de dos, el alfabeto extendido y el modelo de probabilidady el cdigo se muestran en la tabla 2.

  • 7/26/2019 codificacion aritmetica

    2/16

    Letra Probabilidad Cdigo

    . . . . . . . . .

    Tabla 2: Cdigo Huffman para un alfabeto extendido

    La rata promedio para el alfabeto extendido es . /. La rata adicionalsobre la entropa es an cerca del %de la entropa. Si se contina poniendo bloques dems smbolos encontramos que la redundancia cae a un valor aceptable cuando hacemosbloques de . El tamao de alfabetocorrespondiente a este nivel es de ,lo cual hace que el tamao de este cdigo sea imprctico por varias razones:

    El tamao de la memorianecesario para almacenar este cdigo puede que no estdisponible.

    La decodificacinde un cdigo de este tamao puede serun proceso altamenteineficiente y consumidor de tiempo.

    Si la estadstica cambia aunque sea ligeramente puede hacer que el cdigo seaineficiente.

    Problema: para codificar una secuencia de longitud

    en Huffman se requieren

    palabras de cdigo para todas las posibles secuenciasde longitud .En la codificacin aritmtica se asigna un identificador nico o tag a la secuencia a

    codificar, el cual es una fraccin binaria a la que se le asigna posteriormente un cdigo

    binario.

    Se asigna un cdigo aritmtico nico a una secuencia de longitud sin que sea necesariogenerar palabras de cdigo para todas las posibles secuencias de longitud .Codificando una secuencia

    Una manera de codificar con un identificador nico a cada secuencia es asignarle un nmeroen el intervalo [,,lo cual da un conjunto infinito de identificadores.Una funcin que toma este intervalo es la funcin distribucin acumulativa de

    probabilidadde una variable aleatoria asociada con la fuente.

  • 7/26/2019 codificacion aritmetica

    3/16

    La variable aleatoriase toma como la asignacin de un nmero a las letras o smbolosde la fuente

    Siendo {, , , }el alfabeto de la fuente.El mapeo supone que se dispone de un modelo de probabilidadde la fuente y de lafuncin densidad de probabilidad de la variable aleatoria, tal que

    Y la funcin distribucin acumulativa

    =

    Ejemplo:

    Considere el alfabeto de tres letras {, , } con . , . , . .Usando el mapeo propuesto . , . , Estoparte el intervalo unitario como se muestra en la ilustracin 1.

    Ilustracin 1: Restringiendo el intervalo que contiene el identificador para la secuencia{, , }

    La particin en la cual reside el identificador depende del primer smbolo de la secuencia que

    est siendo codificada. Por ejemplo, si el primer smbolo es ,el identificador estar en elintervalo [.,.]; si el primer smbolo es , el identificador estar entre[.,.], y si

  • 7/26/2019 codificacion aritmetica

    4/16

    el smbolo es el identificador estar entre [.,.]. Una vez el intervalo que contieneel identificador ha sido determinado, el resto del intervalo unidad es descartado y el intervalo

    restringido es dividido otra vez en las mismas proporciones del intervalo original. Suponga

    que el primer smbolo fue . El identificador estara contenido en el sub intervalo[,.];Este sub intervalo es luego dividido en exactamente las mismas proporciones como elintervalo original, dando los sub intervalos [.,.],[.,.], [.,.] laprimera particin corresponde al smbolo , la segunda al smboloy as sucesivamente.El proceso iterativo puede visualizarse en la ilustracin 1.

    La aparicin de cada nuevo smbolo de la secuencia restringe el identificador a un nuevo

    subintervalo que es disjunto de cualquier otro subintervalo que pueda haber sido generadousando este proceso, luego cualquier miembro de este subintervalo puede ser usado como

    identificador. Una escogencia popular es el lmite inferiorpero tambin puede ser el medio

    del intervalo.

    Hay un procedimiento recursivo para calcular los lmites inferior y superior del intervalo parauna secuencia de longitud .En general, se puede mostrar que para cualquier secuencia

    + ( )

    + ( )

    En donde se supone que y .Observe que a travs de este proceso no necesitamos calcular explcitamente cualquierprobabilidad conjunta.

    Si se usa el punto medio del intervalo para el identificador, entonces

    +

    Ejemplo:Generando un identificador

    Considere una fuente que genera los smbolos con probabilidad ., conprobabilidad =0.02 y con probabilidad . . Se define la variablealeatoria . Se supone que se va a codificar la secuencia .Del modelo de probabilidad sabemos que

  • 7/26/2019 codificacion aritmetica

    5/16

    , . , ., , Usando las ecuaciones que permiten calcular los limites inferior y superior de manera

    iterativa y suponiendo y . El primer elemento de la secuencia resulta enla siguiente actualizacin: +

    + ,

    , O sea, el identificador de la secuencia estar en el intervalo [,..El segundo elementode 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 deactualizacion:

    . + .. . + .. ..

    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

  • 7/26/2019 codificacion aritmetica

    6/16

    +

    .+..

    Generando una secuencia binaria

    Para codificar el identificador se toma la representacin binaria del nmero y se trunca a

    + En donde es la probabilidad de la secuencia.Ejemplo:

    Considere la fuenteque genera los smbolos {, , , }con probabilidades

    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 truncaa / + para obtener el cdigo binario.

    Smbolo En Binario

    + Cdigo

    . . . . . . . . . . . .

    Tabla 3: Cdigo binario para un alfabeto de 4 smbolos

    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 losintervalos 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 ysuperior llegan a ser:

  • 7/26/2019 codificacion aritmetica

    7/16

    +

    +

    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 ,elintervalo es [.,., Si hacemos , el intervalo es [.,. Como .esta en el intervalo [,. escogemos . Repetimos este procedimiento para elsegundo 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), elcual tampoco contiene el identificador. Si hacemos , el intervalo actualizado es[0.656, 0.8), el cual s contiene el valor . del identificador. Luego el segundoelemento 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 unintervalo 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 delidentificador. O sea, encontramos el valor de

    para el cual el intervalo

    [. , . contiene .... O, podramoshacerlo 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 esposible esto es . Substituyendo para en las ecuaciones de actualizacin, podemos hallarlos nuevos valores de . Podemos ahora encontrar el elemento al calcular loslmites inferior y superior as

  • 7/26/2019 codificacion aritmetica

    8/16

    .+ .. .+.

    .+ ...+.

    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 . yencontrar el valor de para el cual . est contenido en [ , .Podemosver que aquel valor es y hemos decodificado la secuencia completa. Observe quenosotros sabamos la longitud de la secuencia anticipadamente y, por lo tanto, sabamos

    cuando parar.

    El algoritmo de decodificacin:

    1. Inicialice 2. Para cada encuentre / 3. Encuentre el valor de para el cual ()4. Actualice 5. Contine hasta que la secuencia completa haya sido decodificada

    Hay dos maneras de saber que la secuencia completa ha sido decodificada:

    El decodificador puede conocer la longitud de la secuencia

    Si un smbolo particular se denota como fin de transmisin.

    Comparacin con el cdigo Huffman

    Si se codifican los smbolos uno a la vez el cdigo Huffman se comporta mejor que lacodificacin aritmtica. Sin embargo a medida que se codifican secuencias ms largas la

    codificacin aritmtica va mejorando (ver tabla 4).

    Cuantas muestras tenemos que agrupar para hacer que el esquema de codificacin aritmticose desempee mejor que el cdigo Huffman? Podemos tener alguna idea mirando los lmites

    en la rata de codificacin.

    Los lmites en la longitud promedio de la codificacin aritmtica son

    +

  • 7/26/2019 codificacion aritmetica

    9/16

    No toma muchos smbolos en una secuencia antes que la rata de codificacin para el cdigoaritmtico llegue a estar cerca de la entropa. Sin embargo, recordando que para los cdigos

    Huffman, si tomamos bloques de msmbolos juntos, la rata de codificacin es

    +

    Mensaje en binario 1 + 1 Cdigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    Tabla 4:Codificacin aritmtica para secuencias de dos smbolos.

    La ventaja parece estar con el cdigo Huffman, aunque la ventaja decrece con el incremento

    de . Sin embargo recuerde que generar una palabra de cdigo para una secuencia delongitud usando el cdigo Huffman requiere construir el cdigo completo para todas lasposibles secuencias de longitud . si el alfabeto original es longitud ,entonces el tamaodel libro de cdigo ser . Tomando valores relativamente razonables de da un tamao de diccionario de . Esto obviamente no es una opcin viable. Para elprocedimiento de codificacin Huffman, no necesitamos construir el diccionario completo.

    En vez de esto simplemente obtenemos el cdigo para el identificador correspondiente a unasecuencia dada. Luego, es enteramente realizable codificar secuencias de longitud omucho ms. En la prctica podemos hacer largo para el codificador aritmtico y no parael codificador Huffman. Esto significa que para la mayora de las fuentes podemos obtener

    ratas ms cercanas a la entropa usando codificacin aritmtica que con codificacinHuffman. Las excepciones son las fuentes con probabilidades potencia de dos.

  • 7/26/2019 codificacion aritmetica

    10/16

    Aplicaciones

    El estndar . (Joint Bi-level Imageprocessing Group)

    En este estndar se recomienda la codificacin aritmtica como parte de la codificacin deimgenes binarias.

    Este grupo se forma en para la codificacin progresiva de imgenes de dos niveles.El estndarconsta de dos algoritmos:

    El algoritmo de transmisin progresiva

    El algoritmo de codificacin sin prdidas.

    La compresin sin prdidas:

    Muchas imgenes bi_nivel tienen una gran cantidad de estructura local.

    Por ejemplo en la transmisin de texto hay grandes porciones de la imagen en donde se

    encuentran pxeles blancos con probabilidad de ocurrencia cerca de uno. En otras porcionesde imagen sucede lo contrario, hay grandes probabilidades de encontrar pxeles negros.

    Se pueden hacer suposiciones razonables de la situacin para un determinado pxelconociendo los valores de los pxeles vecinos al pxel que est siendo codificado. Por ejemplo

    si la mayora de los pxeles vecinos son blancos hay grandes probabilidades de que este

    tambin lo sea y viceversa.

    Cada caso nos da una probabilidad asimtrica, lo que es ideal para la codificacin

    aritmtica. Si se trata cada caso separadamente usando un codificador aritmtico diferentepara cada una de las dos situaciones, se podra obtener una mejora sobre el caso donde

    usamos el mismo codificador aritmtico para todos los pxeles.

    Ejemplo:

    Suponga que la probabilidad de encontrar un pxel negro es . y la de encontrar un pxelblanco es . , la entropa en este caso es .Si se usa un solo codificador para codificar esta fuente se conseguir una rata de bit cercana

    a . /.Si se supone con base en la vecindad de los pxeles que podemos dividir los pxeles en dos

    conjuntos, uno que comprenda el %de los pxeles y otro el % y que adems en elprimer conjunto la probabilidad de encontrar un pxel blanco es .y en el segundo la

  • 7/26/2019 codificacion aritmetica

    11/16

    probabilidad de encontrar un pxel negro es . . La entropa de estos conjuntos es .y.respectivamente.Si usamos dos codificadores aritmticos para los dos conjuntos con tablas de frecuencia

    acopladas a las probabilidades, conseguiramos ratas cercanas a .cerca del %deltiempo y cercanas a . cerca del % del tiempo. La rata promedio sera cerca de. / la cual es casi la mitad de la rata requerida si usramos un solocodificador aritmtico.

    Si usamos solamente pxeles en la vecindadde aquellos que ya han sido transmitidos al

    receptor para hacer nuestra decisin acerca de cual codificador usar, el decodificador puede

    mantenerse informado acerca de cual codificador fue usado para codificar un pxel particular.

    La codificacin aritmtica es particularmente atractiva para el uso de codificadoresmltiples, todos ellos usando la misma maquinaria computacional con cada codificador

    usando un conjunto diferente de probabilidades.

    El algoritmo hace uso de esta caracterstica de la codificacin aritmtica. En vez dechequear para ver si la mayora de los pxeles en la vecindad son blancos o negros, el

    codificador usa el patrn de pxeles en la vecindad o contextopara decidir culconjunto de probabilidades usar en la codificacin de un pxel particular (ver ilustracin 2).

    Si la vecindad consiste de con cada pxel capaz de tomar uno de dos valoresdiferentes, el nmero de patrones diferentes posibles es , el codificador usa de codificadores, dependiendo de si una capa de baja o alta resolucin estsiendo codificada.

    Ilustracin 2: Configuracin de los vecinos en el estndar

    Para la capa de baja resolucin el codificador usa uno de dos diferentes vecinosmostrados en la ilustracin 2.

    El pxel Xes 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.

  • 7/26/2019 codificacion aritmetica

    12/16

    El pxel A puede pensarse como un miembro flotante de la vecindad. Su colocacin esdependiente de la entrada que esta siendo codificada. Suponga que la imagen tiene lneas

    verticales separadas . El pixelpuede ser movido alrededor en orden a capturarcualquier estructura que pueda existir en la imagen. Esto es especialmente til en las

    imgenes halftoneen las que los pixelesson usados para capturar la estructura peridica.La ubicacin y movimiento del pixel es transmitida al decodificador como informacinlateral.

    En la siguiente ilustracin 3los smbolos en la vecindad han sido reemplazados por y. El cero corresponde a pxeles blancos mientras que el uno corresponde a pxeles negros.El pixel a codificar esta encerrado en una caja sombreada.

    Ilustracin 3: contextos de (a) tres lneas, (b) dos lneas

    El patrn de 0s y 1s es interpretada como un numero binario el cual es usado como un ndicepara el conjunto de probabilidades. El contexto en el caso de la vecindad de tres lneas

    (leyendo de izquierda a derecha y de arriba abajo) es , el cual corresponde aun ndice de . Para la vecindad de dos lneas el contexto es o . Comohay

    en este template tendremos

    diferentes codificadores aritmticos.

    En el estndar los codificadores son una variacin del codificador aritmticoconocido como el codificador QM.

    En la descripcin del codificador aritmtico previa hemos estado actualizando el intervalo de

    identificador al actualizar los extremos del intervalo n

    u y n

    l .

    De igual manera se podra haber mantenido un extremo y el tamao del Intervalo. Esta es laaproximacin adoptada en el codificador QM, el cual conserva el extremo inferior y el

    tamao del intervalo nnn

    luA

    El identificadorpara una secuencia es la representacin binaria de n

    l

    Se puede obtener una ecuacin de actualizacin de n

    A

  • 7/26/2019 codificacion aritmetica

    13/16

    n

    n

    nXnX

    nn

    xPA

    xFxFAA

    1

    11

    111 nXnnn xFAll

    En vez de tratar directamente con 0s y 1s puestos por la fuente, el codificador QM los mapeaen 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 porc

    q y mapeando el

    MPS al subintervalo mas bajo la ocurrencia de un smbolo MPSresulta en las siguientes

    ecuaciones de actualizacin:

    1

    nnll

    cnn

    qAA

    11

    Mientras que la ocurrencia de un LPS resultara en las siguientes ecuaciones de actualizacin:

    cnnn qAll 111

    c

    nn qAA 1

    Para hacer la implementacin del codificador ms simple el comit recomend variasdesviaciones del algoritmo de codificacin estndar, evitando las multiplicacionesal asumir

    que n

    A tiene un valor cercano a uno lo que simplifica las ecuaciones de actualizacin

    tomando n

    A =1.

    Si n

    A cae por debajo de 0.75 se hace un proceso de reescalamientohasta que el valor de n

    A sea mayor o igual a 0.75.

    El reescalamiento es un proceso repetido de doblado lo que corresponde a desplazamientos

    a la izquierda. Para conservar sincronizados los parmetros se aplica el mismo proceso de

    reescalado al lmite inferior. Los bits que salen fuera del buffer que contiene el valor dellmite inferior constituyen la salida del codificador.

  • 7/26/2019 codificacion aritmetica

    14/16

    Mirando las ecuaciones de actualizacin para el codificador QM podemos ver que larescalizacion ocurrir cada vez que ocurre un LPS. La ocurrencia de un MPS podr o no

    resultar en un re escalamiento dependiendo del valor de n

    A .

    La probabilidad cq 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

    cq . Cada vez que tiene lugar un reescalamiento el valor de

    cq 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

    cn

    c qAq

    . En esta situacin se reversa la asignacin. Esta prueba debe realizarse cada vez que unarescalizacion toma lugar.

    El decodificador QM opera de manera similar al codificador descrito.

    La transmisin progresiva

    Busca poder transmitir imgenes de ms baja resolucinutilizando menos bits.

    El estndar recomienda generar un pxel de ms baja resolucin por cada bloquede 2*2en 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 bloquede 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 estndarespecifica un mtodo de reduccin de resolucinbasado 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

  • 7/26/2019 codificacion aritmetica

    15/16

    Los crculos representan los pxeles de la capa de ms baja resolucin y los cuadradosrepresentan los pxeles de la capa de ms alta resolucin.

    Cada pxel contribuye un poco al ndice. La tabla se forma calculando la expresin

    ACBigcahfdbe 324

    Si el valor de esta expresin es mayor a 4.5el pxel X es tentativamente declarado 1. Las

    imgenes de ms baja resolucin pueden ser usadas para codificar las imgenes de ms alta

    resolucin. La especificacinhace esto usando los pxeles de ms baja resolucin comoparte del contexto para codificar las imgenes de ms alta resolucin (ver ilustracin 5).

    Ilustracin 5: Contextos usados en la codificacin de las capas de ms alta resolucin

    Se usan diez pxeles en cada contexto. Si se incluyen los 2 bits requeridos para indicar el

    tque est siendo usado, se usaran 12 bits para indicar el contexto, lo cual indica quehabr 4096 contextos diferentes.

    El desempeo de la codificacin aritmtica se puede observar en las tablas 5 y 6obtenidas apartir de la codificacin de las imgenes de la ilustracin 6.

  • 7/26/2019 codificacion aritmetica

    16/16

    Ilustracin 6: imgenes usadas para la codificacin aritmtica.

    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.