Você está na página 1de 72

UNIVERSIDADE VILA VELHA CURSO DE CINCIA DA COMPUTAO

LUCAS GALON ARRIGONI

COMPACTAO SEM PERDA PELO MTODO DE HUFFMAN ASSOCIADO TRANSFORMADA DE WAVELET

VILA VELHA Novembro/2012

LUCAS GALON ARRIGONI

COMPACTAO SEM PERDA PELO MTODO DE HUFFMAN ASSOCIADO TRANSFORMADA DE WAVELET


Trabalho de Concluso de Curso apresentado a Universidade Vila Velha como requisito parcial para a obteno do grau de Bacharel em Cincia da Computao. Orientador: Marcello Novas de Amorim

VILA VELHA Novembro/2012

LUCAS GALON ARRIGONI

COMPACTAO SEM PERDA PELO MTODO DE HUFFMAN ASSOCIADO TRANSFORMADA DE WAVELET

BANCA EXAMINADORA

Prof. Msc. Marcello Novas de Amorim Universidade Vila Velha Orientador

Prof. Msc. Alessandro Universidade Vila Velha

Prof. Msc. Hudson Ramos Universidade Vila Velha Trabalho de Concluso de Curso aprovado bro/2012. em 27/11/Novem-

Autorizo que a UVV, sem nus, promova a publicao de minha monograa em pgina prpria na Internet ou outro meio de divulgao de trabalho cientco.

ASSINATURAS

Prof. Msc. Marcello Novas de Amorim Universidade Vila Velha Orientador

Lucas Galon Arrigoni Universidade Vila Velha

27/11/2012

Onde no falta vontade existe sempre um caminho.


J. R. R. Tolkien

LISTA DE TABELAS
1 2 3 4 5 6 7 8 9 Conjunto binrio da tabela ASCII por codicao . . . . . . . . . . . . . Codicao inicial de Shannon Fano . . . . . . . . . . . . . . . . . . . . Codicao intermediria de Shannon Fano . . . . . . . . . . . . . . . . Codicao nal de Shannon Fano . . . . . . . . . . . . . . . . . . . . . Frequncia e o cdigo original dos smbolo . . . . . . . . . . . . . . . . Frequncia e o cdigo codicado dos smbolo . . . . . . . . . . . . . . . Decomposio em coecientes de aproximao e detalhes. . . . . . . . Tabela de codicao . . . . . . . . . . . . . . . . . . . . . . . . . . . . Resuldos referntes aos arquivos de teste . . . . . . . . . . . . . . . . . 30 31 31 31 33 34 38 41 67

LISTA DE FIGURAS
1 2 3 Lista linear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Representao da lista contnua . . . . . . . . . . . . . . . . . . . . . . Estrutura de um n de uma lista encadeada, onde Info o campo de informao e Prox aponta para o prximo n da lista . . . . . . . . . . 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Lista simplesmente encadeada . . . . . . . . . . . . . . . . . . . . . . . Lista duplamente encadeada . . . . . . . . . . . . . . . . . . . . . . . . Lista simplesmente encadeada circular . . . . . . . . . . . . . . . . . . Lista duplamente encadeada circular . . . . . . . . . . . . . . . . . . . . Esquema completo de uma rvore . . . . . . . . . . . . . . . . . . . . . Representao de uma rvore binria . . . . . . . . . . . . . . . . . . . Esquema de codicao e decodicao . . . . . . . . . . . . . . . . . Tipos de compactao . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tabela ASCII caracteres no imprimveis . . . . . . . . . . . . . . . . . Tcnica run-length . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Processo de compresso Run-Length . . . . . . . . . . . . . . . . . . . Processo de codicao de Huffman - passo a passo . . . . . . . . . . Sequncia dos processos . . . . . . . . . . . . . . . . . . . . . . . . . . Processo da codicao da Transformada Wavelet de Haar . . . . . . . rvore de codicao . . . . . . . . . . . . . . . . . . . . . . . . . . . . Transformao dos dados . . . . . . . . . . . . . . . . . . . . . . . . . . Processo da decodicao da Transformada Wavelet de Haar . . . . . Fluxo do algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 17 17 17 18 19 20 23 25 27 27 29 33 40 40 41 41 42 44 16 16

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

Fluxo de compactao e descompactao . . . . . . . . . . . . . . . . . Fluxo do pr-processamento . . . . . . . . . . . . . . . . . . . . . . . . Cdigo do pr-processamento . . . . . . . . . . . . . . . . . . . . . . . Fluxograma da Transformada Wavelet de Haar . . . . . . . . . . . . . . Cdigo da codicao da Transformada Wavelet de Haar . . . . . . . . Estrutura do n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

44 45 45 46 47 48 49 49 49 50 52 52 53 54 55 57 58 59 60 61 62 63 65 66 66

Caso dos smbolos repetidos. . . . . . . . . . . . . . . . . . . . . . . . . Caso dos smbolos diferentes. . . . . . . . . . . . . . . . . . . . . . . . Fluxograma da criao da lista de smbolos. . . . . . . . . . . . . . . .

Cdigo da criao da lista de smbolos. . . . . . . . . . . . . . . . . . . Criao da rvore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fluxograma da criao da rvore. . . . . . . . . . . . . . . . . . . . . . Cdigo da criao da rvore. . . . . . . . . . . . . . . . . . . . . . . . . Fluxograma da criao da tabela codicada. . . . . . . . . . . . . . . . Cdigo da criao da tabela codicada. . . . . . . . . . . . . . . . . . . Fluxograma da codicao. . . . . . . . . . . . . . . . . . . . . . . . . . Cdigo da codicao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fluxograma da reconstruo da tabela codicada. . . . . . . . . . . . . Cdigo da reconstruo da tabela codicada. . . . . . . . . . . . . . . . Fluxograma da reconstruo da rvore binria de decodicao . . . . Cdigo da reconstruo da rvore binria de decodicao, parte 1 . . Cdigo da reconstruo da rvore binria de decodicao, parte 2 . . Cdigo de decodicao. . . . . . . . . . . . . . . . . . . . . . . . . . . Fluxograma da decodicao da Transformada Wavelet de Haar. . . . . Cdigo da decodicao da Transformada Wavelet de Haar. . . . . . .

SUMRIO

RESUMO ABSTRACT 1 INTRODUO 1.1 Motivao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Justicativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Objetivo Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4 Objetivos especcos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 ESTRUTURA DE DADOS 2.1 Listas Lineares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 rvore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 rvore Binria . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 COMPACTADORES 3.1 Histrico da Compactao . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Compactao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Tipos de Compactao . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4 Tcnicas de Compresso . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.1 Tcnicas com Caracteres Indicadores . . . . . . . . . . . . . . . 3.4.2 Compresso Estatstica . . . . . . . . . . . . . . . . . . . . . . . 4 A Transformada Wavelet 12 13 13 13 14 15 15 18 19 21 21 22 24 25 25 30 36

4.1 Surgimento das Wavelets . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Transformada Wavelet de Haar . . . . . . . . . . . . . . . . . . . . . . . 5 ALGORITMO PROPOSTO 5.1 Prova de Integridade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Caractersticas do Algoritmo . . . . . . . . . . . . . . . . . . . . . . . .

36 37 39 39 43 43 44 59 67 67 68 69 70

5.3 Implementao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.1 Compactao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.2 Descompactao . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 RESULTADOS, DISCUSSO e CONCLUSES 6.1 Resultados e Discusso . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Concluso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 CONCLUSO 8 REFERNCIAS

RESUMO
A compresso de dados se revela essencial para o armazenamento e transmisso. H mtodos que, embora atinjam altas taxas de compresso, em seu procedimento reverso (descompactao), podem fazer com que parte dos dados presentes no arquivo original se percam. Assim o objetivo desse estudo consiste na criao de um compactador de dados sem perda, a partir da vericao da viabilidade do uso da Transformada Wavelet associadas a codicao de Huffman; possibilitando a compresso e descompresso do arquivo, mantendo a integridade dos dados sem prejudicar a sua utilizao pelo usurio.

Palavras-Chave

Compactao de dados, Wavelet, Huffman

ABSTRACT
Data compression is essential for storage and transmission. There are methods that, although achieve high compression ratios, in its reverse procedure (decompression) can cause part of the data present in the original le are lost. Thus objective this study is the creation of a compactor without loss of data from the verify the feasibility of using Wavelet Transform associated with Huffman coding, enabling compression and decompression of the le, maintaining data integrity without impairing its use by the user.

Keywords

Compression of data, Wavelet, Huffman

12

INTRODUO

Com o surgimento da internet, a evoluo tecnolgica cresce substancialmente, e uma de suas caractersticas a necessidade de obter informaes em tempo hbil, com o mnimo de espao fsico possvel. Desse modo a reduo, compresso ou compactao de dados um recurso muito utilizado, que permite aumentar consideravelmente a quantidade de dados a serem gravados em um mesmo espao fsico ou at mesmo reduzir o tempo de transmisso desses dados, j que a velocidade da rede ainda apresenta limitao, como ligaes telefnicas, fax e downloads. Arquivos digitais como fotos, vdeos, livros e msicas, geram grande volume de dados, tornando-se iminentes s aplicao de tcnicas para compactao de dados, que possibilitem reduzir a quantidade de informaes necessrias, tendo como garantia a exatido dos dados, facilitando o armazenamento, a transmisso e o processamento dos dados. Neste projeto ser realizado uma sucinta abordagem sobre as estruturas de dados, relacionadas codicao, alm disso discorrer uma breve evoluo histrica da codicao. Posteriormente, alguns conceitos relativos a compresso de dados sero apresentados, especicando conceitos e denies, e incluindo demonstraes de algumas tcnicas. A abordagem da codicao de Huffman em conjunto com um apndice da Transformada Wavelet de Haar, ter como objetivo buscar argumentos concretos da relao entre os mesmos. Diante disso, estima-se o desenvolvimento de uma anlise tcnico-cientca sobre os mtodos de compresso com a nalidade de apresentar uma proposta de compactao que correlacione os princpios utilizados nesse projeto.

13

1.1

Motivao

Vrias pesquisas tm sido desenvolvidos na rea de compresso de imagens utilizando mtodos baseados em Wavelets1 . Todavia, poucos trabalhos utilizam a Transformada Wavelet sem perda, para arquivo do tipo texto. Mtodos que resultam em perda de informaes no so aceitos para arquivos texto, pois isso pode prejudicar a integridade dos mesmos. O interesse nesta pesquisa surgiu pela possibilidade de associar a Transformada Wavelet com a codicao de Huffman para propor uma nova tcnica de compactao.

1.2

Justicativa

Atualmente, fcil se deparar com pessoas, ou organizaes que necessitam armazenar ou transferir em seus computadores ou redes, arquivos de grande porte. Entretanto, mesmo que a capacidade de armazenamento e o processamento computacional sejam abundantes, para os recursos j disponveis, o tempo de transferncia e o espao sico requerido para o armazenamento so elevados. Assim, a reduo da associao entre o tempo de transferncia e o espao fsico possibilita maior agilidade na obteno de informaes favorecendo o desempenho tcnico. Porm, a totalidade desses recursos ser atingida de maneira integral a partir da ausncia de perda de dados, que resulta na preservao da integridade das informaes transmitidas. Com isso, a implementao de um algoritmo capaz de unir esses fatores por intrmedio de tcnicas associadas, permite ampliar a viso tcnica e computacional incentivando o desenvolvimento de novas pesquisas.

1.3

Objetivo Geral

Criar um compactador de dados sem perda de dados, para compactar arquivos do tipo texto, de modo que aps o procedimento, seja possvel retornar aos arquivos originais sem que ocorream alteraes no permitindo a perda de informaes durante o processo de compresso, j que, de acordo com a compactao sem perda, a falta de um bit em um arquivo binrio pode comprometer todo o seu signicado.
uma funo capaz de representar uma srie de dados possibilitando a anlise em diferentes escalas de frequncia e de tempo. [OLIVEIRA, 2007]
1 Wavelet

14

1.4

Objetivos especcos

Promover o estudo da estrutura de dados, das tcnicas, mtodos e codicaes de compresso de dados. Desenvolver um algoritmo de compactao sem perda, que utilize a codicao de Huffman juntamente com a Transformada de Wavelet. Analisar se a compactao reduziu o tamanho do arquivo. Vericar se houve perda de dados no processo.

15

ESTRUTURA DE DADOS

Este captulo ser aborda uma sntese das principais estruturas de dados que so inerentes codicao de Huffman ao qual ser utilizada neste projeto.

2.1

Listas Lineares

De acordo com Szwarcter (1994), uma estrutura de lista formada por um conjunto de elementos, os quais se relacionam entre si. Os elementos contidos em uma lista podem forma a combinaes de informaes, assim, [ A, 1, C ], por exemplo representa uma lista de 3 elementos, sendo que os elementos A, 1 e C indicam as informaes da lista. Uma estrutura de lista tambm pode ser formadas por um conjunto de listas e sub listas, ou seja, podemos falar que [ [ A, [ B ] ] , [ C ] ] uma lista com dois elementos. Segundo Szwarcter (1994), as operao mais frequentes utilizadas em listas so a incluso, excluso e busca de elementos na lista. Essas operaes, apesar de serem simples, mostram uma grande importncia para a criao de outras operaes. Tem-se como exemplo real as las dos caixas em um banco, onde os clientes se organizam de forma sequencial entre o primeiro e o ltimo da la, criando assim uma ordem de atendimento e a medida que os clientes so atendidos, os mesmos so removidos da la. As listas lineares so constitudas pelas seguintes regra: Uma lista E contem n elementos (ns) tal que n >= 0 Quando n = 0, dizemos que a lista vazia. Caso E n = E n-1 dizemos que E n-1 antecessor a E n

16

Figura 1: Lista linear As listas podem ser armazenadas de duas formas na memria do computador, contnua e dinmica. A representao contnua ocorre quando cada n da lista armazenado de uma forma contnuo na memria, desde que o nmero mximo de elementos da lista sej conhecido. Nessa representao a busca pela informao rpida, pois conhecendo o endereo do n Ei pode-se determinar o endereo do n Ei+1 utilizando-se um ndice, onde E a lista linear e i a posio da lista. Essas listas, tambm chamadas de Vetores ser representadas da seguinte forma:
1

ou Matrizes2 , segundo Veloso (1991) podem

Figura 2: Representao da lista contnua A alocao encadeada conhecida tambm como dinmica, tem como caracterstica a dinamicidade de alocar os elementos na memria na medida em que houver necessidade, visto que os ns se encontram em posies aleatrias na memria, porem cada n contm ponteiros que interligam uns aos outros. (Segundo Szwarcter (1994)).

Figura 3: Estrutura de um n de uma lista encadeada, onde Info o campo de informao e Prox aponta para o prximo n da lista Pode-se ento representar uma lista simplesmente encadeada conforme a gura 04. Nesta estrutura de dados podemos identicar os seguintes conceitos:
computao Vetores so variveis compostas homogneas unidimensionais, no podendo ser confundida com a denio geomtrica do termo, pois sua semelhana de difcil percepo. 2 Matrizes so variveis compostas homogneas multidimensionais, diferenciam de vetores pelo fato de necessitar de mais de um ndice para individualizar seus elementos.
1 Em

17

Figura 4: Lista simplesmente encadeada 1. O ponteiro para o incio da lista; 2. Em cada n existem dois campos: o que contem a informao e o campo que armazena o endereo na memria onde est alocado o prximo n. 3. No ltimo n, o campo de ligao aponta para um local de informaes nulas (null) indicando o m da lista. Nesta lista sempre temos um ponteiro que guarda o endereo do primeiro elemento e a partir dele realizamos um percurso sequencial, sempre do incio ao m lista, at chegarmos no ltimo elemento, que contm um valor nulo no seu campo prox. Entretanto caso houvesse a necessidade de apontar para o n anterior, caramos impossibilitados pelo fato de que no existe nenhum ponteiro indicando o n anterior. Para este problema existe a lista duplamente encadeada, onde cada elemento possui dois ponteiros: um que aponta para o n anterior e outro que aponta para o seu prximo. Observe a gura a seguir:

Figura 5: Lista duplamente encadeada Alm dessas listas h tambm a lista circular, em que o seu ltimo elemento aponta para o primeiro. As guras 06 e 07 representam esquematicamente a lista circular.

Figura 6: Lista simplesmente encadeada circular Neste projeto de pesquisa a implementao de uma das tcnicas empregadas (mtodo de Huffman - que ser descrita posteriormente), utilizou a estrutura de lista

18

Figura 7: Lista duplamente encadeada circular duplamente encadeada que conforme abordado anteriormente, possibilita a insero dinmica dos elementos e a exibilidade de obter as informaes do prximo elemento e a do anterior. A insero dinmica tem como vantagem, abstrair a quantidade de elementos que sero inseridos e utilizar somente o espao nescessrio para a operao. J a obteno das informaes tanto do prximo elemento quanto do anterior favorece a busca pelas mesmas, agilizando o processo. Outro fator que favorece o desemprenho das listas a sua criao em memria primria, a qual tem um acesso mais rpido em comparao memria secundria [Machado e Maia, 2007], que geralmente preferida para o armazenamento de arquivos, por possuir uma maior capacidade de armazenamento de dados. Apesar disso, a reduo do tempo gasto foi o fator de maior relevncia para a escolha da lista, potencializado por ser do tipo duplamente encadeada.

2.2

rvore

Os mtodos os quais sero abordados posteriormente sobre os compactadores, com particularidade em Huffman, tero uma base relevante sobre rvores. A rvore segue a mesma idia das listas porm, segundo Pinto (1990), "Uma rvore uma representao capaz de exprimir a relao de hierarquia existente entre os dados, ou a relao de composio onde um conjunto de dados subordinado a outro". Em um exemplo de rvore, pode-se pensar em um gerente de projetos que coordena uma equipe de 3 funcionrios. Seus funcionrios sero subordinados, ou podese ter tambm uma rvore genealgica. Para denir uma rvore deve-se determinar um:

19

n que pai de todos os demais denominado raiz da rvore; e cada n subsequente so ao n pai, ir formam um outro subconjunto maior ou igual zero (0) elementos. O esquema de uma rvore est representado na gura 08.

Figura 8: Esquema completo de uma rvore

2.2.1

rvore Binria

As rvores binrias so especiais porque, quando ordenadas, elas conduzem s pesquisas, inseres e excluses rpidas. Segundo Schildt (1997):
"Cada n de uma rvore consiste em ter informaes e que juntamente contem um elo ao membro esquerdo e outro elo ao membro direito".

"...a rvore binria uma forma especial de lista encadeada. Podese inserir, excluir e acessar itens em qualquer ordem. Alm disso, a operao de recuperao no destrutiva."

20

Figura 9: Representao de uma rvore binria A maioria das funes que usam rvores recursiva , pois as verses no recursivas dessas funes so muito mais complexas. Na construo de rvores de busca binria deve-se ter as seguintes observaes para que dados sejam armazenados: 1 Se a rvore for vazia, o smbolo colocado na raiz; 2 Se o elemento for menor que o smbolo da raiz, ele colocado na subrvore da esquerda, se for maior, colocado direita.

21

COMPACTADORES

Esse captulo apresenta um breve histrico das estratgias de compactao e diversos mtodos, tcnicas e codicaes da compactao, relevantes para o projeto.

3.1

Histrico da Compactao

Em vrios momentos da histria, encontramos relatos de criptogrcas , Schildt (1997) descreve que por volta de 1500 a.C. j era utilizado a escrita cifrada para guardar segredos. Os gregos e espartanos utilizavam cdigos que os ajudavam em movimentos blicos durante as Guerras Mdicas e do Peloponeso, tendo registro escrito dessa codicao em 475 a.C. Alm disso, a classe dos Patrcios Romanos utilizava a encriptao simples durante o reinado de Jlio Csar. Durante a Idade Mdia, o interesse pela criptograa diminuiu. Mesmo porque neste perodo histrico a quantidade de pessoas que sabia ler era irrisria (exceto entre os monges que ocasionalmente faziam uso deste modo de registro). Com o Renascimento Italiano, a arte da criptograa novamente oresceu, sendo aplicada s mensagens governamentais para dicultar a interpretao dos inimigos. No sculo XIX , a inveno do telgrafo eltrico e do Cdigo Morse por Samuel F. B. Morse abriu espao para a criptograa moderna, deixando de ser um processo altamente manual. O cdigo Morse foi a primeira representao de um sistema binrio (ponto e traos) de um alfabeto com ampla aplicabilidade. Essa representao dupla tambm chamada de bit. Para cada bit representado, pode-se considerar uma nica unidade lgica e para cada byte considerado um conjuto de oito (8) bits, consequentimente oito (8) unidades lgicas. Na Primeira Guerra Mundial, vrias naes desenvolveram mquinas de codicao mecnica que permitiram facilmente codicar e decodicar textos usando criptograas sosticadas e complexas. Na Segunda Guerra Mundial a codicao das

22

mensagens passa a ser utilizada no somente para esconder a informao do inimigo, mas tambm para reduzir a quantidade de informaes que era passada atravs dos rdios. Ento, surge neste momento a compactao de dados relacionanda diretamente com a criptograa, utilizada inicialmente para ns blicos, sendo expandida posteriormente. Scheidcmantel (1995), evoluiu seus algoritmos e hoje eles so altamente utilizados na proteo de informaes estratgicas das empresas e organizaes governamentais detentoras de tecnologia. A compresso de dados tambm passou a ser muito desenvolvida, porm como uma rea distinta. Grandes pesquisadores deixaram vrias contribuies que evoluram os mtodos de compactao at os dias de hoje. No demais citar nomes como Claude A. Shannon, David Huffman, Abraham Lempel, Jacob Ziv e Terry Welch, dentre outros. Neste perodo, Schildt (1997) relata que em vrios equipamentos j se encontra a compresso de dados, que pode ser implementada em hardware, software ou atravs do uso de um dispositivo especial de hardware que incorpore uma ou mais tcnicas de compresso. Os primeiros entre estes componentes, foram os concentradores de dados e os multiplexadores estatsticos, por volta dos anos 70 e incio dos anos 80. Aproximadamente a partir da metade dos anos 80, ocorreu uma revoluo na utilizao de produtos que executavam a compresso de dados nas reas de modems de rede chaveada, armazenamento em discos usado em microcomputadores e mainframes. Centenas de fabricantes de modem para rede chaveada incorporaram uma variedade de algoritmos de compresso de dados em seus produtos, enquanto diversos projetistas de software comercializaram produtos que aumentavam a capacidade de armazenamento de discos ao comprimir os dados antes de armazen-los.

3.2

Compactao

Como j descrito, a criptograa uma cincia antiga que possibilitou o surgimento da compactao de dados. Pode-se considerar que a compactao e a criptograa so correlatos, sendo que em um algoritmo de compresso encontra-se um codicador e um decodicador que aplicado sobre os dados de entrada e sada.

23

Figura 10: Esquema de codicao e decodicao Como mostra na Figura 10, um codicador tem como entrada os dados D e que por sua vez passa por um processo de compactao de dados, gerando em sua sada os dados C (dados foram criptografados). O decodicador faz o trabalho inverso, recebe como entrada os dados C e devolve como sada os dados D. O processo pode ser feito sem perdas ou com perdas de dados. Se o processo for sem perdas o resultado obtido ser exatamente o mesmo da entrada do codicador. Atualmente, comum se deparar com uma situao em que se deseja armazenar um arquivo de grande porte em algum tipo de memria, seja ela primria (memria RAM) ou secundaria (HD). Para que se possa utilizar melhor os recursos dos dispositivos, preciso minimizar de alguma forma, o espao ocupado no dispositivo utilizado. Uma maneira para que o problema acima seja resolvido, consiste em modicar (compactar) o contedo do arquivo de maneira apropriada, de tal forma que o tamanho do arquivo que menor que o original. Se o arquivo compactado for menor do que o original, pode-se armazenar a verso do arquivo modicado em vez do arquivo original. Isso representaria um ganho de memria. Geralmente uma tabela de cdigos tambm armazenada. Essa tabela de cdigos criada de modo que seja possvel codicar ou decodicar as informaes de um arquivo, sem que haja muitos problemas com a integridade dos dados. O problema referido conhecido como compresso de dados. No decorrer da histria a compresso sempre teve grande importncia, pois no incio da computao a economia de recursos, principalmente em memria, era crtica, devido ao seu elevado custo. Com o passar do tempo, esse problema no era mais o foco, entretanto, muitos programas que so utilizados atualmente requerem o uso de grande parte da memria. Tem-se como exemplo, programas que utilizam muitos recursos visuais, virtualizao, ou consultas em bancos de dados. Com isto, o problema de economia de memria ainda persiste na atualidade. Ao contrrio do que possa parecer, compactao no somente reduzir o tamanho de um arquivo; h vrias outras aplicaes que utilizam a compactao de dados.

24

Nos ltimos tempos as redes de computadores se tornaram comuns e a transferncia de dados pela rede se tornou cada vez mais frequente, assim o trfego pela rede est cando cada vez mais custosa, com isso a compresso de dados se encaixaria muito bem neste quadro, pois um nmero menor de dados a ser transmitido, implicaria em um custo de transmisso menor. A compactao tambm utilizada para agilizar a transmisso de dados basicamente de duas formas: alterando a taxa de transmisso e/ou permitindo o aumento no nmero de computadores de uma rede. Se houver um modem que opera a 9600 bps (bits por segundo), possvel que ele transmita como se estivesse a 14400 bps; Desde que ele permita a compresso de dados transmitidos, ampliando sua capacidade de transferncia de informao. Na verdade, o modem continuar transmitindo a uma taxa de transmisso de 9600 bps, mas a taxa de transferncia de informao estar ampliada para 14400 bps. Portando, a compresso de dados permite o aumento da taxa de transmisso de dados. [PINHEIRO, 2004] Outra vantagem da compresso a possibilidade de expanso de uma rede de computadores. Com a ampliao do nmero de computadores em uma rede pode ocorrer um desempenho no esperado devido ao aumento do trfego de dados, tornandose necessria uma transmisso mais rpida desses dados. H, portanto, duas alternativas: trocar os equipamentos que fazem essa transmisso por modelos mais coerentes com o cenrio, ou incorporar um algoritmo de compresso aos equipamentos existentes em seus chips desde que estes permitam essa atualizao. Como a primeira alternativa mais cara, a segunda permite que se alcance o mesmo desempenho com um custo menor. A compresso de dados, neste caso, permite a ampliao de uma rede de computadores de uma forma alternativa e mais baratas. [PINHEIRO, 2004]

3.3

Tipos de Compactao

A compresso lgica refere-se a uma estratgia para a otimizao de dados. Um exemplo o projeto de um banco de dados utilizando sequncias de bits para a representao de campos de dados. No lugar de sequncias de letras ou nmeros, utilizase bits (que so sequncias de vrios zeros e uns que a mquina entende), reduzindo signicativamente o espao de utilizao do banco de dados. Este tipo de compresso possvel ser efetivada em campos projetados para representar dados constantes,

25

como datas, cdigos e quaisquer outros campos formados por nmeros. A caracterstica lgica da compresso encontra-se no fato de os dados j serem comprimidos no momento do armazenamento, no ocorrendo sua transformao de dados estendidos para comprimidos; exemplo da representao de: 01 de Abril de 2003 : 15 bytes 01 Abr 2002 : 9 bytes 01042002 : 8 bytes A compactao fsica aquela realizada sobre dados j existentes, ao qual vericado a repetio de elementos como letras, nmeros ou smbolos, para efetivar a reduo dos mesmos. Na compresso fsica, existem dois tipos de tcnicas para sinalizar a ocorrncia de caracteres repetidos: Um deles indica o caractere (ou conjunto de caracteres) repetido atravs da substituio por um caractere especial. Outras tcnicas indicam a frequncia de repetio de caracteres e representam isto atravs de sequncias de bits.

Figura 11: Tipos de compactao

3.4
3.4.1

Tcnicas de Compresso
Tcnicas com Caracteres Indicadores

necessrio esclarecer como so codicados os caracteres indicadores (especiais) a serem substitudos pelos caracteres repetidos na compresso fsica como run-length, apesar de no serem um codicao to ecaz e no fazer parte do projeto, o entendimento pelo mesmo importante para entender codicaes que sero abordadas posteriormente.

26

3.4.1.1

Codicao Run-length

O Run Length Encoding, tambm conhecido por comprimento de leira pode ser esclarecido por Held (1992) que:
"A codicao de comprimento de leira um mtodo de compresso de dados que reduzir, sicamente qualquer tipo de sequncia de caracteres repetidos, desde que a sequncia de caracteres alcance um nvel predenido de ocorrncia. Para a situao especial onde o caractere nulo o caractere repetido a compresso de comprimento de leira pode ser vista como um processo avanado de supresso de nulos."

A Figura 15 mostra os caracteres A, B e C sendo repetidos 5 vezes, porm os nmeros do texto poderiam ser confundidos com o nmero que indica a frequncia de repeties. Para resolver esse problema, geralmente coloca-se um caractere que no ocorre no texto ou um daqueles caracteres no imprimveis,como mostra na tabela ASCII na Figura 14. Por exemplo o caractere especial STX (cdigo 00000010 binrio na tabela ASCII) utilizado para anunciar o incio do texto do texto codicado e o SI (cdigo 00001111 binrio na tabela ASCII) anuncia que o prximo nmero ser a quantidade de vezes que o caractere ir se repetir. A representao da codicao run-length est ilustrada na Figura 13.

27

Figura 12: Tabela ASCII caracteres no imprimveis

Figura 13: Tcnica run-length

28

Considerando que um caractere ocupe um byte de memria, pode-se concluir que a codicao abordada na Figura 13 ocupa 9 bytes, em vez de 15, visto isso podemos calcular que a taxa de compresso seria de 40% calculado pela seguinte formula: Taxadecompresso = (1 TamanhoComprimido/TamanhoOriginal )x100 Alm disso, deve-se ter em mente o modo de representar um inteiro como um byte, pois estamos manipulando caracteres. Um byte pode ser armazenado em um interlavo de valores entre zero (0) e 255, pois, como j foi dito anteriormente, um byte tem 8 bits e o bit representado por sistema binrio tem como base o nmero dois, ou seja, temos 28 e com isso temos 256 ocorrncias de caracteres. Visto isso, caso ocorra mais do que isso, utiliza-se representaes mais ecientes. Utilizando o run-length estendido o problema abordado anteriormente pode ser facilmente resolvido, pois a diferena desta tcnica para a run-legth simples que h um caractere especco que delimita o inicio e o m de cada sequncia de codicao. Por exemplo: SO R A 980 SI No exemplo acima SO (do ingls: shift out ) representa um caractere especial indicador de incio de uma sequncia de caracteres denida pelo usurio at que SI (do ingls: shift in) seja encontrado. Esta uma propriedade de cdigos de caracteres, como o ASCII e EBCDIC. O caractere R indica a compresso run-length, onde o caractere A indicado como repetido 980 vezes. Como o valor 980 ultrapassa o limite de 256 de um byte, torna-se necessria a utilizao de mais um byte para a representao do valor. O algoritmo da tcnica run-length simples. Consiste nos seguinte passos: 1. Inicializa-se um contador de caracteres, destinado ao controle de cada caractere, buscando a vericao de existncia de repetio; 2. Inicializa-se um contador de repeties do caractere procurado; 3. Faz-se leitura do caractere no arquivo a comprimir; 4. Incrementa-se o contador de caracteres;

29

5. Se o contador de caracteres for igual a 1, o caractere armazenado e volta-se ao passo 3 para vericao de repetio; 6. Verica-se se o caractere armazenado o que procuramos; se for, incrementase o contador de repeties; 7. Verica-se se o contador de repetio maior ou igual a 4 se for menor, gravamse os caracteres lidos no arquivo comprimido e volta-se ao passo 1; 8. Realiza-se a gravao dos caracteres indicadores no arquivo comprimido e voltase ao passo 1. A Figura 14 representa uma visualizao geral do exposto acima.

Figura 14: Processo de compresso Run-Length

30

3.4.2

Compresso Estatstica

A idia realizar uma representao otimizada de caracteres ou grupos de caracteres. Caracteres de maior frequncia de utilizao so representados por cdigos binrios pequenos, e os de menor frequncia so representados por cdigos proporcionalmente maiores. No necessrio saber qual caractere vai ser comprimido, mas sim, conhecer a probabilidade de ocorrncia de todos os caracteres sujeitos compresso [PINHEIRO 2004]. Caso no seja possvel a tabulao de todos os caracteres sujeitos compresso, utiliza-se uma tcnica para levantamento estatstico dos dados a comprimir, formando tabelas de probabilidades [PINHEIRO, 2004]. Os mtodo que utilizam muito essa idia so a codicao de Shanno-Fano e a de Huffman que sero descritas ao decorrer deste tpico.

3.4.2.1

Codicao de Shannon-Fano

Esse mtodo foi um dos primeiros algoritmos de compresso criado nos anos 40 por R. M. Fanno. Nessa tcnica, aplica-se nos dados de entrada um algoritmo de compresso probabilstico que representa os caracteres mais repetidos com menos bits que os menos repetidos [SANCHES 2001]. Em um conjunto de smbolos (ou caractere), obtm-se uma tabela de probabilidade de ocorrncia de cada caractere e aplica-se sobre esta tabela um procedimento de codicao baseado na diviso de conjunto de probabilidades para a obteno do cdigo binrio [SANCHES, 2001]. Podemos relatar da seguinte forma: Tabela 1: Conjunto binrio da tabela ASCII por codicao Smbolo Freq. de Ocorrncia A 0,5 B 0,3 C 0,1 D 0,1 Aps obter a tabela de probabilidades acima, divide-a em dois grupos cuja soma de probabilidades seja igual ou o mais prximo possvel. O primeiro grupo recebe como primeiro valor de cdigo o valor zero e o segundo recebe um.

31

Tabela 2: Codicao inicial de Shannon Fano Smbolo Freq. de Ocorrncia Cdigo A 0,5 0 B 0,3 1 C 0,1 1 D 0,1 1 O procedimento repetido at chegar ao m da tabela, dividindo-a em subgrupos de probabilidades equivalentes. Na tabela 3 o smbolo B forma o primeiro subgrupo e os demais formam o segundo. Seguindo a regra de que o primeiro recebe zero e o segundo recebe um. Tabela 3: Codicao intermediria de Shannon Fano Smbolo Freq. de Ocorrncia Cdigo A 0,5 0 B 0,3 10 C 0,1 11 D 0,1 11 Tabela 4: Codicao nal de Shannon Fano Smbolo Freq. de Ocorrncia Cdigo A 0,5 0 B 0,3 10 C 0,1 110 D 0,1 111

3.4.2.2

Codicao de Huffman

Uma das tcnicas mais populares para resolver a redundncia de codicao foi elaborada por Huffman em 1952. Por codicar individualmente os smbolos de uma fonte de informao, tendo como resultado o menor nmero possvel de smboloscdigo por smbolo-fonte [GONZALEZ, 2009]. A idia desse algoritmo parte do mesmo princpio de Shanno-Fano, codicar os smbolos de maior frequncia com menos bits e os smbolos de menor frequncia com mais. Basicamente, o algoritmo cria uma rvore binria, que apartir dela montase uma tabela de frequncias em que cada caractere representado por um conjunto de bits de tamanho variado. Supe-se que um texto seja constitudo de um conjunto de smbolos (ou caracteres). Assim, conhecida a frequncia de cada smbolo ao longo do texto e aps isso

32

atribui-se um cdigo a cada smbolo, de modo a compactar o texto todo. A atribuda que se coloca que nenhum cdigo seja prexo de algum outro, para que no haja ambiguidade de cdigo. Para cada n interno denominado v, a aresta que conduz ao lho esquerdo de v rotulada com zero, enquanto o rtulo daquela que conduz ao direito igual a um. Cada smbolo associado a uma folha da rvore. Os cdigos dos smbolos so sequncias binrias, tal que essas sequncias so denidas dependendo do caminho a ser tomando na rvore [SANCHES, 2004]. A codicao de Huffman pode ser abordada pelos seguintes passos: 1 Organizam-se os smbolos em ordem decrescente de probabilidade; 2 Agrupam-se os dois smbolos de menor probabilidade, dando origem a um novo smbolo cuja probabilidade ser igual soma das probabilidades dos smbolos que geraram. Uma "nova"fonte criada e a esta fonte d-se o nome de fonte reduzida. Essa nova fonte ter um elemento a menos em relao fonte que a gerou. Novamente, organizam-se os smbolos em ordem decrescente de probabilidade de ocorrncia; 3 Continua-se executando o passo anterior, formando novas fontes reduzidas, at que s restem dois smbolos; 4 Com os dois smbolos restantes, faz-se uma atribuio aleatria de 1 para um dos smbolos e zero para o outro. No h necessidade de nenhuma regra nessa atribuio, sendo a mesma feita a critrio do codicador; 5 Procede-se com o algoritmo, voltando dos smbolos nais at os smbolos da fonte, fazendo atribuio de zeros e uns s palavras do cdigo; 6 Ao chegar nos smbolos da fonte, a codicao est pronta. A tabela de frnquencias a seguir, um exemplo de um arquivo genrico de smbolos da tabela ASCII. A partir da tabela frequncia de smbolos conforme a Tabela 5 feita a rvore de Huffman como mostra passo a passo na Figura 15.

33

Tabela 5: Frequncia e o cdigo original dos smbolo Smbolo Freq. de Ocorrncia Cdigo ASCII g 10 0110 0111 c 15 0110 0011 b 25 0110 0010 f 25 0110 0110 h 25 0110 1000 i 25 0110 1001 e 35 0110 0101 d 40 0110 0100 a 50 0110 0001

Figura 15: Processo de codicao de Huffman - passo a passo

34

A Tabela 6 a seguir representa a codicao referente a vore da Figura 15. Temse como exemplo o cdigo do smbolo a que 01, pois a sequncia dos rtulos das arestas, desde a raiz at a. Tabela 6: Frequncia e o cdigo codicado dos smbolo Smbolo Freq. de Ocorrncia Cdigo ASCII Cdigo g 10 0110 0111 1000 c 15 0110 0011 1001 b 25 0110 0010 1110 f 25 0110 0110 1111 h 25 0110 1000 000 i 25 0110 1001 001 e 35 0110 0101 101 d 40 0110 0100 110 a 50 0110 0001 01 Observe que na tabela anterior a sequncia de cdigo foi reduzida comparada com a tabela ASCII. Para obter a taxa de compresso, basta calcular a somatrio da frequncia de cada smbolo ( f i), multiplicado pelo tamanho da sequncia de cdigo ( pi), que seria o caminho percorrido na rvore, conforme a seguinte formula:
n

TaxaCompressao = f i pi
i=1

Calculando a taxa, tem-se: Arquivo original: 10x8+15x8+...+50x8= 2000 bits Arquivo codicado: 50x2+40x3+...+10x4 = 775 bits Nota-se que houve uma reduo de 61,25%, uma melhoria consideravel em relao ao arquivo original. Uma vantagem da utilizao de cdigo de prexo a facilidade existente para executar tarefas de codicao ou decodicar. Para decodicar um texto, basta percorrer da esquerda para a direita, ao mesmo tempo em que a rvore percorrida, repetidamente, da raiz para as folhas. Nesse percurso, toma-se o caminho para a esquerda ou direita, na rvore, de acordo com o dgito correspondente encontrado no texto, zero ou um, respectivamente. Toda vez que uma folha atingida, um smbolo decodicado foi encontrado. Nesse caso, retoma-se o processo reiniciando o percurso na rvore a partir da raiz, para decodicar o prximo smbolo.

35

Por exemplo, dada uma sequncia 01000, signica que se deve tomar o caminho da esquerda da raiz, j que o primeiro digito zero (0) O digito seguinte um (1), o que conduz para a direita desse ltimo n, a folha corresponde ao smbolo a alcanada. O texto decodicado inicia-se, por a. Retoma-se ento a raiz da rvore. O prximo dgito na codicao um (1). O caminho a seguir so ts lhos direita da raiz, seguido pela adio por trs zeros (000). Com isso, atinge-se a folha correspondente a g. Assim sendo, detectou-se que o smbolo seguinte a a no texto g. Pode-se determinar a anlise da complexidade da codicao de Huffman da seguinte forma: Usa-se um Heap para armazenar o peso de cada rvore e cada iterao requer O(log n) para determinar o peso menor e inserir o novo peso. Existem O(n) iteraes, uma para cada tem. Conclui-se ento que a complexidade da codicao de Huffman O(n log n). Alm da complexidade, deve-se levar em conta o custo da busca, tal que, uma rvore T de prexo correspondente a um dado texto, em que cada smbolo si ocorre f i vezes. Seja li o comprimento do cdigo binrio do smbolo si. explicito que cada smbolo si contribui com f i.li unidades de custo, com isso se tem:
n

sim(T ) = f i li
i=1

Este valor corresponde ao custo do comprimento de caminho. Se todas as frequncias so idnticas, ento T uma rvore binria completa e c(T) o comprimento de caminho externo de T. Vale observar que a codicao de Huffman apresenta inecincia em arquivos com uma grande quantidade de elementos distintos, pois caso a rvore esteja totalmente completa e atinja o tamanho mximo, a taxa de compresso nula.

36

A Transformada Wavelet

A Transformada Wavelet pode ser a chave para a compresso eciente de imagens com uma mistura de reas de alta frequncia e baixa frequncia. Em contraste, imagens com grande quantidade de informaes uniforme podem responder melhor aos outros mtodos de compresso. Pode-se destacar a codicao de Huffman apresentada na sesso 3, uma das tcnicas mais populares para resolver as redundncias. A seguir ser descrito o surgimento das Wavelets e algumas abordagens como a Transformada Wavelet de Haar.

4.1

Surgimento das Wavelets

No incio de 1800, o matemtico francs Joseph Fourier descobriu que qualquer funo f peridica pode ser expressa como uma soma (possivelmente innita) de senos e cossenos. Estas funes so representadas gracamente como ondas, razo pela qual a expanso de Fourier de uma funo f est associada com as ondas e revela as frequncias ocultas em f. A Expanso de Fourier tem muitas aplicaes na engenharia, principalmente na anlise de sinais [SALOMON, 2008]. A desvantagem de Expanso de Fourier que ela no diz em que ponto no tempo cada frequncia est ativa em um dado sinal. Portanto, diz-se que a Expanso de Fourier oferece anlise Wavelet, que uma abordagem bem sucedida a analisar de um sinal no tempo e na frequncia. A idia fundamental por trs das wavelets analisar uma funo ou um sinal de acordo com a escala de frequncia e tempo [SALOMON, 2008]. A Transformao de Wavelet Contnua ilustra a conexo entre a anlise tempofrequncia de funes contnuas e as ondas que se concentram em uma rea pequena. Em aplicaes prticas, os dados so normalmente coletados como conjuntos de nmeros, e no como uma funo contnua, e por isso discreto. Assim, a

37

Wavelet discreta, a ferramenta utilizada na prtica, para analisar os dados digitais e comprimi-lo [SALOMON, 2008]. Apesar de existirem vrias Transformadas Wavelet a sesso a seguir ir abordar sobre a Transformada Wavelet de Haar, sendo que o foco do projeto.

4.2

Transformada Wavelet de Haar

A transformada de Haar, surgiu pelo trabalho feito por Alfred Haar em 1910-1912, pelos sistemas de funes ortogonais. Sua abordagem funciona da seguinte forma, tal que dado uma vetor com N posies, dividi-se em N /2 pares de pixels consecutivos, calcula-se a mdia e a diferena de cada par, resultando em N /2 Mdias e N /2 diferenas [SALOMON, 2008]. Em seguida, repete-se este processo nas mdias (N /2 elementos) para se obter N /4 mdias e N /4 diferenas. Isto repetido at resultar em uma mdia seguido por N - 1 diferenas [SALOMON, 2008]. Uma seqncia unidimencional com uma resoluo de quatro pixeis, tendo valores: [9 7 3 5]. Para entender como representar esta seqncia na base de Haar computando sua Transformada Wavelet, calcula-se primeiro a mdia dos valores em pares, obtendo os novos valores de menor resoluo da imagem: [8 4]. Claramente, um pouco da informao foi perdida neste processo de clculo da mdia. Para recuperar os valores dos pixeis originais a partir dos valores de mdia, precisa-se armazenar alguns coecientes de detalhes, que capturam a informao perdida. No exemplo abordado, o 1 ser o valor de escolha para o primeiro coeciente de detalhe, como na mdia computada tem-se 1 a menos que 9 e 1 a mais que 7. Este nico nmero permite recuperar os primeiros dois pixeis a imagem original de quatro pixeis. Semelhantemente, o segundo coeciente de detalhe -1, pois 4 + (1) = 3 e 4 (1) = 5. Assim, a imagem original foi decomposta em uma verso de resoluo mais baixa (dois pixeis) e um par de coecientes de detalhes. Repetindo este processo recursivamente at a decomposio completa conforme tabela a seguir:

38

Tabela 7: Decomposio em coecientes de aproximao e detalhes. Resoluo Mdia/Valores Coecientes de Detalhamento 4 [9 7 3 5] 2 [8 4] [1 -1] 1 [6] [2] Assim deniremos a Transformada de Wavelet de Haar unidimencional (tambm chamada de Decomposio de Wavelet ) da imagem original de quatro pixeis com a simples representao da mdia global da imagem original, seguido pelos coecientes de detalhe em ordem de resoluo crescente. Para a base de Haar unidimensional, a Transformada de Wavelet da nossa imagem original de quatro pixeis dada por: [6 2 1 -1]. Pode-se observar que o resultado obtido no exemplo acima no reduz a quantidade de dados existente no arquivo, porem os valores para a representao dos dados, so aproximados. Computacionalmente, a Transformada Wavelet de Haar tem uma complexidade linear, requerendo apenas O(n) operaes aritmticas. Se aplicarmos uma funo para um sinal com n amostras ser necessrio kn operaes para alguma constante k, ento o nmero total de operaes para computar a Transformada Wavelet ser: n n n 1 1 1 kn + k + k + ... + k <= Kn(1 + + + ... + ) <= 2kn = O(n) 2 4 log2 n 2 4 log2 n Apesar das Wavelets terem uma grande inuncia na codicao de imagens, udio e vdeos, podemos tambm relacion-las a compresso de arquivos texto com os conhecimentos adquiridos no captulo 3. Sabe-se que cada caractere representa 8 bits, com valores de 0 a 255, conforme a tabela ASCII. Com isso, pode-se converter facilmente letras em nmeros e vice versa. Tendo isso em mente, tem-se uma correlao entre os valores de uma imagem 8 bits (grayscale - escala de preto, branco e cinza) com os valores de um caractere de um arquivo texto.

39

ALGORITMO PROPOSTO

O algoritmo proposto neste presente projeto surgiu a partir de pesquisas sobre o comportamento da codicao de Huffman e da Transformada Wavelet de Haar. O interesse sobre a codicao de Huffman se deu devido ao comportamento dos dados observado em outros estudos quando aplicada tal codicao, visto que no nal do processo a compactao sobre os dados do tipo texto se revelou eciente e sem perda, tal que quanto menor for a variao dos elementos distintos, maior ser sua taxa de compactao. [GONZALEZ, 2009] Com o intuito de buscar outras alternativas de compactao sem perda, observouse que na aplicao da codicao da Transformada Wavelet de Haar, a representao do valor de cada dado tornou-se aproximado entre si. Considerando a variao dos dados, e a representao destes atravs de valores, quanto maior for a proximidade entre eles menor ser a variao dos elementos distintos. Assim, quando houver uma maior proximidade entre os dados disponibilizados para a codicao de Huffman, haver tambm uma maior compactao. Visto isso, surgiu a idia de associar a codicao de Huffman com a Transformada Wavelet de Haar, no intuito obter uma maior ecincia sobre a taxa de compactao.

5.1

Prova de Integridade

No procedimento de compactao e descompactao dos dados sem perda, a integridade de um arquivo essencial, visto que uma entrada Z deve ser equivalente a sua saida Z, conforme ilustrado na gura 16.

40

Figura 16: Sequncia dos processos O exemplo abaixo serviu como teste para a vericao de que o algoritmo proposto manteve a integridade dos dados. Conforme descrito no capitulo 4, quando aplicada a codicao da Transformada Wavelet de Haar, sobre uma entrada Z, sendo esta um conjunto de elementos AAAAAAAA, sero obtidas as mdias e diferenas entre os elementos. A gura abaixo ilustra o exemplo citado.

Figura 17: Processo da codicao da Transformada Wavelet de Haar Aps o processo da Transformada Wavelet de Haar, o resultado obtido pela mesma uma sequncia de elementos contendo um A e sete NULL, sendo representados por 01000001 00000000 00000000 00000000 00000000 00000000 00000000 00000000 na forma binria. Em seguida criada a rvore de codicao a partir das frequncias dos elementos, visto que ao nal da criao da mesma, o caminho da direita sibolizar o bit 0 e o da esquerda o bit 1, conforme descrito no captulo 3. Na gura 18, pode-se observar que os elementos passaram a ter uma nova representao, e a partir desta foi criada uma tabela de codicao (Tabela 8), com o intuito reduzir a sequncia obtida no processo anterior e auxiliar no retrocesso da codicao.

41

Figura 18: rvore de codicao

Tabela 8: Tabela de codicao Elemento Frequncia Cdigo Original Cdigo Codicado A 1 01000001 0 NULL 7 00000000 1 Assim da tabela 8, o elemento A representado por 0 e o NULL por 1. Desta forma, a sequncia obtida no processo de codicao da Transformada Wavelet de Haar, reduzida para o valor binrio 01111111, que na tabela ASCII representado pelo elemento DELETE (Z). Para provar que Z equivalente a Z, sabendo que aquele o resultado obtido na compactao, a partir da tabela codicada (Tabela 8) tem-se que a sequncia 01111111 (DELETE), transformada por 01000001 00000000 00000000 00000000 00000000 00000000 00000000 00000000 (A NULL NULL NULL NULL NULL NULL NULL), conforme ilustra a gura 19.

Figura 19: Transformao dos dados Com o resultado da transformao, aplicado o processo reverso da Transformada Wavelet de Haar tambm decrito no capitulo 4 deste projeto. Por m este processo ter um conjuto de elementos AAAAAAAA, ilutrado na gura 20.

42

Figura 20: Processo da decodicao da Transformada Wavelet de Haar Sabendo-se que Z uma entrada AAAAAAAA e o resultado obtido por Z na descompactao um conjunto de elementos AAAAAAAA, assim o conjunto dos elementos de Z equivalente a Z, concluido que a premissa sobre a integridade do algoritmo verdadeira.

5.2

Caractersticas do Algoritmo

No algoritmo utilizou-se a Codicao e Decodicao de Huffman para obter a compactao sem perda de dados. Tambm foram utilizadas tcnicas do processamento digital de imagens e modelagem matemtica, com base na ferramenta Wavelet para decomposio dos dados. Apesar de existirem muitas transformadas Wavelet, a escolha da Transformada Wavelet de Haar se deu devido a caractersticas como a rapidez em que executa seus processos e a possibilidade de fazer a codicao sem haver perdas de dados. J a Codicao de Huffman apresenta uma grande ecincia quanto a presena de dados redundantes, tal que o resultado obitido contm o menor nmero possvel de smbolos com a menor representao possvel de bits. O algoritmo desenvolvido processa um arquivo texto no formato .txt, sendo que os smbolos dentro do arquivo devem ser restringidos a tabela ASCII. Inicialmente o algoritmo tem duas opes: compactao e descompactao. Para que o algoritmo compacte um arquivo texto, o usurio ter que passar por linha de comando em que ir determinar parmetros, sendo, sequencialmente: o arquivo que deseja compactar, o nome que o arquivo compactado ir receber, e por m a letra

43

C ou c para identicar que o algoritmo ir fazer uma compactao. J na descompactao, o usurio passar pelos seguintes parmetros: o arquivo anteriormente compactado pelo mesmo algoritmo, a tabela codicada referente ao mesmo arquivo; e a letra D ou d, identicando que ser uma descompactao. A Figura 21 ilustra o uxo geral do algoritmo desenvolvido.

Figura 21: Fluxo do algoritmo

5.3

Implementao

O presente tpico aborda o algoritmo criado neste projeto, subdividindo-se em dois subitens: compactao e descompactao. Cada etapa dos subitens so interligadas, ou seja, a sada de uma a entrada da prxima, como mostra no uxograma a seguir.

Figura 22: Fluxo de compactao e descompactao

44

5.3.1

Compactao

A seguir ser descrito todo o processo de compactao referente ao algoritmo proposto, desde a entrada do arquivo com dados puros at a sada do arquivo compactado, iniciando-se o processo com o pr-processamento at a codicao de Huffman. Cada subtpico ter 3 itens, entrada, sada e processo.

5.3.1.1

Pr-Processamento

Entrada: Arquivo com dados puros a ser compactado; Sada: Dados processados; Processo: Inicialmente o arquivo de entrada lido, posteriormente feito todos os tipos de converses e adaptaes necessrias sobre os dados no intuito de que a prxima etapa consiga process-los.

Figura 23: Fluxo do pr-processamento No cdigo a seguir, o pr-processamento feito para cada dado lido no arquivo, sendo que na leitura o mesmo convertido implicitamente, visto que a linguagem usada no algoritmo tem suporte a tal converso.

45

Figura 24: Cdigo do pr-processamento 5.3.1.2 Transformada Wavelet de Haar

Entrada: Dados processados. Sada: Aps esse procedimento gerado como resultado um arquivo codicado. Processo: Utiliza-se funes matemticas da Transformada Wavelet de Haar. Inicialmente os dados so armazenados em um vetor unidimensional, onde aplicada a decomposio unidimensional citado no captulo 4.

Figura 25: Fluxograma da Transformada Wavelet de Haar

46

Segue o cdigo da codicao da Transformada Wavelet de Haar.

Figura 26: Cdigo da codicao da Transformada Wavelet de Haar

5.3.1.3

Codicao de Huffman

A terceira etapa a fase mais importante do algoritmo. Nela executada vrias subetapas, que so: criao da lista de smbolos, criao da rvore binria, criao da tabela codicada e a codicao. A) Criao da lista de smbolos Entrada: Arquivo compactado. Sada: Lista duplamente encadeada. Processo: O arquivo gerado na fase anterior lido smbolo a smbolo e a partir de cada leitura o smbolo armazenado em uma estrutura como mostra na gura 27:

47

Figura 27: Estrutura do n. Frequncia: Armazena a frequncia em que o smbolo aparece no arquivo; Token: Armazena o smbolo; Dir: Referncia do n a direita; Esq: Referncia do n a esquerda; Prox: Referncia do prximo n; Ant: Referncia do n anterior. Quando o primeiro elemento lido, por sua vez criada uma estrutura que guarda o smbolo e sua frequncia inicialmente como um (1), caso o arquivo no tenha acabado ainda, a leitura continua sendo feita. Em seguida, o segundo smbolo lido, porm h dois casos para esse smbolo, caso ele seja igual ao primeiro, somente incrementada a frequncia da primeira estrutura referente ao smbolo, caso contrrio, criada uma nova estrutura que armazene o novo smbolo, com frequncia inicialmente um (1). Entretanto, essa estrutura deve ser referenciada para que no haja perda de elementos, com isso, a primeira estrutura utiliza o ponteiro Prox para referenciar a segunda estrutura e a mesma utiliza o ponteiro Ant para referenciar a primeira estrutura. Percebe-se que esse procedimento a criao de uma lista duplamente encadeada. As Figuras 28 e 29 demonstram o descrito acima.

48

Figura 28: Caso dos smbolos repetidos.

Figura 29: Caso dos smbolos diferentes. A Figura 30 representa o uxograma do processo:

Figura 30: Fluxograma da criao da lista de smbolos.

49

Segue na gura 31 a funo da criao da lista de smbolos.

Figura 31: Cdigo da criao da lista de smbolos.

50

B) Criao da rvore Entrada: Lista duplamente encadeada. Sada: rvore binria. Processo: A criao da rvore um processo que parte inicialmente da lista criada na subetapa anterior. Antes de comear a criao, a lista ordenada em ordem crescente. Aps isso, inicia-se o processo da seguinte forma: 1. Verica-se h mais de um elemento da lista, caso haja passa-se ao passo 2, seno o processo interrompido; 2. Cria-se um n pai, onde seus lhos so o primeiro e segundo elemento da lista, tal que, a frequncia do n pai a soma do primeiro e do segundo elemento; 3. Retira-se a referncia entre o primeiro e o segundo elemento da lista; 4. Atribe-se o n pai como o primeiro elemento da lista; 5. Ordene-se a lista em ordem crescente e retorna-se ao passo 1. Na Figura 32 exemplica o processo de criao da arvore.

51

Figura 32: Criao da rvore. Na Figura 33 ilustra o uxograma do processo da criao da rvore:

Figura 33: Fluxograma da criao da rvore.

52

Segue o apndice da criao da rvore ilustrado na gura 34.

Figura 34: Cdigo da criao da rvore. C) Criao da tabela de Codicao Entrada: rvore binria; Sada: Tabela de Codicao; Processo: Tem como objetivo criar uma tabela de codicao a partir da rvore biria. Para que a tabela seja preenchida, inicialmente a rvore percorrida, e para cada folha encontrada, preenchida uma linha da tabela. A tabela apresenta os seguintes campos: Token: Smbolo encontrado na folha;

53

Qtd-Bit: Quantidade de bits, que representado pela quantidade de ns que percorreu at chegar a folha; Freq: Frequncia do smbolo encontrado na folha; Code-Bit: Cdigo binrio, representado por zeros e uns, sendo que para cada nvel em que a rvore desce atribudo um valor zero (0) caso a rvore for para a direita e um (1) caso a rvore v para a esquerda. Segue abaixo o uxograma do processo ilustrado na Figura 35:

Figura 35: Fluxograma da criao da tabela codicada.

54

O cdigo da tabela codicada, ilustrado na gura 36, foi criado com base na recursividade, sendo que para cada recurso, o caminho da rvore percorrido para direita ou para a esquerda, at chegar a uma folha. Ao chegar folha, o elemento encontrado preenchido na tabela com os dados obtidos no caminho da rvore.

Figura 36: Cdigo da criao da tabela codicada

55

D) Codicao Entrada: Tabela Codicada e o arquivo compactado pela transformada; Sada: Arquivo compactado, arquivo com a tabela codicada; Processo: Essa a fase em que os dados do arquivo de entrada so transformados em representaes menores, a partir da tabela de codicao criada na etapa anterior. A codicao feita a partir dos seguintes passos: 1. L-se um smbolo no arquivo de entrada, caso no tenha mais smbolos no arquivo, passa-se ao passo 5, caso contrrio passa-se ao passo 2. 2. Procura-se o smbolo na tabela. 3. Atribue-se ao buffer o Code-Bit, bit por bit, caso o buffer chegue a seu limite passa-se ao passo 4, Caso contrrio, mantm-se a distribuio do Code-Bit ao buffer. Quando o Code-Bit acabar, retorna-se ao passo 1. 4. Escreva-se no arquivo de sada o buffer. 5. Armazena-se em um arquivo a tabela codicada e nalize-se o processo. Segue abaixo o uxograma do processo ilustrado na Figura 37:

56

Figura 37: Fluxograma da codicao.

57

Aps este processo, a etapa de compactao termina por completo e tem como sada um arquivo binrio com os dados compactados e uma tabela codicada para que seja possvel a recuperao dos dados originrios. A seguir um apndice do cdigo da codicao:

Figura 38: Cdigo da codicao.

58

5.3.2

Descompactao

Nos prximos subitens ser abordado todo o processo de descompactao desde a entrada do arquivo compactado at a sada do arquivo com dados puros.

5.3.2.1

Decodicao de Huffman

A decodicao de Huffman a etapa que tem como entrada, um arquivo compactado gerado pelo algoritmo e um arquivo com a tabela de codicao referente ao arquivo compactado. A sada desta etapa um arquivo descompactado, porm os dados desse aquivo ainda no so os orginais, e por isso devem passar posteriormente pela decodicao da Transformada Wavelet de Haar para obter os mesmos. Essa etapa inicialmente tem como objetivo reconstruir a tabela de codicao e a rvore binria, para que seja possvel retroceder o processo de compactao. A) Reconstruo da Tabela Codicada Entrada: Arquivo com a tabela codicada; Sada: Tabela codicada; Processo: O arquivo de entrada com a tabela codicada lido, tal que para cada leitura feita inserida uma linha na tabela. Quando a leitura chega ao nal do arquivo a tabela totalmente reconstruda na memria. Segue abaixo o uxograma da decodicao de Huffman:

Figura 39: Fluxograma da reconstruo da tabela codicada.

59

Segue abaixo o cdigo da reconstruo da tabela codicada.

Figura 40: Cdigo da reconstruo da tabela codicada. B) Reconstruo da Arvore Binria Entrada: Tabela codicada; Sada: rvore binria; Processo: Essa uma etapa muito importante no processo da decodicao, pois a rvore binria que ir identicar os cdigos no arquivo compactado e transform-los em smbolos. Nesta etapa inicialmente processa-se os dados de cada linha da tabela, tal que para cada linha processada criado um caminho na rvore, onde na folha ocorre o armazenado do smbolo e de sua frequncia.

60

Fluxograma do processo acima est ilustrado na Figura 41:

Figura 41: Fluxograma da reconstruo da rvore binria de decodicao O cdigo da reconstruo da rvore binria de decodicao representado pela Figura 42 e 43.

61

Figura 42: Cdigo da reconstruo da rvore binria de decodicao, parte 1

62

Figura 43: Cdigo da reconstruo da rvore binria de decodicao, parte 2

63

C) Decodicao Entrada: Arquivo compactado e a rvore binria; Sada: Arquivo descompactado; Processo: Ao implementar este processo, foi identicado uma limitao da linguagem utilizada no projeto, pois a mesma no tem suporte para a identicao de um nico bit. Com isso houve a necessidade de buscar novas alternativas, como a mscara varivel que ser descrita ao decorrer do projeto. O processo inicia-se fazendo vrias leituras no arquivo compactado at que ele chegue ao seu m. Para cada leitura no arquivo, um buffer de 8 bits preenchido, que por sua vez feita uma comparao com uma mscara varivel para que seja identicado se o bit um ou zero. A mscara varivel uma estratgia para a identicao do bit. Ela tem um tamanho equivalente de 8 bits, que pode representar valores de 0 (00000000 representao binria) a 255 (11111111 representao binria), porm na estratgia foram utilizados somente valores na potncia de 2, como 00000001, 00000010, 00000100, ..., 10000000 na representao binria. A mscara criada no momento em que identicado qual a posio do bit que ser comparado. Inicialmente a mscara est zerada (00000000) e aps a identicao da posio feita a seguinte operao: M = 1x 2 p para que a posio (p) referente a mscara (M) seja preenchido com um (1). Exemplicando a situao, se a posio for zero (0) a mscara seria 1000000, tendo em vista que a posio varia de zero a sete. Aps a criao da mscara, feito uma operao binria AND, tal que se a posio do buffer e da mscara forem iguais, o retorno dessa operao ser um (1), caso contrrio zero (0). Com a identicao do bit, ser possvel agora percorrer a rvore at chegar a sua folha e identicar assim o smbolo pelo qual ser escrito no arquivo descompactado, tal que se o bit for identicado o caminho ser para a direita, caso contrrio ser para a esquerda.

64

Segue a baixo o cdigo de decodicao ilustrado na gura 44.

Figura 44: Cdigo de decodicao.

5.3.2.2

Decodicao da Transformada Wavelet de Haar

Entrada: Arquivo descompactado pela decodicao de Huffman; Sada: Arquivo descompactado com os dados originais ou puros; Processo: Inicialmente o arquivo compactado de entrada lido, tal que cada smbolo lido armazenado em um vetor, visto que os smbolos desse arquivo representa as mdias e os coecientes de detalhamento. Ao chegar no nal do arquivo, o processo de armazenamento no vetor termina e inicia-se a decodicao da transformada Wavelet de Haar que o processo inverso da decomposio, como vimos no capitulo 4.

65

Segue abaixo o uxograma ilustradopela Figura 45:

Figura 45: Fluxograma da decodicao da Transformada Wavelet de Haar. O cdigo da decodicao da Transformada Wavelet de Haar representado pela Figura 46.

Figura 46: Cdigo da decodicao da Transformada Wavelet de Haar.

66

RESULTADOS, DISCUSSO e CONCLUSES

6.1

Resultados e Discusso

Com objetivo de comparar o tempo e a taxa de compresso, foram utilizados 3 arquivos para a avaliao dos resultados referente ao algoritmo criado, sendo que cada arquivo continha quantidades diferentes de elementos distintos. A Tabela 9 ilustra os dados obtidos nos testes realizados. Tabela 9: Resuldos referntes aos arquivos de teste Quantidade de Tamanho Orig- Tamanho Tempo (s) Taxa de Comelementos dis- inal (KBytes) Compactado presso tintos (KBytes) 2 97.657 12.208 52.093615s 87.499% 4 97.657 24.415 55.654067s 74,999% 16 97.657 48.829 68.041140s 50.995% A relao inversamente proporcional entre a nmero de elementos distintos e o tempo gasto para a compactao, ocorreu devido ao uso da codicao de Huffman uma vez que ela apresenta grande ecincia quando na presena de dados com menor distino entre si, reduzindo o tamanho do arquivo e consequentemente requerendo menor tempo de compactao. Na codicao de Huffman, o tamanho da rvore formada ir representar o tamanho do cdigo formado para cada caracter. Assim, quanto maior a quatidade de smbolos distintos, maior ser sua a representao. Com isso, a busca pela determinao exata do smbolo levar maior tempo. O aumento da aproximidade entre os valores dos dados, possibilitado pelo uso da Transformada Wavelet de Haar, levou ao aumento da taxa de compresso, revelando a ecincia das tcnincas quando em associao.

67

6.2

Concluso

Conforme os resultados apresendados, o algoritmo criado apresentou uma excelente compactao dos dados, podendo atingir 87% da taxas de compresso, entretanto esse valor diretamente proporcional ao tempo gasto e variao da quantidade de elementos distintos do arquivo.

68

CONCLUSO

O conhecimento de compresso de dados surgiu com as pesquisas de criptograa, pois a compactao um esquema de codicao aplicado a uma fonte de informao de modo que a sada seja menor que os dados originais de entrada. Todo esse processo, mesmo fora das aplicaes computacionais, h muito tempo faz parte do cotidiano. Mas com o advento dos computadores digitais, a compactao de dados passou a ser obrigatria, pois houve a necessidade de se otimizar o espao em disco e reduzir o tempo de transmisso dos dados. Embora atualmente, os meios de armazenamento e de transmisso de dados dos computadores contemporneos seja bastante alto, ainda faz-se necessrio o desenvolvimento de algoritmos de compresso cada vez mais ecientes, pois o software atual muito robusto, ocupando mais espao em disco, e as informaes por ele manipuladas demasiadamente volumosas, exigindo muito dos meio de armazenamento e de transmisso. A Transformada Wavelet de Haar apesar de ser eciente na compresso de imagem, udio e vdeo, apresenta correlao tambm com os arquivos texto, entretanto a decomposio dos coecientes utilizado pela mesma, tem como objetivo tornar a representao dos valores referntes aos smbolos mais prximos. J a codicao de Huffman revela-se muito eciente para dados com uma menor quantidade de elementos ditintos, obtendo altas taxas de compresso. Conclui-se que as tcnicas utilizadas se mostraram eciente quando associadas, uma vez que uma complementou a outra favorecendo o desfecho pretendido nesse projeto.

69

REFERNCIAS

[1] SALOMON, David. A Concise Introdution to Data Compression. Undergraduate Topics in Computer Science. 2008. [2] GONZALEZ, Rafael C. WOODS, Richard E. Processamento digital de imagens. Edio 3a . So Paulo - SP. Editora Pearson Prentice Hall. 2009 [3] PINTO, Wilson Silva. Introduo ao desenvolvimento de algoritmos e estrutura de dados. So Paulo-SP. Edio 6a. Editora rica Ltda. 1990 152p. [4] SZWARCFITER, Jayme Luiz; MARKENZON, Lilian. Estruturas de dados e seus Algoritmos. Editora LTC - Livros Tcnicos e Cientcos. Rio de Janeiro - RJ. 1994.2079p. [5] INTERNET, GRAPS, Amara, Historical Perspective [online] 1995 - 2004 [Disponvel na Internet] htt p : //www.amara.com/IEEEwave/IWh istory.html [6] SCHILDT, Herbert. Borland C++ Completo e Total. Trad Jeremias Ren Descartes Pereira dos Santos. Editora Makron Boocks. So Paulo-SP. 1997. 1114p. [7] INTERNET, PINHEIRO, Jos Mauricio Santos, Tcnicas de Compactao e Compresso [online] 2004 [Disponvel na Internet] [8] INTERNET, SANCHES, Ademir Martinez. Um estudo de compactao de dados, com a implementao do mtodo de LZW [online] 2001 [Disponvel na Internet] www.comp.uems.br/trab/ p f c/downloads/2001 1. pd f [9] MULLER, Daniel Nehme. Compresso de dados, [on line] 2000 [citado em 18 06 01] Disponvel na Internet:< http://www.ulbra.tche.br/ danielnm/ed/E/polE.html > [10] TENENBAUM, Aeron M.; LANGSAM, Yedidyah; AUGENSTEIN ,Moshe J.; Estruturas de Dados Usando C. Trad Teresa Cristina Flix de Souza. Edio 1. Editora Makron Books do Brasil Editora Ltda. So Paulo-SP 1995 884p. [11] Internet, Wikipdia [Diponvel na Internet] htt p : // pt .wikipedia.org/wiki/ASCII

70

[12] VELLOSO, Paulo. Estruturas de Dados. Rio de Janeiro: Ed. Campus, 1991 [13] OLIVEIRA, Hlio Magalhes. ANALISE DE FOURIER E WAVELETS: sinais estacionrios e no estacionrios. 1 ed. [S.l.]: Editora universitria UFPE, 2007. 342 p.

Você também pode gostar