Nelson Ismar da Silva Junior
Orientador: Prof. Arnaldo de Albuquerque Araújo
UM SISTEMA DE COMPRESSÃO DE IMAGENS
APLICADO A DOCUMENTOS HISTÓRICOS
Dissertação
apresentada
ao
Departamento
de
Ciência
da
Computação do Instituto de Ciências
Exatas da Universidade Federal de
Minas Gerais, como requisito parcial
para a obtenção do grau de Mestre em
Ciência da Computação.
UNIVERSIDADE FEDERAL DE MINAS GERAIS
Instituto de Ciências Exatas
Departamento de Ciência da Computação
Belo Horizonte
1993
O capinar é sozinho,
mas a colheita é coletiva.
Guimarães Rosa
RESUMO
Este trabalho descreve o estudo e a implementação de técnicas de compressão de
imagens digitais, voltadas para o armazenamento de imagens, em plataformas IBM
PC compatíveis e padrão gráfico SVGA. Apresenta conceitos do Processamento Digital
de Imagens relacionados ao tema e descreve detalhadamente os algoritmos
implementados. Em seguida, mostra como foi realizada a parametrização das rotinas,
adequando-as a um conjunto de imagens de documentos históricos. Os resultados da
compressão e descompressão das imagens são avaliados. É proposto, como aplicação
das rotinas implementadas, um sistema gerenciador de banco de dados de imagens de
documentos históricos.
This work describes the study and implementation of digital images compression
techniques images storage, based on IBM PC compatibles and SVGA graphic card,
introduces the Digital Image Processing involved concepts and describes in detail the
implemented algorithms. Next, it shows how the parametrization of the routines was
carried out. The image compression and decompression results are analised. As an
application, an historical documents images database management system is
proposed.
Sumário
1. Introdução
1.1 Motivação
1.2 Organização do Trabalho
2.Conceitos
2.1 Sistema Visual Humano
Lei de Weber-Fechner
Efeito Mach Band
Excitação e Inibição
Células Ganglionares
Córtex Visual
Modelo para o Sistema Visual Humano
2.2 Compressão de Imagens
Mapeamento
Quantização
Quantização de Lloyd-Max
Codificação
Entropia
Código de Huffman
Código de Lempel-Ziv
Medidas de Distorção
Imagens Gráficas
2.3 Classificação das Técnicas
2.4 Conclusão
3. Algoritmos
3.1 RLC - Run Length Coding (Codificação Seqüencial)
Descrição do Método
Algoritmo de Compressão
Algoritmo de Descompressão
Código Modificado de Huffman
Variações do Método
3.2 MREAD - Modified Relative Element Address Designate Coding
Descrição do Método
Algoritmo de Compressão
Algoritmo de Descompressão
Variações do Método
01
02
02
04
04
05
07
07
08
09
10
11
11
13
14
16
17
18
19
20
21
21
22
24
24
25
25
26
26
28
28
29
30
31
31
3.3 BTC - Block Truncation Coding (Truncagem de Blocos)
Descrição do Método
Algoritmo de Compressão
Algoritmo de Descompressão
Parâmetros Estatísticos
Quantização dos Parâmetros
Seleção do Plano de Bits
Variações do Método
3.4 PCM - Pulse Code Modulation
Descrição do Método
Algoritmo de Compressão
Algoritmo de Descompressão
3.5 DPCM Differential Pulse Code Modulation
Descrição do Método
Algoritmo de Compressão
Algoritmo de Descompressão
Codificação Preditiva Preservadora de Informação
DM - Delta Modulation
DPCM Unidimensional
DPCM Bidimensional
DPCM Adaptativo
3.6 TC - Transform Coding
Descrição do Método
Algoritmo de Compressão
Algoritmo de Descompressão
Codificações Zonal e Por Limiar
Alocação de Bits
Compressão Híbrida
Codificação Adaptativa
3.7 PC - Pyramid Coding
Descrição do Método
Algoritmo de Compressão
Algoritmo de Descompressão
Quantização
Codificação
3.8 VQ - Vector Quantization (Quantização Vetorial)
Definição
Dicionário de Vetores
Algoritmo LBG
Scalar Quantization/Vector Quantization e
Vector Quantization/Vector Quantization
Classified VQ Coding
Predictive VQ Coding
Adaptive Transform VQ Coding
BTC/VQ Coding
3.9 Técnicas de Segunda Geração
3.10 Formatos
31
31
32
32
33
34
35
37
38
38
40
40
41
42
43
43
44
44
45
45
45
46
46
48
48
48
49
49
50
50
51
54
54
54
55
55
55
56
56
56
58
59
59
60
60
61
Padrões de Formatos de Imagens
Formato BM
Formato JPEG
3.11 Conclusão
4. Descrição do Sistema
4.1 Hardware
4.2 Apresentação do Sistema
Compressão
Descompressão
Conversão de Arquivos BM
Medidas de Distorção
Algoritmo LBG
Interface PixelWare
Estrutura Interna
4.3 Algoritmos
RLC - Run Length Coding
MREAD - Modified Relative Element
Address Designate Coding
BTC - Block Truncation Coding
PCM - Pulse Code Modulation
DPCM - Differential Pulse Code Modulation
PC - Pyramid Coding
DCT - Discrete Cosine Transform Coding
VQ - Vector Quantization
VQ Pura
VQ/BTC
4.4 Conclusões
5. Resultados
6. Conclusões
Apêndices
A - Código Modificado de Huffman
A1 - Bits Menos Significativos para Seqüências de Brancos
A2 - Bits Mais Significativos para Seqüências de Brancos
A3 - Bits Menos Significativos para Seqüências de Pretos
A4 - Bits Mais Significativos para Seqüências de Pretos
B - Código de Huffman para Modos do Algoritmo MREAD
C - Compressão DPCM
C1 - Compressão Sem Perda de Informação
C1.1 Bits Menos Significativos (erros entre -31 e 31)
C1.2 Bits Mais Significativos (erros < -31)
C1.3 Bits Mais Significativos (erros > 31)
61
61
62
66
67
67
68
68
69
69
70
70
71
73
74
74
75
76
77
78
80
82
83
83
84
84
85
C2 - Compressão Com Perda de Informação
C2.1 Quantização em 16 Níveis
C2.2 Quantização em 8 níveis
C2.3 Quantização em 2 níveis
C2.4 Quantização Adaptativa
D - Compressão PC
D1 - Matriz de Convolução
D2 - Códigos de Huffman
D2.1 Quantização em 3 Níveis
D2.2 Quantização em 5 Níveis
D2.3 Quantização em 9 Níveis
D2.4 Quantização em 17 Níveis
E - Compressão DCT
E1 - Matriz de Alocação de Bits
E2 - Quantização
F - Compressão VQ
F1 - Alfabeto VQ Pura
F2 - Alfabetos VQ/BTC
F2.1 Bit Maps
F2.2 Parâmetros Estatísticos
Referências Bibliográficas
Bibliografia Recomendada
Lista de Figuras
Figura 2.1
Figura 2.2
Figura 2.3
Figura 2.4
Figura 2.5
Figura 2.6
Figura 2.7
Figura 2.8
Figura 2.9
Figura 2.10
Figura 2.11
Figura 2.12
Figura 2.13
Figura 3.1
Figura 3.2
Figura 3.3
Figura 3.4
Figura 3.5
Figura 3.6
Figura 3.7
Figura 3.8
Figura 3.9
Figura 3.10
Figura 3.11
Figura 3.12
Figura 3.13
Figura 3.14
Figura 3.15
Figura 3.16
Figura 3.17
Figura 3.18
Figura 3.19
Figura 3.20
Figura 3.21
Figura 3.22
Figura 3.23
Experimento de Weber-Fechner
∆L/L em função de log(L)
Ilustração do efeito mach band
Inibição lateral
Resposta espacial das células da retina
Modelo do sistema visual humano
Modelo da compressão de imagens
Mapeamento da codificação seqüencial
Mapeamento por transformação linear
Quantização: relação entre entrada e saída
Construção do código de Huffman
Evolução da razão de compressão média das técnicas
de primeira geração
Razão de compressão média das técnicas de primeira
e segunda gerações
Modelo markoviano para representação de sinais binários
CCITT - codificação READ modificado: modos de
codificação e pixels de referência
Blocos originais reconstruídos por truncagem de blocos
Bits independentes em bloco 4x4, compressão BTC
PCM básico
Saltos de luminância na compressão PCM
Exemplo de quantização com pseudo-ruído
Compressão DPCM
DM - típicos sinais de entrada e saída
Pixels usados na predição bidimensional
Compressão por transformada
Exemplos de zonas usadas na compressão DCT
Exemplo de alocação de bits a 0,5 bits/pixel para a
codificação zonal, bloco de 16x16 pixels
Representação gráfica unidimensional da geração da
pirâmide gaussiana
Impulso ω(r) em função do parâmetro a
Compressão SQ/VQ
Compressão VQ/VQ
Classificação de vetores
Matriz de atribuição de bits - compressão adaptativa
por transformada/VQ
Header das imagens BM na versão 2.0
Valores possíveis para os parâmetros de compressão do
formato BM
Compressão DCT (JPEG)
Preparação dos coeficientes quantizados para codificação
06
06
07
08
09
10
11
12
12
14
18
22
22
27
33
34
38
39
39
41
42
44
45
47
49
50
51
53
58
58
59
60
62
63
63
Figura 3.24
Figura 3.25
Figura 3.26
Figura 4.1
Figura 4.2
Figura 4.3
Figura 5.1
Figura 5.2
Figura 5.3
Figura 5.4
Figura 5.5
Figura 5.6
Figura 5.7
Figura 5.8
Figura 5.9
Figura 5.10
Figura 5.11
Figura 5.12
entrópica
Descompressão DCT
Compressão JPEG sem perda de informação
Predição por vizinhança
Interface PixelWare - algoritmos de compressão de
imagens disponíveis
Interface PixelWare - resultados de compressão
Módulos do sistema de compressão de imagens
Imagens-amostras originais (8 bits/pixel)
Imagens-amostras originais (1 bit/pixel)
Imagem 1, reconstruída, PCM
Imagem 1, reconstruída, BTC
Imagem 1, reconstruída, DPCM
Distribuição típica dos erros de predição nas
imagens-amostras
Pirâmides da compressão PC, Imagem 1
Imagem 1, reconstruída, PC
Imagem 1, reconstruída, DCT
Imagem 1, reconstruída, VQ
Imagem 6 original, VQ pura e associada a BTC
Imagem 1, reconstruída, JPEG
64
65
65
65
71
72
73
Lista de Tabelas
Tabela 2.1
Tabela 2.2
Tabela 3.1
Tabela 3.2
Tabela 3.4
Tabela 5.1
Tabela 5.2
Limites de intervalos e valores representativos para
quantização em 4 níveis, para a distribuição gaussiana,
média zero e variância um
Códigos típicos
CCITT - READ modificado: tabela de códigos
Combinações permitidas para média e desvio padrão a
16 níveis de cinza, compressão BTC
Codificação adaptativa do plano de bits a 256 níveis de cinza
Resultados da compressão e descompressão da Imagem 1
(1 bit/pixel)
Resultados da compressão e descompressão da Imagem 1
(8 bits/pixel)
16
17
30
35
38
Lista de Abreviações
BTC
BM
CBM
CCITT
DBMS
DCT
DM
DPCM
EDIC
Block Truncation Coding
Bit Map
Compressed Bit Map
International Telegraph and Telephone Consultative Committee
Database Managing System
Discrete Cosine Transform
Delta Modulation
Differential Pulse Code Modulation
Edge Difference Coding
ISO
JPEG
KLT
LBG
MAE
MSE
MREAD
PC
PCM
PDI
PSNR
RAC
READ
RLC
SNR
SQ
TC
VQ
International Standard Organization
Joint Photographic Experts Group
Karhunen-Loève Transform
Linde, Buzo and Gray
Mean Absolute Error
Mean Square Error
Modified Relative Element Address Coding
Pyramid Coding
Pulse Coding Modulation
Processamento Digital de Imagens
Peak Signal to Noise Ratio
Relative Address Coding
Relative Element Address Coding
Run Length Coding
Signal to Noise Ratio
Scalar Quantization
Transform Coding
Vector Quantization
1. INTRODUÇÃO
O processamento digital de imagens (PDI) [GW87] é uma ciência relativamente recente,
tendo proporcionado suas primeiras aplicações reais na década de 60, com o surgimento
dos computadores de terceira geração, que ofereciam a velocidade e a capacidade de
armazenamento requeridas para implementações de seus algoritmos.
Uma das primeiras aplicações do PDI foi o processamento das imagens da sonda americana
Ranger 7. O sistema de captura de imagens da sonda, devido a suas limitações, fornecia
imagens com inúmeros tipos de degradação, como borramento, distorções geométricas e
ruído de fundo. Essas imagens foram processadas com sucesso por computadores digitais e,
desde então, as imagens geradas nas missões espaciais têm sido rotineiramente tratadas
pelo PDI.
Paralelamente, foi ampliado o campo de aplicações do PDI, de maneira que hoje essas são
encontradas nos ramos da medicina (radiografias, tomografias, cintilografias), biologia,
geografia, cartografia, meteorologia, astronomia, geologia, arqueologia, indústria e defesa,
dentre outros.
O PDI pode ser dividido em quatro áreas, de acordo com o objetivo do processamento
[GW87]:
•
•
•
•
Realce: visa a melhoria da qualidade da imagem. A qualidade de uma imagem pode ser
definida por critérios subjetivos (pode-se torná-la mais atrativa ao observador), ou
objetivos (aumento de contraste, intensificação de contornos, redução de ruído).
Restauração: procura eliminar degradações ocorridas no processo de geração da
imagem (distorções geométricas e fotométricas causadas por falhas no sensoriamento,
perturbações atmosféricas e mecânicas).
Análise: o seu objetivo é o de extrair informações contidas nos vários objetos de uma
imagem, de maneira automática, sem que seja necessária a intervenção humana. O
reconhecimento de padrões é uma aplicação direta das técnicas de análise de imagens.
Compressão: visa a redução da quantidade de bits necessária ao armazenamento ou à
transmissão de imagens digitais.
Uma imagem monocromática é definida [GW87] como uma função bidimensional de
intensidade luminosa I(x,y), onde x e y representam coordenadas espaciais e o valor de
I(x,y) é proporcional ao brilho (ou nível de cinza) no ponto (x,y).
Uma imagem digital, f(m,n), é o produto da discretização de I(x,y), em termos de
coordenadas espaciais e intensidade luminosa. Pode-se considerar uma imagem digital
como uma matriz, cujos índices de linha e coluna identificam um ponto da imagem,
enquanto que cada elemento da matriz identifica o nível de cinza naquele ponto. Os
elementos desta matriz são chamados de picture elements, pixels ou pels.
A quantidade de dados necessária para se representar cenas através de imagens digitais é
geralmente elevada. O objetivo da codificação, ou compressão de imagens é o de reduzir,
tanto quanto possível, o número de bits necessários a esta representação.
A compressão de imagens apresenta três campos básicos de aplicação [GW87]: (a)
armazenamento; (b) transmissão; (c) análise de imagens. Os métodos de compressão de
imagens são aplicáveis a qualquer um dos campos, mas é importante observar que, a
escolha de uma determinada técnica depende, além de outros fatores, da aplicação
específica.
São exemplos de aplicações da compressão de imagens, (a) a otimização da utilização de
recursos de memória de bancos de imagens para uso científico, educacional, médico,
artístico, etc.; (b) transmissão de imagens comprimidas de satélites, TV, radar,
teleconferência, fac-símile e outros tipos de comunicação via sinais digitais; (c) redução da
quantidade de dados processados por algoritmos de reconhecimento de padrões.
1.1 Motivação
O objetivo primário do trabalho aqui desenvolvido foi o de se executar um estudo intensivo
da compressão de imagens, visando à formação de uma base de conhecimentos em uma
área ainda não explorada pelo Núcleo de Processamento Digital de Imagens do DCCUFMG.
Paralelamente, a implementação de algoritmos e a sua avaliação com relação a uma
aplicação específica complementam a base teórica construída, fornecendo subsídios para
futuras incursões neste campo.
A aplicação definida foi a utilização dos algoritmos de compressão de imagens para a
construção de um banco de imagens de documentos históricos. Para tal aplicação, é
imprescindível que as imagens comprimidas sejam rapidamente recuperadas e exibidas.
Além disso, são desejáveis altas razões de compressão e baixo grau de distorção com
relação à imagem original. Dentre os diversos algoritmos estudados, foram selecionados
para a implementação aqueles que melhor se adequaram a tais restrições.
1.2 Organização do Trabalho
O presente trabalho encontra-se subdividido em seis capítulos e seis apêndices. O Capítulo
2 apresenta revisão bibliográfica sobre o tema compressão de imagens, procurando explorar
os conceitos fundamentais de PDI relacionados ao assunto. As diferentes etapas do
processo de compressão de imagens digitais são caracterizadas e são definidos critérios de
avaliação dos resultados. Classificam-se as técnicas de compressão de imagens, conforme
variados critérios e discute-se a sua evolução.
Os algoritmos de compressão de imagens mais importantes são analisados em detalhe e são
citadas algumas de suas principais variações no Capítulo 3. Os formatos de imagens raster
BM (Bit Map) e JPEG (Joint Photographic Experts Group) são apresentados.
O Capítulo 4 descreve as rotinas de compressão de imagens implementadas e as interfaces
que as disponibilizam. São definidos os parâmetros utilizados na implementação,
adequados a um conjunto de imagens de documentos históricos. É descrita a estrutura
modular do sistema, bem como a sintaxe das funções e dos utilitários disponíveis. Para os
casos em que é possível a priori a determinação da razão de compressão obtida, esta é
apresentada.
O Capítulo 5 descreve a aplicação das rotinas implementadas ao conjunto de imagens de
documentos históricos. É feito estudo comparativo do desempenho de cada algoritmo para
esta classe de imagens, considerando-se os aspectos de distorção final, tempos de
compressão e descompressão e razões de compressão obtidas. Como referência na
avaliação, também são apresentados os resultados obtidos pelo algoritmo proposto pelo
JPEG.
No Capítulo 6, são feitas as considerações finais, concluindo-se o trabalho.
Nos apêndices encontram-se os parâmetros de compressão adotados nas implementações e
definidos com base em estudos feitos com o conjunto de imagens-amostras de documentos
históricos.
2. CONCEITOS
Este capítulo apresenta conceitos não triviais do PDI, relacionados à compressão de
imagens, mencionados ao longo do trabalho.
Inicialmente, são discutidas as características do sistema visual humano, exploradas pelos
algoritmos desenvolvidos até hoje, e constrói-se um modelo de seu funcionamento. Ilustrase que, devido a tais características, determinados elementos de informação de uma imagem
podem ser desprezados, uma vez que são naturalmente filtrados pelo sistema visual
humano. Como conseqüência, a quantidade de bits necessária para a formação da imagem
pode ser reduzida.
Em seguida, é definido o processo de compressão de imagens, através da enumeração e
discussão das etapas que o compõem. São apresentados os critérios matemáticos de
medidas de distorção e os principais mecanismos de codificação disponíveis. Classificamse as técnicas de compressão de imagens quanto à preservação da imagem final, quanto ao
domínio em que atuam, quanto a sua fundamentação e quanto aos parâmetros da
compressão.
2.1 Sistema Visual Humano
Em muitas das aplicações do PDI, o objetivo final é a análise visual subjetiva da imagem,
realizada pelo observador [Lim90]. Este fato justifica o estudo do sistema visual humano,
na medida em que as técnicas de PDI utilizadas em tais aplicações devem ser adequadas ao
mesmo. Neste item discutem-se brevemente as características do sistema visual humano,
relacionando-as com os aspectos fundamentais da compressão de imagens. Constrói-se em
seguida um modelo de seu funcionamento.
Do ponto de vista funcional [KIK85], o olho é um órgão de forma aproximadamente
esférica, com cerca de 2 cm de diâmetro, que captura a luz do meio externo e a focaliza em
sua superfície posterior. Na interface com o meio externo, à frente do olho, encontra-se a
córnea, uma membrana transparente e rígida. A principal função da córnea é refratar a luz
incidente, como uma lente convexa. A córnea é responsável por 2/3 do desvio total da luz,
para uma correta focalização.
Atrás da córnea encontra-se a íris. Controlando o tamanho da pupila, orifício no seu centro,
a íris altera a quantidade de luz que penetra no olho. Seu diâmetro pode variar de 2 a 9 mm.
Esta abertura pode ser modelada como um filtro bidimensional passa-baixas, sendo a
freqüência de corte mais alta correspondente à menor abertura. Aumentos contínuos no
tamanho da pupila implicam em redução da freqüência de corte.
Entre a íris e o humor existe um conjunto de fibras transparentes, que constituem a lente do
olho. Com uma forma biconvexa, a lente completa de maneira acurada a focalização da luz.
A forma da lente não é perfeita, o que causa aberração esférica, manifestada como um
ligeiro borramento no plano focal. Tal borramento pode ser modelado como um filtro
passa-baixas.
A retina, superfície na qual se forma a imagem, cobre aproximadamente 65% da parte
interna do olho. Ela é a responsável pela conversão da luz em sinais nervosos. Existem dois
tipos de células receptoras de luz na retina, os cones e os bastonetes. Os cones, cujo número
é de aproximadamente 7 milhões, são menos sensíveis que os bastonetes, detectam cores e
distingüem detalhes em uma imagem. Os bastonetes, que somam aproximadamente 120
milhões, são mais sensíveis à luz que os cones, identificam formas e não percebem cores.
Cones e bastonetes encontram-se distribuídos ao longo da retina de maneira irregular.
Diretamente no foco da retina há uma pequena depressão, a fóvea. Não há bastonetes nesta
região e a maioria dos cones do olho se encontra ali. Isto explica o fato de que uma visão
detalhada só é obtida com a fixação do olhar em um objeto (imagem formada na fóvea).
Depois que os feixes de nervos direito e esquerdo deixam os olhos, eles se encontram em
um ponto chamado quiasma. Cada feixe é subdividido em dois outros, que se misturam
com um feixe do outro olho, formando dois novos feixes. Essa mistura é parcialmente
responsável pela visão estereoscópica. As fibras continuam o seu caminho até o córtex
visual, onde os sinais nervosos são processados.
Lei de Weber-Fechner
Os fotoreceptores são responsáveis pela transformação da luz incidente em sinais elétricos e
pela compressão de sua faixa dinâmica. Esta compressão é realizada, de acordo com a Lei
de Weber-Fechner [KIK85], segundo uma função logarítmica. O seguinte experimento
ilustra a relação:
se um campo visual de luminância L é dividido em duas partes por uma linha reta e a
luminância de uma das partes é aumentada em um ∆L (Figura 2.1), progressivamente, até
que um observador perceba a variação, a razão ∆L/L permanece constante para grandes
variações de L (Figura 2.2).
Figura 2.1 - Experimento de Weber-Fechner.
Figura 2.2 - ∆L/L em função de log(L) [Lim90].
Isto significa que, quando L aumenta, aumenta também o ∆L necessário à percepção da
diferença de luminância das duas áreas. Assim, o sistema visual mantém constante a sua
sensibilidade em relação a uma larga faixa dinâmica de intensidade luminosa (Figura 2.2).
Pode-se escrever:
∆L/L ≅ constante, ou
(2.1)
dL/L = d(log L) ≅ constante
(2.2)
Este experimento explica parcialmente o fato de que a presença de ruído aleatório
uniformemente distribuído é mais visível em regiões escuras da imagem. Para as regiões
mais claras, um nível mais elevado de ruído é necessário para torná-lo igualmente
perceptível.
Efeito Mach Band
Outro efeito que merece ser comentado neste trabalho é o conhecido como mach band
[Lim90]. Considere-se a Figura 2.3. Apesar das intensidades dentro de cada uma das faixas
verticais de cinza serem constantes, apresenta-se ao observador a ilusão de que há um
aumento de intensidade na borda esquerda de cada faixa e uma diminuição da mesma na
borda direita, o que produz um efeito de realce de bordas. Isto sugere que a preservação
precisa das bordas não é necessária na compressão de imagens [Lim90].
Excitação e Inibição
As conexões entre as células das retinas são responsáveis pela chamada inibição lateral
[KIK85], cujo mecanismo é ilustrado na Figura 2.4. Quando uma célula A é excitada,
produz um trem de pulsos, de freqüência diretamente proporcional à intensidade da luz
(Figura 2.4 a). Se outra célula vizinha B é também excitada, esta inibe o trem de pulsos
gerado em A (Figura 2.4 b). A desinibição de A ocorre quando o efeito causado por B é
inibido pela excitação de uma terceira célula, C, nas vizinhanças de B, mas distante o
suficiente de A para não poder agir sobre ela.
Figura 2.3 - Ilustração do efeito mach band
Se a resposta destas células for considerada espacialmente, será obtida a função mostrada
na Figura 2.5. Claramente, este comportamento corresponde a uma filtragem passa-altas.
Células Ganglionares
Define-se como campo receptivo de uma célula, a área da retina que pode influenciar o seu
comportamento, e como excitação mais efetiva aquela que provoca na célula a geração de
um trem de pulsos de máxima freqüência. Devido às ligações entre as células, o campo
receptivo é dividido em dois tipos de regiões, as excitatórias e as inibitórias.
A excitação mais efetiva para uma célula ganglionar é um círculo iluminado, de diâmetro
igual a 0,2 mm, enquanto que o seu campo receptivo também é circular, com áreas
excitatórias no centro e nas bordas, respectivamente. Neste nível do sistema visual, a
informação é processada independentemente da orientação espacial da excitação e também
da intensidade luminosa (áreas circulares), sendo importantes apenas as diferenças dentro
do campo receptivo. Estas células desempenham, evidentemente, importante papel na
detecção de contraste e de bordas, o que pode ser modelado como uma filtragem
bidimensional passa-altas.
Figura 2.4 - Inibição lateral, a) ativação, b) inibição, c) desinibição [KIK85].
Figura 2.5 - Resposta espacial das células da retina [KIK85].
Córtex Visual
Localizado na parte posterior do cérebro, o córtex visual é uma camada de 2 mm de
espessura, formada por poucos tipos de células nervosas.
As células do tipo simples possuem campo receptivo elíptico, com o centro em forma de
barra, circundado por duas regiões opostas, excitatória e inibitória. A excitação mais efetiva
é uma faixa orientada na mesma direção que a barra central do campo receptivo. Neste
nível, o sistema visual humano processa orientações específicas. Para uma orientação fixa,
se a excitação é rotacionada no campo receptivo, o trem de pulsos varia senoidalmente. É
interessante notar-se a similaridade entre este fenômeno e as várias máscaras usadas na
detecção de bordas e linhas por operadores locais, como Roberts, Sobel, Kirsh, etc.,
[Lim90].
As células do tipo complexo também são sensíveis a orientação da excitação, porém, não é
importante a posição da excitação no campo receptivo. A excitação mais efetiva para as
células do tipo hipercomplexo também exige uma orientação específica, mas, além disso,
requer uma descontinuidade, tal como a interrupção de uma linha, ou a existência de um
vértice.
Modelo para o Sistema Visual Humano
Todas as propriedades descritas nessa seção podem ser sumarizadas pelo diagrama da
Figura 2.6. São caracterizadas as diversas etapas do processamento realizado pelo sistema
visual humano nos sinais visuais que recebe.
O primeiro bloco representa uma filtragem espacial isotrópica passa-baixas, representando
a aberração da lente, o efeito da dilatação da pupila e a limitação da freqüência induzida
pelo número finito de fotoreceptores. É seguido pelo comportamento não linear dos
fotoreceptores, representado por uma curva logarítmica simples. No nível da retina, esta
transformação não linear é seguida por uma filtragem isotrópica passa-altas, correspondente
à inibição lateral. Finalmente, um banco de filtros direcionais atua sobre os estímulos, ao
nível das células do córtex.
Figura 2.6 - Modelo do sistema visual humano [KIK85].
2.2 Compressão de Imagens
O processo de compressão de imagens [GW87] pode ser modelado por uma seqüência de
três operações, como ilustra a Figura 2.7. O mapeamento transforma os dados de entrada
(imagem original) do domínio dos níveis de cinza, para outro domínio específico, onde a
quantização e a codificação poderão ser mais eficientemente aplicadas. Na quantização,
cada dado mapeado é restrito a um conjunto finito de valores possíveis, para que uma
quantidade menor de bits possa representá-lo. Finalmente, na codificação, uma palavra é
associada a cada saída quantizada.
Mapeamento
Tranforma o conjunto de números que representa os níveis de cinza em um outro conjunto
de números.
Em uma das técnicas de compressão de imagens, por exemplo, a seqüência de pixels da
imagem f(m1,n1), f(m1,n2), . . . , f(mM,nN) é mapeada em uma seqüência de pares (g1,l1), (g2,l2)
,. . ., (gk,lk), onde g representa o nível de cinza e l o tamanho da i-ésima seqüência (Figura
2.8). Este mapeamento é do tipo reversível, dado que a seqüência de pixels original pode
ser reconstruída de maneira exata, a partir dos dados mapeados.
Figura 2.7 - Modelo da compressão de imagens [GW87].
Figura 2.8 - Mapeamento da codificação seqüencial [GW87].
Um outro exemplo de mapeamento é a transformação linear ilustrada na Figura 2.9, que
pode ser expressa pela relação:
Y = AX.
(2.3)
A transformação pode ser ou não reversível, dependendo da matriz A utilizada. Neste caso,
a matriz de pixels X, com x1 = f(m1,n1), x2 = f(m1,n2),. . ., xT = f(mM,nN),é transformada na
matriz de coeficientes Y. Particularmente, se os elementos x1 , x2 , . . ., xT são altamente
correlacionados, a matriz A é escolhida de forma que os coeficientes y1 , y2, . . ., yT sejam
menos correlacionados, para que se possa codificá-los mais eficientemente.
yO
L
M
y P
M
P
M
.P
M
P
.P
M
M
.P
M
Ny P
Q
21
2
T
a
L
M
a
M
M
.
M
.
M
M
.
M
Na
11
1
=
T1
Figura 2.9 -Mapeamento por transformação linear.
O mapeamento por diferença será obtido se for usada a matriz:
a 12
a 22
.
.
.
aT 2
.
.
.
.
.
.
.
.
.
.
.
.
. a 1n
. a 2n
. .
. .
. .
. aTT
xO
O
L
M
P
x P
M
P
P
M
P
.P
M
P
P
.P
M
P
M
P
.P
M
P
Q Nx P
Q
1
2
T
1
L
M
1
M
M
0
M
.
M
M
.
M
.
M
M
0
M
M
N0
0 0
.
−1 0
.
1 −1 0
0 1 −1
.
.
.
.
.
.
.
.
.
.
.
.
. .
0
. .
0
. .
0
. .
0
. .
.
. .
.
. −1 1
. 0 −1
0
0
0
0
.
.
0
1
O
P
P
P
P
P
P
P
P
P
P
P
Q
na Equação 2.3.
O primeiro elemento de Y é y1 = x1. Entretanto, todos os outros coeficientes são obtidos por:
yi = xi -1 - xi
.
(2.4)
Se os níveis de pixels adjacentes da imagem são próximos, então, na média, as diferenças yi
serão de menor amplitude, requerendo menos bits na sua codificação. O mapeamento por
diferença é também reversível.
Quantização
Considere-se o número de valores possíveis para cada coeficiente yi resultante da
transformação linear representada por (2.3). Cada coeficiente é uma combinação linear de n
pixels, isto é:
yi = ai1 x1 + ai2 x2 + . . . + aiT xT .
(2.5)
L
Se cada elemento xj no somatório acima pode assumir 2 diferentes valores, então, cada
L
LT
termo aij xj também assumirá 2 valores. Conseqüentemente, yi assumirá 2 diferentes
valores, resultando na necessidade de B = L.T bits para sua representação. Esta conclusão
indica que se deve reduzir a quantidade B de bits, para que se possa efetivamente
comprimir a imagem. A solução é a restrição do domínio de yi.
A quantização é um processo, cuja saída só pode apresentar um número limitado de valores
possíveis. Uma das maneiras de se obter a quantização de um determinado conjunto de
valores é dividir-se a entrada em um certo número de intervalos, como ilustrado na Figura
2.10.
Se um valor de entrada se encontra dentro do k-ésimo intervalo, o valor de saída
corresponde ao valor representativo daquele intervalo (por exemplo, seu ponto médio). A
quantização uniforme é aquela na qual todos os intervalos são iguais, enquanto que na
quantização não uniforme, os tamanhos dos intervalos diferem entre si.
A quantização é uma operação irreversível, porque, dado um certo valor de saída, o valor
de entrada que o originou não pode ser exatamente determinado.
Figura 2.10 - Quantização: relação entre entrada e saída.
Para alguns tipos de mapeamento, melhores resultados podem ser obtidos com o uso de
diferentes esquemas de quantizacão, de acordo com a natureza dos coeficientes. Assim,
para um conjunto de coeficientes de maior variância, um maior número de intervalos
poderia ser definido.
Quantização de Lloyd-Max
Seja V [Lim90] um valor escalar a se quantizar, L o total de níveis de reconstrução usados
na sua representação e Vq o resultado da quantização, de maneira que:
Vq = Q(V) = ri,
di-1 < V ≤ di,
(2.6)
onde Q representa a operação de quantização, ri (para 0 ≤ i ≤ L) os níveis de reconstrução e
di (0 ≤ i ≤ L) os L+1 limites de decisão.
Vq pode ser expresso como:
Vq = Q(V) = V + eq,
(2.7)
2
onde a grandeza e q pode ser vista como uma medida de distorção d(V , Vq). Os níveis de
reconstrução e limites de decisão podem ser determinados pela minimização de uma função
apoiada em d(V , Vq), como a distorção média D, dada por:
di
D = E[d(V , Vq)] =
z
d(V0 , Vq) pf(V0) dV0 .
V 0 = di − 1
(2.8)
Para um quantizador uniforme, tem-se:
∆
di - di-1 =
1≤i≤L e
(2.9)
1≤ i≤ L,
ri = (di + di-1)/2
(2.10)
onde ∆ é igual ao intervalo entre dois níveis de reconstrução consecutivos.
No caso da quantização não uniforme, a determinação de ri e di é freqüentemente baseada
no critério do mínimo erro médio quadrático (MMSE - Minimum Mean Square Error)
(quantização de Lloyd-Max). Assumindo-se V como uma variável aleatória com função
densidade de probabilidade pf(V0), e usando-se o critério MMSE, determinam-se rk e dk pela
minimização da distorção média:
2
2
D = E[d(V , Vq)] = E[e q] = E[(Vq - V0) ]
(2.11)
∞
z
2
pf(V0) (Vq - V0) dV0 .
=
V 0 =−∞
(2.12)
Sendo V0 um dos L valores de reconstrução, tem-se:
L
D=
∑
i =1
di
z
2
pf(V0) (ri - V0) dV0 .
V 0 = di − 1
(2.13)
Para a minimização de D, pode-se provar [Lim90] que:
dk
z
z
1 ≤ i ≤ L
rk + rk + 1
2
1≤ i≤ L-
V 0 pV d
V 0 idV 0
rk =
V 0 = dk − 1
dk
pV d
V 0 idV 0
V 0 = dk − 1
(2.14)
dk =
1
d0 = - ∞
dL = ∞
As expressões acima afirmam que o nível de reconstrução rk é o centróide de pf(V0) no
intervalo dk ≤ 0 ≤ dk-1 e que o nível de decisão dk (exceto para k=0 e k=L) é o ponto médio
entre os níveis de reconstrução rk e rk+1 . O problema representado pelas Equações 2.14 foi
solucionado para algumas funções densidade de probabilidade, como a gaussiana. A Tabela
2.1 apresenta os valores rk e dk para esta distribuição, com quantização em 2 bits.
rk
dk
-1,5104
-0,4528
0,4528
1,5104
-0,9816
0
0,9816
∞
∞
Tabela 2.1 - Limites de intervalos e valores representativos para quantização em 4 níveis, para a distribuição
gaussiana, média igual a zero e variância igual a um [Lim90].
Codificação
Define-se uma palavra como um conjunto de bits ao qual se atribui um significado único. O
termo código representa um conjunto de palavras que é associado a um conjunto de valores.
A entrada da codificação é representada pelos T elementos do vetor v da Figura 2.7.
Supondo-se que cada elemento vi possa assumir um entre s valores (w1, w2,. . .,ws), a
codificação define para cada vi uma palavra binária ci, que estabelece uma correspondência
biunívoca com o valor assumido, wi . O processo é portanto reversível, dado que para uma
palavra ci , o valor wi pode ser exatamente determinado.
Um código de tamanho fixo é um conjunto de palavras que possuem o mesmo número de
bits. Um código unicamente decodificável é aquele do qual qualquer combinação de
palavras só pode ser decodificada de uma maneira, sem ambigüidades. Assim, o código
composto pelas palavras c1 = "0", c2 = "1", c3 = "01", c4 = "10" não é unicamente
decodificável, porque, a seqüência de bits "0011" poderia ser interpretada como a seqüência
das palavras c1c1c2 c2, ou c1c3c2 .
Um código instantâneo é aquele que pode ser imediatamente decodificável, ou seja, uma
vez lido o último bit de uma palavra, esta é reconhecida, sem que o valor dos bits que ainda
não foram lidos interfiram na sua interpretação. A Tabela 2.2 ilustra três tipos de códigos
usados para a representação de oito valores possíveis.
Entrada
Natural
Huffman
S2
w1
w2
w3
w4
w5
w6
w7
w8
"000"
"001"
"010"
"011"
"100"
"101"
"110"
"111"
"1"
"00"
"011"
"01010"
"01011"
"010010"
"010011"
"010001"
"00"
"01"
"10"
"1100"
"1101"
"1110"
"111100"
"111101"
Tabela 2.2 - Códigos típicos [GW87].
É desejável a determinação de um código com o menor número de bits possível. Uma vez
S
que podem ser definidas 2 palavras de mesmo tamanho b = log2 S bits, o código natural
S
com b bits pode representar até 2 valores de entrada. Este código é ótimo quando os
valores de entrada são equiprováveis, ou seja:
P(w1) = P(w2) = . . . = P(wS).
(2.15)
Para os casos em que as probabilidades diferem a cada wi , utilizam-se palavras de tamanho
variável, atribuindo às menores os valores mais prováveis, o que implicará numa redução
do número de bits gerado pela codificação.
Entropia
O termo entropia representa o grau de aleatoriedade de um conjunto de variáveis aleatórias
[GW87]. Supondo-se a existência de um conjunto de S variáveis aleatórias a1, a2 , . . . , aS ,
com probabilidades P(a1) ,P(a2) , . . . ,P(aS) , a entropia é definida como:
S
H=-
∑
k =1
(2.16)
Pk log2 Pk (bits)
Em geral, para o conjunto, o valor da entropia varia entre 0 e log2 S. No caso da
compressão de imagens, representa a quantidade de informação associada ao conjunto de
valores de entrada do sinal, definindo um limite inferior para o número médio de bits
necessário à codificação do mesmo. Portanto, o conjunto de variáveis aleatórias w1, w2,. .
.,wS, que representa os níveis de cinza de uma imagem digital, com probabilidades P1, P2, . .
. , PS , não pode ser codificado com o uso de menos que H bits/pixel, em média.
Isto significa que a entropia pode ser usada como critério de avaliação de desempenho de
um código particular. Se um código formado pelo conjunto de palavras c1, c2,. . ., cS de
comprimentos β1 , β2 ,. . ., βS , o número médio de bits requerido na codificação será:
S
R=
∑
βk Pk
k =1
(2.17)
Se o valor de R é próximo do valor de H, a codificação está próxima do ótimo.
O termo razão de compressão (Rc) define a relação entre o número de bits da imagem
original e o número de bits da imagem comprimida. Para imagens a 8 bits/pixel, tem-se:
Rc = (8 bits/pixel) / Hc,
onde Hc é a entropia efetiva da imagem comprimida, em bits/pixel.
Códigos de Huffman
Um método para geração de códigos ótimos unicamente decodificáveis, que resulta em taxa
média mínima de bits, é o chamado método de Huffman [Lim90].
O algoritmo consiste na determinação dos valores de P1, P2, . . . , PS, seleção sucessiva do
par de valores de menor magnitude, aglutinação dos mesmos e associação do novo valor
gerado a um caminho dentro de uma árvore binária. Ao final do processo, os caminhos
definidos da raiz até cada uma das folhas determinarão os códigos para os valores w1, w2,. .
.,wS. A Figura 2.11 ilustra a geração de código de Huffman para um universo de S = 6
valores possíveis.
O algoritmo descrito acima gera palavras de tamanho variável, associando claramente aos
valores mais prováveis, palavras de menor comprimento. Para os valores da Figura 2.11,
podem-se calcular:
H=
-1 * [(0,4 * log 0,4) + (0,3 * log 0,3) + (0,1 * log 0,1) +
+ (0,1 * 0,1) + (0,06 * log 0,06) + (0,04 * log 0,04)] =
R=
2,14 bits
1 * 0,4 + 2 * 0,3 + 3 * 0,1 + 4 * 0,1 + 5 * 0,06 + 5 * 0,04 =
2,20 bits
Níveis
Pk
Passo 1
Passo 2
Passo 3
Passo 4
Passo 5
ck
w1
w2
w3
w4
w5
0,4
0,3
0,1
0,1
0,06
0,4
0,3
0,1
0,1
0,1
0,4
0,3
0,1
0,2
0,4
0,3
0,3
0,4
0,6
1,0
w6
0,04
"0"
"11"
"100"
"1011"
"10101
"
"10100
"
Figura 2.11 - Construção do código de Huffman.
Código de Lempel-Ziv
O esquema de codificação proposto por Lempel e Ziv [ZL78], ao contrário do código de
Huffman, não necessita do conhecimento prévio da tabela de palavras e não gera palavras
de tamanhos diferentes para valores com diferentes probabilidades. O processo de
codificação se inicia com uma tabela contendo tantas palavras quantos forem os valores
possíveis, sendo estas palavras de tamanho fixo, ou variável. Na medida em que o processo
de codificação avança, novas palavras são adicionadas ao código, adaptativamente.
Por exemplo, para 4 possíveis valores, a,b,c, e d, a tabela inicial seria:
a:
b:
c:
d:
"00"
"01"
"10"
"11".
Considerando-se a seqüência a ser codificada abab, o algoritmo procura, a partir da posição
corrente, o maior padrão reconhecível dentro da seqüência. Assim, num primeiro passo, o
maior padrão reconhecido seria a, surgindo um padrão novo, ab. Para este último é criada
uma nova entrada na tabela, que passa a ser a seguinte:
a:
b:
c:
d:
ab:
"000"
"001"
"010"
"011"
"100".
Neste momento, o valor "000" é armazenado (ou transmitido), indicando o primeiro padrão
processado. No próximo passo, a partir do segundo elemento da seqüência, procura-se
novamente pelo maior padrão reconhecido, neste caso, b. Uma nova palavra é criada para
ba, e é armazenado o valor de b:
a:
b:
c:
d:
ab:
ba:
"000"
"001"
"010"
"011"
"100"
"101".
Na decodificação, tendo sido recebidas as palavras correspondentes a a e b, gera-se também
o valor do padrão ab. Em um terceiro passo, o padrão ab já é reconhecido. Aqui é possível
a primeira compressão, substituindo as duas palavras de 2 bits inicialmente necessárias para
a codificação de ab por uma palavra de 3 bits.
A codificação Lempel-Ziv é usada em alguns formatos de imagens digitais, como o GIF
(Graphics Interchange Format) e TIFF (Tag Image File Format) [KL92].
Medidas de Distorção
As técnicas normalmente utilizadas em compressão de imagens resultam em um certo grau
de degradação da imagem original. O erro médio quadrático (MSE - Mean Square Error) é
um critério amplamente usado na aferição da fidelidade da imagem reconstruída, sendo
definido para uma imagem M x N como [Jain81]:
N
MSE = 1/(NM)
M
∑∑
2
E(ui,j - u'i,j) ,
i =1 j =1
(2.18)
onde ui,j e u'i,j representam os pixels da imagem original e reconstruída, respectivamente e E,
a função esperança matemática. Experimentalmente, o MSE é estimado pelo MSE
amostral:
N
MSE = 1/(NM)
M
∑∑
2
(ui,j - u'i,j) .
i =1 j =1
(2.19)
Opcionalmente, pode-se usar o erro médio absoluto (MAE - Mean Absolute Error),
definico como:
N
MAE = 1/(NM)
M
∑∑
|ui,j - u'i,j|.
i =1 j =1
(2.20)
Há duas definições para a razão sinal/ruído (SNR - Signal to Noise Ratio) correspondente
ao erro descrito acima:
2
PSNR = 10 log10 [(valor de pico da imagem original) / MSE]
(dB)
(2.21)
2
SNR = 10 log10 (σu / MSE)
(2.22)
(dB),
2
onde σu é a variância da imagem original. Tipicamente, o valor de pico usado no cálculo de
PSNR é igual a 255 (imagens de 8 bits/pixel).
Imagens Gráficas
Este trabalho se referirá em diversas seções ao termo imagem gráfica. Mitchell [MD80]
define a imagem gráfica como a imagem de cena gerada artificialmente, usando-se número
limitado de níveis de cinza arranjados segundo um determinado padrão, para conter
informações. Incluem esta categoria as imagens não naturais, como as de documentos,
mapas, telas de computador, desenhos, etc.
2.3 Classificação das Técnicas
As técnicas de compressão de imagens podem ser classificadas segundo diversos aspectos.
Quanto à preservação da informação [RJ91]: os níveis de qualidade e
inteligibilidade toleráveis na imagem reconstruída variam amplamente, de acordo com a
aplicação. Em alguns casos, é desejável que a imagem original seja preservada na sua
totalidade. As técnicas de codificação utilizadas com esta restrição são as chamadas
preservadoras de informação. Em outras situações, admite-se que a imagem sofra um
determinado grau de degradação, de forma que mais elevados índices de compressão sejam
atingidos. Tais técnicas são conhecidas como não preservadoras de informação.
•
Quanto ao domínio [Prat78]: os métodos que combinam espacialmente valores de
pixels de uma maneira definida são chamados métodos do domínio espacial. Aqueles que
utilizam, ao invés disso, um conjunto de coeficientes de transformada, são os métodos do
•
domínio das transformadas. Os métodos híbridos processam as imagens em ambos os
domínios.
Quanto à sua fundamentação [KIK85]: dois aspectos tornam possível a
compressão de imagens. Em primeiro lugar, os dados originados de uma imagem não são
aleatórios. Amostras adjacentes possuem níveis de cinza próximos, exibindo portanto uma
•
Figura 2.12 - Evolução da razão de compressão média das técnicas de primeira geração [KIK85].
Figura 2.13 - Razão de compressão média das técnicas de primeira e segunda gerações [KIK85].
correlação espacial importante. Se tal correlação for adequadamente explorada, a
quantidade de bits necessária à representação da imagem pode ser reduzida. As chamadas
técnicas de primeira geração são aquelas baseadas nessa visão clássica do problema da
compressão de imagens. Em segundo lugar, a grande maioria dos sistemas de
processamento de imagens tem como usuário final o olho humano. O mecanismo de
percepção visual do cérebro, mais recentemente estudado, apresenta determinadas
particularidades (como a sensibilidade direcional dos neurônios do córtex visual) que são
exploradas pelas técnicas de segunda geração. A Figura 2.12 ilustra a evolução das razões
de compressão obtidas pelas técnicas de primeira geração, indicando que foi atingido um
patamar de saturação em torno de 10:1. A Figura 2.13 mostra a mesma evolução, levandose em conta o surgimento das técnicas de segunda geração.
Quanto aos parâmetros de codificação [KIK85]: os parâmetros de codificação
podem ser fixos durante todo o processamento, ou podem ser adaptativos, variando dentro
da imagem de acordo com as suas características locais.
•
2.4 Conclusão
Neste capítulo, foram apresentados os conceitos envolvidos com a compressão de imagens,
e a descrição do funcionamento do sistema visual humano. O modelo ilustrado na Figura
2.6 mostra que o mecanismo de percepção dos sinais visuais apresenta propriedades que
podem ser exploradas pelos algoritmos de compressão de imagens. O componente que
introduz uma filtragem passa-baixas, em função da aberração esférica e da imperfeição da
lente do olho, provoca um borramento da imagem original e permite o descarte de uma
determinada informação de bordas e ruídos. O caráter logarítmico da percepção relativa de
luminância, representado pelo segundo elemento do modelo, ilustra como as regiões de alta
freqüência são mascaradas de acordo com a luminância de fundo, enquanto que a resposta
espacial das células da retina indica uma faixa de freqüência de percepção preferencial
(terceiro elemento do modelo). Finalmente, a especialização das células do córtex visual
revela a presença de diferentes padrões de sensibilização das mesmas, incluindo formas e
direções definidas para cada tipo de célula, o que sugere a decomposição das imagens em
componentes direcionais e a codificação destes em separado.
A abordagem da teoria de compressão de imagens procurou definir o processo, dividindo-o
nas etapas de mapeamento, quantização e codificação. A análise de tais etapas indica com
clareza os pontos onde ocorre a redução da entropia da imagem e, em alguns casos, a perda
de qualidade da mesma em relação à original. Foi apresentada a quantização de Lloyd-Max,
utilizada neste trabalho, bem como os algoritmos de geração de códigos de Huffman e
Lempel-Ziv. Os parâmetros de medida de distorção foram definidos também neste capítulo.
Nos capítulos seguintes, são discutidos em detalhe os principais algoritmos, sua
implementação e é feita a análise dos resultados obtidos na compressão das imagens de
documentos históricos.
3. ALGORITMOS
Neste capítulo, são descritas as principais técnicas de compressão de imagens
desenvolvidas até hoje: Run Length Coding e Modified Relative Element Address Designate
Coding (ambas aplicáveis a imagens binárias), Pulse Code Modulation, Differential Pulse
Code Modulation, Block Truncation, Pyramid Coding, Transform Coding e Vector
Quantization (aplicáveis a imagens com múltiplos níveis de cinza). Além destas, cita três
das chamadas técnicas de segunda geração: codificação de contorno-textura, decomposição
direcional e codificação de bordas.
Para cada uma das técnicas, são apresentados os algoritmos de compressão e
descompressão de maneira estruturada. Quando conveniente, são discutidos aspectos
matemáticos e estatísticos relacionados às operações de quantização e codificação. São
ainda definidas algumas variações que visam à melhor adequação dos algoritmos a uma
determinada aplicação ou à melhoria de seu desempenho. Também são apresentadas
algumas tabelas de parâmetros, que complementam a definição dos algoritmos.
Finalmente, apresentam-se os formatos de imagens BM e JPEG, sendo o primeiro o
adotado nas implementações e servindo o segundo como padrão de comparação na
posterior análise dos resultados.
Procura-se neste capítulo, não só a complementação da revisão bibliográfica iniciada no
capítulo anterior, como também o estabelecimento de um paralelo entre os diversos
algoritmos implementados, analisando-se os níveis de compressão que cada um deles pode
atingir, assim como a distorção causada nas imagens.
3.1 RLC - Run Length Coding (Codificação Seqüencial)
Um dos primeiros algoritmos de compressão de imagens [JN84] [Jain89]‚ um método
muito aplicado para imagens binárias, embora também possa ser utilizado na codificação de
imagens com múltiplos níveis de cinza.
Trata-se de uma técnica preservadora de informação, de fácil implementação, que gera
imagens binárias com entropia de até 1 bit/pixel, dependendo das características da
imagem.
Descrição do Método
Baseando-se no fato de que as imagens binárias são constituídas de seqüências alternadas
de pixels brancos e pretos, ao invés de se codificarem os pixels individualmente, codificamse as quantidades de pixels brancos (ou pretos) dentro de cada seqüência. Como as
seqüências de brancos e pretos se alternam, não é necessária a codificação do nível.
A codificação seqüencial faz, invariavelmente, uso de palavras de tamanho variável, visto
que, em geral, seqüências grandes de um nível são menos freqüentes que as seqüências
menores. Uma vez que não há quantização, a imagem pode ser restaurada com exatidão, a
menos que ocorram erros na transmissão ou armazenamento. A codificação é feita linha a
linha.
Para simplificação, assume-se que todas as linhas sejam iniciadas por uma seqüência de
brancos (0 brancos, se a linha começar com um pixel preto). A cada final de linha, uma
palavra especial é adicionada ao código.
Algoritmo de Compressão
início
para cada linha da imagem faça
palavra resultante = '' "
nível = 0 (branco)
repita
R = número de ocorrências de pixels subseqüentes e adjacentes iguais a
nível
consultar na tabela de código a palavra correspondente a R
concatenar a palavra obtida à palavra resultante
se nível = 0
então nível = 1
senão nível = 0
fim se
até final da linha
concatenar palavra correspondente ao fim de linha à palavra resultante
armazenar a palavra resultante gerada para a linha
fim para
armazenar palavra correspondente ao fim de imagem
fim.
Algoritmo de Descompressão
início
palavra = '' "
nível = 0
repita
ler próximo bit da imagem codificada
concatenar bit lido com palavra
se palavra existente
então determinar R correspondente
palavra = '' "
se (não é final de linha) e (não é final de imagem)
então gerar seqüência de R bytes com valor igual a
nível
se nível = 0
então nível = 1
senão nível = 0
fim se
senão se não é final de imagem
então nível = 0
fim se
fim se
fim se
até = final de imagem
fim.
Código Modificado de Huffman
O CCITT (International Telegraph and Telephone Consultative Committee) definiu uma
variação do algoritmo de Huffman [HR80], descrito no capítulo anterior, permitindo que
seqüências maiores pudessem ser codificadas, sem que isso acarretasse um aumento
exagerado no tamanho das palavras.
O Apêndice A apresenta o código modificado de Huffman, para um alfabeto de no máximo
R = 1728 pixels em seqüência. O sistema de codificação define a seqüência R como a soma
de dois termos, cujas palavras representativas são concatenadas para geração da palavra
final. O primeiro dos termos é igual ao quociente da divisão inteira de R por 64 e o
segundo, igual ao resto desta mesma divisão:
R = 64p + q
(p = 0,1,2,...,27)
(q = 0,1,2,...,63)
(3.1)
As palavras terminais no Apêndice A representam o valor de q e as palavras mais
significativas representam o valor de 64 p.
Sinais de uma fonte binária podem ser codificados com H(x) bits/símbolo, ao invés de 1
bit/símbolo, onde H(x) é a entropia da fonte. A redundância da fonte binária é portanto, 1 H(x). No caso de fontes com H(x) << 1, uma importante grandeza é o ganho máximo de
codificação seqüencial, ou máxima compressão, max Grlc, definido como:
max Grlc = 1 / H(x).
(3.2)
A Figura 3.1a ilustra o modelo markoviano de primeira ordem usado no estudo das fontes
binárias. Os estados possíveis são B e W, com as correspondentes probabilidades de
transição tw, tb :
tw = p { X(n) = B / X(n-1) = W }
(3.3)
tb = p { X(n) = W / X(n-1) = B }.
(3.4)
As probabilidades de estado P(W) = P { X(n) = W } e P(B) = P { X(n) = B } são
determinadas por :
P(W) = 1 - P(B) = tb / ( tw + tb)
(3.5)
P(B) = tw / ( tw + tb)
(3.6)
Figura 3.1 - Modelo markoviano para representação de sinais binários [JN84].
Note-se que as probabilidades de estado somam 1 por definição, enquanto que as
probabilidades de transição não estão sujeitas a esta restrição. Assim, para sinais
caracterizados por longas cadeias de brancos e pretos, (Figura 3.1b) :
tw << 1, tb << 1, tw + tb << 1,
(3.7)
enquanto que no outro extremo, se tb = tw = 1, a seqüência máxima é de 1 (Figura 3.1c).
A probabilidade de uma cadeia de Rk pixels no estado S [JN84]:
P(Rk / S) = ts(1-ts) Rk-1 ;
(Rk = 1,2,....,) (S = B,W,. . .)
(3.8)
onde o termo da direita representa a probabilidade de (Rk-1) transições para o mesmo
estado, seguida por uma transição para o estado oposto, o que encerra a seqüência.
Assumindo-se 3.7, a esperança matemática de um valor R, condicionado a um estado S ‚
dada por :
E [R/S] = 1 / ts;
S = B,W.
(3.9)
Reescrevendo-se 3.8,
P(Rk/S) = (E [R/S] - 1) -1 [ 1 - ( E [R/S] ) -1 ] Rk
(3.10)
A última equação implica em uma distribuição geométrica, ou exponencial discreta, para a
seqüência R.
Variações do Método
A principal variação proposta para codificação seqüencial de imagens binárias [Yasu80] é a
utilização de algoritmos para processamento bidimensional, nos quais também a correlação
vertical é explorada. São exemplos desses algoritmos, os chamados RAC (Relative Address
Coding), EDIC (Edge Difference Coding) e READ (Relative Element Address Designate
Coding) [Yasu80].
3.2 MREAD - Modified Relative Element Address Designate Coding
Dos mais eficientes algoritmos para compressão, sem perda de informação, de imagens
binárias. Recomendado pela CCITT [Jain89], MREAD é um método de codificação
bidimensional linha a linha [HR80], [Yasu80], no qual a posição de cada elemento de
transição na linha atual é codificada em relação a um outro pixel de transição localizado na
linha imediatamente anterior, ou na própria linha a ser codificada.
Proporciona razões de compressão acima das obtidas pela compressão seqüencial [HR80],
sendo também de fácil implementação.
Descrição do Método
O algoritmo se baseia na definição de pixels de referência durante a codificação das
seqüências de brancos e pretos, em relação aos quais será examinada a posição do próximo
pixel de transição a ser codificado. Um pixel de transição é aquele cujo nível difere do nível
do pixel imediatamente anterior, na mesma linha. A técnica faz uso de 5 pixels de transição
de referência, definidos como na Figura 3.2:
•
•
•
•
•
a0 : elemento inicial de transição da linha a ser codificada, definido pelo modo anterior
de codificação usado (discutido mais adiante). No início da codificação de uma linha‚
assumido como um pixel imaginário situado imediatamente à esquerda do primeiro
elemento da linha.
a1 : o próximo elemento de transição à direita de a0 (possui nível oposto ao de a0).
a2 : o próximo elemento de transição à direita de a1.
b1 : o próximo elemento de transição à direita de a0 mas, na linha anterior à codificada,
ou linha de referência.
b2 : próximo elemento de transição à direita de b1.
Se algum dos elementos de referência citados acima não existir, é assumido como estando
em uma posição imaginária, imediatamente à direita do último pixel da linha em questão.
Para a codificação, dependendo da posição relativa entre os pixels de referência, um dos
seguintes modos é ativado:
•
•
•
modo de passagem : ocorre quando b2 está à esquerda de a1 (Figura 3.2a). Após a
codificação, o pixel a0 é locado no elemento da linha de codificação, imediatamente
abaixo de b2.
modo horizontal : quando o modo de passagem não ocorre, sendo |a1b1| > 3. Neste
caso, as distâncias a0a1 e a1a2 são codificadas pelo código modificado de Huffman
(Apêndice A). Depois da codificação, a nova posição de a0 é ajustada para a2. Se o
modo está ativo para o primeiro pixel da linha de codificação, o valor (a0a1 - 1) é
codificado, ao invés de a0a1.
modo vertical : a1 é codificado relativamente a b1, pela distância a1b1, com os valores
0,1,2 e 3, à direita ou à esquerda de b1, sendo codificados conforme a Tabela 3.1. O
novo valor de a0 é setado para a1.
Observe-se que a primeira linha da imagem, por não possuir linha de referência, é
codificada pelo algoritmo RLC.
Modo
Elementos a codificar
Palavra
Passagem
Horizontal
Vertical
b1,b2
a0a1,a1a2
a1 sob b1
a1 à direita de b1
"0001"
"001"+M(a0a1)+M(a1a2)
"1"
"011"
"000011"
"0000011"
"010"
"000010"
"0000010"
a1 à esquerda de b1
a1b1=0
a1b1=1
a1b1=2
a1b1=3
a1b1=1
a1b1=2
a1b1=3
Tabela 3.1 - CCITT-READ modificado: tabela de códigos. M(a0a1) e M(a1a2) são palavras provenientes do
código modificado de Huffman (Apêndice A) [Jain89].
Algoritmo de Compressão
início
codificar primeira linha por RLC
para cada uma das outras linhas da imagem, na ordem em que ocorrem, faça
palavra resultante = '' "
repita
definir a0, a1, a2, b1, b2
se b2 < a1
então definir palavra pelo modo de passagem
a0 = b2
senão se |a1b1| < 3
então definir palavra pelo modo vertical
a0 = a1
senão se a0 = 0
entao a0a1 = a0a1 - 1
fim se
definir palavra pelo modo horizontal
a0 = a2
fim se
fim se
concatenar palavra à palavra resultante
concatenar palavra de fim de linha à palavra resultante
enquanto não fim de linha
armazenar palavra resultante
fim para
fim.
Algoritmo de Descompressão
início
decodificar primeira linha por RLC
repita
repita
identificar modo
definir novas posições dos pixels de referência
gerar seqüências de pixels
até fim de linha
até fim de imagem
fim.
Variações do Método
No caso da codificação MREAD aplicada à transmissão de imagens, recomenda-se
[Yasu80] que a cada k linhas seja codificada uma linha pelo algoritmo unidimensional
RLC. Isto reduzirá ligeiramente a razão de compressão obtida, eliminando entretanto, a
propagação de erros de transmissão.
Um quarto modo é ainda sugerido [Yasu80] para imagens que possuam muitas áreas com
seqüências de poucos pixels de mesmo nível (por exemplo, áreas de dithering). Trata-se do
modo descomprimido, no qual os pixels não são codificados.
3.3 BTC - Block Truncation Coding (Truncagem de Blocos)
Este algoritmo foi originalmente proposto por Mitchell [DM79], [MD80] para compressão
de imagens digitais com múltiplos níveis de cinza. Apresenta baixa sensibilidade a erros e é
de fácil implementação. Trata-se de uma técnica não preservadora de informação e, na sua
versão básica, gera imagens com entropia de 1 a 2 bits/pixel. É recomendado para
compressão de imagens gráficas.
Descrição do Método
O método consiste na divisão da imagem original em blocos de tamanho n x n mutuamente
exclusivos e exaustivos. Os k = n2 pixels de cada bloco são divididos em dois grupos
conforme apresentem níveis de cinza superiores ou inferiores a um limiar de quantização
calculado. O bloco é armazenado como um plano de bits, juntamente com seus parâmetros
estatísticos, permitindo, na descompressão, que a imagem seja reconstruída.
O brilho, contraste e as características mais perceptíveis da imagem são preservados. Na
ausência de grandes variações de níveis de cinza em um bloco, as pequenas variações são
mantidas. Esta característica é coerente com o sistema visual humano, que tende a mascarar
pequenas variações vizinhas a regiões de altas freqüências (Capítulo 2).
Algoritmo de Compressão
início
dividir a imagem em blocos de tamanho n x n (geralmente n = 4)
para cada bloco obtido faça
palavra resultante = '' "
calcular parâmetros do bloco
calcular limiar
para cada pixel do bloco faça
se valor do pixel < limiar
então concatenar 0 à palavra resultante
senão concatenar 1 à palavra resultante
fim se
fim para
codificar parâmetros do bloco e concatená-los à palavra resultante
armazenar palavra resultante
fim para
fim.
Algoritmo de Descompressão
início
repita
ler próxima palavra
dividir a palavra em 2 partes, referentes ao plano de bits e aos parâmetros do bloco
decodificar plano de bits e parâmetros
calcular níveis de reconstrução do bloco
reconstruir bloco de acordo com o plano de bits e com os níveis de reconstrução
calculados
até último bloco reconstruído
fim.
Figura 3.2 - CCITT - Codificação READ modificado: modos de codificação e pixels de referência [Jain89].
Parâmetros Estatísticos
Os parâmetros estatísticos calculados para cada bloco são a média aritmética (primeiro
momento), que corresponde à informação de brilho e a variância (segundo momento),
correspondente ao contraste. Estes valores, depois de calculados, são quantizados, no caso
mais simples, com 8 bits cada. Na descompressão, bloco é reconstruído com dois níveis de
cinza. Os pixels com valores maiores que o limiar de quantização binária recebem o valor b
e os pixels com valores menores ou iguais ao limiar, o valor a.
O primeiro e o segundo momentos são calculados pelas equações:
χ
χ2
σ
k
=
(1 / k)
∑
i =1
k
=
(1 / k)
∑
i =1
=
Xi
Xi2
(χ2 - (χ)2)1/2,
(3.11)
(3.12)
(3.13)
onde Xi= X1,X2,X3,. . . ,Xk são os valores dos pixels do bloco.
Sendo q o número de pixels com valores maiores que o limiar em um bloco (que
corresponde a uma das ocorrências Xi), os valores de reconstrução a e b são calculados de
modo a se preservar χ e σ :
kχ = (k - q)a + qb
(3.14)
kχ2 = (k - q)a2 + qb2
(3.15)
Resolvendo-se o sistema para a e b, tem-se:
a = χ - σ (q / (k - q))1/2
b = χ + σ ((k - q) / q)1/2
(3.16)
(3.17)
Exemplo de BTC aplicada a dois blocos pode ser visto na Figura 3.3.
Quantização dos Parâmetros
A média e desvio padrão podem ser codificados simultaneamente, dado que a média não é
uma grandeza crítica em uma área de grande variância, mas precisa ser reconstruída com
exatidão em áreas de baixa variância.
A Tabela 3.2 ilustra as combinações de média e desvio padrão sugeridas [MD80] para
imagens com até 16 níveis de cinza. Observe-se que são necessárias 64 palavras diferentes.
Uma alternativa mais simples, que resultaria em menor razão de compressão, seria a
codificação em separado dos valores de χ e σ quantizados a 8 bits cada. Entretanto,
evidências experimentais demonstram que a utilização de 6 bits para χ e 4 para σ introduz
poucos erros perceptíveis na imagem reconstruída.
BLOCOS ORIGINAIS
15
15
15
15
5
5
15
15
5
5
15
15
χ = 9.6
σ = 5.5
4
3
2
4
|
|
|
|
4
3
2
3
4
3
2
3
4
3
3
3
BLOCOS RECONSTRUÍDOS
4
4
3
3
χ = 3.2
σ = 0.6
15
15
15
15
4
4
15
15
4
4
15
15
χ = 10
σ= 6
4
4
4
4
|
|
|
|
4
3
3
3
4
3
3
3
4
3
3
3
4
4
3
3
χ=3
σ=1
Figura 3.3 - Blocos originais reconstruídos por truncagem de blocos. Parâmetros estatísticos originais e
quantizados indicados [MD80].
σ
χ
No. de palavras
0
1
2
3
0 - 15
1 - 14
1,3,5,7,9,11,13,15
2,4,6,8,10,12,14
16
14
8
7
4
5
6
7
2,4,6,8,10,12,14
2,5,8,11,14
3,6,9,12
4,7,10
7
5
4
3
Total 64
Tabela 3.2 - Combinações permitidas para média e desvio padrão a 16 níveis de cinza, codificação BTC
[MD80].
Seleção do Plano de Bits
Na codificação, é necessário que seja definido um limiar de quantização para que possa ser
gerado o plano de bits. O método mais simples considera a própria média como valor do
limiar.
O uso dos parâmetros de fidelidade MSE e MAE também é aplicável na determinação do
limiar, através da minimização das funções [DM79] :
k − q −1
Jmse =
∑
i =1
(Yi - a1)2 +
k − q −1
Jmae =
∑
i =1
k
∑
(Yi - b1)2
i = k −q
e
(3.18)
k
|Yi - a2| +
∑
i = k −q
|Yi - b2|,
(3.19)
onde Y1,Y2,. . .,Yk representam os valores de Xi, em ordem crescente, de modo que:
Y1 <= Y2 <= Yk
e
(3.20)
Yi,
(3.21)
k − q −1
a1 = (1 / (k - q))
∑
i =1
k
∑
Yi,
(3.22)
a2 = mediana de (Y1,Y2,. . .,Yk-q-1),
(3.23)
b2 = mediana de (Yk-q,. . .,Yk).
(3.24)
b1 = (1 / q)
i = k −q
As funções acima podem ser minimizadas pelo cálculo exaustivo dos parâmetros MSE e
MAE, para todos os limiares possíveis, no máximo k-1.
Esta alternativa implica, evidentemente, em um ganho na qualidade da imagem
descomprimida, em detrimento do tempo de processamento necessário durante a
codificação.
Uma terceira alternativa seria a preservação, não só da média e variância, como também do
terceiro momento, χ3, definido como:
χ3 = (1 / k)
k
∑
i =1
Xi3 = (1 / k)
k
∑
i =1
Yi3.
(3.25)
O problema se resume, então, em encontrar os valores de a, b e q, preservando-se χ, χ2 e χ3
(q definirá o limiar, já que especifica o número de Xi maiores que este último):
kχ = (k - q) a + qb
(3.26)
kχ2 = (k - q) a2 + qb2
(3.27)
kχ3 = (k - q) a3 + qb3,
(3.28)
a = χ - σ (q / (k - q))1/2
(3.29)
b = χ + σ ((k - q) / q)1/2
(3.30)
q = (k / 2) [1 + A (1 / (A2 + 4))1/2], onde
(3.31)
A = (3 χ χ2- 2 χ3 (χ)3)/ σ3
(3.32)
σ ≠ 0 (se σ = 0, a = b = χ)
(3.33)
o que implica em:
A última alternativa mencionada apresenta complexidade computacional intermediária às
duas primeiras para a compressão, sem acarretar custo extra durante a descompressão.
No caso de imagens gráficas, foi comprovado [MD80] que uma operação de suavização,
através do uso de filtragem espacial passa-baixas, resulta em uma imagem reconstruída
com menor MSE. A janela de convolução espacial sugerida é a mostrada abaixo:
0. 0
L
M
0, 1
M
M
N0, 0
0.1 0, 0
0, 6 0, 1
0, 1 0, 0
O
P
P
P
Q
O propósito da suavização é o de reduzir o ruído da imagem original, que implica em
quantizações incorretas para os pixels com níveis de cinza próximos ao valor do limiar.
Imagens gráficas apresentam uma certa continuidade bidimensional, e a filtragem
mencionada tende a tornar o nível de cinza de um pixel mais próximo dos níveis de seus
vizinhos.
Variações do Método
Lema e Mitchell [LM84] propuseram a substituição do segundo momento pelo primeiro
momento absoluto (Absolute Moment BTC), definido como:
α = (1 / k)
k
∑
i =1
|Xi - χ|,
(3.34)
e que pode ser calculado com menor esforço computacional:
α = (2 / k) γ
(3.35)
Com os valores a e b iguais a:
b = χ + (γ / q)
(3.36)
a = χ - (γ / (k - q)),
γ = kα / 2 =
∑
para Xi ≥ χ
onde
(3.37)
(Xi - χq).
(3.38)
A redução do número de bits na representação do mapa binário foi proposta por Mitchell e
Delp [MD80]. Baseia-se no fato de que alguns padrões do plano de bits são mais freqüentes
que outros, e consiste na codificação de apenas parte dos bits, sendo o restante inferido
durante a decodificação. A Figura 3.4 mostra 8 bits independentes de um bloco, em
destaque. Tais bits seriam codificados enquanto que os bits dependentes, na descompressão,
receberiam valores como se segue:
B
C
E
H
I
L
N
O
=
=
=
=
=
=
=
=
(A e D)
(A e D)
(A e M)
(D e P)
(A e M)
(D e P)
(M e P)
(M e P)
ou
ou
ou
ou
ou
ou
ou
ou
(F e J)
(G e K)
(F e G)
(F e G)
(J e K)
(J e K)
(F e J)
(G e K)
A
E
I
M
B
F
J
N
C
G
K
O
D
H
L
P
Figura 3.4 - Bits independentes em bloco 4x4, compressão BTC (pixels em negrito representam os bits
independentes codificados) [MD80].
Esta técnica preserva todas as bordas horizontais e verticais, e algumas diagonais. A
redução na entropia da imagem reconstruída seria de 0,5 bits/pixel.
Os mesmos autores sugerem que o número de bits alocados por plano seja proporcional ao
segundo momento, com a utilização de palavras de tamanho variável (Tabela 3.3).
Modo
σ
No. de bits (bloco 4x4)
1
2
3
17-256
1-16
<1
16
8
0
Tabela 3.3 - Codificação adaptativa do plano de bits a 256 níveis de cinza [MD80].
3.4 PCM - Pulse Code Modulation
O mais simples e conhecido algoritmo de compressão de imagens analógicas e digitais com
múltiplos níveis de cinza [JN84] é uma técnica não preservadora de informação, que resulta
em razões de compressão não superiores a 2:1 (4 bits/pixel).
Descrição do Método
O método PCM básico é descrito pelo diagrama da Figura 3.5.
Figura 3.5 - PCM básico [Lim90].
É, geralmente, utilizado para se obter uma imagem digital original a partir de uma imagem
analógica, a uma entropia de 8 bits/pixel, na maioria dos casos. A digitalização da imagem
analógica é obtida pela quantização do sinal de entrada. A quantização pode ser uniforme
ou não.
Em condições ideais, o ruído de quantização pode ser modelado, aproximadamente, como
ruído uniformemente distribuído. Este ruído começa a ser perceptível a partir de entropias
de 5 a 6 bits/pixel e, atingindo-se o patamar de 3 a 4 bits/pixel, pode ser identificado pelas
falsas linhas de contorno, originadas pelos saltos de luminância na imagem reconstruída,
em regiões onde há pequenas variações na imagem original (Figura 3.6).
Figura 3.6 - Saltos de luminância que causam o aparecimento de falsas linhas de contorno na compressão
PCM [Lim90].
Algoritmo de Compressão
início
para cada pixel da imagem faça
efetuar quantização
atribuir à palavra resultante o valor do intervalo de reconstrução obtido
armazenar palavra resultante
fim para
fim.
Algoritmo de Descompressão
início
para cada pixel da imagem faça
ler palavra correspondente
atribuir ao pixel o nível de reconstrução do intervalo de quantização obtido
fim para
fim.
Variações do Método
Uma maneira simples de aumentar o desempenho da compressão PCM [Lim90] é a
utilização de quantização não uniforme, uma vez que as intensidades não se encontram
distribuídas de maneira equalizada na imagem. Para se obter quantização não linear, aplicase uma função não linear à imagem original, procede-se à quantização e, em seguida,
aplica-se o inverso da função. Tal função deve ser escolhida de maneira que o resultado de
sua aplicação seja aproximadamente equiprovável para toda a faixa dinâmica.
Outra alternativa para se melhorar a eficiência da compressão PCM é a redução do efeito de
falso contorno, através da adição de ruído à imagem reconstruída, pela técnica proposta por
Roberts [Lim90]. Um ruído branco w(m,n) é adicionado à imagem original f(m,n) antes da
quantização, sendo subtraído após a reconstrução da imagem (Figura 3.7). Uma vez que a
função geradora do ruído é conhecida, independentemente da imagem, esta não necessita
ser armazenada ou transmitida, o que significa que não há impacto na entropia final da
imagem comprimida. Uma seqüência de ruído branco com função densidade de
probabilidade uniforme dada por:
1
, - ∆ / 2 ≤ w 0 ≤ ∆ / 2,
Pw (w0) = ∆
(3.39)
0 , outros casos,
R
|
S
|
T
onde ∆ é o tamanho do intervalo de quantização, pode ser usada.
Figura 3.7 - Exemplo de quantização com pseudo-ruído [Prat78].
3.5 DPCM - Differential Pulse Code Modulation
Trata-se de uma extensão do algoritmo PCM, proposta por Cutler em 1952 [Prat78]. É uma
técnica preditiva não preservadora de informação. Resulta em entropias em torno dos 3
bits/pixel.
Descrição do Método
A Figura 3.8 contém o diagrama da compressão DPCM. A idéia básica em torno do
algoritmo é a de se remover a redundância existente entre pixels vizinhos, codificando-se
apenas a informação nova.
Figura 3.8 - Compressão DPCM [Lim90].
Para se codificar o pixel corrente f(m,n), este é predito com base nos valores reconstruídos
dos pixels anteriores, gerando um valor fr(m,n). Na Figura 3.8, assume-se que os valores
f'(m-1 , n), f'(m , n-1), f'(m-1 , n-1), . . . foram reconstruídos antes da codificação.
O erro de predição e(m , n) é quantizado via PCM, uniformemente ou não. O erro
quantizado eq(m , n) é então armazenado. Na descompressão, eq(m , n) é adicionado a fr(m ,
n),a predição de f(m , n). O algoritmo DPCM pode ser descrito pelas equações:
e(m , n)
eq(m , n)
f'(m , n)
=
=
=
f(m , n) - fr(m , n)
Q[e(m , n)],
fr(m , n) + eq(m , n)
(3.40)
(3.41)
(3.42)
onde Q é a quantização PCM. De (2.40) e (2.42), o ruído de quantização é dado por:
EQ(m , n)
=
f'(m , n) - f(m , n) =
eq(m , n) - e(m , n)
(3.43)
A compressão DPCM pode ser vista como uma generalização da compressão PCM.
Especificamente, DPCM equivale a PCM quando fr(m , n) = 0.
O valor de f(m , n) é predito por combinação linear dos valores prévios reconstruídos:
fr(m , n) =
∑ ∑ a( k , k ) f ' ( m − k , n − k ),
1
2
1
2
k 1∈Ra k 2 ∈Ra
(3.44)
onde Ra é a região de (k1 , k2) na qual a(k1 , k2) ≠ 0.
Um aspecto importante da descompressão DPCM é que a predição é baseada nos valores
quantizados, e não nos valores originais de entrada (previsão em feedback). Assim, o erro
de quantização é retro-alimentado no quantizador no passo seguinte, o que produz um
efeito estabilizador, que previne o acúmulo de erros no sinal reconstruído.
Algoritmo de Compressão
início
salvar linha(s) de referência
para cada linha da imagem (exceto a(s) de referência) faça
atualizar pixel(s) de referência
salvar valor do primeiro pixel
acumulador = 0
para cada pixel da linha (exceto o primeiro) faça
efetuar previsão com base no(s) pixel(s) de referência
erro = valor do pixel corrente - previsão
erro = erro +acumulador
quantizar erro
acumulador = erro - erro quantizado
salvar palavra correspondente ao nível de quantização do erro
atualizar pixel(s) de referência
fim para
fim para
fim.
Algoritmo de Descompressão
início
ler linha(s) de referência
para cada linha da imagem (exceto a(s) de referência) faça
atualizar pixel(s) de referência
ler valor do primeiro pixel
para cada pixel da linha (exceto o primeiro) faça
efetuar previsão com base no(s) pixel(s) de referência
ler nível de quantização correspondente ao erro corrente
obter erro corrente
pixel corrente = valor previsto + erro corrente
atualizar pixel(s) de referência
fim para
fim para
fim.
Codificação Preditiva Preservadora de Informação
Uma vez que valores genéricos de entrada f(n) são inteiros e, restringindo-se os valores da
previsão fr(n) também a inteiros, a seqüência de valores de erros e(n) torna-se uma
seqüência de números inteiros que pode ser codificada sem distorções, por exemplo, pelo
código de Huffman [Lim90]. O codificador/decodificador resultante atingirá entropias
limitadas inferiormente pela entropia da seqüência de erros e(n).
DM - Delta Modulation
Uma variação do algoritmo DPCM, conhecida como Delta Modulation ou modulação delta
[Lim90], é aquela que utiliza um quantizador de 1 bit, com a seguinte função de previsão:
fr(m , n) = f(m , n-1),
(3.45)
ou seja, o valor previsto para o pixel corrente é igual ao valor do pixel imediatamente
anterior, na mesma linha.
A Figura 3.9 ilustra sinais de entrada e saída típicos da compressão DM. Suas principais
limitações são os fenômenos conhecidos como sobrecarga de borda e ruído granular. O
primeiro ocorre sempre que há um grande salto ou discontinuidade no sinal, aos quais o
quantizador só pode responder em muitos passos consecutivos. O ruído granular é
caracterizado pela natureza flutuante do sinal de saída, para regiões de sinal de entrada
quase constante.
Figura 3.9 - DM - Típicos sinais de entrada e saída [Jain89].
DPCM Unidimensional
Nesta variação do método [Lim90], cada linha da imagem é codificada independentemente.
Geralmente, uma representação de uma série autoregressiva é utilizada como definição da
função de previsão.
DPCM Bidimensional
Quando uma ou mais linhas anteriores são consideradas na função de previsão, de maneira
a se explorar também a correlação vertical entre os pixels vizinhos [Lim90]. Geralmente
são considerados apenas os pixels das linhas anterior e corrente, ilustrados na Figura 3.10.
DPCM Adaptativo
O desempenho do método pode ser aumentado com a utilização de quantizadores e/ou
preditores adaptativos às variações locais da imagem [Lim90].
No caso de um preditor adaptativo, a técnica mais comum usa várias funções de predição,
cada uma delas apropriada à correlação predominante em uma direção. A direção de
máxima correlação é calculada e o preditor mais adequado é aplicado individualmente a
cada pixel. Preditores adaptativos aumentam a qualidade da imagem, especialmente nas
bordas.
Para uma função de predição fixa, a variância do erro de predição varia com a região da
imagem. Os intervalos de quantização podem ser variáveis de acordo com a variância do
erro de predição a cada passo da compressão.
Figura 3.10 - Pixels (A,B,C,D) usados na predição bidimensional [Jain89].
3.6 TC - Transform Coding
Para aplicações que necessitam de altas taxas de compressão, acima de 8:1 (1 bit/pixel)
[Lim90], [NL80], o uso de transformadas na compressão de imagens com quantização
escalar (ou vetorial) apresenta desempenho superior ao de técnicas como PCM e DPCM. A
compressão por transformadas, entretanto, é de custo computacional e complexidade de
implementação mais elevados.
Descrição do Método
Na codificação por transformadas, a imagem é transformada para um domínio
significativamente diferente daquele das intensidades, ou níveis de cinza, sendo os
coeficientes resultantes quantizados e codificados.
A técnica explora o fato de que para imagens típicas, uma grande quantidade de energia
está concentrada em uma pequena fração dos coeficientes. Esta propriedade é conhecida
como compactação de energia. Graças a ela, é possível se codificar apenas uma parte dos
coeficientes de transformada, sem que a imagem original seja seriamente afetada.
O processo de compressão e descompressão é ilustrado pelo diagrama da Figura 3.11.
Durante a compressão, a imagem f(m, n) é transformada e os coeficientes Tf(m,n) são
quantizados. Os valores quantizados Tfq(m,n) são então codificados. Na descompressão, as
palavras são decodificadas e aos coeficientes resultantes Tfq(m,n) é aplicado o inverso da
transformada, obtendo-se assim a imagem reconstruída, fr(m,n) .
Algumas propriedades são desejáveis na transformada a se utilizar: por exemplo, deve
haver meios eficientes para o seu cálculo. As transformadas consideradas na compressão de
imagens são as lineares, expressas genericamente por:
M −1 N −1
∑ ∑ f (m, n) a (m, n) ,
(3.46)
∑ ∑ Tf (m, n) b(m, n) ,
(3.47)
Tf(m,n) =
m= 0 n = 0
M −1 N −1
f(m,n) =
m= 0 n = 0
onde f(m,n) e Tf(m,n) são seqüências de M x N valores e a e b são funções de base que
satisfazem a (3.46) e (3.47).
Figura 3.11 - Compressão por transformada [Lim90].
Outra propriedade desejável é a redução da correlação de Tf(m,n) em relação a f(m,n), que
pode ser obtida pela escolha adequada da função b.
Muitas transformadas têm sido consideradas na compressão de imagens, diferindo entre si
em compactação de energia e custo computacional. A transformada de Karhunen-Loève
(KLT) é aquela que apresenta maior compactação de energia. Entretanto, devido às
dificuldades de implementação de um algoritmo eficiente para o seu cálculo, é de interesse
apenas teórico. Muitas outras tranformadas foram criadas e utilizadas na compactação de
imagens.
Na compressão por transformada, a imagem é dividida em blocos de subimagens e cada
bloco é codificado separadamente. Dessa meneira, é possível a codificação adaptativa.
Outras vantagens da subdivisão da imagem original para aplicação da transformada são a
redução da capacidade de memória requerida no processamento e dos custos
computacionais. Naturalmente, existe um limite mínimo para o tamanho dos blocos, já que
para blocos menores é reduzida a correlação dentro dos mesmos e aumentada a correlação
entre blocos (não explorada pelo método). Tamanhos de blocos típicos são 8x8 e 16x16
pixels.
Algoritmo de Compressão
início
dividir a imagem em blocos p x q
para cada bloco da imagem faça
calcular a matriz resultante da aplicação da transformada
efetuar alocação de bits e quantização dos coeficientes
codificar coeficientes quantizados
salvar palavra correspondente ao bloco
fim para
fim.
Algoritmo de Descompressão
início
para cada bloco da imagem faça
decodificar palavra correspondente e montar bloco
aplicar a tranformada inversa, obtendo os valores dos pixels do bloco
fim para
fim.
Codificações Zonal e Por Limiar
A compressão de imagens por transformada explora a propriedade de compactação de
energia. Apenas uma pequena fração dos coeficientes é codificada. Existem dois
procedimentos principais na determinação desses coeficientes e de como serão codificados:
a codificação zonal e a codificação por limiar [Lim90].
Na codificação zonal, apenas aqueles coeficientes que pertencem a uma determinada região
do bloco são codificados. A definição da zona de codificação depende de fatores como a
razão de compressão desejada e o tipo de tranformada aplicada. Dois tipos de zoneamentos
para a transformada do cosseno (DCT) são ilustrados na Figura 3.12, sendo apenas aqueles
da região sombreada codificados (para os restantes, assume-se o valor zero).
Na codificação por limiar, os coeficientes são codificados, desde que sejam maiores que um
limiar definido. Estritamente do ponto de vista da compactação de energia, é o
procedimento preferível, uma vez que, na codificação zonal, coeficientes de baixa
magnitude podem ser codificados e coeficientes de alta magnitude, descartados. Entretanto,
a posição dos coeficientes a codificar não é conhecida a priori e deve ser também
codificada, quando da utilização de um limiar. A codificação por limiar é um método
adaptativo, pois a escolha dos coeficientes varia de acordo com as características locais da
imagem.
Figura 3.12- Exemplos de zonas usadas na compressão DCT (Discrete Cosine Transform) [Lim90].
Alocação de Bits
A distribuição dos bits de codificação ao longo de um bloco não deve ser uniforme
[Lim90], alocando-se mais bits para coeficientes de maior variância esperada. No caso da
transformada do cosseno, a variância é muito maior para os coeficientes de baixa
freqüência. Um exemplo de alocação de bits em um bloco de 16x16 pixels, com entropia de
0,5 bits/pixel para esta transforrmada é mostrado na Figura 3.13. O número em cada
posição representa o número de bits alocado para cada coeficiente, na codificação zonal.
A escolha dos níveis de reconstrução na quantização depende não só do número de bits
alocados, mas também da variância esperada. Para se eliminar esta última dependência,
cada coeficiente pode ser normalizado pelo desvio padrão esperado e apenas um conjunto
de níveis de quantização ser usado para um dado número de bits.
Compressão Híbrida
A compressão por transformada híbrida combina o alto desempenho da transformada com a
simplicidade de implementação do algoritmo DPCM [Lim90].
A imagem f(m,n) é transformada unidimensionalmente (por exemplo, por DCT), ao longo
de cada linha (ou coluna). O resultado, Tf(m,n), é então codificado por DPCM, ao longo de
cada coluna (ou linha), de acordo com o diagrama da Figura 3.14. A transformada 1D reduz
ainda mais a correlação entre os pixels de cada linha do que o faria a codificação DPCM, se
aplicada separadamente, enquanto que é de implementação e custo computacional menores
que a transformada 2D.
Figura 3.13 - Exemplo de alocação de bits a 0,5 bits/pixel para a codificação DCT zonal, com bloco de 16x16
pixels [Lim90].
Codificação Adaptativa
Outro método de se codificar uma imagem adaptativamente através do uso de
transformadas é sugerido por Pearlman [Pear90]. Se cada bloco é codificado com um
número fixo de bits, haverá uma grande variação na distorção média dos blocos. Do ponto
de vista da visão humana, é mais adequada uma estratégia de codificação que permita que
seja mantida a distorção constante através da variação da quantidade de bits por bloco.
3.7 PC - Pyramid Coding
Esta técnica de redução da correlação entre os pixels de imagens combina características
das técnicas preditivas e de transformadas [Lim90], [BA83], resultando em razões de
compressão de 4:1 (2 bits/pixel) a 16:1 (0,5 bits/pixel), com perda de informação.
Descrição do Método
Seja f0(m,n) a imagem original M x N a ser comprimida. f0(m,n) é definida como a base da
pirâmide, ou o nível 0 da mesma.
A imagem que se encontra a um nível acima da base, f1(m,n), é o resultado da aplicação de
filtragem passa-baixas e de sub-amostragem de f0(m,n), sendo essa seqüência de operações
denominada função redução. A função redução pode ser aplicada novamente a f1(m,n),
gerando o nível 2 da pirâmide f2(m,n), e assim sucessivamente, até que um nível final K seja
atingido. Tem-se portanto a generalização:
fL = Redução(fL-1).
(3.48)
Dependendo do filtro usado e também da subamostragem, há muitas variações no método.
Na representação da pirâmide gaussiana [BA83], é usada uma janela de convolução w(r,s)
de dimensões 5 x 5 pixels, como ilustra a Figura 3.14.
Figura 3.14 - Representação gráfica unidimensional da geração da pirâmide gaussiana [Lim90].
A aplicação da função redução se resume a:
2
fL(m,n) =
2
∑ ∑ w( r , s) f
( 2 n + r , 2 m + s),
L−1
r =−2 s =−2
(3.49)
sendo 0 < L < K, 0 ≤ i ≤ CL e 0 ≤ j ≤ RL, onde CL e RL são as dimensões da imagem no
nível L da pirâmide. Note-se que a cada redução, a imagem apresenta o número de pixels
dividido por 4. A geração da pirâmide gaussiana exige que a sua base apresente dimensões
B
C = MC 2 + 1,
B
R = MR 2 + 1,
(3.50)
(3.51)
onde MC, MR e B são números inteiros.
As dimensões de fL são:
B-L
CL = MC 2 + 1,
B-L
RL = MR 2 + 1.
(3.52)
(3.53)
Burt e Adelson sugerem a utilização da janela w(r,s) definida da seguinte forma:
ω (r) ω (s)
(separabilidade)
(3.54)
∑ ω(r )
=
(normalização)
(3.55)
ω (i)
ω (0) =
ω (1) =
ω (2) =
=
ω (-i) i = 0,1,2,. . . (simetria)
a
1/4
1/4 - a/2.
w(r,s) =
2
r =−2
1
(3.56)
(3.57)
(3.58)
(3.59)
A constante a é um parâmetro livre, tipicamente entre 0,3 e 0,6. A seqüência de ω (r) para
diversos valores de a é ilustrada na Figura 3.15 quando a é igual a 0,4, ω (r) é de forma
aproximadamente gaussiana.
Pode-se definir agora a função expansão como o inverso da função redução. O seu efeito é
a obtenção por interpolação de uma imagem no nível L-1, a partir do nível L:
ϕ L = Expansão(fL+1), ou
2
2
i − r j − sI
F
G
H2 , 2 J
K,
ϕ L(m,n) = 4 ∑ ∑ w( r , s) fL + 1
r =−2 s =−2
(3.60)
(3.61)
onde apenas os termos para os quais (m-r)/2 e (n-s)/2 são inteiros são incluídos no
somatório.
Figura 3.15 - Impulso ω (r) em função do parâmetro a [Lim90].
A idéia básica do algoritmo é a de se construir uma imagem reduzida de f0, f1, que
expandida, servirá como predição de f0. Para se obter compressão, a imagem do erro de
predição e0 é codificada. Aplicando-se este processo a todos os níveis da pirâmide, exceto o
último, tem-se uma definição formal do método.
A pirâmide laplaciana é construída pela seqüência de imagens e0, e1, e2 . . . eK:
eL = fL - Expansão(fL+1),
(3.62)
sendo eK = fK.
Algoritmo de Compressão
início
K=0
KL = índice do último nível da pirâmide
repita
a partir de fK , gere fK+1 ,com base na função redução definida (pirâmide gaussiana)
K=K+1
até K = KL
ϕ K = fKL
repita
a partir de
ϕ K , gere ϕ K-1 , com base na função expansão definida
K=K-1
até K = 1
para nível = 0 até KL-1 faça
enível = fnível - ϕ nível (pirâmide laplaciana)
fim para
quantize pirâmide laplaciana
codifique resultado da quantização
fim.
Algoritmo de Descompressão
início
decodifique pirâmide laplaciana
dequantize resultado da decodificação
KL = índice do último nível da pirâmide
fKL = eKL
K = KL
repita
ϕ K-1 ,com base na função expansão definida
ϕ K-1 , gere o nível K-1 da pirâmide gaussiana, fK-1 = ϕ K-1+ eK-1
a partir de fK , gere
a partir de
K=K-1
até K = 1
imagem reconstrída = f0
fim.
Quantização
A entropia final obtida pode ser substancialmente reduzida pela quantização dos valores
dos pixels a cada nível da pirâmide laplaciana. Com a escolha adequada dos níveis de
quantização, os erros decorrentes dessa operação podem implicar em degradações pouco
perceptíveis pelo observador.
Imagens de níveis superiores na pirâmide apresentam mais baixas freqüências e,
conseqüentemente, necessitam de mais bits por pixel na sua codificação, devido à maior
sensibilidade do olho humano a ruídos nessas regiões, conforme visto no Capítulo 2. Os
pixels de altas freqüências, na base da pirâmide, amostrados com maior freqüência, podem
ser quantizados mais grosseiramente.
Codificação
O uso de palavras de tamanho variável é recomendado, uma vez que favorece ainda mais a
redução da entropia final da imagem.
3.8 VQ -Vector Quantization (Quantização Vetorial)
Numerosas técnicas de compressão de imagens têm sido propostas, muitas delas discutidas
neste trabalho. Tais técnicas exploram usualmente as redundâncias estatísticas e
psicovisuais da imagem, de maneira a reduzir a entropia das mesmas. Uma deficiência
encontrada na maioria dessas técnicas convencionais é que a quantização é realizada sobre
valores individuais, o que mantém algum nível de correlação ou dependência entre os
valores quantizados. Um melhor desempenho é alcançável pela quantização de vetores, ao
invés de escalares, mesmo se a fonte apresenta a propriedade de ausência de memória
(quando um determinado estado independe dos estados anteriores) [NK88].
Definição
A quantização vetorial pode ser definida como um mapeamento Q do espaço euclideano kdimensional ℜ k , em um subconjunto finito Y de ℜ k :
→ Y,
Q : ℜk 
(3.63)
onde Y = ( χ i ; i=1,2,. . . P) é o conjunto de valores representativos do universo e P o
número de vetores em Y. A quantização vetorial pode ser vista também como uma
combinação de duas funções, um codificador, que recebe o vetor de entrada x e gera o
endereço do vetor de representação especificado por Q(x), e um decodificador, que usa o
endereço para gerar o vetor de representação χ .
Se uma medida de distorção d(x,χ ), representando a penalidade ou custo associado aos
vetores x por χ pode ser definida, então o mapeamento ótimo é aquele que minimiza
d(x,χ ). Como alternativa mais simples, adota-se o MSE como medida de distorção.
Dicionário de Vetores
O objetivo da definição de um quantizador vetorial ótimo, consistindo de P vetores é o de
minimizar a distorção esperada.
Linde, Buzo e Gray [LBG80], a partir da teoria desenvolvida por Lloyd, propuseram o
algoritmo hoje conhecido por LBG, que garante, no mínimo, otimização local. Tal
algoritmo é usado amplamente no projeto de quantizadores vetoriais, devido a sua
eficiência e versatilidade, podendo ser aplicado tanto para o caso em que é conhecida a
distribuição probabilística da fonte, quanto através de uma longa seqüência de treinamento,
constituída por vários vetores amostrados da própria fonte. Na página seguinte, apresentase o algoritmo LBG para distribuição indeterminada, em versão simplificada.
Algoritmo LBG
No algoritmo LBG, durante a otimização do dicionário, apenas partições ou subconjuntos
da seqüência de treinamento são consideradas. Uma vez que o dicionário final Y é obtido,
este é aplicado a vetores não pertencentes à seqüência de treinamento pela regra do vizinho
mais próximo. Se a seqüência é sufucientemente grande, o quantizador obtido para a
distribuição da amostra apresentará bons resultados também para a distribuição real. Podese demonstrar ainda [LBG80] que o algoritmo sempre converge para um quantizador fixo
em um número finito de iterações.
O resultado final Y é altamente sensível ao alfabeto inicial A0 escolhido. Há várias maneiras
de se determinar A0. No método mais simples, os primeiros P vetores na seqüência são
selecionados. Não se trata de técnica muito recomendável, dada a proximidade entre os
vetores. Pode-se também escolher P vetores igualmente espaçados ao longo de toda a
seqüência. Em uma terceira técnica, o centróide da seqüência é calculado e dá origem a
dois outros próximos, através da introdução de pequenas perturbações no mesmo. O
algoritmo LGB é aplicado no par de vetores resultante, de maneira a se obter um
quantizador de dois níveis. A cada vetor resultante, é novamente introduzida uma
perturbação, gerando-se agora quatro vetores. O procedimento é repetido sucessivamente,
até que P vetores tenham sido criados, originando-se a seqüência inicial.
Algoritmo LBG
início
sejam
P, número de vetores do dicionário,
ε , limiar de distorção,
A0 ,dicionário inicial de vetores,
xj , j = 0, . . ., p-1, seqüência de vetores de treinamento
t=0
D-1 =
∞
fim = falso
enquanto não(fim) faça
dado At = {yi;i = 1,. . . ,P}
e sendo a partição P(At) = {Si; i = 1,. . .,P},
para indice = 1 até P faça
distorção[índice] = 0
contador[índice] = 0
somatório[índice] = 0
fim para
para j = 0 até p-1 faça
dMIN =
∞
para i=1 até P faça
se d(xj ,yi)
≤ dMIN
então
dMIN = d(xj ,yi)
índice = i
xj pertence a Si
fim se
fim para
distorção[índice] = distorção[índice] + dMIN
contador[índice] = contador[índice] + 1
somatório[índice] = somatório[índice] + xj
fim para
Dm = 0
para i = 1 até N faça
Dm = Dm + somatório[i]
fim para
Dt = Dt/p
se (Dt-1 - Dt)/Dt
≤ε
então
dicionário final Y = At
senão
fim = verdadeiro
para i = 1 até P faça
yi = somatório[i]/contador[i]
fim para
At+1 = At
t=t+1
fim se
fim enquanto
fim.
SQ/VQ - Scalar Quantization/Vector Quantization e
VQ/VQ - Vector Quantization/Vector Quantization
Finamore, Nunes e Fortes [FNF89] propuseram a utilização de quantização vetorial na
compressão de imagens através da aplicação dos algoritmos SQ/VQ e VQ/VQ.
O primeiro consiste na quantização escalar da imagem f (SQ) em dois níveis, obtendo-se
como resultado a imagem fq, codificada a no máximo 1 bit/pixel, pelo algoritmo RLC. A
imagem g = f - fq, é codificada por quantização vetorial (VQ) (Figura 3.16).
O algoritmo VQ/VQ apresenta a mesma idéia anterior, com a diferença de que a primeira
quantização também é vetorial (Figura 3.17).
Classified VQ Coding
Imagens comprimidas por VQ a entropias muito baixas apresentam usualmente distorções
de borda, devido ao reduzido número de vetores do dicionário. Ramamurthi e Gersho
[RG86] minimizaram este problema pela classificação de cada vetor da imagem de acordo
com categorias pré-definidas, por exemplo, de vetores de borda e de textura, e codificação
de acordo com o quantizador mais apropriado. A extensão da idéia leva à utilização de um
número maior de categorias, com vários tipos de classe de bordas (Figura 3.18). Operadores
de gradiente são aplicados aos vetores para efeito de classificação.
Figura 3.16 - Compressão SQ/VQ [FNF89].
Figura 3.17 - Compressão VQ/VQ [FNF89].
Figura 3.18 - Classificação de vetores [NK88].
Predictive VQ Coding
A dependência estatística entre vetores consecutivos sugere uma melhora no desempenho
dos algoritmos VQ a partir da exploração da correlação intervetorial. O algoritmo DPCM
pode ser generalizado para o plano vetorial, de modo que o codificador seja composto por
um preditor e um quantizador de erros vetoriais.
Adaptive Tranform VQ Coding
Na compressão adaptativa por transformada, diversas matrizes de atribuição de bits são
definidas, sendo cada bloco de coeficientes classificado conforme a atividade local e
recebendo a atribuição de bits mais adequada. Por esse método, uma quantidade
significativa de coeficientes de alta freqüência é descartada, o que resulta em perda de
qualidade da imagem reconstruída.
A Figura 3.19 ilustra um esquema alternativo de compressão, pelo qual a região de 0 bits
alocados do bloco é codificada por VQ. Desta maneira, obtém-se um aumento na qualidade
final, que, apesar do ligeiro aumento da entropia final da imagem, é compensador,
principalmente para altas razões de compressão [NK88].
BTC/VQ Coding
Udpikar e Raina [UR87] sugeriram a utilização de quantizadores vetoriais em conjunto com
a codificação BTC, para se elevarem as razões de compressão finais.
A idéia se resume no uso de dois dicionários de vetores, um para os parâmetros estatísticos
da compressão BTC χ e σ , bidimensional, e outro para o mapa de bits, binário e de
dimensão igual ao tamanho do bloco utilizado. Segundo os autores, poucas perturbações
perceptíveis extras são introduzidas na imagem, com um ganho de 100% em relação à
compressão (1 bit/pixel para blocos de 4 x 4 pixels).
Figura 3.19 - Matriz de atribuição de bits - Compressão adaptativa por transformada/VQ [NK88].
3.9 Técnicas de Segunda Geração
A idéia por trás das técnicas de segunda geração é a de se explorar o mecanismo de
percepção visual humano para redução da entropia de imagens. Ao invés de levar em conta
os pixels individuais, o sistema visual humano identifica características específicas da
imagem, como contornos (altos gradientes) e texturas (subregiões delimitadas por
contornos, contendo padrões repetitivos). A combinação de tais características [KIK85]
tende a formar objetos reconhecíveis, que podem ser comparados com um vasto número de
entidades similares contidas na memória do observador, o que culmina no final do processo
com a interpretação da cena.
Os principais algoritmos de segunda geração são brevemente descritos a seguir [KIK85],
[KBL87]:
Codificação de bordas: divide as imagens em dois tipos de sinal, os de altas e os de baixas
freqüências. A combinação da alta sensibilidade do olho humano à posição e orientação de
contornos com a baixa sensibilidade a diferenças de amplitude, sugere a codificação das
bordas (como em uma imagem binária) separadamente das regiões de baixas freqüências,
que contêm menor quantidade de informação. As razões de compressão obtidas são da
ordem de 1 bit/pixel. Os principais passos do algoritmo são:
•
•
•
•
obtenção das bordas através da aplicação de gradiente ou filtros laplacianos;
codificação binária da informação de bordas;
filtragem passa-baixas para extração da informação de baixa freqüencia;
codificação da informação de baixa freqüência por subamostragem ou transformadas.
Decomposição direcional: pode ser considerada uma variação da codificação de bordas e
assegura a preservação otimizada das linhas de contorno, através do uso de filtros
direcionais em direções pré-definidas. A aplicação deste e de outros recursos proporciona
razões de compressão de até 0,1 bits/pixel.
Codificação de contorno-textura: similar à codificação de bordas, esta técnica segmenta a
imagem em diversas regiões de contorno e textura. A forma da distribuição das
intensidades dentro de cada região é codificada pela aproximação a funções polinomiais
bidimensionais de primeira ou segunda ordem. Ruídos granulares são removidos no préprocessamento e adicionados de forma pseudo-aleatória na descompressão. Razões de
compressão entre 0,15 e 0,5 bits/pixel são obtidas por este método.
As técnicas de segunda geração não foram consideradas neste trabalho, devido aos altos
custos computacionais envolvidos na compressão e descompressão de imagens, que
inviabilizariam a utilização prática dos algoritmos.
3.10 Formatos
Padrões de Formatos de Imagens
A implementação dos algoritmos neste trabalho, foi realizada com base no formato padrão
de imagens digitais estabelecido por Davis [Davi92].
Como referência para avaliação quantitativa e qualitativa dos resultados obtidos, adotou-se
o padrão de codificação internacional proposto pelo JPEG (Joint Photographic Experts
Group) [ISO91].
Formato BM
O formato BM (bit map) de codificação de imagens foi criado visando a simplificação da
aplicação de algoritmos de processamento digital de imagens [Davi92]. Este formato foi
proposto como padrão da interface PixelWare e adotado nas implementações deste
trabalho.
O formato BM reserva originalmente (versão 1.0) um byte para cada pixel da imagem, sem
efetuar nenhuma compactação. Para definição dos demais parâmetros da imagem, foi
incluído um header, de 1024 bytes no início do arquivo. Este header contém também,
opcionalmente, o conteúdo da look-up table, segundo o padrão VGA.
Para poder representar agora imagens compactadas, foi necessária a alteração da
configuração do header, de maneira a indicar os parâmetros da compressão. Assim, os
arquivos de imagens compactados recebem a extensão CBM (Compressed Bit Map),
possuindo o header as informações necessárias à descompressão da imagem nos 12 bytes,
ocupados pelo campo compression. Para imagens não comprimidas, a extensão permanece
BM, sendo os bytes de compression iguais a zero. As imagens BM na versão 2.0
apresentam a seguinte estrutura:
Campo
Tipo
Descrição
width
height
version
num_planes
bits_per_plane
image_type
word
word
byte
byte
byte
byte
palette
768 bytes
compression
12 bytes
oldwidth
oldheight
filler
word
word
232 bytes
largura da imagem (pixels)
altura da imagem (pixels)
02H = (versão 2.0)
número de planos de cor
número de bits por pixel por plano
código para o modelo de arquivamento:
00H = EGA/VGA, paleta básica de 16 cores
01H = MCGA/SVGA, look-up table de 256 linhas
FFH = sem paleta
256 x R/G/B. Valores no padrão dos registros D/A das
placas VGA/SVGA (valores entre 0 e 63)
algoritmo de compressão utilizado e parâmetros
respectivos
largura da imagem original (pixels)
altura da imagem original (pixels)
reservado para uso futuro (todos os bytes setados para
00H)
Figura 3.20 - Header das imagens BM na versão 2.0.
Os valores possíveis para cada um dos 12 bytes do campo de compression são apresentados
na Figura 3.21.
Formato JPEG
A norma internacional que define o formato JPEG [ISO91] é aplicável a imagens digitais
com múltiplos níveis de cinza, ou coloridas. É utilizável em inúmeras aplicações que
requerem o uso de imagens comprimidas, não se prestando entretanto à codificação de
imagens binárias.
Byte 1
Significado
Demais bytes
Valor
Significado
00H
01H
02H
imagem descomprimida
RLC (imagens binárias)
MREAD (imagens binárias)
todos
todos
2
3
00H
00H
00H
00H
uso futuro
uso futuro
uso futuro
tabela modificada de Huffman para
seqüências de brancos
tabela modificada de Huffman para
seqüências de pretos
uso futuro
uso futuro
blocos 4x4
blocos 16x16
arquivo original no formato BM
descomprimido
arquivo original no formato BM
comprimido pelo algoritmo PCM
uso futuro
uso futuro
compressão sem perda de informação
compressão com perda de informação
quantização fixa não uniforme
quantização adaptativa uniforme
níveis de quantização
8 níveis de quantização
DPCM convencional
DM
uso futuro
uso futuro
geração de arquivos da pirâmide
gaussiana
geração de arquivos da pirâmide
laplaciana
uso futuro
uso futuro
VQ associada ao algoritmo BTC
VQ pura
uso futuro
01H
03H
BTC
demais
2
3
4
00H
00H
00H
01H
00H
01H
04H
DPCM
demais
2
3
demais
2
3
00H
00H
00H
01H
00H
01H
00H
01H
00H
01H
00H
00H
01H
4
01H
todos
todos
2
00H
00H
03H
08H
00H
4
5
6
05H
06H
07H
08H
PC
DCT
PCM
VQ
demais
Figura 3.21 - Valores possíveis para os parâmetros de compressão do formato BM
A compressão JPEG pode ser representada na Figura 3.22. O diagrama apresentado resume
o algoritmo, uma vez que todos os processos especificados pela norma internacional são
aplicados a imagens individuais, independentemente.
Figura 3.22 - Compressão DCT (JPEG) [ISO91].
Os elementos da imagem são agrupados em blocos de 8 x 8 pixels, sendo a cada bloco
aplicada a transformada do cosseno, originando-se um conjunto de 64 valores, ou
coeficientes DCT. Cada um deles é quantizado, usando-se um dos valores correspondentes
de uma tabela de 64 valores. A norma internacional não especifica valores default para a
tabela, sendo a sua escolha feita em função da qualidade final da imagem, características
particulares da fonte e condições de reprodução.
Após a quantização, os coeficientes, denominados DC (o primeiro) e AC (os 63 restantes)
são preparados para a codificação entrópica (Figura 3.23). O coeficiente DC anterior é
usado na predição do coeficiente corrente, sendo a diferença codificada. Os 63 coeficientes
AC são convertidos em uma seqüência uni-dimensional em zig-zag.
Figura 3.23 - Preparação dos coeficientes quantizados para codificação entrópica [ISO91].
Um entre dois processos de codificação entrópica é utilizado, a codificação de Huffman, ou
a codificação aritmética. Em ambos os casos, especificações para a escolha das tabelas
devem ser fornecidas.
A Figura 3.24 ilustra os procedimentos principais da descompressão JPEG. Cada processo
aplica o inverso do processo correspondente na compressão.
A norma especifica ainda procedimentos para compressão de imagens digitais sem perda de
informação (Figura 3.25). Neste caso, um preditor combina os valores reconstruídos a partir
de até 3 valores vizinhos, a, b e c, para definir o valor do pixel na posição x (Figura 3.26).
A predição é subtraída do valor real na posição x e a diferença é codificada entropicamente.
Figura 3.24 - Descompressão DCT (JPEG) [ISO91].
Figura 3.25 - Compressão JPEG sem perda de informação [ISO91].
Figura 3.26 - Predição por vizinhança [ISO91].
3.11 Conclusão
Apresentaram-se neste capítulo os principais algoritmos de compressão de imagens, de
primeira e segunda gerações. No caso das imagens binárias, tanto RLC quanto MREAD
garantem a fidelidade total da imagem reconstruída, para fins de armazenamento. A razão
de compressão final obtida para ambos é muito sensível às características da imagem
processada, mas, em média se situa na faixa dos 3:1. O algoritmo RLC pode utilizar um
mecanistmo de codificação com palavras de tamanho variável, como o código de Huffman.
MREAD é uma técnica mais recente, que oferece melhores resultados em termos de
compressão, valendo-se também de códigos com palavras de tamanho variável.
Quanto aos algoritmos para imagens com múltiplos níveis de cinza, foram descritos aqueles
que trabalham com blocos (BTC, TC, VQ), com linhas (PCM, DPCM) e com ambos (PC).
Genericamente, os algoritmos do segundo grupo oferecem desempenho inferior aos demais,
uma vez que não exploram com eficiência a correlação entre elementos situados além das
linhas de referência (correlação vertical). As razões de compressão também são
dependentes das características da imagem original, situando-se entre 3:1 e 16:1. Os
melhores resultados são atingidos pelos algoritmos de segunda geração, como os aqui
citados, codificação de contorno-textura, decomposição direcional e codificação de bordas,
que podem alcançar compressões da ordem de 100:1. Entretanto, a complexidade das
implementações e os elevados tempos de processamento são fatores impeditivos de sua
utilização, na aplicação aqui proposta.
O formato BM foi detalhadamente descrito, uma vez que foi o formato adotado nas
implementações deste trabalho. Como padrão de comparação, o formato JPEG, que utiliza
a transformada do cosseno associada à codificação preditiva, também foi abordado.
O capítulo seguinte pretende detalhar as implementações efetuadas, incluindo a delimitação
dos parâmetros adotados em cada uma delas. Para muitos dos algoritmos implementados,
disponibilizaram-se diferentes alternativas, permitindo ao usuário maior flexibilidade na
adequação de sua aplicação.
4. DESCRIÇÃO DO SISTEMA
O sistema de compressão de imagens desenvolvido foi implementado em duas versões
diferentes. A primeira delas disponibiliza rotinas de compressão na plataforma PixelWare,
desenvolvida no Departamento de Ciência da Computação da UFMG [Davi92]. Na segunda
versão, os algoritmos de compressão e rotinas auxiliares foram implementados na própia
interface do sistema operacional MS-DOS, sendo executados no nível de linha de comando.
Optou-se pela implementação de algoritmos básicos, que proporcionassem uma visão
global das diversas técnicas existentes e que indicassem, em futuros trabalhos, as soluções
mais adequadas para aplicações específicas de compressão de imagens. Entretanto, tendo
em vista a restrição estabelecida com relação ao tempo de recuperação das imagens,
algoritmos de mais alta complexidade computacional não foram implementados.
Como complementação do trabalho, foram implementadas rotinas para cálculo de
parâmetros estatísticos (MSE e SNR), conversão de arquivos BM da versão 1 para a versão
2 e vice-versa, manipulação de amostras de vetores e otimização do alfabeto de vetores
usados pelo algoritmo VQ.
4.1 Hardware
As rotinas de compressão de imagens foram desenvolvidas essencialmente para a
plataforma IBM PC, sendo recomendado o uso dos processadores 386/486.
Para nenhuma das interfaces é exigida memória estendida ou expandida. A configuração
mínima do equipamento é a seguinte [Davi92]:
•
•
•
•
•
CPU 80x86;
640 Kbytes de memória RAM;
monitor de vídeo e placa gráfica no padrão SuperVGA, sendo a placa baseada em chip
set Ahead, ATI, Chips & Technologies, Everex, Paradise, Trident, Tseng ou Video
Seven, ou no padrão VESA;
mouse padrão Microsoft
coprocessador aritmético opcional.
4.2 Apresentação do Sistema
Interface MS-DOS
Dentro da interface do sistema operacional DOS, as rotinas de compressão, descompressão
e auxiliares são acionadas através da linha de comando. São os seguintes os executáveis
disponíveis:
Compressão
CRUSH método [opções] infile [outfile] [filtfile],
onde, os métodos e opções correspondentes são:
RLC = Run-Length Coding (imagens binárias);
BTC = Block Truncation Coding;
/f: cria imagem BM resultante da filtragem passa-baixas no préprocessamento. Se usada, é necessária a especificação do nome do
arquivo filtfile;
/h: compressão alta, blocos de 16x16 pixels;
/s: compressão normal, blocos de 4x4 pixels (default);
/p: comprime fontes CBM comprimidas pelo algoritmo PCM;
READ = Modified READ (imagens binárias);
/b: usa tabela de Huffman para seqüências de pretos (default);
/w : usa tabela de Huffman para seqüências de brancos;
PCM = Pulse Code Modulation
DPCM = Differential Pulse Code Modulation
/a: quantização adaptativa uniforme (compressão com perda);
/d: Delta Modulation, quantização em 2 níveis (compressão com perda, /f
assumido);
/f: quantização fixa não uniforme (compressão com perda, default);
/h: quantização em 8 níveis (compressão com perda);
/i: compressão sem perda (default);
/l: compressão com perda;
/s:quantização em 16 níveis (compressão com perda, default);
LPYR = Laplacian Pyramid Coding
DCT = Discrete Cosine Transform
VQ = Vector Quantization
/i: VQ pura;
/b:VQ/BTC;
opções genéricas:
/e: não exibe mensagens durante o processamento;
/r: exibe na tela relátorio com resultados da compressão.
A opção /r emite relatório, contendo os seguintes dados:
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
nome do arquivo de entrada;
versão do arquivo de entrada;
número de planos de bits do arquivo de entrada;
número de bits por plano do arquivo de entrada;
tipo de imagem do arquivo de entrada;
tamanho do cabeçalho do arquivo de entrada;
largura da imagem original;
altura da imagem original;
número de bytes da imagem original;
largura da imagem reconstruída;
altura da imagem reconstruída;
número de bytes da imagem reconstruída;
número de bytes da imagem comprimida;
entropia da imagem comprimida;
razão de compressão obtida.
A extensão de infile deve ser obrigatoriamente BM, exceto para a fonte PCM na
codificação BTC, quando deve ser CBM. A extensão de outfile deve ser CBM e, se não
informado o nome do arquivo, será assumido o mesmo contido em infile. A extensão de
filtfile deve ser BM.
Descompressão
UNCRUSH infile [outfile],
onde infile deve ter a extensão CBM e outfile, BM, sendo para este último assumido o
mesmo nome contido em infile, se não informado.
Conversão de Aquivos BM
Os seguintes utilitários realizam a conversão de arquivos BM da versão 1 para a 2:
BM12BM2 infile
e da versão 2 para a versão 1:
BM22BM1 infile,
onde infile deve ter a extensão BM.
Medidas de Distorção
Para estudo comparativo entre as imagens original e reconstruída foi desenvolvido este
utilitário, que calcula o MSE e SNR para duas imagens BM, que podem ter ou não as
mesmas dimensões, dependendo do algoritmo de compressão usado (Capítulo 3). No
último caso, os valores são calculados levando-se em consideração as menores dimensões x
e y encontradas nas duas imagens, disponíveis nos arquivos infile1 e infile2:
MSE infile1 infile2,
onde infile1 e infile2 devem ter a extensão BM.
Algoritmo LBG
O algoritmo de geração dos alfabetos de 256 vetores foi implementado no ambiente UNIX,
enquanto que a rotina de geração e ordenação das amostras de vetores, no ambiente DOS.
O seguinte utilitário gera amostras de vetores a partir de imagens-amostras, ordena-as e
aglutina arquivos ordenados, para quantização vetorial, no sistema operacional MS-DOS:
VECTOR algoritmo opção infile in/outfile [outfile],
onde, os algoritmos disponíveis são:
VQ = (VQ Pura);
BTC = (VQ/BTC)
e as opções:
/s: gera arquivo(s) de amostras de vetores a partir de imagem BM (requer dois
outfiles para BTC, gerando arquivos já ordenados);
/o: ordena vetores do arquivo de amostras (apenas para VQ);
/m: concatena dois arquivos de vetores de amostras ordenados.
Quando o algoritmo é VQ e a opção /s ou /o, um infile e um outfile são requeridos. Se o
algoritmo é BTC, um infile e dois outfiles devem ser informados. Neste caso, o primeiro
outfile especificado conterá as amostras de vetores de bit maps e o segundo, as amostras de
vetores de parâmetros estatísticos, ambos já ordenados (por isso não é permitido o
parâmetro /o associado a BTC). O uso a opção /m em ambos os algoritmos concatenará
dois infiles de vetores, armazenando o resultado em outfile. Para a opção /s, o arquivo de
entrada deve ter a extensão BM.
O seguinte utilitário disponível no sistema operacional UNIX gera alfabetos otimizados de
256 vetores a partir de arquivos de amostras de vetores ordenados:
VECTOR algoritmo infile [infile] [outfile].
No caso do algoritmo BTC, dois infiles são necessários, contendo, o primeiro, os vetores de
bitmaps ordenados e o segundo, os vetores de parâmetros estatísticos. No arquivo de saída,
outfile, é gerado o dicionário de vetores ótimos.
Interface PixelWare
Sobre a plataforma PixelWare [Davi92], as mesmas alternativas para compressão e
descompressão de imagens foram implementadas. A estrutura de menus e janelas de
diálogo facilita a utilização do sistema e permite estudos mais completos, através do uso de
outras rotinas de processamento digital de imagens, já disponíveis no sistema.
As Figuras 4.1 e 4.2 ilustram o uso das rotinas implementadas dentro da interface
PixelWare.
Figura 4.1 - Interface Pixelware - Algoritmos de compressão de imagens disponíveis.
Figura 4.2 - Interface Pixelware - Resultados de compressão.
Estrutura Interna
O chamado Sistema de Compressão de Imagens contém rotinas modularizadas e
estruturadas conforme o diagrama da Figura 4.3.
Cada um dos módulos do sistema corresponde a um programa fonte escrito em C.
Excetuando-se os módulos principais CRUSH, UNCRUSH, MSE, VECTOR e
COMPRESS, existe um header para cada módulo, contendo os protótipos de funções e
definições. Além disso, foram criados os módulos SCITYPE e SCICONST, que contêm
declarações e definições globais, respectivamente. O módulo COMPRESS foi anexado ao
sistema PixelWare e utiliza as mesmas funções disponíveis nos módulos utilizados por
CRUSH/UNCRUSH.
São as seguintes as funções de cada módulo:
•
•
•
•
•
•
•
•
•
•
scibyte: funções de manipulação de bytes;
scibuf: funções de gerenciamento de buffers para processamento;
scihuff: funções para manipulação de códigos de Huffman;
scifile: funções de leitura e escrita em arquivos;
scistat: funções geradoras de dados estatísticos;
scirlc: compressão e descompressão RLC;
sciread: compressão e descompressão READ;
scibtc: compressão e descompressão BTC;
scipcm: compressão e descompressão PCM;
scidpcm: compressão e descompressão DPCM;
•
•
•
scipyr: compressão e descompressão PC;
scitrans: compressão e descompressão DCT;
scivq: compressão e descompressão VQ.
Figura 4.3 - Módulos do sistema de compressão de imagens
4.3 Algoritmos
A compressão de imagens binárias é um campo amplamente explorado e diversas
aplicações, a exemplo da transmissão de fac-símiles, têm sido desenvolvidas. Dois
algoritmos foram implementados para compressão de imagens, RLC e MREAD. A
compressão de arquivos binários BM foi implementada considerando-se que cada pixel da
imagem apresenta os valores 0 (preto) ou 255 (braco). Neste caso, o formato BM adiciona 7
bits/pixel extras, uma vez que a imagem necessitaria de apenas 1 bit/pixel para sua
codificação.
O problema da compressão de imagens digitais com múltiplos níveis de cinza apresenta
uma maior complexidade, sendo as suas aplicações cada vez mais numerosas. Os seguintes
algoritmos foram definidos para implementação: BTC, PCM, DPCM, PC, DCT e VQ.
RLC - Run Length Coding
A rotina implementada adota na codificação das seqüências de brancos (255) e pretos (0) o
código modificado de Huffman recomendado pela CCITT [HR80]. As seguintes variáveis
contêm tal código, listado no Apêndice A:
static mhconstcodetype rlclowhuffmanw[64]: tabela de bits menos significativos, para
seqüências de brancos de 0 a 63 pixels;
static mhconstcodetype rlchighhuffmanw[28]: tabela de bits mais significativos, para
seqüências de brancos de 64 a 1791 pixels (usada em associação com a tabela anterior);
static mhconstcodetype rlclowhuffmanb[64]: tabela de bits menos significativos, para
seqüências de pretos de 0 a 63 pixels;
static mhconstcodetype rlchighhuffmanb[28]: tabela de bits mais significativos, para
seqüências de pretos de 64 a 1791 pixels (usada em associação com a tabela anterior).
A razão de compressão obtida pela aplicação do algoritmo é variável, de acordo com as
características da imagem. Deve-se observar que a compressão real é inferior, quando
aplicada aos arquivos BM, já que este formato adiciona 7 bits/pixel de redundância a
imagens binárias. A imagem reconstruída apresenta as mesmas dimensões da imagem
original, pois a codificação é feita pixel a pixel.
As funções de compressão e descompressão de imagens se encontram no módulo
SCIRLC.C:
void rlc_encode_image(char *infile,char *outfile,struct bmheadertype *h,
unsigned long int *savedbytes);
void rlc_decode_image(FILE *inf,FILE *outf,int dx,int dy),
onde :
infile = nome do arquivo de entrada da compressão (BM);
outfile = nome do arquivo de saída da compressão (CBM);
h = header do arquivo de saída da compressão;
savedbytes = número de bytes da imagem resultante da compressão (excluído o
cabeçalho);
inf = arquivo de entrada da descompressão (CBM);
outf = arquivo de saída da descompressão (BM);
dx = largura da imagem reconstruída, em pixels;
dy = altura da imagem reconstruída, em pixels.
MREAD - Modified Relative Element Address Designate Coding
Os modos são codificados conforme o código descrito no Apêndice B e contido na variável:
static mhconstcodetype readhuffman[9].
O método preserva as dimensões originais da imagem e proporciona razões de compressão
variáveis, normalmente superiores às obtidas pelo BTC. É também pertinente a observação
sobre a razão de compressão real feita no item anterior.
São as seguintes as funções de compressão e descompressão, disponíveis no módulo
SCIREAD.C:
void read_encode_image(char *infile,char *outfile,boolean bestw,
struct bmheadertype *h,
unsigned long int *savedbytes);
void read_decode_image(FILE *inf,FILE *outf,int dx,int dy,int best),
onde,
infile = nome do arquivo de entrada da compressão (BM);
outfile = nome do arquivo de saída da compressão (CBM);
bestw = variável lógica, indica que será usado o código de Huffman para seqüências
de brancos (TRUE), ou pretos (FALSE), na codificação das distâncias
de
referência;
h = header do arquivo de saída da compressão;
savedbytes = número de bytes da imagem resultante da compressão (excluído o
cabeçalho);
inf = arquivo de entrada da descompressão(CBM);
outf = arquivo de saída da descompressão (BM);
dx = largura da imagem reconstruída, em pixels;
dy = altura da imagem reconstruída, em pixels;
best = idem a bestw, na decodificação.
BTC - Block Truncation Coding
O algoritmo BTC foi implementado para dois diferentes níveis de compressão, a 2 e 1
bits/pixel, usando-se, respectivamente, blocos de 4x4 e 16x16 pixels. A palavra
representativa de cada bloco é composta por um bit map (16 bits para o bloco 4x4 e 256
bits para o bloco 16x16), acrescido de mais 8 bits que representam a média calculada para o
bloco e outros 8 bits para a variância. Sendo assim, a razão de compressão obtida é fixa:
Rc
Rc
=
=
[(8 bits/pixel) * 16 pixels] / (16 + 8 + 8) bits
4:1, ou 2 bits/pixel
(Bloco 4x4)
(4.1)
=
=
[(8 bits/pixel) * 256 pixels] / (256 + 8 + 8) bits
7,53:1, ou 1,06 bits/pixel
(Bloco 8x8)
(4.2)
O método BTC, por não tratar os pixels individualmente, mas em blocos, pode não
preservar as dimensões originais da imagem. Na implementação deste trabalho, a imagem
sofre inicialmente uma adequação aos valores de dx e dy, de maneira a não permanecerem
blocos incompletos:
Novo dx = dx - (dx mod Sb);
(4.3)
Novo dy = dy - (dy mod Sb),
(4.4)
onde Sb é a dimensão do bloco (4 ou 16) e mod representa o resto de divisão inteira.
Opcionalmente, pode-se aplicar no pré-processamento a operação de filtragem definida no
Capítulo 3. Além disso, a rotina desenvolvida aceita como entrada um arquivo BM
comprimido pelo algoritmo PCM (extensão CBM), ou seja, a 4 bits/pixel, gerando um
segundo arquivo com extensão CBM. Neste caso, na descompressão, é gerado outro aquivo
CBM, a 4 bits/pixel.
O módulo SCIBTC.C disponibiliza as seguintes rotinas de compressão e descompressão:
void btc_encode_image(char *infile,char *outfile,char *filtfile,boolean high,
boolean filt,struct bmheadertype *h,
boolean pcmsource,
unsigned long int *savedbytes);
void btc_decode_image(FILE *inf,FILE *outf,int dx,int dy,boolean high,
boolean pcmsource),
onde,
infile = nome do arquivo de entrada da compressão, ou pré-processamento (BM,
ou CBM);
outfile = nome do arquivo de saída da compressão (CBM);
filtfile = nome do arquivo de saída do pré-processamento e entrada da
compressão, quando é solicitada a filtragem (BM);
high = variável lógica, indica que será usado o bloco de 16x16 (TRUE) ou o
bloco 4x4 (FALSE);
filt = variável lógica, indica que será executado o pré-processamento (TRUE);
h = header do arquivo de saída da compressão;
pcmsource = variável lógica, indica que a imagem original já foi comprimida pelo
algoritmo PCM (TRUE);
savedbytes = número de bytes da imagem resultante da compressão (excluído o
cabeçalho);
inf = arquivo de entrada da descompressão (CBM);
outf = arquivo de saída da descompressão (BM);
dx = largura da imagem reconstruída, em pixels;
dy = altura da imagem reconstruída, em pixels.
PCM - Pulse Code Modulation
Na compressão PCM, adotou-se uma quantização uniforme e não adaptativa, em 16 níveis.
A codificação usa palavras de tamanho fixo de 4 bits. Como resultado, uma razão de
compressão fixa de 2:1 é obtida. O processamento é feito pixel a pixel e, portanto, não há
alteração no tamanho original da imagem.
Listam-se abaixo as rotinas implementadas no módulo SCIPCM.C:
void pcm_encode_image(char *infile,char *outfile,struct bmheadertype *h,
unsigned long int *savedbytes);
void pcm_decode_image(FILE *inf,FILE *outf,int dx,int dy),
onde,
infile = nome do arquivo de entrada da compressão, (BM);
outfile = nome do arquivo de saída da compressão (CBM);
h = header do arquivo de saída da compressão;
savedbytes = número de bytes da imagem resultante da compressão
(excluído o cabeçalho);
inf = arquivo de entrada da descompressão (CBM);
outf = arquivo de saída da descompressão (BM);
dx = largura da imagem reconstruída, em pixels;
dy = altura da imagem reconstruída, em pixels.
DPCM - Differential Pulse Code Modulation
O algoritmo DPCM foi implementado em dois modos. No primeiro modo, não há perda da
informação, ao contrário do segundo.
Na compressão DPCM, sem distorção da imagem reconstruída, não há quantização dos
erros de predição. O pixel corrente da imagem é previsto a partir do pixel anterior, segundo
a seguinte regra:
f(m,n) = f(m-1,n),
(4.5)
onde x e y representam, respectivamente, a linha e a coluna em que se encontra o pixel
corrente. Foi adotada portanto a predição uniforme linear. O erro de predição é codificado
pelo código de Huffman, estando as palavras nas seguintes variáveis:
static mhconstcodetype dpcmlowhuffman[63]: palavras para erros de baixa
magnitude, situados no intervalo (fechado) -31 a +31. Caso o erro se situe fora
deste intervalo, há composição com as palavras de uma das duas tabelas abaixo
(Apêndice C1.1);
static mhconstcodetype dpcmhighhuffmann[7]: palavras que compõem os bits
mais significativos da palavra final, que representa um erro de predição no
intervalo (fechado) -255 a -32 (Apêndice C1.2);
static mhconstcodetype dpcmhighhuffmanp[7]: idem para o intervalo (fechado)
+32 a +255 (Apêndice C1.3).
Como se pode observar, a razão de compressão obtida é variável.
Na compressão com distorções, a mesma regra de predição foi adotada, tendo sido
implementados os seguintes recursos:
•
•
quantização em 16, 8 ou 2 níveis (DM);
quantização fixa não uniforme, ou adaptativa uniforme;
A combinação dos dois itens acima é livre, com exceção da modulação delta, que deve se
restringir à quantização fixa não uniforme.
Para codificação dos erros quantizados, os códigos de Huffman listados no Apêndice C2
foram usados:
static mhconstcodetype dpcmslossyhuffman[16]: palavras que representam os
erros de predição quantizados em 16 níveis (Apêndice C2.1);
static mhconstcodetype dpcmhlossyhuffman[8]: idem, para a quantização em 8
níveis (Apêndice C2.2);
static mhconstcodetype dpcmdlossyhuffman[2]: idem, para a quantização em 2
níveis (Apêndice C2.3).
No caso da quantização fixa não uniforme, os valores representativos e os limites de cada
intervalo de quantização foram calculados a partir de estudo estatístico das imagensamostra, considerando-se as tabelas de Lloyd-Max para distribuições gaussianas (vide
Capítulo 5), contidas no Apêndice C2:
static int dpcmslossybound[16]: limites superiores (abertos) dos intervalos de
quantização em 16 níveis (Apêndice C2.1);
static int dpcmhlossybound[8]: idem, para quantização em 8 níveis (Apêndice
C2.2);
static int dpcmdlossybound[3]: idem, para modulação delta (Apêndice C2.3);
static int dpcmslossylevels[16]: valores representativos de cada intervalo de
quantização em 16 níveis (Apêndice C2.1);
static int dpcmhlossylevels[8]: idem, para quantização em 8 níveis (Apêndice
C2.2);
static int dpcmdlossylevels[2]: idem, para modulação delta (Apêndice C2.3).
No caso da quantização adaptativa, os limites dos intervalos dividem sempre a faixa de
quantização em intervalos de mesmo tamanho (quantização uniforme). Entretanto, a faixa
de valores considerada varia de acordo com as características locais da imagem. A idéia é
que existe um compromisso entre os efeitos de sobrecarga de borda e granularidade. Se a
luminância ao longo de uma linha aumenta bruscamente, implicando em altas amplitudes
dos erros de predição, o tamanho dos níveis de reconstrução deve também ser ampliado, de
maneira a reduzir a sobrecarga de borda. Ao contrário, em uma região de baixa freqüência,
o tamanho dos níveis deve ser reduzido, o que aumentará a sensibilidade da quantização e,
conseqüentemente, reduzirá o ruído granular.
As constantes abaixo contêm os fatores multiplicativos adotados na implementação de
acordo com os níveis crescentes de erros de predição (Apêndice C2.4):
static double smult[9]: fator de multiplicação dos intervalos de quantização
adaptativa para 16 níveis;
static double hmult[5]: fator de multiplicação dos intervalos de quantização
adaptativa para 8 níveis.
Foram as seguintes as rotinas implementadas no módulo SCIDPCM.C:
void dpcm_encode_image(char *infile,char *outfile,boolean lossy,
boolean adaptive,boolean high,boolean delta,
struct bmheadertype *h,
unsigned long int *savedbytes);
void dpcm_decode_image(FILE *inf,FILE *outf,int dx,int dy,boolean lossy,
boolean adaptive,boolean high,boolean delta),
onde,
infile = nome do arquivo de entrada da compressão (BM);
outfile = nome do arquivo de saída da compressão (CBM);
lossy = indica compressão com perda de informação (TRUE);
adaptive = indica compressão adaptativa (TRUE);
high = indica quantização em 16 (TRUE) ou 8 níveis (FALSE);
delta = indica quantização em 2 níveis - DM (TRUE);
h = header do arquivo de saída da compressão;
savedbytes = número de bytes da imagem resultante da compressão (excluído o
cabeçalho);
inf = arquivo de entrada da descompressão (CBM);
outf = arquivo de saída da descompressão (BM);
dx = largura da imagem reconstruída, em pixels;
dy = altura da imagem reconstruída, em pixels.
PC - Pyramid Coding
O algoritmo PC implementado utiliza as funções de redução e expansão definidas no
Capítulo 3, sendo necessária a adequação do tamanho da imagem às dimensões da janela de
convolução, o que implica quase sempre em uma imagem reconstruída de dimensões
menores do que as da original.
A codificação é feita em 8 bits/pixel para o último nível da pirâmide gaussiana e por
intermédio de palavras de tamanho variável para os níveis da pirâmide laplaciana, o que
resulta em compressão variável. Na implementação deste trabalho, são geradas pirâmides
gaussianas com 5 níveis.
As pirâmides geradas durante o processamento têm cada um dos seus níveis armazenados
no formato BM, para posteriores estudos. Os arquivos são criados no diretório corrente e
recebem os seguintes nomes:
GPYRn.BM: nível n da pirâmide gaussiana;
XGPYRn.BM: nível n da pirâmide gaussiana expandida;
LPYRn.BM: nível n da pirâmide laplaciana;
A janela de convolução da função de redução descrita no Apêndice D1 é armazenada na
variável:
static const double cwindow[5][5].
A quantização é feita adaptativamente, de acordo com o nível da pirâmide, de maneira que,
nos níveis mais altos, onde prevalecem as altas freqüências, um número maior de intervalos
é definido.Os erros são quantizados e codificados conforme os intervalos e códigos de
Huffman das tabelas abaixo (Apêndice D2):
static mhconstcodetype plossyhuffman[4][17]:códigos de Huffman para
codificação dos níveis de 1,2,3 e 4 da pirâmide, com, respectivamente, 3,5,9 e 17
níveis de quantização;
static int plossybound[4][17]: limites superiores (abertos) dos intervalos de
quantização para os níveis 1,2 3 e 4 da pirâmide;
static int plossylevels[4][17]: valores representativos dos intervalos de
quantização para os níveis 1,2 3 e 4 da pirâmide;
As seguintes funções realizam a compressão e descompressão PC (SCIPYR.C):
void lpyr_encode_image(char *infile,char *outfile,
struct bmheadertype *h,
unsigned long int *savedbytes);
void lpyr_decode_image(FILE *inf,FILE *outf,struct bmheadertype *header),
onde,
infile = nome do arquivo de entrada da compressão (BM);
outfile = nome do arquivo de saída da compressão (CBM);
h = header do arquivo de saída da compressão;
savedbytes = número de bytes da imagem resultante da compressão (excluído o
cabeçalho);
inf = arquivo de entrada da descompressão (CBM);
outf = arquivo de saída da descompressão (BM).
DCT - Discrete Cosine Transform Coding
Na compressão por transformada, optou-se pela tranformada do cosseno, devido a sua
ampla utilização. A quantização é feita através de matriz de alocação de 64 bits (Apêndice
E1) e o tamanho do bloco adotado foi de 8x8 pixels. Os limites dos intervalos de
quantização e seus valores representativos foram obtidos através de estudos das imagens
consideradas neste trabalho (vide Capítulo 5). São as seguintes as variáveis que interferem
na quantização:
static tblocktype lowqtable: matriz de alocação de bits;
static qtabletype qbounds: tabela de limites dos intervalos de quantização;
static qtabletype qvalues: tabela contendo os valores representativos de cada
intervalo.
Os valores que preenchem as variáveis acima estão disponíveis no arquivo de dados:
SCIDTCDT.DAT.
A razão de compressão final é fixa:
Rc
=
=
[(8 bits/pixel) * 64 pixels] / (64 bits)
8:1, ou 1 bit/pixel
(4.6)
As seguintes funções realizam a compressão e descompressão DCT (SCIDCT.C):
void dct_encode_image(char *infile,char *outfile,struct bmheadertype *h,
unsigned long int *savedbytes);
void dct_decode_image(FILE *inf,FILE *outf,int dx,int dy),
onde,
infile = nome do arquivo de entrada da compressão (BM);
outfile = nome do arquivo de saída da compressão (CBM);
h = header do arquivo de saída da compressão;
savedbytes = número de bytes da imagem resultante da compressão (excluído o
cabeçalho);
inf = arquivo de entrada da descompressão (CBM);
outf = arquivo de saída da descompressão (BM);
dx = largura da imagem reconstruída, em pixels;
dy = altura da imagem reconstruída, em pixels.
Cabe observar que, por razões de simplificação e, dado que o algoritmo JPEG utiliza o
algoritmo DCT, não foi implementada a transformada rápida do cosseno neste sistema, o
que implica em um aumento substancial dos tempos de compressão e descompressão
obtidos. Entretanto, dada a estrutura modularizada do sistema, esta poderá ser futuramente
implementada.
VQ - Vector Quantization
A quantização vetorial foi aplicada de duas maneiras diferentes. Como primeira alternativa,
implementou-se o que se convencionou chamar de quantização vetorial pura, ou seja
aplicada diretamente sobre a imagem, não efetuando nenhum tipo de mapeamento. Numa
segunda variação, a quantização vetorial foi associada à truncagem de blocos (BTC). Em
ambos os casos, o tamanho da imagem resultante pode apresentar pequena diferença em
relação ao tamanho da imagem original, devido ao fato do algoritmo trabalhar em blocos de
tamanho definido.
Ambas as implementações considereram blocos de tamanho 4x4 pixels e dicionários (ou
alfabetos) de 256 vetores. Os alfabetos foram gerados a partir das imagens-amostras,
através do algoritmo LBG detalhado no Capítulo 3.
VQ Pura
Na quantização vetorial pura divide-se a imagem em blocos de pixels. A cada um destes
blocos se associa um único bloco do dicionário de vetores, o qual representará o bloco
original na imagem reconstruída. Os 256 blocos são codificados pela utilização de palavras
de tamanho fixo de 8 bits, o que resulta na seguinte razão de compressão fixa:
Rc = (16 pixels x 8 bits/pixel) / 8 bits = 16:1, ou 0.5 bits/pixel.
(4.7)
A escolha do vetor mais próximo ao original se dá pelo critério do menor MSE calculado.
O Apêndice F1 apresenta o dicionário de vetores otimizado pelo algoritmo LBG,
considerando-se os vetores das imagens-amostras. O dicionário é armazenado no arquivo
SCIVQVQ.ALF e é carregado em tempo de execução na variável:
static alphatype alphaimg
VQ/BTC
Aqui são necessários dois dicionários de vetores, o primeiro representativo dos mapas de
bits resultantes da aplicação da truncagem de blocos e, portanto, com dimensão 16, o
segundo, representativo da média e variância calculadas para cada bloco, e, em
conseqüência, bidimensional. Os 256 blocos de cada dicionário também são codificados
com palavras de tamanho fixo 8 bits, o que resulta em razão de compressão igual a:
Rc = 2 x (16 pixels x 8bits/pixel) / 8 bits = 8:1, ou 1,0 bit/pixel.
(4.8)
Para os vetores dos parâmetros estatísticos, é usado o critério do menor MSE. Para os
vetores do mapa de bits, basta que se determine o número de pixels com valores
coincidentes, optando-se por aquele vetor que apresentar o maior (no caso de empate,
escolhe-se o último vetor selecionado).
O Apêndice F2 apresenta os alfabetos VQ/BTC obtidos a partir da otimização LBG para as
amostras. Tais alfabetos são carregados nas variáveis listadas abaixo, a partir dos dados
constantes nos arquivos SCIVQBTB.ALF e SCIVQBTP.ALF.
static alphatype alphaimg
static ralphatype alphabtc
4.4 Conclusões
No presente capítulo, foram apresentados os principais elementos da interface das rotinas
de compressão de imagens. Foram também relacionados os algoritmos implementados e
definida a parametrização selecionada para a aplicação estudada.
O objetivo da implementação foi o de fornecer um conjunto básico de rotinas de
compressão de imagens para uso genérico, adequando-as ao caso específico das imagens-
amostras deste trabalho. As rotinas podem ser utilizadas com outras imagens, sem que se
proceda a um ajuste fino dos seus parâmetros, oferecendo, na maioria dos casos, resultados
satisfatórios. As variações implementadas dentro dos algoritmos procuraram indicar alguns
dos possíveis refinamentos, sem pretender, entretanto, esgotar todo o seu universo.
A interface PixelWare possibilita ao usuário realizar, dentro do mesmo ambiente, uma
gama variada de operações de pré e pós-processamentos, melhorando o resultado final da
compressão. No nível de linha de comandos DOS, o sistema apresenta-se com interface
mais simples e de utilização mais rápida.
No capítulo seguinte são discutidos os resultados obtidos com a aplicação dos algoritmos a
imagens de documentos históricos.
5. Resultados
Este capítulo descreve a aplicação das rotinas de compressão de imagens selecionadas a um
conjunto de imagens de documentos históricos. Para otimização dos resultados, os
parâmetros dos algoritmos foram ajustados a este conjunto de imagens, a partir de estudos
estatísticos realizados nos ensaios. Em seguida, compararam-se os resultados obtidos, sob
três aspectos: tempos normalizados de compressão e descompressão, razão de compressão e
distorção da imagem reconstruída. Como referência, o algoritmo JPEG também foi
aplicado a cada uma das imagens.
As imagens originais representadas na Figura 5.1 (8 bits/pixel) foram obtidas através de
scanner, a 150 dpi. As imagens da Figura 5.1 não sofreram qualquer operação de préprocessamento, embora, em aplicação real, fosse desejável que a tais imagens fosse
aplicado algum tipo de transformação da escala de cinza, de modo a aumentar a sua
legibilidade e melhor adequá-las aos algoritmos. No caso dos algoritmos RLC e MREAD,
às imagens originais foi aplicada transformação por limiar, gerando o conjunto de imagensamostras binárias da Figura 5.2 (1 bit/pixel).
Observe-se que as imagens-amostras são produto do recorte das imagens dos documentos
inteiros, não mostrados aqui, por razões de simplificação. Os resultados apresentados,
entretanto, foram obtidos a partir do tratamento destas últimas.
5.1 Imagens Binárias
As imagens da figura 5.2 foram comprimidas pelos algoritmos RLC e MREAD. A Tabela
5.1 apresenta os resultados obtidos para a Imagem 1, considerando-se as variações
implementadas no algoritmo MREAD (código modificado de Huffman para seqüências de
brancos e pretos). Observe-se que os valores da tabela se referem ao documento inteiro e
não apenas à fração ilustrada na Figura 5.2. Os tempos de compressão e descompressão
foram medidos sob as mesmas condições de processamento, em um microcomputador PC386, com 8 Mbytes de RAM, 25 MHz, co-processador 80387 e unidade de disco rígido de
80 Mbytes.
As razões de compressão apresentadas foram calculadas com base na entropia real da
imagem original, 1 bit/pixel e não com base na entropia das imagens BM, 8 bits/pixel. Se
for considerada esta última, as razões de compressão finais deverão ser multiplicadas por
oito, o que representa a redução real no tamanho do arquivo BM que contém a imagem (em
cerca de 16 vezes).
Como já esperado, o algoritmo MREAD mostrou-se superior, com relação à entropia final
da imagem. Isto se deve, principalmente, à natureza bidimensional deste algoritmo, que
explora a correlação existente entre duas linhas sucessivas da imagem.
Foi verificado que, na maioria das vezes, os modos de passagem e vertical (Capítulo 3) são
acionados. Como a codificação destes modos é mais rápida (não há necessidade de se
realizar pesquisa na tabela de Huffman), há uma redução do tempo de compressão e
descompressão, com relação ao algoritmo RLC, que efetua estas consultas a cada seqüência
de brancos ou pretos.
Para o conjunto de imagens utilizado, observou-se uma discreta superioridade da tabela de
Huffman para seqüências de pretos no algoritmo MREAD. O uso de uma ou outra é
bastante dependente da imagem (ou do conjunto de imagens) e é interessante que se
proceda a um estudo preliminar, antes de se optar por uma delas. Em linhas gerais, a tabela
de pretos é mais recomendada para documentos que apresentem muitas regiões de altas
freqüências,o que favorece a codificação de pequenos comprimentos a0a1 e a1a2.
Ambos, RLC e MREAD são algoritmos preservadores de informação, não havendo
portanto diferença entre as imagens original e reconstruída (MSE = 0).
Figura 5.1 - Recortes das imagens-amostras originais (256x256 pixels, 8 bits/pixel).
Figura 5.2 - Recortes das imagens-amostras originais (256x256 pixels, 1 bit/pixel).
Algoritmo
RLC
Dimensões
Tamanho
Imagem
Imagem
Final
Reconstr.
Comprimida
(bits/pixel)
(pixels)
. (bytes)
452x457
13515
Rc
1,91:1
Entropia
0,52
MSE
0
SNR
Tempo
Tempo
(dB)
Compr.
Desc.
(min.)
(min.)
0,45
0,32
0,23
0,28
0,23
0,28
---------
MREAD/b
452x457
10648
2,42:1
0,41
0
---------
MREAD/w
452x457
11786
2,19:1
0,46
0
---------
Tabela 5.1 - Resultados da compressão e decompressão da Imagem 1, (206564 bytes,
452x457 pixels, 1 bit/pixel).
5.2 Imagens com Múltiplos Níveis de Cinza
Às imagens da Figura 5.1 foram aplicados os outros algoritmos implementados neste
trabalho, com todas as suas variações. As condições de processamento definidas no item
anterior foram mantidas. A Tabela 5.2 resume os resultados obtidos para a Imagem 1.
Algoritmo
BTC/s
BTC/h
Dimensões
Tamanho
Imagem
Imagem
Final
Reconstr.
Comprimida
(bits/pixel)
(pixels)
. (bytes)
452x456
448x448
51528
26656
Rc
4,00:1
7,53:1
Entropia
2,00
1,06
MSE
94,6
224,5
SNR
Tempo
Tempo
(dB)
Compr.
Desc.
(min.)
(min.)
0,27
0,27
0,32
0,20
26,3
22,5
BTC/f/s
452x456
51528
4,00:1
2,0
94,6
26,3
1,93
0,30
BTC/f/h
448x448
26656
7,53:1
1,06
224,5
22,5
1,72
0,22
BTC/p/s
452x456
38646
5,33:1
1,50
245,6
22,2
0,57
0,47
BTC/p/h
448x448
25872
7,76:1
1,03
474,8
19,3
0,5
0,42
PCM
452x456
103056
2,00:1
4,00
19,9
33,1
0,23
0,25
DPCM/i
DPCM/l/f/s
452x457
452x457
202544
88966
1,02:1
2,32:1
7,84
3,88
0
91,2
--------26,5
2,00
1,12
3,37
1,52
DPCM/l/f/h
452x457
68510
3,01:1
2,65
146,8
24,4
0,91
1,17
DPCM/l/a/s
452x457
82726
2,50:1
3,2
95,8
26,2
1,18
1,63
DPCM/l/a/h
452x457
69487
2,97:1
2,69
155,3
24,1
1,10
1,42
DPCM/l/d
452x457
26616
7,76:1
1,03
430,2
19,7
0,57
0,50
PC
449x449
48010
4,20:1
1,90
138,0
24,6
18,63
8,87
DCT(*)
256x256
8182
8,00:1
1,00
366,3
20,4
18,01
19,74
VQ/i
452x456
12882
16,00:1
0,50
177,7
23,6
26,87
0,17
VQ/b
452x456
25764
8,00:1
1,00
290,1
21,4
20,60
0,28
JPEGa
JPEGb
452x457
452x457
90428
50350
2,28:1
4,10:1
3,48
1,95
11,4
51,0
35,4
28,9
0,47
0,47
0,47
0,46
JPEGc
452x457
6784
30,40:1
0,26
419,2
19,8
0,38
0,28
Tabela 5.2 - Resultados da compressão e descompressão da Imagem 1, (206564 bytes,
452x457 pixels, 8 bit/pixel). (*) Algoritmo DCT aplicado à imagem 256x256 da Figura 5.2,
resultados estimados.
PCM - Pulse Code Modulation
O algoritmo PCM comprimiu as imagens a uma taxa de 2:1, a menor obtida nos ensaios.
Naturalmente, esta taxa é muito pequena para que se aplique o algoritmo isoladamente,
embora a qualidade da imagem reconstruída tenha sido considerada boa. De fato, a coluna
MSE indica um valor reduzido para esta grandeza, que dá uma idéia do grau de desvio dos
níveis de cinza dos pixels da imagem (Capítulo 2). Uma vez que tais erros estão limitados à
metade do intervalo de quantização, no caso, oito, o valor do MSE tende a ser pequeno.
A Figura 5.3 ilustra o resultado da compressão da Imagem 1. Um leve efeito de falsos
contornos, causado pela quantização dos níveis de cinza, pode ser percebido na região
superior da imagem, onde há uma predominância de níveis de cinza mais elevados.
Figura 5.3 - Imagem 1, reconstruída , PCM (2 bits/pixel).
BTC - Block Truncation Coding
Algoritmo
Dimensões
Tamanho
Imagem
Imagem
Final
Reconstr.
Comprimida
(bits/pixel)
(pixels)
. (bytes)
Rc
Entropia
MSE
SNR
Tempo
Tempo
(dB)
Compr.
Desc.
(min.)
(min.)
BTC/s
452x456
51528
4,00:1
2,00
94,6
26,3
0,27
0,32
BTC/h
448x448
26656
7,53:1
1,06
224,5
22,5
0,27
0,20
BTC/f/s
452x456
51528
4,00:1
2,0
94,6
26,3
1,93
0,30
BTC/f/h
448x448
26656
7,53:1
1,06
224,5
22,5
1,72
0,22
BTC/p/s
452x456
38646
5,33:1
1,50
245,6
22,2
0,57
0,47
BTC/p/h
448x448
25872
7,76:1
1,03
474,8
19,3
0,5
0,42
Tabela 5.3 - Resultados da compressão e descompressão da Imagem 1, BTC, (206564
bytes, 452x457 pixels, 8 bit/pixel).
O algoritmo BTC apresentou resultados mais favoráveis que o anterior, com relação à
compressão obtida, com razões de compressão variáveis entre 4:1 e 7,76:1. A Figura 5.4
mostra o resultado das seis variações implementadas, para a Imagem 1 da Figura 5.1.
Os tempos de compressão e, especialmente o de descompressão, foram considerados
satisfatórios. Os melhores resultados foram obtidos quando se usaram blocos de tamanho
8x8 pixels, pelo fato de haver menos blocos a processar. O aumento do tempo no
processamento devido à filtragem passa-baixas não chegou a inviabilizar a sua utilização,
visto que o tempo de compressão não é um fator crítico neste trabalho e que não há pósprocessamento envolvido. Entretanto, com relação à qualidade da imagem reconstruída,
não se observou significativa diferença entre o resultado das compressões sem e com préprocessamento.
Figura 5.4 - Imagem 1, reconstruída , BTC, a) 8x8 (2 bits/pixel); b) 4x4, associado a PCM
(1,5 bits/pixel); c) 4x4, pré-processado (2 bits/pixel); d) 16x16 (1,06 bits/pixel); e) 16x16,
associado a PCM (1,03 bits/pixel); f) 16x16, pré-processado (1,06 bits/pixel).
Os ensaios com blocos de tamanho 4x4 pixels não associados ao algoritmo PCM, embora
proporcionando razões de compressão inferiores, apresentaram os melhores resultados, no
que se refere à qualidade da imagem. Ao contrário das imagens resultantes do
processamento de blocos 8x8, é quase imperceptível o efeito de blocagem, característico do
algoritmo BTC. Para aplicações que exijam maiores razões de compressão, a utilização dos
blocos 8x8 pode ser viável, tendo em vista a legibilidade ainda aceitável das imagens
obtidas.
A combinação BTC/PCM não acrescentou grandes avanços em termos de razão de
compressão e, ao mesmo tempo, aumentou o tempo de descompressão e a qualidade final,
ressaltando o efeito de blocagem, tanto para blocos 8x8, quanto para blocos 4x4. Isto
ocorreu na medida em que a imagem com apenas 16 níveis teve suavizadas as diferenças
estatísticas dentro dos blocos, formando grandes áreas uniformes. A qualidade final da
imagem para blocos 8x8 foi considerada inadequada para aplicações reais.
DPCM - Differential Pulse Code Modulation
Algoritmo
Dimensões
Tamanho
Imagem
Imagem
Final
Reconstr.
Comprimida
(bits/pixel)
(pixels)
. (bytes)
DPCM/i
DPCM/l/f/s
452x457
452x457
202544
88966
1,02:1
2,32:1
7,84
3,88
0
91,2
DPCM/l/f/h
452x457
68510
3,01:1
2,65
DPCM/l/a/s
452x457
82726
2,50:1
3,2
DPCM/l/a/h
452x457
69487
2,97:1
DPCM/l/d
452x457
26616
7,76:1
Rc
Entropia
MSE
SNR
Tempo
Tempo
(dB)
Compr.
Desc.
(min.)
(min.)
--------26,5
2,00
1,12
3,37
1,52
146,8
24,4
0,91
1,17
95,8
26,2
1,18
1,63
2,69
155,3
24,1
1,10
1,42
1,03
430,2
19,7
0,57
0,50
Tabela 5.4 - Resultados da compressão e descompressão da Imagem 1, DPCM, (206564
bytes, 452x457 pixels, 8 bit/pixel).
O algoritmo DPCM, juntamente com o BTC, foi o implementado com o maior número de
variações. A Figura 5.5 ilustra as imagens resultantes da compressão da Imagem 1 da
Figura 5.1.
Os códigos utilizados na codificação dos erros de predição foram definidos através da
observação das curvas de distribuição dos erros, que mostrou comportamento gaussiano
(Figura 5.6). Os limites e valores representativos dos intervalos de quantização foram
obtidos pela tabela de quantizadores de Lloyd-Max [Jain89], adequada aos parâmetros
média e variância dos erros das imagens-amostras.
As razões de compressão proporcionadas pelo algoritmo DPCM são muito baixas para que
este possa ser utilizado isoladamente em uma aplicação (exceto no caso da modulação delta
- DM). Melhores desempenhos poderiam ser obtidos, se fosse combinado com outras
técnicas, como por exemplo a compressão por transformadas (o algoritmo JPEG faz uso de
técnica preditiva na codificação dos coeficientes DC). Também com relação aos tempos de
processamento, os resultados não são satisfatórios.
A qualidade final das imagens pode ser considerada boa. A compressão DM deixa a desejar
neste aspecto, apesar da maior razão de compressão. Pode-se observar na Figura 5.5d o
efeito de sobrecarga de borda (Capítulo 3), que provoca borramento nas regiões de fronteira
entre baixas e altas amplitudes. No caso da Figura 5.5a, a imagem reconstruída é idêntica à
original, mas a entropia final é praticamente a mesma, com um ganho muito pequeno em
termos de espaço de memória.
A quantização adaptativa, para todo o conjunto de imagens, aumentou em cerca de 15% a
razão de compressão, sem alterar significativamente os tempos de processamento e a
qualidade final das imagens.
Figura 5.5 - Imagem 1 , reconstruída, DPCM, a) sem distorção (7,84 bits/pixel); b)
quantização fixa, em 16 níveis (3,88 bits/pixel); c) quantização fixa, em 8 níveis, (2,65
bits/pixel); d) quantização fixa, em dois níveis (DM) (1,03 bits/pixel); e) quantização
adaptativa, em 16 níveis (3,2 bits/pixel); f) quantização.adaptativa, em 8 níveis (2,69
bits/pixel).
-127
127
Figura 5.6 - Distribuição típica dos erros de predição nas imagens-amostras.
PC - Pyramid Coding
Algoritmo
PC
Dimensões
Tamanho
Imagem
Imagem
Final
Reconstr.
Comprimida
(bits/pixel)
(pixels)
. (bytes)
449x449
48010
Rc
4,20:1
Entropia
1,90
MSE
138,0
SNR
Tempo
Tempo
(dB)
Compr.
Desc.
(min.)
(min.)
18,63
8,87
24,6
Tabela 5.5 - Resultados da compressão e descompressão da Imagem 1, PC, (206564 bytes,
452x457 pixels, 8 bit/pixel).
A compressão piramidal (PC), considerada por alguns autores como um algoritmo híbrido
de primeira geração [KIK85], apresentou resultados medianos em termos de qualidade de
imagem e praticamente inaceitáveis em termos de tempo de processamento, embora seja
bastante interessante sob o ponto de vista acadêmico. A aplicação deste algoritmo à
Imagem 1 da Figura 5.1 originou as pirâmides da Figura 5.7.
A pirâmide gaussiana, que é produto da aplicação da função de redução (Capítulo 3),
introduz uma filtragem passa-baixas sucessiva, em cada nível. O último nível desta
pirâmide é codificado juntamente com os restantes da pirâmide laplaciana. Esta última é o
resultado da operação de subtração entre a primeira e a pirâmide gaussiana expandida.
Observa-se que a pirâmide laplaciana retém apenas a informação de alta freqüência a cada
nível, podendo ser mais eficientemente codificada por técnica preditiva. A Imagem 1 da
Figura 5.1 reconstruída por este algoritmo é ilustrada na Figura 5.8. Note-se que as
dimensões finais desta imagem foram reduzidas mais significativamente do que nos outros
algoritmos.
DCT - Discrete Cosine Transform
Algoritmo
DCT(*)
Dimensões
Tamanho
Imagem
Imagem
Final
Reconstr.
Comprimida
(bits/pixel)
(pixels)
. (bytes)
256x256
8182
Rc
8,00:1
Entropia
1,00
MSE
366,3
SNR
Tempo
Tempo
(dB)
Compr.
Desc.
(min.)
(min.)
18,01
19,74
20,4
Tabela 5.6 - Resultados da compressão e descompressão da Imagem 1, DCT, (206564
bytes, 452x457 pixels, 8 bit/pixel).
O algoritmo DCT foi implementado em versão simplificada, não tendo sido visados baixos
tempos de compressão e descompressão. Portanto, os resultados obtidos não devem ser
diretamente comparados com os demais, para fins de determinação de desempenho relativo.
No caso da transformada do cosseno, será mais adequada a comparação com os resultados
do algoritmo JPEG.
A matriz de alocação de bits (Apêndice E) foi determinada com base nas referências
bibliográficas [Lim90], [Jain89] ,[Cost93], para uma razão de compressão intermediária
(8:1). Para cada valor desta matriz (e não para cada posição) foi definido um quantizador
diferente. Portanto, foi necessário o estabelecimento de sete quantizadores, para 1,2,3,4,5,6
e 8 bits.
Figura 5.7 - Pirâmides da compressão PC, Imagem 1.
Figura 5.8 - Imagem 1, reconstruída, PC (1,9 bits/pixel).
Idealmente, um quantizador teria que ser definido para cada posição da matriz, uma vez que
cada uma delas apresenta diferentes médias e variâncias. No sentido de se simplificar a
definição dos quantizadores, adotaram-se os valores médios destes parâmetros,
consideradas aquelas posições do bloco quantizadas com uma mesma quantidade de bits.
Na definição dos limites e valores representativos de cada intervalo foram usadas as tabelas
de quantização de Lloyd-Max [Jain89], para distribuição gaussiana, com o devido ajuste de
média e variância (valores indicados no Apêndice E).
O resultado da compressão da Imagem 1, ilustrado na Figura 5.9, mostra uma deterioração
da imagem, com a introdução de ruído granular, causado pela quantização e pelo descarte
dos coeficientes do bloco. Para a razão de compressão final obtida, a qualidade da imagem
reconstruída pode ser considerada aceitável.
Figura 5.9 - Imagem 1, reconstruída, DCT (1 bit/pixel).
VQ - Vector Quantization
O algoritmo VQ foi aquele que, dentre os implementados, apresentou os melhores
resultados em termos de razão de compressão, chegando a 16:1, sem que a qualidade final
fosse seriamente comprometida.
Algoritmo
VQ/i
VQ/b
Dimensões
Tamanho
Imagem
Imagem
Final
Reconstr.
Comprimida
(bits/pixel)
(pixels)
. (bytes)
452x456
452x456
12882
25764
Rc
16,00:1
8,00:1
Entropia
0,50
1,00
MSE
177,7
290,1
SNR
Tempo
Tempo
(dB)
Compr.
Desc.
(min.)
(min.)
26,87
20,60
0,17
0,28
23,6
21,4
Tabela 5.6 - Resultados da compressão e descompressão da Imagem 1, VQ, (206564 bytes,
452x457 pixels, 8 bit/pixel).
A quantização vetorial pura apresenta a vantagem da facilidade de implementação e dos
altos níveis de compressão. A VQ associada ao algoritmo BTC, além de proporcionar
compressões de apenas oito vezes, apresentou maior deterioração da imagem, ainda que
sem a introdução do efeito de blocagem. Entretanto, mostrou-se mais eficiente no
tratamento de imagens que não integraram o conjunto de amostras usado na otimização dos
alfabetos e apresentou menores tempos de compressão. A Figura 5.10 ilustra os resultados
da utilização das duas variações da quantização vetorial implementadas. A Figura 5.11
mostra os resultados da compressão e descompressão de uma imagem de documento
estranha ao conjunto que originou os alfabetos.
Figura 5.10 - Imagem 1, reconstruída, VQ, a) pura (0,5 bits/pixel); b) associada a BTC (1
bit/pixel).
Com relação aos tempos de processamento, os valores obtidos na descompressão foram
bastante reduzidos, uma vez que, não é necessário grande volume de cálculos para o caso
VQ/BTC e nenhum cálculo no caso de VQ pura (apenas a consulta à tabela de vetores
representativos). O tempo de compressão elevado, em função da determinação do vetor
mais adequado do dicionário não é crítico e não inviabiliza portanto a utilização prática do
algoritmo.
Figura 5.11- Imagem 6, a) original; b) VQ pura (0,5 bits/pixel); c) associada a BTC (1
bit/pixel).
JPEG - Joint Photographic Experts Group
Algoritmo
Dimensões
Tamanho
Imagem
Imagem
Final
Reconstr.
Comprimida
(bits/pixel)
(pixels)
. (bytes)
JPEGa
452x457
90428
2,28:1
3,48
11,4
JPEGb
JPEGc
452x457
452x457
50350
6784
4,10:1
30,40:1
1,95
0,26
51,0
419,2
Rc
Entropia
MSE
SNR
Tempo
Tempo
(dB)
Compr.
Desc.
(min.)
(min.)
35,4
0,47
0,47
28,9
19,8
0,47
0,38
0,46
0,28
Tabela 5.7 - Resultados da compressão e descompressão da Imagem 1, JPEG, (206564
bytes, 452x457 pixels, 8 bit/pixel).
As imagens-amostras também foram comprimidas pelo algoritmo JPEG, disponível no
utilitário Image Alchemy [Hand91]. O formato permite a compressão com ajuste da
qualidade final da imagem desejada (e conseqüentemente da razão de compressão). Para
comparação com os resultados obtidos pelos outros algoritmos, três níveis foram definidos,
próximos ao mínimo e máximo de compressão possíveis e a um valor intermediário. A
Tabela 5.2 apresenta tais resultados.
Os tempos de compressão e descompressão estão dentro dos valores apresentados por
alguns dos algoritmos implementados e são considerados baixos. O ensaio JPEGa foi o que
apresentou as maiores entropias, comprimindo a Imagem 1 a uma razão de 2,28:1,
comparável à dos algoritmos PCM e DPCM, mas com melhores índices de distorção. O
ensaio JPEGb, com uma razão de compressão intermediária, apresenta também aceitáveis
índices de distorção, semelhantes aos obtidos pelo algoritmo BTC com blocos de tamanho
4x4 pixels. Já o terceiro ensaio, JPEGc, maximizou a razão de compressão chegando a
atingir os 32:1. Entretanto, uma inspeção visual desqualifica as imagens reconstruídas,
tendo em vista a grande distorção introduzida nas mesmas. A Figura 5.12 ilustra os
resultados dos três ensaios.
Figura 5.12 - Imagem 1, reconstruída, JPEG, a) 3,48 bits/pixel; b) 1,95 bits/pixel; c) 0,26
bits/pixel.
5.3 Banco de Dados de Imagens de Documentos Históricos
A conservação e restauração de documentos históricos e trabalhos de arte em papel tem
como primeira etapa a elaboração de diagnóstico do estado de conservação do objeto
[ASL+92], [ALSC93]. Esta fase consiste de análises visual, física e química e tem como
objetivo a determinação das técnicas a serem empregadas no trabalho. A restauração é
documentada através de fotografias e relatórios técnicos, que são, geralmente, armazenados
e manipulados manualmente. Conseqüentemente, o tempo necessário à recuperação de
informações, durante o processo de restauração, é elevado. Por este motivo, há interesse em
se utilizar um sistema de processamento de imagens para armazenamento de informações
gráficas e alfanuméricas. Este sistema permitiria acesso rápido aos dados e disponibilizaria
recursos de pesquisa com referências cruzadas, importantes durante o trabalho. O sistema
poderia ainda integrar recursos de realce de imagens, permitindo, por exemplo, que fosse
ressaltado o contraste de um determinado documento.
A Figura 5.13 descreve a arquitetura do sistema proposto. A interface com o usuário
oferece recursos básicos de scanning, processamento de imagens e acesso à base de dados
alfanuméricos. A base de dados é dividida em duas, uma para o armazenamento dos dados
convencionais relacionados aos documentos, e outra para o armazenamento das imagens
dos documentos. Os dados alfanuméricos são gerenciados através de procedimentos
convencionais de DBMS (Database Managing System), enquanto que as imagens são
armazenadas em campos longos e manipuladas por rotinas especiais para realce,
compressão e exibição.
Figura 5.13 - Arquitetura do sistema proposto [ASL+92].
Naturalmente, é desejável que o espaço de memória ocupado pelas imagens seja o menor
possível, reduzindo-se os custos de implantação do sistema. Por outro lado, a
operacionalidade do sistema exige baixos tempos de recuperação das imagens. Finalmente,
a qualidade das imagens reconstruídas deve permitir que as informações gráficas
necessárias ao trabalho de conservação sejam obtidas. Dentre os algoritmos implementados,
a quantização vetorial pura é a que melhor se adequa à restrições acima. Dentro do universo
de documentos disponíveis, seriam definidos alguns para compor a massa de amostras
usada na otimização do dicionário de vetores (acredita-se que cerca de 6 documentos
seriam suficientes). Esta escolha poderia seguir um critério de classificação de documentos,
que procurasse agrupá-los de acordo com suas características (manuscritos, documentos
contendo desenhos, etc.). Uma vez definidos tais documentos, as imagens seriam obtidas e
seria gerado o dicionário, a partir do qual todas as imagens seriam comprimidas, reduzindose em 16 vezes o espaço necessário ao seu armazenamento. As Figuras 5.14 a 5.19 ilustram
o resultado da compressão e descompressão VQ pura das imagens-amostras adotadas neste
trabalho.
Figura 5.14 - Imagem 1, reconstruída (452x456 pixels, 0,5 bits/pixel).
Figura 5.15 - Imagem 2, reconstruída (545x460 pixels, 0,5 bits/pixel).
Figura 5.16 - Imagem 3, reconstruída (448x460 pixels, 0,5 bits/pixel).
Figura 5.17 - Imagem 4, reconstruída (545x492 pixels, 0,5 bits/pixel).
Figura 5.18 - Imagem 5, reconstruída (557x444 pixels, 0,5 bits/pixel).
Figura 5.19 - Imagem 6, reconstruída (358x465 pixels, 0,5 bits/pixel).
5.3 Conclusões
Foram implementados ao todo oito algoritmos de compressão de imagens, sendo dois deles
utilizados com imagens binárias e o restante com imagens de múltiplos níveis de cinza.
Estes algoritmos foram testados com um conjunto de imagens de documentos históricos e
tiveram seus parâmetros de operação ajustados às imagens-amostras. Os resultados foram
compilados e o desempenho dos algoritmos em termos de velocidade de processamento,
qualidade das imagens e grau de compressão foi analisado.
No caso das imagens binárias, o algoritmo MREAD mostrou ser mais eficiente que o
algoritmo RLC, como já esperado, devido a sua capacidade de explorar a correlação entre
linhas subseqüentes da imagem. A razão de compressão líquida obtida esteve em torno dos
2:1, sendo que em ambos os casos não há distorção entre as imagens originais e as
reconstruídas. No caso dos arquivos BM, a redução real no tamanho dos arquivos chega aos
16:1, devido às características deste formato. Os tempos de compressão e descompressão
foram considerados baixos.
Para as imagens com múltiplos níveis de cinza, pode-se classificar os algoritmos em três
diferentes grupos, de acordo com as razões de compressão obtidas. Os algoritmos menos
evoluídos estão no primeiro grupo, com razões de compressão em torno dos 2:1. São eles
PCM e DPCM, nas suas diversas variações, excetuando-se a chamada modulação delta
(DM). Concluiu-se que tais algoritmos não devem ser usados isoladamente, devido a seu
baixo desempenho, sendo recomendáveis apenas em conjunto com outros elementos de
codificação, como no caso do algoritmo JPEG para os coeficiente DC, que são codificados
preditivamente (Capítulo 3). O segundo grupo é o dos algoritmos que proporcionam razões
de compressão de 4:1 a 8:1, como os algoritmos BTC, DCT, PC e DPCM (DM). Para estes,
a qualidade das imagens reconstruídas, de uma maneira geral; foi considerada satisfatória,
assim como as razões de compressão obtidas. No caso dos algoritmos PC e DCT, os tempos
de processamento mostraram-se proibitivos, sendo a sua utilização possível apenas após
terem sofrido otimizações em sua implementação. O terceiro e último grupo é composto
pelos algoritmos de mais alta performance, a quantização vetorial e o algoritmo JPEG, este
último não implementado, servindo apenas como referência. Com razões de compressão
variáveis entre os 8:1 e os 16:1, tais algoritmos conseguem reunir ao mesmo tempo
velocidade de processamento (pelo menos no caso da descompressão, que é essencial), boa
qualidade das imagens reconstruídas e facilidade de implementação (no caso da
quantização vetorial).
Como aplicação, foi proposto um sistema para armazenamento de dados referentes a
documentos históricos. Os dados gerenciados por este sistema seriam gráficos (imagens) e
alfanuméricos (informações sobre o processo de conservação dos documentos).
Observando-se as restrições impostas pela aplicação (baixos tempos de recuperação, altas
razões de compressão e adequada qualidade final), indicou-se a quantização vetorial pura
para compressão das imagens. As imagens reconstruídas dos documentos usados como
amostras neste trabalho, resultantes da aplicação deste algoritmo, foram apresentadas.
6. CONCLUSÕES
O objetivo deste trabalho foi o de se proceder a um estudo extensivo das técnicas de
compressão de imagens mais adequadas a uma aplicação prática que vise exclusivamente
ao seu armazenamento e recuperação, tal como seria um banco de dados de imagens de
documentos históricos. Dentro desta proposta, foram abordados os conceitos fundamentais
do Processamento Digital de Imagens relacionados ao tema e analisaram-se diversos
algoritmos propostos durante as duas últimas décadas, além de suas mais recentes
evoluções. A partir deste estudo, foram definidos aqueles algoritmos que seriam
implementados. Estes algoritmos foram escolhidos basicamente por características como
simplicidade de implementação, facilidade de parametrização em função de diferentes
conjuntos de imagens, tempos de descompressão (ou recuperação) menos elevados, altas
razões de compressão e distorções reduzidas das imagens reconstruídas em relação às
originais. Outros aspectos serviram como balizadores do estudo, além destes já
mencionados: procurou-se também realizar uma investigação sobre métodos mais
modernos, como os de segunda geração e sobre os mecanismos de funcionamento do
sistema visual humano, de maneira a se compreender como tais técnicas foram idealizadas
e como elas exploram estes mecanismos.
Foram apresentados os conceitos envolvidos com a compressão de imagens, e a descrição
do funcionamento do sistema visual humano. Mostrou-se que o mecanismo de percepção
dos sinais visuais apresenta propriedades que podem ser exploradas pelos algoritmos de
compressão de imagens. O componente que introduz uma filtragem passa-baixas, em
função da aberração esférica e da imperfeição da lente do olho, provoca um borramento da
imagem original e permite o descarte de uma determinada informação de bordas e ruídos. O
caráter logarítmico da percepção relativa de luminância, ilustra como as regiões de alta
freqüência são mascaradas de acordo com a luminância de fundo, enquanto que a resposta
espacial das células da retina indica uma faixa de freqüência de percepção preferencial. A
especialização das células do córtex visual revela a presença de diferentes padrões de
sensibilização das mesmas, incluindo formas e direções definidas para cada tipo de célula,
o que sugere a decomposição das imagens em componentes direcionais e a codificação
destes em separado.
A abordagem da teoria de compressão de imagens definiu o processo, dividindo-o nas
etapas de mapeamento, quantização e codificação. A análise de tais etapas indicou os
pontos onde ocorre a redução da entropia da imagem e, em alguns casos, a perda de
qualidade da mesma em relação à original. Foi apresentada a quantização de Lloyd-Max,
utilizada neste trabalho, bem como os algoritmos de geração de códigos de Huffman e
Lempel-Ziv. Parâmetros de medida de distorção foram definidos.
As técnicas selecionadas foram implementadas, em sua maioria, em versões básicas, sem
que fosse feito um esforço intensivo de otimização de desempenho, devido ao grande
número de algoritmos e variações selecionados. Implementaram-se ao todo oito algoritmos
de compressão e descompressão de imagens, com 20 variações: Run Length Coding (RLC),
Modified Realative Element Address Designate (MREAD), Pulse Code Modulation (PCM),
Differential Pulse Code Modulation (DPCM), Block Truncation (BTC), Pyramid Coding
(PC), Discrete Cosine Transform (DCT) e Vector Quantization (VQ). Estes algoritmos
podem ser, a partir deste trabalho, otimizados e adaptados ou ainda combinados entre si ou
com outras técnicas, melhorando-se os resultados obtidos. As rotinas de compressão de
imagens foram disponibilizadas em interface gráfica (sistema PixelWare), que permite que
o usuário trabalhe de maneira interativa com as imagens e realize análises das mesmas,
dentro de um único ambiente. Como alternativa mais simples, apenas para a geração de
arquivos de imagens comprimidas e descomprimidas, as rotinas também foram
disponibilizadas na interface do sistema operacional MS-DOS. Além dos programas para
compressão e descompressão de imagens, nomeados, respectivamente CRUSH e
UNCRUSH, outras rotinas auxiliares foram implementadas ao logo dos trabalhos, como
VECTOR, que gera e gerencia massas de amostras de vetores para geração de alfabetos
pelo algoritmo LBG, usados na compressão VQ, e MSE, que calcula os parâmetros de
distorção entre imagens adotados. O formato BM foi detalhadamente descrito, uma vez que
foi o formato adotado nas implementações. Como padrão de comparação, o formato JPEG,
que utiliza a transformada do cosseno associada à codificação preditiva, também foi
abordado.
Terminadas as implementações, adotou-se um conjunto de imagens como amostras para a
determinação dos parâmetros de operação dos algoritmos, como quantizadores, alfabetos de
vetores e matrizes de alocação de bits. Nesta etapa, realizou-se um ajuste fino dos
algoritmos, adequando-os ao conjunto de imagens previamente definido. Compararam-se
os desempenhos dos algoritmos implementados entre si e com o formato JPEG. Como
resultado, mostrou-se que muitas das variações implementadas são absolutamente viáveis,
se encontrando no mesmo nível que pacotes comerciais. Algumas deficiências poderão ser
eliminadas no futuro, visando otimização de desempenho, redução de distorções e aumento
das razões de compressão.
No caso das imagens binárias, o algoritmo MREAD mostrou ser mais eficiente que o
algoritmo RLC, devido a sua capacidade de explorar a correlação entre linhas subseqüentes
da imagem. A razão de compressão líquida obtida esteve em torno dos 2:1, sendo que em
ambos os casos não há distorção entre as imagens originais e as reconstruídas. No caso dos
arquivos BM, a redução real no tamanho dos arquivos chega aos 16:1, devido às
características deste formato. Os tempos de compressão e descompressão foram
considerados baixos.
Para as imagens com múltiplos níveis de cinza, classificaram-se os algoritmos em três
diferentes grupos, de acordo com as razões de compressão obtidas. Os algoritmos menos
evoluídos estão no primeiro grupo, com razões de compressão em torno dos 2:1. São eles
PCM e DPCM, nas suas diversas variações, excetuando-se a modulação delta (DM).
Concluiu-se que tais algoritmos não devem ser usados isoladamente, devido a seu baixo
desempenho, sendo recomendáveis apenas em conjunto com outros elementos de
codificação. O segundo grupo é o dos algoritmos que proporcionam razões de compressão
de 4:1 a 8:1, como os algoritmos BTC, DCT, PC e DPCM (DM). Para estes, a qualidade
das imagens reconstruídas, de uma maneira geral; foi considerada satisfatória, assim como
as razões de compressão obtidas. No caso dos algoritmos PC e DCT, os tempos de
processamento mostraram-se proibitivos, sendo a sua utilização possível apenas após terem
sofrido otimizações em sua implementação. O terceiro e último grupo é composto pelos
algoritmos de mais alta performance, a quantização vetorial e o algoritmo JPEG, este
último não implementado, servindo apenas como referência. Com razões de compressão
variáveis entre os 8:1 e os 16:1, tais algoritmos conseguem reunir ao mesmo tempo
velocidade de processamento (pelo menos no caso da descompressão, que é essencial), boa
qualidade das imagens reconstruídas e facilidade de implementação (no caso da
quantização vetorial).
Como aplicação, foi proposto um sistema para armazenamento de dados referentes a
documentos históricos. Os dados gerenciados por este sistema seriam gráficos (imagens) e
alfanuméricos (informações sobre o processo de conservação dos documentos).
Observando-se as restrições impostas pela aplicação (baixos tempos de recuperação, altas
razões de compressão e adequada qualidade final), indicou-se a quantização vetorial pura
para compressão das imagens. Imagens reconstruídas de documentos, resultantes da
aplicação deste algoritmo, foram apresentadas.
REFERÊNCIAS BIBLIOGRÁFICAS
[ALSC93]
[ASL+92]
6th
[BA83]
[Cost93]
[Davi92]
[DM79]
[FNF89]
[Geus90]
[GW87]
[Hand91]
[HR80]
[HW85]
[ISO91]
[Jain81]
[Jain89]
[JN84]
[KL92]
[KBL87]
[KIK85]
Araújo, A.A., Laender, A.F.H., Silva Jr., N.I., Coutinho, R.N., Image
Coding for Storing Historical Documents in a Database, Picture Coding
Symposium, 1993.
Araújo, A.A., Silva Jr., N.I., Laender, A.F.H., A Digital Image Processing
and Information Retrieval System of Brazilian Historical Documents,
EUROSIPCO, 1992.
Burt, P.J., Adelson, E.H., The Laplacian Pyramids as a Compact
Image Code, IEEE Trans. on Communications, pp. 532-540, 1983.
Costa, C.A.R., Técnicas de Compressão de Seqüências de Imagens
Visando Transmissão em Tempo Real, Universidade Estadual de
Campinas, 1993.
Davis, Jr., C.A., Pixelware, um Sistema de Processamento Digital de
Imagens, UFMG, 1992.
Delp, E.J., Mitchell, O.R., Image Compression Using Block
Truncation Coding, IEEE Trans. on Communications, pp. 13351342, 1979.
Finamore, W.A., Nunes, P.R.R.L., Fortes, J.M.P., Compression of
Historical Document Images, ICIP 89, Vol. 1, pp. 242-246, 1989.
Geus, P.L., Approaches to Live Image Transmission between
Workstations over Limited-Bandwidth Networks, University of
Manchester, 1990.
Gonzalez, R.C., Wintz, P., Digital Image Processing, Addison-Wesley, 2nd
Ed., 1977.
Handmade Software Inc., Image Alchemy Version 1.4, User's Manual,
Handmade Software, 1991.
Hunter, R., Robinson, H., International Digital Facsimile Coding
Standards, Proc. IEEE, pp. 854-867, 1980.
Hang, H.M., Woods, J.W., Predictive Vector Quantization of
Images, IEEE Trans. on Communications, pp. 1208,1219, 1985.
ISO/IEC, Digital Compression and Coding of Continuous-Tone Still
Images, Part I: Requirements and Guidelines, ISO/IEC, 1991.
Jain, A.K., Image Compression: A Review, Proc. IEEE, pp. 349389, 1981.
Jain, A.K., Fundamentals of Digital Image Processing, Prentice-Hall, 1989.
Jayant, N.S., Noll, P., Digital Coding of Waveforms, Principles and
Applications to Speech and Video, Prentice-Hall, 1984.
Kay, D.C., Levine, J.R., Graphics File Formats, McGraw Hill, 1992.
Kunt, M., Bernard, M., Leonardi, R., Recent Results in High
Compression Image Coding, IEEE Trans. on Circuits and Systems,
November, 1987.
Kunt, M., Iconomopoulos, A., Kocher, M., Second Generation
Image Coding Techniques, Proc. IEEE, pp. 549-575, 1985.
[LBG80]
[Lim90]
[LM84]
[MD80]
[NK88]
[NL80]
[Pear90]
[Prat78]
[RG86]
[RJ91]
[UR87]
[Yasu80]
[ZL78]
Linde, Y., Buzo, A., Gray, R.M., An Algorithm for Vector
Quantizer Design, IEEE Trans. on Communications, pp. 84-95,
1980.
Lim, J.S., Two-Dimensional Signal and Image Processing, Prentice-Hall,
1990.
Lema, M.D., Mitchell, R., Absolute Moment Block Truncation
Coding and Its Application to Color Images, IEEE Trans. on
Communications, pp. 1148-1157, 1984.
Mitchell, O.R., Delp, E.J., Multilevel Graphics Representation
Using Block Truncation Coding, Proc. IEEE, pp. 868-873, 1980.
Nasrabadi, N.M., King, R.A., Image Coding Using Vector
Quantization : A Review, IEEE Trans. on Communications, pp.
957-971, 1988.
Netravali, A.N., Limb, J., Picture Coding: A Review, Proc. IEEE,
pp. 366-406, 1980.
Pearlman, W.A., Adaptive Cossine Transform Image Coding with
Constant Block Distortion, IEEE Trans. on Communications, pp.
698-702, 1990.
Pratt, W.K., Digital Image Processing, John Wiley & Sons, 1978.
Ramamurthi, B., Gersho, A., Classified Vector Quantization of
Images, IEEE Trans. on Communications, pp. 1105-1115, 1986.
Rabbani, M., Jones, P.W., Digital Image Compression Techniques, The
International Society for Optical Engineering, 1991.
Udpikar, V.R., Raina, J.P., BTC Image Coding Using Vector
Quantization, IEEE Trans. on Communications, pp. 352-356, 1987.
Yasuda, Y., Overview of Digital Facsimile Coding Techniques in
Japan, Proc. IEEE, pp. 830-845, 1980.
Ziv, J., Lempel, A., Compression of Individual Sequences via
Variable-Rate Coding, IEEE Trans. on Information Theory, pp.
530-536, 1978.
Bibliografia Recomendada
[Ahme74]
[AG86]
[APM86]
[AG86]
Ahmed, N., Discrete Cosine Transform, IEEE Trans. on
Communications, pp. 90-93, 1974.
Alvarez, L., Garcia, N., Some Results on Vector Quantization,
EURASIP 86, Signal Processing III, pp. 797-800, 1986.
Anastassiou, D., Pennebaker, W., Mitchell, J.L., Gray Scale Image
Coding for Freeze-Frame Video-Conferencing, IEEE Trans. on
Communications, pp. 382-394, 1986.
Aravind, R., Gersho, A., Image Coding Below 0.5 Bits per Pixel
Using Vector Quantization, EUSIPCO 86, Signal Processing III,
pp. 757-759, 1986.
[AG83]
[BF86]
[BK86]
[BS80]
[Burr]
[CB90]
[CB92]
[CP84]
[Dohe80]
[DKS90]
[ES86]
[FDU80]
[FNS91]
[Fuki78]
[GBS86]
[GN89]
[GRK90]
[Goed]
[GS86]
Arce, G.R., Gallagher, Jr., N.C., BTC Image Coding Using Median
Filter Roots, IEEE Trans. on Communications, pp. 784-793, 1983.
Benelli, G., Fantacci, R., Image Data Compression Techniques
Using Kalman and Alpha-Beta Filters, EUSIPCO 86, Signal
Processing III, pp. 785-788, 1986.
Bernard, M., Kunt, M., Linear Prediction in Directional Images,
EUSIPCO 86, Signal Processing III, pp. 805-808, 1986.
Bodson, D., Schaphorst, R., Compression and Error Sensivity of TwoDimensional Facsimile Coding Techniques, Proc. IEEE , pp. 846-853,
1980.
Burrus, C.S., DFT/FFT and Convolution Algorithms Theory and
Implementation, 1985.
Chen, D., Bovik, A.C., Visual Pattern Coding, IEEE Trans. on
Communications, pp. 2137-2145, 1990.
Chen, D., Bovik, A.C., Hierarchical Visual Pattern Image Coding,
IEEE Trans. on Communications, pp. 671-675, 1992.
Chen, W.H., Pratt, W.K., Scene Adaptive Coder, IEEE Trans. on
Communications, pp. 225-232, 1984.
Doherty, B., Comparison of Facsimile Data Compression Schemes,
IEEE Trans. on Communications, pp. 2023-2024, 1980.
Du Buf, J.M.H., Kardan, M., Spann, M., Texture Feature
Performance for Image Segmentation, Pattern Recognition, Vol.
23, No. 3/4, pp.291-309, 1990.
Eggerton, J.D., Srinath, M.D., A Visually Weighted Quantization
Scheme for Image Bandwidth Compression at Low Data Rate,
IEEE Trans. on Communications, pp. 840-847, 1986.
Frank, A.J.,Daniels, J.D., Unangst, D.R., Progressive Image
Transmission Using a Growth-Geometry Coding, Proc. IEEE, pp.
897-905, 1980.
Finamore, W.A., Nunes, P.R.R.L., Silva, A.A., Uma Variação do
Algoritmo de Lempel-Ziv, 9o. Simpósio Brasileiro de Telecomunicações,
1991.
Fukinuki, T., Notchless Bi-Level Quantizer for Fac-Simile and Its
Effects in Coding of Digital Pictures, IEEE Trans. on
Communications, pp. 611-618, 1978.
Goldberg, M., Boucher, P.R., Shlien, S., Image Compression
Using Adaptive Vector Quantization, IEEE Trans. on
Communications, pp. 180-187, 1986.
Garrido, D.P., Nunes, R.R.L., An Edge/Non-Edge Image
Compression Algorithm, ICIP 89, Vol. 1, pp. 519-523, 1989.
Giunta, G., Reed, T.R., Kunt, M., Image Sequence Coding Using
Oriented Edges, EUSIPCO 90, Signal Processing, pp. 429-439,
1990.
Goedel, T.W., A Two-Dimensional Quantizer for Coding of Digital
Imagery, IEEE Trans. on Communications, pp. 60-67, 1981.
Goldberg, M., Sun, H., Image Sequence Coding Using Vector
Quantization, IEEE Trans. on Communications, pp.703-710, 1986.
[GD86]
[Habi81]
[Hara]
[Held]
[IC81]
[Jame]
[Jaya74]
[KJ80]
[KO85]
[KS81]
[KB86]
[Know80]
[LR81]
[Makh75]
[MPAP89]
[MT81]
[MY81]
[Mitc80]
Götze, M., Du, Y., Adaptive Transform Coding of Images Using
Vector Quantization, EUSIPCO 86, Signal Processing III, pp. 789792, 1986.
Habibi, A., An Adaptive Strategy for Hybrid Image Coding, IEEE
Trans. on Communications, pp. 1736-1740, 1981.
Haralick, R.M., Statistical and Structural Approaches to Textures,
Proc. IEEE, pp. 786-804, 1979.
Held, G., Data Compression Techniques and Applications Hardware and Software Considerations, 1988.
Ismail, M.G., Clarke, R.J., Adaptive Block/Location Coding of
Facsimile Signals Using Subsampling and Interpolation for Pre and
Postprocessing, IEEE Trans. on Communications, pp. 1925-1934,
1981.
James, M., Pattern Recognition, 1988.
Jayant, N.S., Digital Coding of Speech Waveforms: PCM, DPCM
and DM Quantizers, Proc. IEEE, pp. 611-632, 1974.
Kunt, M., Johnsen, O., Block Coding of Graphics: A Tutorial
Review, Proc. IEEE, pp. 770-786, 1980.
Kaneko, T., Okudaira, M., Encoding of Arbitrary Curves Based on
the Chain Code Representation, IEEE trans. on Communications,
pp. 697-707, 1985.
Kim, J., Segin, P., A Conditional Incremental-Runlength Code
Based on Two-Dimensional Markov Model, IEEE Trans. on
Communications, pp. 1527-1532, 1981.
Kirchhoff, H.J., Besslich, P.W., A Hybrid Image Coding Scheme
Using Adaptive Local Resolution, EUSIPCO 86, Signal Processing
III, pp. 747-750, 1986.
Knowlton, K., Progressive Transmission of Grey-Scale and Binary
Pictures by Simple, Efficient, and Lossless Encoding Schemes,
Proc. IEEE, pp. 885-896, 1980.
Langdon, G.G. Jr., Rissanen, J., Compression of Black-White
Images with Arithmetic Coding, IEEE Trans. on Communications,
pp. 858-867, 1981.
Makhoul, J., Linear Prediction: A Tutorial Review, Proc. IEEE, pp.
561-580, 1975.
Mitchell, J.L.,Pennebaker, W.B., Anastassiou, D., Pennington,
K.S., Graphics Image Coding for Freeze-Frame Video
Conferencing, IEEE Trans. on Communications, pp. 515-522,
1989.
Mark, J.W., Todd, T.D., A Nonuniform Sampling Approach to
Data Compression, IEEE Trans on Communications, pp. 24-32,
1981.
Meiri, A.Z., Yudilevich, E., A Pinned Sine Transform Image Coder,
IEEE Trans. on Communications, pp. 1728-1734, 1981.
Mitchell, O.R., Multilevel Graphics Representation Using Block
Truncation Coding, Proc. IEEE , July, 1980.
[MB84]
[MDV81]
[MB81]
[Morr74]
[MMY84]
[Muss85]
[NF90]
[NH88]
[NP77]
[NM80]
[Nill85]
[NAS92]
[OP83]
[Otsu]
[PCC+80]
[RC89]
[Tam83]
[Ting80]
Modestino, J.W., Bhaskaran, V., Adaptive Two-Dimensional Tree
Encoding of Images Using Spatial Masking, IEEE Trans. on
Communications, pp. 177-189, 1984.
Modestino, J.W.,Daut, D.G., Vickers, A.L., Combinated SourceChannel Coding of Images Using the Block Cosine Transform,
IEEE Trans. on Communications, pp. 177-199, 1984.
Modestino, J.W., Bhaskaran, V., Robust Two-Dimensional Tree
Encoding of Images, IEEE Trans. on Communications, pp. 17861798, 1981.
Morrin, T.H., A Black-White Representation of Gray-Scale Picture,
IEEE Trans. on Computers, pp. 184-186, 1974.
Murakami, H.,Matsumoto, S., Yamamoto, H., Algorithm for
Construction of Variable Lenght Code with Limited Maximum
Word Lenght, IEEE Trans on Communications, pp. 1157-1159,
1984.
Mussmann, H.G., Advances in Picture Coding, Proc. IEEE, pp.
523-548, 1985.
Nasrabadi, N.M., Feng, Y., Image Compression Using AdressVector Quantization, IEEE Trans. on Communications, pp. 21662173, 1990.
Netravali, A.N., Haskell, B.G., Digital Pictures, Representation and
Compression, At&T Bell Laboratories, 1988.
Netravali, A.N., Prasada, B., Adaptive Quantization of Picture
Signals Using Spatial Masking, Proc. IEEE, pp. 536,548, 1977.
Netravali, A.N., Ordering Techniques for Facsimile Coding: A
Review, Proc. IEEE, pp. 796-806, 1980.
Nill, N.B., A Visual Model Weighted Cosine Transform for Image
Compression and Quality Assesment, IEEE Trans. on
Communications, pp. 551-557, 1985.
Nunes, P.R.R.L., Alcaim, A., Silva, M.R.L.F., Compression of
Satellite Images for Remote Sensing Applications, XVII Congress
of ISPR, 1992.
O'Leary, D.P., Peleg, S., Digital Image Compression by Outer
Product Expansion, IEEE Trans. on Communications, pp. 441-444,
1983.
Otsu, N., A Threshold Selection Method from Gray-Level
Histograms, IEEE Trans. Syst. Man Cybern., pp. 62-66, 1979.
Pratt, W.K., Capitant, P., Chen, W., Hamilton, E.R., Wallis, R.H.,
Combined Symbol Matching Data Compression System, Proc.
IEEE, pp. 786-796, 1980.
Ramabadran, T.V., Cohn, D.L., An Adaptive Algorithm for the
Compression of Computer Data, IEEE Trans on Communications,
pp. 317-323, 1989.
Tam, T.O., Line-Adaptive Hybrid Coding of Images, IEEE Trans.
on Communications, pp. 445-450, 1983.
Ting, D., Digital Processing Techniques for Encoding Graphics,
Proc. IEEE, pp. 757-769, 1980.
[UOI80]
[WCK86]
[WKG83]
[WR79]
[Yama79]
[Yasu85]
[YDH80]
[YY84]
[ZEC84]
Usubuchi, T., Omachi, T., Iinuma, K., Adaptive Predictive Coding
for Newspaper Facsimile, Proc. IEEE, pp. 807-813, 1980.
Walach, E., Chevion D., Karnin, E., On Modification of BTC
Approach to Image Compression, EUSIPCO 86, Signal Processing
III, 1986.
Wilson, R., Knutson, H.E., Granlund, G.H., Anisotropic
Nonstationary Image Estimation and Its Applications Part II Predictive Coding, IEEE Trans. on Communications, pp. 398-406,
1983.
Weszka, J.S., Rosenfeld, A., Histogram Modification for Threshold
Selection, IEEE Trans. on Syst. Man Cybern., pp. 38-52, 1979.
Yamada, T., Edge-Difference Coding - A New Efficient
Redundancy Reduction Technique for Facsimile Signals, IEEE
Trans. on Communications, pp. 1210-1217, 1979.
Yasuda, Y., Advances in Fax, Proc. IEEE, pp. 706-730, 1985.
Yasuda, Y., Dubois, M., Huang, T.S., Data Compression for Check
Processing Machines, Proc. IEEE, pp. 874-885, 1980.
Yasuhara, M., Yasumoto, Y., An Improved Adaptive Predictor in
DPCM Based on the Kalman Filter and Its Application to
Handwriting Signal Encoding, IEEE Trans. on Communications,
pp. 484-488, 1984.
Zetteberg, L.H., Ericsson, S., Couturier, C., DPCM Picture Coding
with Two-Dimensional Control of Adaptive Quantization, IEEE
Trans. on Communications, pp. 457-462, 1984.
APÊNDICES
A - Código Modificado de Huffman
A1 - Bits menos significativos para seqüências de brancos
Seqüência
Palavra
Seqüência
Palavra
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
"00110101"
"000111"
"0111"
"1000"
"1011"
"1100"
"1110"
"1111"
"10011"
"10100"
"00111"
"01000"
"001000
"000011"
"110100"
"110101"
"101010"
"101011"
"0100111"
"0001100"
"0001000"
"0010111"
"0000011"
"0000100"
"0101000"
"0101011"
"0010011"
"0100100"
"0011000"
"00000010"
"00000011"
"00011010"
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
"00011011"
"00010010"
"00010011"
"00010100"
"00010101"
"00010110"
"00010111"
"00101000"
"00101001"
"00101010"
"00101011"
"00101100"
"00101101"
"00000100"
"00000101"
"00001010"
"00001011"
"01010010"
"01010011"
"01010100"
"01010101"
"00100100"
"00100101"
"01011000"
"01011001"
"01011010"
"01011011"
"01001010"
"01001011"
"00110010"
"00110011"
"00110100"
A2 - Bits mais significativos para seqüências de brancos
Seqüência/64 (divisão inteira)
Palavra
fim de linha
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
"0000000000"
"11011"
"10010"
"010111"
"0110111"
"00110110"
"00110111"
"01100100"
"01100101"
"01101000"
"01100111"
"011001100"
"011001101"
"011010010"
"011010011"
"011010100"
"011010101"
"011010110"
"011010111"
"011011000"
"011011001"
"011011010"
22
23
24
25
26
27
"011011011"
"010011000"
"010011001"
"010011010"
"011000"
"010011011"
A3 - Bits menos significativos para seqüências de pretos
Seqüência
Palavra
Seqüência
Palavra
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
"0000110111"
"010"
"11"
"10"
"011"
"0011"
"0010"
"00011"
"000101"
"000100"
"0000100"
"0000101"
"0000111"
"00000100"
"00000111"
"000011000"
"0000010111"
"0000011000"
"0000001000"
"00001100111"
"00001101000"
"00001101100"
"00000110111"
"00000101000"
"00000010111"
"00000011000"
"000011001010"
"000011001011"
"000011001100"
"000011001101"
"000001101000"
"000001101001"
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
"000001101010"
"000001101011"
"000011010010"
"000011010011"
"000011010100"
"000011010101"
"000011010110"
"000011010111"
"000001101100"
"000001101101"
"000011011010"
"000011011011"
"00001010100"
"00001010101"
"000001010110"
"000001010111"
"000001100100"
"000001100101"
"000001010010"
"000001010011"
"000000100100"
"000000110111"
"000000111000"
"000000100111"
"000000101000"
"000001011000"
"000001011001"
"000000101011"
"000000101100"
"000001011010"
"000001100110"
"000001100111"
A4 - Bits significativos para seqüências de pretos
Seqüência/64 (divisão inteira)
Palavra
fim de linha
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
"00000000001"
"0000001111"
"000011001000"
"000011001001"
"000001011011"
"000000110011"
"000000110100"
"000000110101"
"0000001101100"
"0000001101101"
"0000001001010"
"0000001001011"
"0000001001100"
"0000001001101"
"0000001110010"
"0000001110011"
"0000001110100"
"0000001110101"
18
19
20
21
22
23
24
25
26
27
"0000001110110"
"0000001110111"
"0000001010010"
"0000001010011"
"0000001010100"
"0000001010101"
"0000001011010"
"0000001011011"
"0000001100100"
"0000001100101"
B - Código de Huffman para modos do algoritmo MREAD
Modo
Palavra
fim de linha
pass
horizontal
vertical
vertical - complementos
"0000001"
"0001"
"001"
"1"
"011"
"000011"
"0000011"
"010"
"000010"
"0000010"
C - Compressão DPCM
C1 - Compressão sem perda de informação
C1.1 - Bits menos significativos (erros entre -31 e + 31)
Erro
Palavra
Erro
Palavra
-31
-30
-29
-28
-27
-26
-25
-24
-23
-22
-21
-20
-19
-18
-17
-16
-15
-14
-13
-12
-11
-10
-9
-8
-7
-6
-5
-4
-3
-2
-1
0
"000001011000"
"000000111000"
"000000100100"
"000001010011"
"000001100100"
"000001010111"
"000001010101"
"000001010100"
"000011011010"
"000001101101"
"000011010111"
"000011010100"
"000011010011"
"000001101011"
"000001101001"
"000011001101"
"000011001011"
"000011001010"
"00000010111"
"00000110111"
"00001101000"
"0000110111"
"0000011000"
"000011000"
"00000111"
"0000111"
"000100"
"000101"
"0011"
"010"
"10"
"11"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
"011"
"0010"
"00011"
"0000100"
"0000101"
"00000100"
"0000010111"
"0000001000"
"00001100111"
"00001101100"
"00000101000"
"00000011000"
"000011001100"
"000001101000"
"000001101010"
"000011010010"
"000011010101"
"000011010110"
"000001101100"
"000011011011"
"000001010110"
"000001100101"
"000001010010"
"000000110111"
"000000100111"
"000001011001"
"000000101011"
"000000101100"
"000001011010"
"000001100110"
"000001100111"
C1.2 - Bits mais significativos (erros < -31)
Erro/-32 (divisão inteira)
Palavra
1
2
3
4
5
6
7
"0000001111"
"000001011011"
"000011001001"
"000011001000"
"0000001001010"
"0000001101101"
"0000001101100"
C1.3 - Bits mais significativos (erros > +31)
Erro/32 (divisão inteira)
Palavra
1
2
3
4
5
6
7
"00000000001"
"000000110011"
"000000110100"
"000000110101"
"0000001001100"
"0000001001101"
"0000001110010"
C2 - Compressão com perda de informação
C2.1 - Quantização em 16 níveis (Lloyd-Max, distribuição gaussiana)
Nível
Limite Superior (aberto)
Valor Representativo
Palavra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-46
-35
-27
-21
-15
-10
-5
0
5
10
15
21
27
35
46
255
-52
-39
-31
-24
-18
-12
-7
-2
2
7
12
18
24
31
39
52
"00000111"
"0000101"
"0000111"
"0000110"
"000100"
"000101"
"010"
"10"
"11"
"011"
"0011"
"0010"
"00011"
"0000100"
"00000110"
"00000100"
C2.2 - Quantização em 8 níveis (Lloyd-Max, distribuição gaussiana)
Nível
Limite Superior (aberto)
Valor Representativo
Palavra
1
2
3
4
5
6
7
8
-33
-20
-10
0
10
20
33
255
-41
`-26
-14
-5
5
15
26
41
"1111110"
"111110"
"1110"
"10"
"0"
"110"
"11110"
"1111111"
C2.3 - Quantização em 2 níveis (Lloyd-Max, distribuição gaussiana)
Nível
Limite Superior (aberto)
Valor Representativo
Palavra
1
2
0
255
-15
15
"1"
"0"
C2.4 - Quantização adaptativa - fatores de multiplicação de intervalos
Níveis
Nível de Quantização
Fator
16
0 (estado inicial)
1
2
3
4
5
6
7
8
0 (estado inicial)
1
2
3
4
1
0.6
0.8
0.9
1.0
1.2
1.5
2.0
4.0
1
0.6
1.0
1.5
4.0
8
D - Compressão PC
D1 - Matriz de convolução
0
1
2
3
4
0
1
2
3
4
0.0025
0.0125
0.0200
0.0125
0.0025
0.0125
0.0625
0.1000
0.0625
0.0125
0.02
0.10
0.16
0.10
0.02
0.0125
0.0625
0.1000
0.0625
0.0125
0.0025
0.0125
0.0200
0.0125
0.0025
D2 Códigos de Huffman
D2.1 - Quantização em 3 níveis (Lloyd-Max, distribuição gaussiana)
Nível
Limite Superior(aberto)
Valor Representativo
Palavra
1
2
3
-11
11
255
-23
0
23
"00",
"1"
"01"
D2.2 - Quantização em 5 níveis (Lloyd-Max, distribuição gaussiana)
Nível
Limite Superior (aberto)
Valor Representativo
Palavra
1
2
-24
-7
-33
-15
"0000"
"01"
3
4
5
7
24
255
0
15
33
"1"
"001"
"0001"
D2.3 - Quantização em 9 níveis (Lloyd-Max, distribuição gaussiana)
Nível
Limite Superior (aberto)
Valor Representativo
Palavra
1
2
3
4
5
6
7
8
9
-35
-23
-13
-4
4
13
23
35
255
-43
-28
-17
-8
0
8
17
28
43
"00010"
"0011"
"010"
"10"
"11"
"011"
"0010"
"0000"
"00011"
D2.4 - Quantização em 17 níveis (Lloyd-Max, distribuição gaussiana)
Nível
Limite Superior (aberto)
Valor Representativo
Palavra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-47
-36
-29
-22
-17
-12
-7
-2
2
7
12
17
22
29
36
47
255
-53
-40
-32
-25
-19
-14
-9
-5
0
5
9
14
19
25
32
40
53
"00000111"
"0000101"
"0000111"
"000000"
"000100"
"0010"
"010"
"10"
"11"
"011"
"0011"
"00011"
"000101"
"0000110"
"0000100"
"00000110"
"00000100"
E - Compressão DCT
E1 - Matriz de alocação de bits
0
1
2
3
4
5
6
7
0
8
6
5
3
1
0
0
0
1
6
6
5
2
1
0
0
0
2
5
5
2
1
0
0
0
0
3
3
2
1
0
0
0
0
0
4
1
1
0
0
0
0
0
0
5
0
0
0
0
0
0
0
0
6
0
0
0
0
0
0
0
0
7
0
0
0
0
0
0
0
0
E2 - Quantização (Lloyd-Max, distribuição gaussiana)
Bits
1
Limites Superiores (abertos)
Valores Representativos
0
-25,25
2
3
4
-39,0,39
-87,-52,-25,0,25,52,87
-127,-97,-76,-58,-42,-27,-13,0,13,27,42,58,76,97,127
5
-187,-157,-136,-120,-106,-93,-81,-71,-61,-51,-42,-33,25,-16,8,0,8,16,25,33,42,51,61,71,81,93,106,120,136,157,187,
6
-279,-246,-223,-206,-191,-178,-166,-156,-146,-137,128,-120,-113,-105,-98,-92,-85,-79,-72,-66,-60,-55,49,-43,-38,-32,-27,-21,-16,-10,5,0,5,10,16,21,27,32,38,43,49,55,60,66,72,79,85,92,98,
105,113,120,128,137,146,156,166,178,191,206,223,24
6,279,
-2021,-1932,-1902,-1872,-1851,-1831,-1815,-1799,1786,-1773,-1762,-1750,-1741,-1731,-1722,-1713,1704,-1696,-1689,-1681,-1674,-1667,-1661,-1654,1648,-1642,-1636,-1630,-1624,-1619,-1613,-1608,1603,-1598,-1593,-1588,-1583,-1578,-1574,-1569,1565,-1560,-1556,-1552,-1548,-1543,-1539,-1535,1531,-1527,-1523,-1519,-1516,-1512,-1508,-1504,1501,-1497,-1493,-1490,-1486,-1483,-1479,-1476,1472,-1469,-1465,-1462,-1459,-1455,-1452,-1449,1446,-1442,-1439,-1436,-1433,-1430,-1427,-1423,1420,-1417,-1414,-1411,-1408,-1405,-1402,-1399,1396,-1393,-1390,-1387,-1384,-1381,-1378,-1375,1372,-1369,-1366,-1364,-1361,-1358,-1355,-1352,1349,-1346,-1343,-1341,-1338,-1335,-1332,-1330,1327,-1324,-1321,-1318,-1315,-1312,-1310,-1307,1304,-1301,-1298,-1296,-1293,-1290,1287,1285,1287,1290,1293,1296,1298,1301,1304,1307
,1310,1312,1315,1318,1321,1324,1327,1330,1332,133
5,1338,1341,1343,1346,1349,1352,1355,1358,1361,13
64,1366,1369,1372,1375,1378,1381,1384,1387,1390,1
393,1396,1399,1402,1405,1408,1411,1414,1417,1420,
1423,1427,1430,1433,1436,1439,1442,1446,1449,1452
,1455,1459,1462,1465,1469,1472,1476,1479,1483,148
6,1490,1493,1497,1501,1504,1508,1512,1516,1519,15
23,1527,1531,1535,1539,1543,1548,1552,1556,1560,1
565,1569,1574,1578,1583,1588,1593,1598,1603,1608,
1613,1619,1624,1630,1636,1642,1648,1654,1661,1667
,1674,1681,1689,1696,1704,1713,1722,1731,1741,175
0,1762,1773,1786,1799,1815,1831,1851,1872,1902,19
32,2021,
8
-60,-18,18,60
-107,-67,-37,-12,12,37,67,107
-144,-109,-85,-66,-49,-34,-20,6,6,20,34,49,66,85,109,144
-205,-169,-146,-127,-112,-99,-87,-76,-66,-54,-47,-38,29,-20,-12,4,4,12,20,29,38,47,54,66,76,87,99,112,127,146,169,20
5
-299,-259,-233,-214,-198,-184,-172,-161,-151,-141,133,-124,-116,-109,-102,-95,-88,-82,-76,-69,-63,-57,52,-46,-40,-35,-29,-24,-18,-13,-8,2,2,8,13,18,24,29,35,40,46,52,57,63,69,76,82,88,95,10
2,109,116,124,133,141,151,161,172,184,198,214,233,2
59,299
-2052,-1969,-1932,-1895,-1872,-1849,-1831,-1813,1799,-1785,-1773,-1761,-1750,-1740,-1731,-1721,1713,-1704,-1696,-1688,-1680,-1671,-1666,-1660,1654,-1648,-1642,-1636,-1626,-1616,-1615,-1613,1608,-1603,-1598,-1593,-1588,-1583,-1578,-1574,1569,-1565,-1560,-1556,-1552,-1547,-1543,-1539,1535,-1531,-1527,-1523,-1519,-1516,-1512,-1508,1504,-1501,-1495,-1490,-1488,-1486,-1483,-1479,1476,-1472,-1469,-1465,-1462,-1459,-1455,-1452,1449,-1446,-1442,-1439,-1436,-1433,-1430,-1427,1423,-1420,-1417,-1414,-1411,-1408,-1405,-1402,1399,-1396,-1393,-1390,-1387,-1384,-1381,-1378,1375,-1372,-1369,-1366,-1364,-1361,-1358,-1355,1352,-1349,-1346,-1343,-1341,-1338,-1335,-1332,1329,-1327,-1324,-1321,-1318,-1315,-1312,-1310,1307,-1304,-1300,-1295,-1294,-1293,-1290,1286,1286,1290,1293,1294,1295,1300,1304,1307,1310
,1312,1315,1318,1321,1324,1327,1329,1332,1335,133
8,1341,1343,1346,1349,1352,1355,1358,1361,1364,13
66,1369,1372,1375,1378,1381,1384,1387,1390,1393,1
396,1399,1402,1405,1408,1411,1414,1417,1420,1423,
1427,1430,1433,1436,1439,1442,1446,1449,1452,1455
,1459,1462,1465,1469,1472,1476,1479,1483,1486,148
8,1490,1495,1501,1504,1508,1512,1516,1519,1523,15
27,1531,1535,1539,1543,1547,1552,1556,1560,1565,1
569,1574,1578,1583,1588,1593,1598,1603,1608,1613,
1615,1616,1626,1636,1642,1648,1654,1660,1666,1671
,1680,1688,1696,1704,1713,1721,1731,1740,1750,176
1,1773,1785,1799,1813,1831,1849,1872,1895,1932,19
69,2052
F - Compressão VQ
F1 - AlfabetoVQ Pura
Vetor
Valores
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
166,119,72,78,137,130,49,64,163,155,90,55,161,150,156,156,
142,157,158,163,167,156,158,163,162,162,163,152,161,163,161,167,
116,52,45,61,146,90,43,56,146,143,132,132,142,140,148,141,
169,168,169,169,165,166,165,166,167,159,162,159,152,164,163,161,
148,137,93,101,145,114,73,119,151,81,72,143,144,59,82,127,
145,148,150,144,147,145,151,149,141,138,130,128,121,73,49,65,
133,147,184,186,124,146,179,186,129,148,181,186,141,153,180,179,
179,187,189,193,187,190,189,133,193,187,193,76,185,190,174,176,
138,145,141,86,141,150,147,84,145,147,145,90,139,149,140,94,
105,107,115,115,148,169,163,171,177,175,172,176,178,178,184,185,
134,136,129,138,59,51,55,64,82,78,71,56,40,45,43,43,
147,151,147,137,150,152,143,76,147,156,142,43,152,153,139,49,
141,83,82,140,88,77,112,143,129,120,129,148,139,142,146,160,
147,150,147,132,156,153,154,151,155,155,154,153,153,155,155,150,
160,157,161,155,155,156,155,160,162,158,156,155,154,146,157,158,
164,166,164,174,167,163,172,157,168,169,165,174,170,166,169,165,
127,127,125,126,124,128,126,128,126,124,128,132,121,124,134,135,
201,122,69,133,58,108,202,184,185,196,177,183,188,183,185,173,
159,160,160,164,157,156,156,158,150,150,146,145,142,135,127,122,
163,164,159,160,154,144,160,152,155,156,164,165,158,166,161,164,
57,67,80,90,127,118,97,92,143,140,95,78,140,139,77,78,
122,141,148,153,90,127,148,154,105,120,148,153,124,133,148,148,
136,138,138,134,135,135,136,133,132,133,131,124,133,132,130,121,
48,81,149,150,46,82,150,148,52,73,146,150,56,68,134,147,
108,66,69,107,140,133,131,131,145,143,144,133,139,142,141,141,
156,154,147,129,165,159,141,110,164,158,132,105,162,156,154,136,
58,132,158,144,138,143,152,151,146,142,152,147,141,140,146,154,
86,40,56,102,78,87,98,135,44,41,30,31,91,111,134,128,
140,145,124,58,145,143,110,52,141,134,79,60,118,108,54,57,
55,55,92,144,54,52,108,148,51,64,130,150,79,111,147,146,
185,179,189,180,187,196,137,45,185,92,62,153,78,74,191,179,
168,174,191,176,178,190,187,78,191,189,59,182,176,96,186,182,
104,105,100,109,101,99,85,97,88,97,77,83,80,89,89,88,
68,72,106,128,61,52,56,60,127,117,118,125,147,151,148,148,
40,45,100,140,43,39,90,139,46,43,62,141,48,48,63,133,
167,183,176,79,174,182,69,183,183,74,187,191,93,172,196,179,
134,123,112,118,136,120,104,118,137,122,102,118,135,121,101,117,
139,120,115,188,170,136,86,192,173,160,83,195,165,144,98,192,
43,41,39,39,51,71,40,41,97,136,72,32,119,133,88,57,
43,72,45,49,56,91,87,67,50,138,137,119,56,143,136,124,
189,188,153,82,192,190,83,72,181,186,70,63,186,185,125,115,
144,149,151,147,148,148,141,101,144,135,89,38,145,118,41,47,
159,171,132,61,183,200,59,90,192,73,80,207,71,76,183,192,
48,35,37,43,65,87,112,118,120,130,135,131,133,137,137,130,
156,118,163,175,107,112,179,114,74,178,148,83,187,176,56,184,
152,156,158,156,155,156,150,153,137,150,153,152,71,137,152,154,
58,129,148,122,56,139,146,140,95,146,149,143,124,144,151,148,
100,109,118,122,104,111,117,123,105,109,120,125,103,113,116,120,
145,146,148,151,147,151,146,147,147,147,146,116,139,147,114,51,
124,157,176,163,78,133,150,135,68,59,60,77,137,156,173,176,
125,130,124,97,127,125,113,87,126,120,106,80,122,124,117,88,
134,136,96,81,115,97,51,63,88,47,62,106,52,53,100,129,
188,195,189,101,188,192,176,80,188,192,169,93,193,194,155,191,
184,190,188,185,184,176,181,187,189,191,185,183,181,182,186,187,
199,203,206,205,201,200,189,197,174,161,111,194,202,181,109,200,
197,200,198,194,194,193,186,185,143,120,180,192,186,199,198,198,
207,209,206,198,205,206,200,155,203,201,125,187,198,154,189,201,
193,193,191,191,183,189,186,188,194,186,194,192,184,190,178,187,
153,150,125,43,150,149,135,40,145,152,133,41,144,151,131,51,
F1 - AlfabetoVQ Pura (continuação)
Vetor
Valores
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
196,195,198,198,188,188,189,178,192,195,192,196,191,189,193,190,
181,183,178,177,181,188,187,178,156,156,164,172,82,71,80,67,
183,184,185,186,189,188,193,191,176,180,177,183,185,185,191,188,
183,183,179,183,184,184,185,187,175,179,177,189,88,79,89,174,
76,77,180,181,58,187,187,164,182,193,180,126,190,179,149,54,
112,144,173,160,121,88,135,150,204,187,105,126,193,192,147,132,
185,188,186,188,185,184,184,187,184,184,185,193,190,191,195,109,
183,185,181,185,185,185,187,189,179,187,201,177,192,182,82,61,
192,189,95,82,192,194,197,191,197,191,197,194,192,195,195,189,
111,120,155,154,190,181,196,200,207,206,210,209,206,209,210,208,
171,177,174,170,182,172,174,175,173,173,169,176,173,174,172,168,
192,193,151,198,175,123,197,197,151,197,192,195,202,202,200,198,
196,205,202,179,184,164,113,108,182,190,189,190,195,195,190,204,
172,174,182,172,181,178,181,187,178,179,179,174,177,180,180,183,
193,174,162,178,102,173,192,195,198,194,199,203,200,203,205,205,
188,190,189,123,187,178,185,190,179,188,187,187,180,189,191,185,
207,211,209,208,209,210,207,209,209,202,196,205,182,118,169,206,
193,148,171,206,174,108,186,197,189,101,109,156,201,200,201,202,
169,175,175,125,164,115,57,33,30,27,45,67,86,121,140,167,
177,115,203,206,167,150,206,204,118,193,205,204,158,202,208,200,
189,188,190,189,188,189,189,188,193,190,188,194,190,189,191,171,
188,183,186,188,192,172,186,189,157,182,189,190,74,197,191,194,
72,160,190,189,71,199,185,182,186,184,181,180,189,181,184,178,
192,196,175,103,188,194,193,83,195,194,194,188,192,196,192,201,
153,184,191,188,177,186,201,75,184,193,81,72,185,114,62,162,
163,168,165,156,163,166,161,170,169,173,170,172,162,167,161,163,
176,156,85,156,182,82,69,75,190,71,70,107,171,185,173,187,
105,169,193,177,103,108,165,190,183,176,193,192,201,203,203,199,
176,164,118,165,172,83,98,107,93,74,89,144,75,115,177,169,
72,189,190,187,186,190,185,182,191,186,183,182,184,180,179,179,
191,166,99,181,184,195,102,104,198,203,195,166,196,201,194,193,
203,202,202,200,194,190,201,199,126,103,184,195,184,95,186,193,
201,202,172,144,201,196,114,196,203,183,133,204,197,112,180,208,
181,177,173,179,185,186,185,182,182,183,185,186,186,184,183,187,
170,93,162,170,62,56,199,183,45,73,119,120,69,51,60,146,
59,55,201,188,56,159,190,176,136,194,179,178,172,181,183,186,
188,187,176,184,186,186,181,178,188,183,181,162,186,187,182,179,
190,182,192,188,181,189,178,187,187,181,186,187,189,189,191,196,
187,127,66,198,177,62,117,194,112,70,200,186,63,166,186,178,
159,188,193,59,182,184,171,165,178,186,177,187,186,175,183,174,
194,186,133,189,189,184,111,189,198,187,105,193,191,186,106,177,
192,198,92,190,195,181,168,198,188,161,194,193,182,188,198,190,
200,206,193,160,203,198,146,168,203,119,200,202,136,190,204,193,
167,169,171,82,181,190,116,63,180,166,40,109,173,49,73,180,
131,192,189,186,198,185,184,185,182,183,183,184,184,186,186,187,
166,171,169,171,171,166,166,172,159,170,166,162,173,161,167,170,
175,184,182,184,186,177,180,191,182,181,189,179,183,189,191,43,
187,189,190,186,186,184,181,182,176,177,186,185,187,183,175,179,
196,199,200,199,198,202,198,200,187,184,192,186,90,110,178,174,
182,178,145,161,186,170,148,151,180,173,144,150,177,172,146,162,
188,188,192,192,170,169,177,183,173,173,158,164,187,185,188,177,
167,162,165,171,167,174,173,176,171,166,171,167,167,173,170,177,
145,137,114,65,152,156,159,151,156,156,161,158,158,158,157,152,
177,191,185,184,183,187,148,189,171,58,91,187,88,50,173,193,
190,195,132,191,198,195,101,192,201,198,109,137,205,199,200,190,
181,170,185,186,175,191,202,179,183,169,85,58,82,61,126,194,
188,188,187,184,189,188,190,185,183,180,174,171,172,162,140,129,
130,60,70,83,175,130,68,69,184,191,196,185,184,184,182,181,
173,181,190,189,173,178,157,92,105,92,143,186,176,195,196,194,
163,138,173,187,178,185,171,170,189,185,187,181,186,189,190,186,
175,183,179,182,182,189,190,179,132,97,64,72,59,52,59,60,
143,137,45,30,142,134,36,30,140,126,32,36,130,113,38,48,
68,70,66,59,55,58,119,181,153,191,193,183,184,183,178,172,
181,172,181,181,173,181,173,178,179,175,181,182,178,176,179,171,
123
124
125
192,185,188,192,187,187,191,190,181,189,193,190,184,162,180,189,
54,86,198,192,185,204,189,189,189,183,187,183,185,186,187,175,
188,170,80,63,127,72,93,191,155,176,198,177,183,184,181,172,
F1 - AlfabetoVQ Pura (continuação)
Vetor
Valores
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
174
176
177
178
179
180
181
182
183
184
185
186
187
188
189
156,178,200,190,97,188,185,149,103,193,199,120,165,202,180,129,
187,187,185,169,194,191,190,191,191,188,190,186,192,192,192,191,
43,36,30,36,41,38,41,36,32,40,37,32,34,30,34,33,
185,192,52,65,202,81,61,199,106,59,189,179,58,140,192,177,
71,68,63,72,44,52,52,44,177,170,137,155,187,161,179,176,
182,186,199,199,125,199,201,192,187,193,196,185,196,192,186,184,
90,91,112,98,62,51,58,55,85,62,50,49,148,149,139,128,
174,181,183,190,139,188,194,191,78,140,192,189,73,74,180,192,
162,198,185,87,174,136,71,162,66,140,198,189,190,199,186,183,
176,177,184,175,182,182,187,185,189,193,177,168,168,90,175,187,
179,171,172,175,166,178,174,157,175,169,169,170,179,176,167,173,
180,186,105,82,193,177,75,78,187,178,180,193,181,186,195,183,
190,196,188,183,175,115,87,182,66,74,64,176,104,70,62,183,
185,182,173,184,181,179,172,185,184,179,176,179,187,174,145,185,
177,177,186,185,165,179,179,182,150,172,182,180,164,163,182,183,
181,185,184,185,180,188,193,198,198,196,162,130,141,46,44,42,
66,53,68,183,57,114,201,189,186,194,190,189,191,185,184,178,
185,185,180,187,179,179,188,171,186,184,176,189,182,181,185,178,
198,195,196,197,175,183,190,183,127,100,88,102,162,192,196,158,
196,193,174,183,137,98,62,44,83,92,134,53,160,197,153,58,
186,168,142,148,184,183,170,163,178,184,183,179,184,183,184,180,
183,179,182,184,181,181,183,179,184,182,185,189,149,174,174,175,
170,179,183,185,182,183,182,179,181,181,188,52,181,193,68,74,
178,135,185,189,171,153,195,190,86,193,198,171,81,197,183,115,
180,115,198,191,169,163,188,152,161,189,203,104,200,206,194,175,
178,181,178,174,166,159,169,175,183,184,178,176,180,178,178,183,
182,180,177,58,183,175,51,114,161,41,98,120,56,83,150,107,
63,48,50,67,185,195,197,200,185,185,185,182,189,183,183,180,
213,213,213,212,213,213,213,213,213,213,213,213,213,213,213,213,
198,197,194,188,115,106,157,188,185,162,198,196,181,187,201,194,
107,93,58,44,108,127,93,45,124,133,134,70,121,134,131,95,
205,205,206,206,204,204,204,205,202,202,203,204,199,202,202,203,
218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
150,195,199,172,139,131,200,201,181,99,136,200,200,192,85,137,
187,186,119,165,66,41,63,170,195,95,48,173,185,88,131,200,
126,198,209,207,200,208,209,209,206,209,210,209,207,208,208,209,
210,209,210,209,210,209,210,209,210,209,208,208,209,209,209,207,
210,212,206,196,206,206,202,132,209,203,201,198,209,205,205,209,
185,185,195,192,196,197,188,195,192,192,197,192,192,189,188,194,
199,207,210,211,198,208,210,211,203,208,210,211,209,210,211,211,
202,196,197,197,208,206,205,207,209,208,208,207,210,209,209,208,
188,193,195,191,192,189,193,192,193,192,193,194,145,198,192,190,
159,184,179,51,182,207,90,108,194,151,61,208,185,58,175,193,
100,139,199,202,110,83,191,201,136,75,181,189,189,115,162,186,
196,191,94,181,195,170,95,204,198,113,150,200,197,88,175,191,
185,62,178,186,62,180,193,171,187,191,185,177,188,186,177,179,
160,108,86,59,54,48,38,134,43,83,183,183,152,193,183,178,
197,198,197,197,198,196,196,197,197,200,198,198,199,195,196,198,
202,207,210,207,205,207,208,186,168,200,183,121,110,197,199,109,
112,190,200,139,116,198,193,102,154,196,169,149,199,201,168,198,
191,191,180,194,190,194,197,194,197,193,190,191,188,189,194,196,
166,85,191,190,111,100,202,197,81,165,199,199,80,189,197,194,
189,140,154,203,200,110,190,204,190,103,201,202,167,122,190,193,
194,181,90,188,194,85,186,196,110,163,195,190,115,194,186,182,
178,187,184,189,179,186,194,164,182,190,175,62,186,168,61,190,
189,190,203,203,97,202,205,198,94,201,202,197,140,202,195,197,
210,211,212,210,212,211,210,211,210,207,206,205,178,168,123,113,
128,133,173,158,58,52,59,80,168,187,189,185,184,184,187,178,
107,194,205,205,119,202,206,204,194,206,208,204,204,205,202,203,
203,204,206,206,203,206,205,200,205,204,204,193,206,202,115,197,
197,197,193,119,197,196,189,91,191,197,176,90,194,195,164,91,
194,84,71,116,175,181,196,195,182,194,192,192,194,191,189,193,
206,205,207,204,207,208,207,198,202,207,198,120,205,193,141,186,
188,193,188,187,195,185,185,193,189,178,191,186,193,105,74,168,
190
210,210,212,209,210,213,212,207,211,211,210,198,210,210,202,133,
F1 - AlfabetoVQ Pura (continuação)
Vetor
Valores
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
77,59,109,196,178,182,197,190,184,187,184,181,183,185,184,175,
198,207,180,104,199,202,127,151,198,198,91,191,202,186,93,195,
101,194,201,194,101,196,197,195,103,185,193,198,143,196,198,197,
193,193,192,172,192,196,172,152,197,192,100,148,186,192,90,94,
199,206,198,99,206,208,200,193,209,209,206,209,210,209,208,209,
209,211,212,211,210,211,212,211,181,199,209,211,111,184,210,211,
194,197,193,196,198,194,193,171,192,193,193,98,198,196,194,88,
143,153,186,196,100,95,79,67,58,68,126,176,197,197,200,190,
197,111,188,203,180,194,205,205,200,202,207,208,203,207,207,205,
188,195,189,193,195,185,195,191,180,191,187,189,195,193,192,194,
197,196,197,193,191,198,192,198,194,185,191,191,197,200,200,197,
195,206,205,206,197,196,203,198,101,202,202,194,196,201,205,196,
191,166,107,183,206,202,195,198,211,210,210,209,210,211,210,208,
182,125,182,193,192,83,104,170,198,168,186,197,196,192,204,201,
164,160,157,160,156,162,161,155,160,159,156,160,163,161,160,131,
180,181,185,183,146,159,162,178,76,69,177,188,69,182,189,186,
145,157,155,158,144,161,159,157,54,82,150,142,53,39,74,154,
162,35,31,164,162,37,28,164,159,37,29,158,166,33,28,152,
52,44,38,44,145,147,155,145,159,160,156,143,151,151,137,146,
142,151,155,154,139,148,149,148,149,151,151,152,139,150,152,149,
182,171,166,185,182,149,151,185,186,136,161,184,177,149,174,190,
121,42,36,61,142,73,37,51,142,98,31,50,135,106,40,47,
149,144,66,49,152,139,64,47,139,147,71,47,154,146,89,54,
62,100,150,144,51,62,105,151,82,68,50,74,135,100,67,61,
163,158,163,156,160,167,163,160,153,161,156,163,167,160,162,164,
146,103,50,100,143,103,49,97,148,102,49,85,145,104,50,83,
130,131,135,137,142,142,139,141,139,146,143,144,143,145,138,145,
138,156,156,162,74,107,157,156,48,58,134,154,52,70,153,152,
158,156,152,160,90,74,72,73,140,103,58,51,164,165,69,62,
128,56,41,118,139,49,45,131,137,49,44,138,134,46,51,128,
153,157,149,155,115,117,145,147,65,65,71,114,128,92,63,92,
127,134,74,49,138,138,126,114,132,143,142,148,143,144,147,142,
187,49,121,185,106,57,187,164,42,92,153,168,43,145,184,176,
97,44,37,65,109,43,50,67,103,41,49,89,100,50,51,116,
153,150,145,158,154,157,155,155,149,150,152,155,152,156,151,157,
151,147,143,145,146,141,143,145,142,137,139,139,144,138,144,142,
146,151,155,152,147,140,122,91,118,68,53,49,69,59,75,68,
41,46,75,133,68,37,33,113,111,47,33,83,114,53,36,81,
121,122,109,39,94,129,110,36,42,75,89,49,90,84,56,51,
135,139,146,138,115,138,146,139,64,137,144,141,45,119,137,141,
41,108,119,95,44,114,124,98,39,96,116,103,40,64,111,98,
122,52,59,128,101,41,68,135,76,42,64,136,71,38,53,115,
51,46,42,47,68,35,35,40,109,52,31,37,116,77,32,29,
57,59,121,154,144,151,156,153,153,156,153,153,147,153,150,151,
186,187,187,183,183,155,144,148,157,75,88,100,180,124,79,78,
107,35,124,147,114,30,129,148,112,33,132,151,96,31,139,145,
45,37,52,46,42,27,54,33,33,42,66,44,58,63,120,92,
184,83,138,184,93,79,189,181,67,194,193,183,191,186,183,175,
115,137,143,145,70,107,135,146,46,52,97,133,45,35,40,91,
42,31,129,135,33,30,138,137,34,28,136,138,35,30,124,130,
134,115,53,37,117,77,33,49,68,45,33,48,46,46,46,41,
113,91,69,70,120,71,65,136,88,57,124,170,69,95,161,155,
173,122,58,156,132,64,181,190,78,198,184,179,173,176,180,43,
92,70,119,146,104,51,93,150,119,60,77,147,125,71,66,137,
43,67,76,93,85,147,44,157,182,97,122,156,83,97,164,159,
51,130,152,154,48,138,151,153,48,139,155,151,49,129,156,148,
121,92,65,73,56,38,36,66,37,79,119,107,91,124,140,121,
39,67,99,113,37,40,73,94,31,32,35,53,43,39,33,35,
90,93,84,90,131,123,127,116,21,20,30,35,21,22,18,16,
139,151,118,50,146,149,115,46,153,153,152,137,150,157,148,155,
115,135,141,109,81,132,138,99,62,137,137,71,67,128,123,73,
44,44,46,59,38,44,65,86,35,35,88,126,37,38,75,126,
69,55,52,57,77,83,94,76,126,131,133,108,44,36,29,44,
51,64,130,148,51,69,144,148,104,140,152,138,143,151,146,145,
255
151,148,146,150,152,148,155,150,131,139,149,140,60,63,108,139,
F2 - Alfabetos VQ/BTC
F2.1 - Bit Maps
Vetor
Valores
Vetor
Valores
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
1,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,
0,1,1,1,0,0,0,1,1,0,1,0,1,1,0,1,
1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,
1,1,1,0,0,0,1,0,1,0,0,0,0,0,1,1,
1,1,0,0,0,0,0,1,1,0,0,1,1,0,0,0,
1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,
0,0,1,1,0,1,1,0,1,0,0,1,0,0,1,1,
1,0,0,0,1,1,1,1,0,0,0,0,0,1,0,1,
1,1,0,0,1,0,1,0,1,0,0,0,1,1,0,0,
0,0,0,0,1,1,1,1,0,1,1,1,1,0,0,1,
1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,
1,1,0,0,0,0,1,1,1,1,1,0,0,1,0,0,
0,0,1,0,0,0,1,1,0,0,0,1,1,1,1,1,
1,1,1,0,0,1,0,1,0,1,0,0,0,1,1,1,
0,1,1,1,0,0,1,0,1,1,1,1,0,0,1,0,
0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,1,
0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,
0,0,1,0,0,1,0,0,1,1,1,1,0,0,0,0,
1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,1,
1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,
1,1,1,1,0,0,1,0,0,0,1,1,0,0,1,0,
1,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,
0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,
0,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1,
0,1,1,1,1,1,1,0,0,1,1,0,0,0,0,1,
0,1,0,1,1,0,0,1,1,0,0,0,1,0,1,1,
0,0,0,1,1,0,0,1,1,0,1,0,0,0,1,1,
1,0,0,0,1,1,1,0,1,1,0,0,1,1,1,0,
0,0,1,1,0,0,1,1,0,0,1,1,0,1,1,1,
1,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,
0,1,0,0,0,1,1,0,1,1,0,1,1,0,1,1,
1,1,0,0,1,0,0,1,1,0,1,0,1,1,0,0,
0,0,1,1,0,0,0,0,1,1,1,0,1,1,1,1,
0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,1,
1,1,1,0,1,1,0,0,0,0,0,0,0,0,1,0,
1,0,0,0,1,1,1,0,1,0,0,0,1,0,0,0,
0,1,0,1,1,1,0,1,1,0,0,1,1,1,0,1,
0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,
0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,
1,1,0,0,1,1,0,0,1,0,0,0,1,1,0,0,
1,1,1,1,1,1,1,0,1,1,1,0,1,1,0,0,
0,1,0,0,0,1,0,0,1,1,1,1,0,0,1,1,
0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1,
1,0,1,0,1,0,0,0,0,1,1,0,1,0,0,1,
0,0,0,1,0,0,1,1,1,0,1,1,0,0,1,1,
0,0,0,1,0,1,1,1,0,1,0,1,0,1,1,0,
0,1,1,1,1,0,1,0,0,0,1,1,1,0,1,0,
0,0,0,1,1,0,1,1,1,1,1,0,0,1,0,0,
0,1,1,0,0,1,1,1,0,0,0,0,1,1,1,1,
1,1,1,1,1,0,1,0,0,1,0,0,0,1,0,0,
0,1,1,1,1,1,0,0,1,1,0,0,0,0,1,1,
1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,1,
1,0,0,1,1,0,0,1,1,1,0,1,0,0,1,0,
0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,
0,0,0,1,0,1,1,0,1,0,1,1,1,1,0,0,
0,0,0,0,1,1,0,0,1,0,0,0,1,0,1,1,
1,0,1,1,0,1,0,0,1,0,1,1,0,0,0,0,
1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
1,1,1,1,0,0,0,0,0,1,1,0,1,0,0,1,
1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,0,
1,0,0,1,1,0,1,1,0,0,0,1,1,1,1,0,
0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,
0,1,0,1,1,1,0,1,0,1,1,1,0,1,1,0,
0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,0,
1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,
1,1,1,1,0,1,1,1,0,1,1,0,1,1,1,0,
1,1,0,0,1,0,1,1,1,1,0,0,0,0,1,1,
0,0,0,0,0,1,1,1,0,1,1,1,1,0,0,1,
0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,1,
0,1,1,1,0,0,0,1,0,1,0,1,1,0,1,1,
1,1,0,0,1,0,0,0,0,0,1,1,1,0,1,0,
0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,1,
0,0,0,1,0,1,0,1,1,1,1,1,0,0,0,1,
0,1,0,0,1,0,1,1,1,0,1,0,1,1,1,1,
1,1,0,1,1,0,1,0,0,1,0,0,1,1,0,1,
0,1,1,1,1,0,1,1,0,0,0,0,1,1,0,1,
1,1,1,0,1,0,0,0,0,0,0,0,0,0,1,1,
1,0,1,0,0,1,0,0,1,0,1,0,1,1,1,0,
1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,
0,1,1,1,0,0,0,0,0,1,0,1,0,0,1,0,
0,1,1,1,0,1,1,0,1,1,0,0,1,1,1,0,
1,0,0,0,0,1,1,0,1,0,1,1,1,1,1,1,
0,1,1,1,1,1,1,0,1,1,0,0,1,0,0,1,
0,1,0,0,0,0,0,1,1,1,1,0,1,1,0,0,
1,0,0,1,1,0,0,0,1,0,0,0,1,1,1,1,
0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,
0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1,
0,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,
0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,
1,1,0,1,0,0,1,1,0,0,0,1,1,0,0,0,
0,1,1,0,1,1,0,1,1,1,0,1,1,0,1,1,
1,1,1,0,0,1,0,0,1,0,0,1,0,0,1,1,
1,0,1,1,0,0,1,1,0,0,1,1,0,0,0,1,
0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,
1,0,0,0,1,1,1,1,1,0,1,0,1,1,1,1,
0,1,1,0,0,1,0,1,0,0,1,1,1,1,1,1,
1,1,0,1,1,0,0,1,1,0,1,1,0,1,1,1,
0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,
1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,1,
0,0,0,0,1,0,1,1,1,0,1,0,1,1,0,1,
1,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,
1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,1,
0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,
0,1,1,0,1,0,1,1,0,1,0,0,1,0,1,1,
0,1,1,0,1,0,1,0,1,0,0,1,0,1,1,0,
0,1,1,1,0,0,1,0,0,0,1,0,0,1,1,1,
1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,0,
0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,1,
1,0,0,1,0,0,1,1,0,0,0,0,1,1,1,0,
0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,1,
0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,
0,0,1,1,1,0,0,1,1,1,0,1,0,1,1,1,
1,1,1,1,1,1,1,1,1,0,1,1,0,0,1,1,
0,0,0,0,1,1,0,1,0,1,1,1,1,1,0,0,
0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,
1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,
F2.1 - Bit Maps (continuação)
Vetor
Valores
Vetor
Valores
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
174
176
177
178
179
180
181
0,0,0,1,0,0,0,0,1,1,1,1,0,1,1,0,
1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,
1,1,0,0,1,1,0,0,1,0,0,0,1,0,0,1,
0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,
0,0,1,1,0,1,0,0,0,1,1,1,0,1,1,0,
1,0,0,1,0,1,0,0,0,1,1,0,0,0,0,1,
0,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,
1,1,0,0,1,1,0,1,1,1,1,1,1,1,1,1,
1,1,1,0,0,1,1,0,0,0,1,0,0,1,1,0,
0,0,0,0,1,0,1,1,1,0,0,1,1,1,1,1,
1,0,0,0,1,1,1,0,1,1,1,0,0,0,1,0,
1,1,0,0,1,0,0,1,1,0,1,1,0,0,1,1,
0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,
1,1,1,1,0,1,0,1,1,1,1,1,1,1,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,
1,1,1,1,0,0,1,1,0,0,1,1,0,0,1,1,
0,1,1,0,0,0,0,1,0,1,0,0,1,1,1,1,
1,1,1,0,1,0,0,1,1,1,1,1,0,0,0,0,
1,0,1,0,0,1,0,0,1,0,0,1,1,1,1,0,
1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,
1,1,1,1,1,0,0,1,0,0,0,1,0,0,0,1,
1,1,1,1,1,0,0,1,1,1,1,0,0,0,0,0,
0,1,0,1,0,0,1,1,1,0,0,0,0,0,1,1,
1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,
0,0,0,0,0,1,1,1,1,1,1,1,0,0,1,1,
0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,0,
1,1,1,1,1,0,0,1,0,0,0,0,1,0,0,0,
1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,0,
1,1,1,0,0,0,0,0,1,1,1,0,0,1,1,1,
1,1,0,1,0,1,0,0,1,0,0,1,0,0,1,0,
0,0,1,1,1,1,1,1,1,1,1,0,1,1,0,0,
1,1,1,1,0,0,1,1,1,1,1,1,0,1,1,0,
0,0,1,1,1,0,1,1,1,0,1,0,1,1,1,1,
1,1,1,0,0,0,0,1,1,1,1,0,1,1,0,1,
1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,
0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,
0,1,1,1,0,0,1,1,0,0,1,1,0,1,1,1,
1,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,
0,1,1,1,1,0,0,1,1,0,0,0,0,0,1,0,
1,0,1,1,1,1,1,1,0,1,0,1,0,0,0,1,
0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,
0,0,1,1,1,0,0,1,1,0,1,0,1,0,0,1,
0,1,1,0,0,0,1,0,1,1,1,1,0,1,1,1,
1,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,
1,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,
1,1,1,1,0,0,1,1,0,1,1,0,0,1,1,0,
0,0,0,1,0,1,0,1,0,1,1,1,1,0,0,1,
0,0,1,1,1,0,0,0,1,0,1,1,1,0,1,1,
1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,
1,1,1,0,0,1,1,1,0,0,1,1,0,0,0,1,
0,1,1,1,0,0,1,1,0,0,0,1,1,0,0,1,
1,1,1,0,1,1,0,1,1,0,0,1,1,0,0,1,
1,0,1,1,0,0,1,1,0,1,1,1,1,1,1,1,
1,0,1,0,0,0,0,0,0,0,1,1,0,1,1,1,
1,0,0,1,1,0,0,1,1,0,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,
0,1,1,0,0,1,1,0,1,1,0,1,1,1,0,1,
1,0,0,1,0,0,0,1,1,1,1,1,0,1,1,1,
0,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,
1,1,1,1,1,0,1,1,1,0,1,1,0,0,1,1,
1,1,0,1,1,0,1,1,0,0,1,1,0,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,
0,1,0,1,0,1,1,1,0,0,1,0,1,0,0,1,
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,
0,1,1,1,0,1,0,0,1,0,1,0,1,1,0,1,
0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,
1,1,1,0,1,0,0,0,1,1,1,0,1,1,0,0,
0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,
1,1,1,0,1,1,0,0,1,0,0,1,1,1,0,1,
1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
1,1,1,0,1,1,0,1,1,1,0,1,1,0,0,0,
0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,
1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,
0,1,1,1,1,1,1,0,0,0,1,0,1,1,1,1,
1,0,0,1,1,0,0,1,1,1,0,1,1,1,1,1,
1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,1,
1,0,1,0,0,1,0,0,1,1,0,0,1,1,0,1,
1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,
0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,0,
1,0,1,1,1,0,0,1,1,0,1,1,1,1,1,0,
1,1,1,1,1,1,1,0,1,1,0,1,0,0,0,0,
0,0,0,1,1,1,0,1,0,0,1,0,0,1,1,1,
1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,
1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,
0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,
0,0,0,0,1,0,1,1,1,1,0,1,0,1,1,1,
1,1,1,1,1,1,0,1,0,0,1,1,0,0,0,0,
1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,
1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,0,
0,1,1,1,0,0,1,1,0,0,0,0,1,1,1,0,
0,1,1,1,1,0,0,1,0,0,1,1,1,0,0,1,
1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,
0,1,0,1,0,1,1,0,1,1,1,1,1,1,0,1,
0,1,1,1,0,0,1,1,0,0,1,1,0,0,1,1,
1,1,1,1,1,0,1,1,1,0,0,0,1,1,1,0,
1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,
0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,0,
1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,0,
1,1,1,1,0,0,1,1,0,0,1,1,0,0,1,1,
1,0,0,1,1,0,0,0,1,0,0,1,1,0,0,1,
1,1,0,1,1,1,0,1,1,0,1,0,0,1,0,0,
1,1,1,0,0,0,1,1,0,1,0,0,0,1,1,1,
1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,
1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,
1,1,1,0,1,1,1,1,0,0,0,1,0,0,0,0,
0,1,0,0,1,1,1,1,1,1,0,1,0,1,0,1,
0,1,0,1,0,1,1,0,0,1,1,1,0,0,1,1,
1,0,0,1,0,0,0,1,1,0,0,1,0,0,0,1,
0,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,
0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,
1,0,1,1,0,0,1,1,0,0,0,0,0,1,0,1,
1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,
0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,
0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,1,
1,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1,
0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,
1,1,1,0,1,0,1,0,0,0,0,1,0,0,1,1,
1,1,0,0,1,0,0,1,0,0,1,1,0,0,1,1,
1,0,0,0,1,1,1,1,1,0,1,1,0,1,1,0,
1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,
0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,1,
0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,
1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,
1,0,1,1,1,0,0,1,1,0,0,1,1,0,0,1,
0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
1,1,0,0,1,1,0,0,1,0,1,0,1,1,1,1,
182
183
184
185
186
1,1,1,0,1,1,1,0,1,0,1,0,0,1,1,0,
0,0,1,1,0,0,0,0,1,0,1,1,1,1,1,1,
0,0,1,1,0,1,1,1,0,0,1,1,0,1,0,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,
1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,
251
252
253
254
255
1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,
0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,
0,0,0,0,1,1,1,1,0,1,1,1,0,1,1,0,
0,0,1,1,0,1,1,0,0,1,1,0,0,1,1,1,
1,1,1,1,1,1,0,1,1,0,0,1,0,0,1,1,
F2.2 - Parâmetros Estatísticos
Vetor
Valores (média, variância)
Vetor
Valores (média, variância)
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
122.660061,14.630208,
166.452982,11.892417,
122.040132,48.739144,
173.017442,15.075194,
108.786830,25.603797,
126.507530,37.913354,
168.801006,14.994211,
188.790179,11.757936,
132.122984,14.118011,
168.367537,20.926672,
80.671528,45.943914,
150.756818,34.378218,
136.084722,17.540129,
160.048112,10.046899,
163.393162,11.390590,
178.673684,6.540500,
133.819318,9.643674,
160.767747,13.222796,
162.712500,8.489610,
165.196003,8.672572,
120.901786,10.189024,
147.586806,12.329706,
146.445975,8.841190,
115.084777,46.716264,
144.495640,17.098156,
149.882161,9.620783,
154.375833,17.040189,
101.379425,32.421676,
118.547991,18.543485,
102.179630,42.834359,
144.066886,34.196265,
164.165296,15.263474,
112.072222,13.952094,
110.237903,34.461273,
71.432500,47.574724,
149.158654,19.076350,
127.995833,10.793350,
147.395047,15.932904,
63.345982,42.804012,
96.626225,39.374008,
147.464120,27.407595,
126.075321,21.465227,
151.743207,23.045187,
119.758427,34.202556,
136.722458,13.005624,
153.695455,11.845430,
134.383255,25.088648,
138.633333,8.784531,
143.055664,9.253168,
143.308712,21.085851,
127.375000,15.023367,
95.835648,19.817961,
164.937500,26.354108,
191.809593,6.749799,
187.887801,15.697598,
199.670455,13.076421,
193.939167,10.445313,
191.238750,8.159979,
169.176948,56.737147,
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
197.685788,9.493933,
166.693097,38.433735,
189.020631,7.910595,
163.111979,32.363907,
171.565000,33.901940,
149.070312,42.335843,
195.541912,8.875598,
170.449548,40.928777,
195.918750,17.705241,
192.786538,11.883032,
184.575000,11.874762,
192.384740,9.387552,
196.509511,13.669685,
188.994693,9.735927,
186.981456,10.660254,
186.892045,13.127433,
204.685000,10.940076,
180.506250,16.770973,
93.243056,81.271253,
193.649038,8.657977,
199.902289,9.842769,
179.046145,13.426672,
179.971208,27.167321,
191.127604,16.453671,
184.598485,42.340967,
173.776119,6.686184,
135.447368,64.118648,
193.313596,14.144015,
142.708022,50.246103,
180.667411,11.153793,
159.511130,45.010744,
184.062500,19.276676,
179.906609,22.124966,
190.992585,5.089260,
130.200397,70.729887,
177.508721,32.585712,
190.060096,6.926521,
193.334936,7.115701,
148.653409,76.053402,
180.273098,43.885322,
176.797554,17.925692,
190.798537,11.107092,
195.667254,11.266166,
138.684211,72.721698,
187.311141,4.931310,
176.110950,9.070012,
186.568681,8.804794,
193.310577,5.284038,
188.790064,19.922855,
173.326888,10.614507,
187.537202,6.930832,
185.662371,7.799866,
157.221154,11.393311,
158.507353,50.789223,
190.475260,9.400847,
170.021368,50.288550,
181.898515,5.937358,
140.678571,59.136092,
178.641204,9.827631,
F2.2 - Parâmetros Estatísticos (continuação)
Vetor
Valores
Vetor
Valores
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
174
176
177
178
179
180
181
185.522368,10.033033,
134.057031,50.321358,
113.522879,55.464425,
125.916096,65.265764,
184.010000,6.874449,
195.237926,6.942452,
166.664062,44.212118,
156.497748,59.969791,
174.326480,21.872126,
201.791667,7.175377,
28.702035,17.599197,
135.592988,80.699642,
112.257812,83.246407,
190.619318,13.597420,
102.882955,52.733041,
161.832880,39.625734,
182.313131,13.071722,
187.833104,8.464343,
182.739500,10.333967,
163.610294,66.267441,
125.059524,82.014340,
182.809028,8.088034,
184.737500,5.066198,
151.646341,50.826926,
149.091500,59.985026,
188.923828,5.642872,
184.343750,14.917069,
119.530172,73.664363,
180.893797,8.438465,
186.192434,6.230871,
145.275768,67.748333,
172.900162,27.438398,
176.276290,12.273802,
184.255357,9.104918,
107.279948,71.130481,
154.093112,66.939966,
220.364583,3.505430,
186.673387,25.138086,
125.076087,31.326579,
215.109076,2.626171,
221.658046,2.488395,
178.708841,37.690167,
156.101562,37.209096,
216.540179,2.820415,
219.651950,2.421615,
214.713579,3.813705,
204.952148,4.702638,
217.858173,4.166176,
218.152574,2.559545,
211.706344,2.887396,
155.631579,28.152531,
164.875496,49.608060,
177.146127,51.463984,
200.558532,32.739367,
131.071314,32.199903,
212.921429,7.140859,
200.870471,26.940700,
162.038068,56.234577,
197.984375,6.899427,
182.924851,34.365686,
182.961648,48.395458,
195.787660,29.632303,
192.158288,32.018139,
209.534091,6.140207,
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
186.463608,30.814727,
207.333183,4.280317,
190.756860,36.869838,
212.988542,4.095297,
186.683494,37.063218,
174.332163,38.815585,
195.636905,37.459646,
171.299375,45.017260,
209.497951,11.829298,
194.562500,23.165508,
190.416274,42.702860,
181.761765,39.313982,
211.127301,4.367664,
196.015306,4.869968,
209.482955,3.443493,
201.384259,20.799785,
213.510954,2.721503,
176.455078,42.333093,
167.530899,6.454589,
170.367618,11.589771,
140.431352,41.635281,
92.952560,67.985326,
126.284299,55.141515,
157.369411,7.937777,
170.856647,7.963566,
84.691092,57.082710,
122.803161,42.095873,
108.654634,41.772873,
168.299457,9.488372,
92.160618,54.645172,
152.642113,8.244507,
139.631410,22.370575,
129.780114,44.055526,
97.387769,60.224057,
134.622962,37.718196,
141.555804,27.657741,
117.867537,62.906599,
54.305651,35.891715,
160.505271,6.938280,
155.146046,8.969142,
116.400773,39.912972,
76.089844,38.323472,
68.123106,56.743121,
144.239583,13.516810,
105.281960,61.438518,
89.318412,32.061222,
49.841734,46.257243,
158.117077,15.087337,
151.047743,13.871393,
87.503378,48.909380,
42.920608,23.521458,
160.841755,21.365525,
83.937500,65.749475,
95.830177,47.807520,
39.741848,35.823962,
116.045551,26.441737,
137.222128,31.558736,
88.783764,40.972353,
108.029533,48.757433,
123.399390,25.829741,
76.215909,59.089488,
63.768382,27.353785,
57.273674,55.311442,
140.467905,16.886357,
182
183
184
185
186
206.455943,17.473661,
175.158125,47.080384,
201.303571,4.074751,
206.282328,23.800252,
177.204861,61.019771,
251
252
253
254
255
131.397569,19.520900,
78.166016,29.305242,
70.815000,68.088864,
129.656977,26.571149,
140.935516,12.468876,
Download

Nelson Ismar da Silva Junior - DCC | Departamento de Ciência da