多媒體數(shù)據(jù)壓縮實驗報告_第1頁
多媒體數(shù)據(jù)壓縮實驗報告_第2頁
多媒體數(shù)據(jù)壓縮實驗報告_第3頁
多媒體數(shù)據(jù)壓縮實驗報告_第4頁
多媒體數(shù)據(jù)壓縮實驗報告_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

多媒體數(shù)據(jù)壓縮實驗報告篇一:多媒體實驗報告_文獻壓縮

課程設計報告

實驗題目:文獻壓縮程序

姓名:指導教師:學院:計算機學院專業(yè):計算機科學與技術(shù)學號:

提交報告時間:月日

四川大學

一,需求分析:

有兩種形式的重復存在于計算機數(shù)據(jù)中,文獻壓縮程序就是對這兩種重復進行了壓

縮。

一種是短語形式的重復,即三個字節(jié)以上的重復,對于這種重復,壓縮程序用兩個數(shù)字:1.重復位置距現(xiàn)在壓縮位置的距離;2.重復的長度,來表達這個重復,假設這兩個數(shù)字各占一種字節(jié),于是數(shù)據(jù)便得到了壓縮。

第二種重復為單字節(jié)的重復,一種字節(jié)只有256種可能的取值,因此這種重復是必然的。給256種字節(jié)取值重新編碼,使出現(xiàn)較多的字節(jié)使用較短的編碼,出現(xiàn)較少的字節(jié)使用較長的編碼,這樣一來,變短的字節(jié)相對于變長的字節(jié)更多,文獻的總長度就會減少,并且,字節(jié)使用比例越不均勻,壓縮比例就越大。

編碼式壓縮必須在短語式壓縮之后進行,由于編碼式壓縮后,原先八位二進制值的字節(jié)就被破壞了,這樣文獻中短語式重復的傾向也會被破壞(除非先進行解碼)。另外,短語式壓縮后的成果:那些剩余的未被匹配的單、雙字節(jié)和得到匹配的距離、長度值仍然含有取值分布不均勻性,因此,兩種壓縮方式的次序不能變。

本程序設計只做了編碼式壓縮,采用Huffman編碼進行壓縮和解壓縮。Huffman編碼是一種可變長編碼方式,是二叉樹的一種特殊轉(zhuǎn)化形式。編碼的原理是:將使用次數(shù)多的代碼轉(zhuǎn)換成長度較短的代碼,而使用次數(shù)少的能夠使用較長的編碼,并且保持編碼的唯一可解性。根據(jù)ascii碼文獻中各ascii字符出現(xiàn)的頻率狀況創(chuàng)立Huffman樹,再將各字符對應的哈夫曼編碼寫入文獻中。同時,亦可根據(jù)對應的哈夫曼樹,將哈夫曼編碼文獻解壓成字符文獻.

一、概要設計:

壓縮過程的實現(xiàn):

壓縮過程的流程是清晰而簡樸的:1.創(chuàng)立Huffman樹2.打開需壓縮文獻

3.將需壓縮文獻中的每個ascii碼對應的huffman編碼按bit單位輸出生成壓縮文獻壓縮結(jié)束。

其中,環(huán)節(jié)1和環(huán)節(jié)3是壓縮過程的核心。

?環(huán)節(jié)1:這里所要做工作是得到Huffman數(shù)中各葉子結(jié)點字符出現(xiàn)的頻率并進行創(chuàng)立.統(tǒng)計字符出現(xiàn)的頻率能夠有諸多辦法:如每次創(chuàng)立前掃描被創(chuàng)立的文獻,“實時”的生成各字符的出現(xiàn)頻率;或者是創(chuàng)立前即做好統(tǒng)計.這里采用的是前一種辦法。

?環(huán)節(jié)3:將需壓縮文獻中的每個ascii碼對應的huffman編碼按bit單位輸出.這是本壓縮程序中最核心的部分:這里涉及“轉(zhuǎn)換”和“輸出”兩個核心環(huán)節(jié):“轉(zhuǎn)換”部分大可不必去通過遍歷Huffman樹來找到每個字符對應的哈夫曼編碼,能夠?qū)⒚總€Huffman碼值及其對應的ascii碼寄存于以下所示的結(jié)構(gòu)體中:

解壓縮過程的實現(xiàn):

如果說,壓縮的過程能夠通過查找codeList來加速實現(xiàn)的話,而解壓縮則必須通過查找huffman樹才干加以實現(xiàn).查找的過程是簡樸的,能夠根據(jù)

huffman樹的性質(zhì)來做,當haffCode的現(xiàn)在bit位為0時,則向左枝展開搜索;現(xiàn)在bit位為1時,則向右枝展開搜索,當碰到葉子結(jié)點時,則輸出haffCode對應的asciiCode。

二、具體設計:

核心算法源程序:

Huffman樹建立源程序:

//-------------------------------------------------------------//huffmantree.h//霍夫曼樹

#ifndefHUFFMANTREE#defineHUFFMANTREE

#defineDefaultsize300

#include#include"bintree.h"#include"heap.h"

classCode{

public:

intcode;Code*link;

Code(intc=0,Code*l=NULL):code(c),link(l){};};

classCharNameNode{

public:

unsignedcharcharname;//要這樣才行Code*link;

CharNameNode(unsignedcharc=0,Code*l=NULL):charname(c),link(l){};};

template

classHuffmanTree:publicBinaryTree{

public:

intkey;

HuffmanTree(){};

HuffmanTree(HuffmanTree&ht1,HuffmanTree&ht2){

Typetemp=0;//可能有變key=ht1.key+ht2.key;

root=newBinTreeNode(0,Copy(ht1.root),Copy(ht2.root));}

voidBuild(int*fr,Type*value,intn,HuffmanTree&newtree);

voidPath(BinTreeNode*start,Code*first,Code*last,CharNameNode*Node,int&i);//一種數(shù)組};

template

voidHuffmanTree::Build(int*fr,Type*value,intn,HuffmanTree&newtree)

{//fr為value(值)對應的權(quán)

inti;

HuffmanTreefirst,second;

HuffmanTreeNode[Defaultsize];MinHeap>hp;assert(n>=0&&nNode[i].root=newBinTreeNode(value[i],NULL,NULL);Node[i].key=fr[i];}

hp=MinHeap>(Node,n);for(i=0;ihp.RemoveMin(first);hp.RemoveMin(second);

HuffmanTree*temp=newHuffmanTree(first,second);hp.Insert(*temp);}

hp.RemoveMin(newtree);}

template

voidHuffmanTree::Path(BinTreeNode*start,Code*first,Code*last,CharNameNode*Node,int&i)//一種數(shù)組{

if(start==NULL)return;

//if(start->GetData()!=0)//是葉結(jié)點嚴重錯誤,可能葉結(jié)點也是0?。f(start->GetLeft()==NULL&&start->GetRight()==NULL){

Node[i].charname=start->GetData();Node[i].link=NULL;if(first==NULL)return;

Node[i].link=newCode(first->code);Code*p=first->link,*q=Node[i].link;while(p!=NULL){

q->link=newCode(p->code);q=q->link;p=p->link;}

q->link=NULL;i++;return;}

Code*temp=newCode;//進入左子樹assert(temp);if(first==NULL)

first=last=temp;else{

last->link=temp;last=last->link;}

Path(start->GetLeft(),first,last,Node,i);

last->code=1;

Path(start->GetRight(),first,last,Node,i);temp=first;

if(first==last){

deletelast;

first=last=NULL;return;}

while(temp->link!=last)temp=temp->link;

temp->link=NULL;deletelast;last=temp;}

#endif

實現(xiàn)二叉樹的算法源程序:

//---------------------------------------------------------------------//bintree.h

//用指針實現(xiàn)的二叉樹

//Type類型必須有重載>及=運算

#ifndefBINTREE#defineBINTREE

#include#include

intMax(inta,intb){

returna>b?a:b;}

templateclassBinaryTree;

template

e>classBinTreeNode{

friendclassBinaryTree;public:

BinTreeNode():leftchild(NULL),rightchild(NULL){};

BinTreeNode(Typeitem,BinTreeNode*left=NULL,BinTreeNode*right=NULL)

:data(item),leftchild(left),rightchild(right){};TypeGetData()const{returndata;}

BinTreeNode*GetLeft()const{returnleftchild;}BinTreeNode*GetRight()const{returnrightchild;}voidSetData(constType&item){data=item;}

voidSetLeft(BinTreeNode*L){leftchild=L;}voidSetRight(BinTreeNode*R){rightchild=R;}private:

BinTreeNode*leftchild,*rightchild;Typedata;

篇二:多媒體實驗報告二圖片的壓縮解決

計算機科學與技術(shù)學院

XX-XX年第1學期

《多媒體技術(shù)》

實驗二:圖像壓縮算法實現(xiàn)

專業(yè):

學號:

姓名:

教師:

完畢日期:

多媒體技術(shù)實驗二實驗報告

(一)實驗目的

1.理解有損壓縮和無損壓縮的概念;

2.理解圖像壓縮的重要原則和目的;

3.理解幾個慣用的圖像壓縮編碼方式;

4.運用MATLAB程序進行圖像壓縮;

(二)實驗環(huán)境

1.高檔微機:MPC

2.課前準備:原則實驗紙張若干張

3.操作系統(tǒng):WindowsXX或WindowsXP中文版

4.編程工具:Matlab7.0

(三)實驗過程及成果

實驗原理:

1.圖像壓縮原理

圖像壓縮重要目的是為了節(jié)省存儲空間,增加傳輸速度。圖像壓縮的抱負原則是信息丟失最少,壓縮比例最大。不損失圖像質(zhì)量的壓縮稱為無損壓縮,無損壓縮不可能達成很高的壓縮比;損失圖像質(zhì)量的壓縮稱為有損壓縮,高的壓縮比是以犧牲圖像質(zhì)量為代價的。壓縮的實現(xiàn)辦法是對圖像重新進行編碼,但愿用更少的數(shù)據(jù)表達圖像。信息的冗余量有許多個,如空間冗余,時間冗余,構(gòu)造冗余,知識冗余,視覺冗余等,數(shù)據(jù)壓縮實質(zhì)上是減少這些冗余量。高效編碼的重要辦法是盡量去除圖像中的冗余成分,從而以最小的碼元包含最大的圖像信息。編碼壓縮辦法有許多個,從不同的角度出發(fā)有不同的分類辦法,從信息論角度出發(fā)可分為兩大類。

(1).冗余度壓縮辦法,也稱無損壓縮、信息保持編碼或嫡編碼。具體說就是解碼圖像和壓縮編碼前的圖像嚴格相似,沒有失真,從數(shù)學上講是一種可逆運算。

(2)信息量壓縮辦法,也稱有損壓縮、失真度編碼或煙壓縮編碼。也就是說解碼圖像和原始圖像是有差別的,允許有一定的失真。

應用在多媒體中的圖像壓縮編碼辦法,從壓縮編碼算法原理上能夠分為下列3類:

(1)無損壓縮編碼種類

哈夫曼(Huffman)編碼,算術(shù)編碼,行程(RLE)編碼,Lempelzev編碼。

(2)有損壓縮編碼種類

預測編碼,DPCM,運動賠償;

頻率域辦法:正交變換編碼(如DCT),子帶編碼;

空間域辦法:統(tǒng)計分塊編碼;

模型辦法:分形編碼,模型基編碼;

基于重要性:濾波,子采樣,比特分派,向量量化;

(3)混合編碼。

有JBIG,H261,JPEG,MPEG等技術(shù)原則。

本實驗重要運用MATLAB程序進行離散余弦變換(DCT)壓縮和行程編碼(RunLengthEncoding,RLE)。

2.圖像壓縮的辦法:

1.有損壓縮:(離散余弦變換(DCT)圖像壓縮原理)

壓縮原理介紹:離散余弦變換DCT在圖像壓縮中含有廣泛的應用。

和相似圖像質(zhì)量的其它慣用文獻格式(如GIF(可交換的圖像文獻格式),TIFF(標簽圖像文獻格式),PCX(圖形文獻格式))相比,JPEG是現(xiàn)在靜態(tài)圖像中壓縮比最高的。JPEG比其它幾個壓縮比要高得多,而圖像質(zhì)量都差不多(JPEG解決的圖像只有真彩圖和灰度圖)。正是由于其高壓縮比,使得JPEG被廣泛地應用于多媒體和網(wǎng)絡程序中。JPEG有幾個模式,其中最慣用的是基于DCT變換的次序型模式,又稱為基本系統(tǒng)(Baseline)。

用DCT壓縮圖像的過程為:

(1)首先將輸入圖像分解為8×8或16×16的塊,然后對每個子塊進行二維DCT變換。

(2)將變換后得到的量化的DCT系數(shù)進行編碼和傳送,形成壓縮后的圖像格

式。

用DCT解壓的過程為:

(1)對每個8×8或16×16塊進行二維DCT反變換。

(2)將反變換的矩陣的塊合成一種單一的圖像。

余弦變換含有把高度有關(guān)數(shù)據(jù)能量集中的趨勢,DCT變換后矩陣的能量集中在矩陣的左上角,右下的大多數(shù)的DCT系數(shù)值非??拷?。對于普通的圖像來說,舍棄這些靠近于0的DCT的系數(shù)值,并不會對重構(gòu)圖像的畫面質(zhì)量帶來明顯的下降。因此,運用DCT變換進行圖像壓縮能夠節(jié)省大量的存儲空間。壓縮應當在最合理地近似原圖像的狀況下使用最少的系數(shù)。使用系數(shù)的多少也決定了壓縮比的大小。在壓縮過程的第2步中,能夠合理地舍棄某些系數(shù),從而得到壓縮的目的。在壓縮過程的第2步,還能夠采用RLE和Huffman編碼來進一步壓縮。

離散余弦(DCT)壓縮代碼:

1)運用DCT變換進行圖像壓縮的MATLAB程序:

RGB=imread('1.JPG');

I=rgb2gray(RGB);

J=dct2(I);

imshow(log(abs(J),[]),colormap(jet(64)),colorbar

J(abs(J)K=idct2(J);

figure,imshow(I);

figure,imshow(K,[0,255]);

2)運用離散余弦變換進行JPEG圖像壓縮:

RGB=imread('1.JPG');

I=rgb2gray(RGB);

J=dct2(I);

imshow(log(abs(J),[]),colormap(jet(64)),colorbar

J(abs(J)K=idct2(J);

figure,imshow(I);

figure,imshow(K,[0,255]);

2)

I=imread('1.JPG');

I=rgb2gray(I);

I=im2double(I);

T=dctmtx(8);

B=blkproc(I,[88],'P1*x*P2',T,T');

mask=[11110000

11100000

11000000

10000000

00000000

00000000

00000000

00000000];

B2=blkproc(B,[88],'P1.*x',mask);

I2=blkproc(B2,[88],'P1*x*P2',T',T);

Subplot(1,2,1);

Imshow(I);title('原圖像');

Subplot(1,2,2);

Imshow(I2);title('壓縮圖像');

截圖:原圖像與壓縮圖像

2.無損壓縮:(運用行程編碼(RLE)進行圖像壓縮原理)

壓縮原理介紹:

RLE(Run-LengthEncoding行程長度編碼)算法是Windows系統(tǒng)中使用的一種圖像文獻壓縮辦法,其基本思想是:將一掃描行中顏色值相似的相鄰像素用兩個字節(jié)來表達,第一

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論