• Nenhum resultado encontrado

CAPÍTULO 4 : Codificação e Decodificação Aritmética

4.6 A Codificação Aritmética Não Binária

O processo de codificação aritmética não binária utiliza a mesma estratégia usada no processo de CABA. Ela não usa códigos prefixos, e o codificador recebe uma seqüência de símbolos de entrada e suas indicações (probabilidades relativas) e também mapeia a seqüência para um número real x dentro do intervalo IC.

Essa técnica aplica os mesmos dois conceitos principais usados na codificação de CABA citadas na seção 4.4. Como foi dito anteriormente, a codificação aritmética determina as palavras código durante o processo de codificação. Durante o processamento, o algoritmo divide o intervalo IC em sub-intervalos correspondentes às

palavras código de símbolos de entrada. Portanto, as probabilidades cumulativas de símbolos são distribuídas dentro do intervalo [0, 1), onde a probabilidade relativa de ocorrência de cada símbolo é o tamanho do intervalo correspondente ao símbolo.

Para explicar o procedimento de codificação não binária, considere-se um alfabeto de seqüência de quatro símbolos {a, b, c, d} como um exemplo. Suponha que a Tabela (4.1) é usada para se consultar as probabilidades cumulativas PC calculadas

Capítulo 4 - A Codificação Aritmética 49

Tab. (4.1)- O alfabeto de símbolos para codificação aritmética. Símbolo Probabilidade Relativa

(PR) Probabilidade Cumulativa (PC) d 0.001 0.000 b 0.010 0.001 a 0.100 0.011 c 0.001 0.111

O codificador armazena o tamanho do intervalo na variável Ic e sua base na variável CC. Portanto, para se determinar um novo intervalo (tamanho) IN (.) e sua

palavra código (base) CN (.), deve-se usar as seguintes equações:

IN (.) = IC * PR (4.5)

CN (.) = CC + (IC * PC) (4.6)

A Figura (4.5) mostra a distribuição das probabilidades cumulativas dentro de um intervalo [0, 1). d= 0.000 Intervalo Codificado Corrente (IC) b= 0.001 a= 0.011 c= 0.111 1.000

Tome-se a seqüência de símbolos “a a d” a ser codificada como um exemplo. O procedimento de codificação/decodificação pode ser efetuado usando-se as equações (4.5) e (4.6), e resumido no seguinte com a ajuda da Figura (4.6):

CC = 0.000 Intervalo Codificado Corrente (IC) 0.001 0.011 0.111 IC = 1.000 I(d) I(b) I(a) I(c) I(a) I (d) 0.1101 0.1001 0.10011 0.1001

Símbolo a ser codificado: a a d

Fig. (4.6) – Subdivisão do intervalo para codificar a seqüência “a a d”.

1) O Processamento de Codificação

• Primeiro, o intervalo IC é dividido em sub-intervalos correspondentes à

probabilidade cumulativa de cada símbolo da cadeia de entrada. O valor inicial do intervalo IC é “1.000” e da palavra código (sua base) CC é “0.000”. O primeiro

símbolo a ser codificado é “a”, então os novos valores são determinados da seguinte forma:

Capítulo 4 - A Codificação Aritmética 51

CN (a) = CC + (IC * PC)

= 0.000 + (1.000 * 0.011) = 0.011 IN (a) = IC * PR

= 1.000 * 0.100 = 0.1000

Portanto, o símbolo tem palavra código “0.011” e intervalo [0.011, 0.111). Note- se que o intervalo começa com o valor CN (a);

• Para codificar o segundo símbolo “a”, o valor do novo intervalo IN (a) será

transferido para o intervalo IC e a nova palavra código CN (a) será transferida

para a palavra código CC. O intervalo IC se divide usando-se o mesmo número de

subdivisões que foi usado para a divisão do intervalo original, ou seja, IC é

dividido em sub-intervalos relacionados às probabilidades cumulativas [6]. Os valores do novo intervalo IN (a) e sua palavra código CN (a) são determinados da

seguinte forma:

CN(a) = CC + (IC * PC)

= 0.011 + (0.100 * 0.011) = 0.1001 IN(a) = IC * PR

= 0.100 * 0.100 = 0.010

Então, o símbolo “a” tem a palavra código “0.1001” e intervalo [0.1001, 0.1101);

• O terceiro e último símbolo que será codificado é “d”. A mesma conversão de valores é feita, sendo que a operação recursiva para a codificação é:

CN (d) = CC + (IC * PC)

IN (d) = IC * PR

= 0.010 * 0.001 = 0.00001

Agora, o símbolo “d” tem a palavra código “0.1001” e intervalo [0.1001, 0.10011). Então, qualquer valor dentro o intervalo obtido (maior ou igual ao valor “0.1001” e menor do que o valor “0.10011”) servirá para identificar o intervalo e representar o fluxo de saída PC a ser transmitido ou armazenado como palavra código da seqüência de símbolos original. Como está mostrado na Figura (4.6), a palavra código é tratada como uma magnitude. Ela é uma fração binária que aponta para um número real dentro do intervalo codificado corrente.

2) O Processamento de Decodificação

Deve-se agora explicar o procedimento de decodificação através da palavra código obtida pela operação de codificação. A palavra código CC foi “0.1001011” e o

intervalo foi [0.1001, 0.10011). Usando-se a Tabela (4.1) para realizar o processo de comparação do intervalo com o valor de probabilidade cumulativa PC de cada símbolo,

tem-se:

• O decodificador compara a palavra código “0.1001011” com os valores de probabilidade cumulativa. Para se codificar o símbolo “b”, a cadeia de código teria um valor dentro do intervalo [0.001, 0.011), evidentemente, o símbolo “b” não é o primeiro símbolo que foi codificado. Para codificar o símbolo “a”, a cadeia de código teria um valor pertencente ao intervalo [0.011, 0.111), portanto, esse intervalo contem a palavra código “0.1001011”, ou seja, a palavra código ficaria

Capítulo 4 - A Codificação Aritmética 53

dentro do símbolo “a”. Isso indica que o símbolo “a” é que deve ser o primeiro símbolo da seqüência de símbolos que foi codificada;

• O valor de probabilidade cumulativa PC do símbolo “a” é subtraída da palavra

código pelo decodificador, obtendo-se: CC - PC = CN (a)

0.1001011 - 0.011 = 0.0011011

• No codificador, o segundo sub-intervalo foi ajustado multiplicando-se o mesmo pelo valor 0.100 (probabilidade relativa). No outro lado, o decodificador desfaz esse passo. O resultado da operação anterior é dividido pelo mesmo valor 0.100, e tem-se:

CN(a) / PR = CDN

0.0011011 / 0.100 = 0.011011 onde,

CDN : a variável da base do novo sub-intervalo decodificado corrente.

A variável CDN é renomeada para a variável CC. De maneira recursiva, o

decodificador repete a mesma operação anterior para se obter o segundo símbolo que foi codificado. Tem-se:

• Com a operação de comparação, a palavra código obtida “0.011011” ficaria dentro do intervalo [0.011, 0.111), o qual pertence ao símbolo “a”. Portanto, o

símbolo “a” deve ser o segundo símbolo da seqüência de símbolos que foi codificada;

• Subtraindo-se o valor de probabilidade cumulativa “0.011”, temos: CC - PC = CN (a)

0.011011 - 0.011 = 0.000011

• Dividindo-se o resultado pelo valor da probabilidade relativa do símbolo “a”, tem- se:

CN (a) / PR = CDN

0.000011 / 0.100 = 0.00011

Novamente a variável CDN é renomeada para a variável CC. Para se obter o

terceiro símbolo que foi codificado, basta reaplicar o primeiro passo. O decodificador compara a palavra código obtida com os valores de probabilidade cumulativa PC.

Portanto, o terceiro símbolo que foi codificado é “d”.

4.7 Comentários

A codificação aritmética binária adaptativa CABA trabalha com uma seqüência binária de dados, ou seja, a imagem de entrada do codificador aritmético binário é de 2 níveis. Ela é uma técnica de compressão sem perdas (exata). O codificador CAA recebe o pixel a ser codificado, seu contexto e o valor típico. Em seguida, determina a estimativa de probabilidade utilizando a tabela de estimação de probabilidade do

Capítulo 4 - A Codificação Aritmética 55

padrão JBIG. O mesmo contexto é usado tanto para o processo de codificação quanto para o processo de decodificação. Devido ao fato de que o codificador recebe somente valores binários (“1” e/ou “0”), o algoritmo mapeia o pixel que está sendo codificado para um número real dentro do intervalo codificado corrente (IC), isto é, ele divide o

intervalo IC em dois sub-intervalos. Essa operação é feita recursivamente durante a

codificação. Os códigos são criados e transmitidos ou armazenados durante o processo de codificação. O fluxo de palavra código PC criado pelo codificador CCA é a expansão binária do número real dentro do intervalo IC que é gerado durante o processo de

codificação. O decodificador DAA desfaz o que foi feito pelo codificador CAA, recursivamente.

Na codificação aritmética não binária, o intervalo IC é dividido em vários sub-

intervalos relacionados com as probabilidades cumulativas de símbolos da seqüência de entrada. O codificador utiliza o mesmo procedimento usado na codificação aritmética binária.

Documentos relacionados