版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 贛西科技職業(yè)學(xué)院《生物質(zhì)能源概論》2023-2024學(xué)年第一學(xué)期期末試卷
- 《高考備考》課件
- 《小細(xì)胞肺癌》課件
- 七年級(jí)語文上冊(cè)第五單元?jiǎng)游锸澜?7動(dòng)物笑談高效教案新人教版
- 三年級(jí)數(shù)學(xué)下冊(cè)六認(rèn)識(shí)分?jǐn)?shù)第4課時(shí)吃西瓜教案北師大版
- 《蠶沙綜合利用》課件
- 《課件互聯(lián)網(wǎng)》課件
- 《汽車行業(yè)銷售情況》課件
- 小學(xué)生拗九節(jié)課件
- 股票資產(chǎn)委托管理協(xié)議(4篇)
- 機(jī)械設(shè)備招投標(biāo)授權(quán)委托書模板
- 科研年終總結(jié)匯報(bào)
- 汽車維修安全應(yīng)急預(yù)案范文(5篇)
- 安全教育教案大班40篇
- 2024-2030年中國清潔供熱行業(yè)發(fā)展趨勢(shì)與投資前景預(yù)測(cè)報(bào)告版
- 2025屆上海市交大附中嘉定分校物理高二上期末達(dá)標(biāo)檢測(cè)試題含解析
- 放飛心靈 激揚(yáng)青春-中職生心理健康學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 行政事業(yè)單位內(nèi)部控制規(guī)范專題講座
- 叉車工安全培訓(xùn)資料
- 不良反應(yīng)事件及嚴(yán)重不良事件處理的標(biāo)準(zhǔn)操作規(guī)程藥物臨床試驗(yàn)機(jī)構(gòu)GCP SOP
- 2024年6月浙江高考?xì)v史試卷(含答案解析)
評(píng)論
0/150
提交評(píng)論