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

下載本文檔

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

文檔簡介

多媒體數(shù)據(jù)壓縮實(shí)驗(yàn)報(bào)告篇一:多媒體實(shí)驗(yàn)報(bào)告_文獻(xiàn)壓縮

課程設(shè)計(jì)報(bào)告

實(shí)驗(yàn)題目:文獻(xiàn)壓縮程序

姓名:指導(dǎo)教師:學(xué)院:計(jì)算機(jī)學(xué)院專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)學(xué)號(hào):

提交報(bào)告時(shí)間:月日

四川大學(xué)

一,需求分析:

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

縮。

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

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

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

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

一、概要設(shè)計(jì):

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

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

3.將需壓縮文獻(xiàn)中的每個(gè)ascii碼對(duì)應(yīng)的huffman編碼按bit單位輸出生成壓縮文獻(xiàn)壓縮結(jié)束。

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

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

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

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

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

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

二、具體設(shè)計(jì):

核心算法源程序:

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(值)對(duì)應(yīng)的權(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é)點(diǎn)嚴(yán)重錯(cuò)誤,可能葉結(jié)點(diǎn)也是0!!if(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;//進(jìn)入左子樹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

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

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

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

//Type類型必須有重載>及=運(yùn)算

#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í)驗(yàn)報(bào)告二圖片的壓縮解決

計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院

XX-XX年第1學(xué)期

《多媒體技術(shù)》

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

專業(yè):

學(xué)號(hào):

姓名:

教師:

完畢日期:

多媒體技術(shù)實(shí)驗(yàn)二實(shí)驗(yàn)報(bào)告

(一)實(shí)驗(yàn)?zāi)康?/p>

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

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

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

4.運(yùn)用MATLAB程序進(jìn)行圖像壓縮;

(二)實(shí)驗(yàn)環(huán)境

1.高檔微機(jī):MPC

2.課前準(zhǔn)備:原則實(shí)驗(yàn)紙張若干張

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

4.編程工具:Matlab7.0

(三)實(shí)驗(yàn)過程及成果

實(shí)驗(yàn)原理:

1.圖像壓縮原理

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

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

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

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

(1)無損壓縮編碼種類

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

(2)有損壓縮編碼種類

預(yù)測(cè)編碼,DPCM,運(yùn)動(dòng)賠償;

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

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

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

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

(3)混合編碼。

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

本實(shí)驗(yàn)重要運(yùn)用MATLAB程序進(jìn)行離散余弦變換(DCT)壓縮和行程編碼(RunLengthEncoding,RLE)。

2.圖像壓縮的辦法:

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

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

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

用DCT壓縮圖像的過程為:

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

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

式。

用DCT解壓的過程為:

(1)對(duì)每個(gè)8×8或16×16塊進(jìn)行二維DCT反變換。

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

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

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

1)運(yùn)用DCT變換進(jìn)行圖像壓縮的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)運(yùn)用離散余弦變換進(jìn)行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.無損壓縮:(運(yùn)用行程編碼(RLE)進(jìn)行圖像壓縮原理)

壓縮原理介紹:

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論