版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
多媒體技術(shù)及應(yīng)用實(shí)驗(yàn)報(bào)告班級(jí):電信0805姓名:程成學(xué)號(hào):U200812862Huffman編碼實(shí)驗(yàn)內(nèi)容1、了解BMP圖像的格式,實(shí)現(xiàn)BMP圖片格式的數(shù)據(jù)域及文件頭的分離2、熟悉Huffman編碼原理3、用C語(yǔ)言使用Huffman編碼算法對(duì)給定圖像文件進(jìn)行編解碼實(shí)驗(yàn)原理Huffman編碼:Huffman編碼是一種基于圖像統(tǒng)計(jì)特征的變長(zhǎng)編碼方法:概率小的符號(hào)用較長(zhǎng)的碼字表示,概率大的符號(hào)用較短的碼字表示。Huffman編碼的步驟:根據(jù)待編碼的符號(hào)串,統(tǒng)計(jì)各個(gè)符號(hào)的概率;根據(jù)符號(hào)的概率統(tǒng)計(jì)特征,構(gòu)建霍夫曼編碼表,即計(jì)算每個(gè)符號(hào)的編碼結(jié)果;用得到的編碼表對(duì)符號(hào)序列進(jìn)行編碼。位圖BMP文件格式文件頭:TypedefstructtagBITMAPFILEHEADER{ WORD bfType; //必須是0x424D,”BM” DWORD bfSize; //文件大小,包括結(jié)構(gòu)本身 WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; //實(shí)際圖像數(shù)據(jù)便宜量}BITMAPFILEHEADER;信息頭:typedefstructtagBITMAPINFOHEADER{DWORD biSize; //結(jié)構(gòu)本身的大?。?0LONG biWidth; //圖像寬度LONG biHeight; //圖像高度WORD biPlanes; //顯示設(shè)備的平面數(shù)目-1WORD biBitCount //描述每個(gè)象素顏色需要的位數(shù)DWORD biCompression;//是否壓縮DWORD biSizeImage;//實(shí)際的位圖數(shù)據(jù)占用的字節(jié)數(shù)LONG biXPelsPerMeter;//顯示設(shè)備的分辨率LONG biYPelsPerMeter;DWORD biClrUsed;//指定本圖象實(shí)際用到的顏色數(shù),如果該值為零,則用到的顏色數(shù)為2的biBitCount次方。DWORD biClrImportant;//重要顏色數(shù)目,如果為零,則都是重要的。}BITMAPINFOHEADER;調(diào)色板:typedefstructtagRGBQUAD{BYTE rgbBlue; //藍(lán)色分量BYTE rgbGreen; //綠色分量BYTE rgbRed; //紅色分量BYTE rgbReserved; //保留值} RGBQUAD;實(shí)現(xiàn)過(guò)程(1)huffman樹(shù)數(shù)據(jù)結(jié)構(gòu)由于huffman樹(shù)為二叉樹(shù),定義數(shù)據(jù)結(jié)構(gòu)為:structSNode{longintfreq;//頻率intdepth;//深度,編碼長(zhǎng)度 chargray; structSNode*pPar;//父結(jié)點(diǎn) structSNode*pLeft;//左結(jié)點(diǎn) structSNode*pRight;//右結(jié)點(diǎn) char*code;//字節(jié)編碼};(2)灰度概率統(tǒng)計(jì)與排序讀取文件流時(shí),跳過(guò)文件頭的54個(gè)字節(jié),直接讀取數(shù)據(jù)域,從頭到尾遍歷統(tǒng)計(jì),將統(tǒng)計(jì)結(jié)果存入freq中,通過(guò)鏈表的插入排序算法形成有序鏈表:voidaddtolist(structSNode*pNode){ if(head==NULL) //隊(duì)列為空, { head=pNode;//直接加入頭部 } else { if(pNode->freq<head->freq)//當(dāng)新加入的結(jié)點(diǎn)的頻數(shù)小于head結(jié)點(diǎn)的頻數(shù)時(shí),將新結(jié)點(diǎn)放到隊(duì)首 { pNode->pPar=head; head=pNode; } else { struct SNode*p=head; while((p->pPar!=0)&&(p->pPar->freq<pNode->freq)) { p=p->pPar; } pNode->pPar=p->pPar; p->pPar=pNode; } }}(3)Huffman樹(shù)生成與編碼同頁(yè)1圖示中編碼算法,有已知的有序單鏈表生成huffman樹(shù):voidcreatecodetree(structSNode*ptree,intlen){ intoffset,i=0; while(head!=NULL&&head->pPar!=NULL) { //取出前兩個(gè)頻數(shù)最小結(jié)點(diǎn) structSNode*p1=head; structSNode*p2=head->pPar; head=p2->pPar; offset=len+i;ptree[offset].freq=p1->freq+p2->freq;//頻率為兩者之和 ptree[offset].pLeft=p1; ptree[offset].pRight=p2; p1->pPar=&ptree[offset]; p2->pPar=&ptree[offset]; AddChildLen(&ptree[offset]);//調(diào)整樹(shù)中每個(gè)結(jié)點(diǎn)的深度 addtolist(&ptree[offset]);//將新產(chǎn)生的結(jié)點(diǎn),放到臨時(shí)隊(duì)列中 i++; } //構(gòu)建樹(shù)完成,生成編碼 for(i=0;i<256;i++) { if(nodes[i].freq>0) { createcode(&nodes[i]); } }}(4)解碼解碼過(guò)程為編碼的逆過(guò)程。編碼是從葉子節(jié)點(diǎn)自下而上編碼(即先生成最末位向前編碼),而解碼是從根節(jié)點(diǎn)自上而下,直到節(jié)點(diǎn)為葉子節(jié)點(diǎn)截止:voiddecode(){ FILE*hufin,*hufout,*imgin; structSNode*p; inti=0,n=0,num=0; charb; chardebuf[507132];//507132是當(dāng)前目錄huffma.txt文件中所有字符的個(gè)數(shù),也就是'0'和'1'的個(gè)數(shù)。 if((imgin=fopen("lena.bmp","rb"))==NULL){ printf("fileopenerror\n"); exit(1); } if((hufout=fopen("decode.bmp","wb+"))==NULL){//打開(kāi)存儲(chǔ)解碼結(jié)果的文件 printf("fileopenerror"); exit(1); } if((hufin=fopen("huffman.txt","rt+"))==NULL){//打開(kāi)存儲(chǔ)編碼結(jié)果的文件 printf("huffman.txtopenerror\n"); exit(1); } fread(debuf,sizeof(char),54,imgin);//讀出原始圖像的文件頭,圖像信息放到b中,因?yàn)槲募^沒(méi)有進(jìn)行編碼所以無(wú)需解碼直接拷貝 fwrite(debuf,sizeof(char),54,hufout);//將文件頭,圖像信息放到解碼后的文件中 //n=len+1; fgets(debuf,507132,hufin);//從文件中讀出所有的編碼序列,只讀n-1個(gè)第,并自動(dòng)使b【n】為‘\0 p=head;//每次解碼都要從樹(shù)的根節(jié)點(diǎn)開(kāi)始 for(i=0;debuf[i]!='\0';i++){//開(kāi)始解碼 switch(debuf[i]){ case'0':{ if(p->pLeft!=NULL){//如果編碼為0并且左孩子不為空,那么p指向p的左孩子。 p=p->pLeft; break; } else{//如果左孩子為空,則此結(jié)點(diǎn)為葉子結(jié)點(diǎn),取出其灰度值作為解碼結(jié)果 b=p->gray; fwrite(&b,sizeof(char),1,hufout); p=head; i=i-1;//此時(shí)i指向下一個(gè)碼元的開(kāi)始位置,但是for循環(huán)還有一個(gè)i++所以此時(shí)需要將i減一 break; } } case'1':{ if(p->pRight!=NULL){//如果編碼為1并且右孩子孩子不為空,那么p指向p的右孩子。 p=p->pRight; break; } else{//如果右孩子孩子為空,則此結(jié)點(diǎn)為葉子結(jié)點(diǎn),取出其灰度值作為解碼結(jié)果 b=p->gray; fwrite(&b,sizeof(char),1,hufout); p=head; i=i-1; break; } } default:break; } }b=p->gray;//上面的switch語(yǔ)句未能統(tǒng)計(jì)左后一個(gè)解碼結(jié)果,所以在此統(tǒng)計(jì)一下fwrite(&b,sizeof(char),1,hufout);}基于深度的圖像修實(shí)驗(yàn)內(nèi)容1、單幅圖像的修補(bǔ)2、結(jié)合彩色圖像和深度圖像的圖像修補(bǔ)實(shí)驗(yàn)原理圖像修復(fù)技術(shù):應(yīng)用圖像修復(fù)技術(shù)可以保證圖像信息的完整性,是利用圖像的空間相關(guān)性對(duì)圖像上信息缺損區(qū)域進(jìn)行填充的過(guò)程圖像修復(fù)技術(shù)的用途:藝術(shù)品修復(fù)、文物保護(hù)、影視特技制作、多余目標(biāo)物體剔除、圖像縮放、圖像的有損壓縮、視頻通信的錯(cuò)誤隱匿。圖像中常有缺失或者損壞的部分,即空白區(qū)域或者有誤的區(qū)域。圖像修補(bǔ)就是根據(jù)這些區(qū)域周圍的信息完成對(duì)空白區(qū)域的填充,以實(shí)現(xiàn)圖像的恢復(fù)。基本方法 利用深度圖的圖像修補(bǔ)1圖像的前景與背景實(shí)際場(chǎng)景中存在前景與背景的區(qū)別,前景會(huì)遮擋背景,而且前景與背景往往差距比較大。2深度圖用于表示3D空間中的點(diǎn)與成像平面距離的灰度圖。0~255表示,灰度值越大,表示場(chǎng)景距離成像平面越近,反之,灰度值越小,表示場(chǎng)景距離成像平面越遠(yuǎn)。前景的灰度值大,背景的灰度值小。如下左彩色圖,右深度圖3普通的圖像修補(bǔ)區(qū)分不了圖像的前景和背景,簡(jiǎn)單的加權(quán)求和填補(bǔ)空白點(diǎn)的方法會(huì)導(dǎo)致前景和背景的混雜。引入深度圖之后,可以利用深度圖區(qū)分圖像的前景和背景,在對(duì)背景進(jìn)行修補(bǔ)的時(shí)候,可以利用深度圖濾除那些前景參考點(diǎn)的影響,從而使背景的空白點(diǎn)只由背景點(diǎn)加權(quán)求和得到,前景亦然。實(shí)現(xiàn)過(guò)程基本思想:讀入一個(gè)像素點(diǎn),判斷其是否為空白點(diǎn);若不是空白點(diǎn),則跳過(guò)該點(diǎn),判斷下一個(gè)點(diǎn);若該點(diǎn)是空白點(diǎn),則選取以該店為中心的41*41大小的區(qū)域?yàn)閰⒖即翱冢缮鲜龅幕谏疃葓D的修補(bǔ)公式進(jìn)行修補(bǔ);重復(fù)上述步驟,對(duì)圖像中的每一個(gè)點(diǎn)都進(jìn)行如此處理,直至全圖處理完畢,則圖像修補(bǔ)完成;具體實(shí)現(xiàn)代碼(matlab):clearall;closeall;I=imread('color-blend-f034.bmp');B=imread('depth-cam4-f034.bmp');figure,subplot(1,2,1);imshow(I);title('原始圖像');[m,n,hh]=size(I);A=rgb2gray(I);I1=I;[rowind,columnind]=find(A<5);pointnum=length(rowind);rowstart=rowind-20;rowend=rowind+20;rowstart(rowstart<1)=1;rowend(rowend>m)=m;columnstart=columnind-20;columnend=columnind+20;columnstart(columnstart<1)=1;columnend(columnend>n)=n;fornum=1:pointnumx=rowind(num);y=columnind(num);basedepth=B(x,y);xstart=rowstart(num);xend=rowend(num);x1=x-xstart+1;ystart=columnstart(num);yend=columnend(num);y1=y-ystart+1;depthpos=A(xstart:xend,ystart:yend)>4&(B(xstart:xend,ystart:yend)-basedepth)<4;[locind1,locind2]=find(depthpos);W=(locind1-x1).*(locind1-x1)+(locind2-y1).*(locind2-y1)+1;TT=1./W;T=sum(TT);Aloc=I(xstart:xend,ystart:yend,1);Aloc=double(Aloc(depthpos));R=Aloc.*TT;R=sum(R);I1(x,y,1)=R/(T+0.1);Aloc=I(xstart:xend,ystart:yend,2);Al
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 手機(jī)外觀設(shè)計(jì)行業(yè)市場(chǎng)調(diào)研分析報(bào)告
- 定做生日蛋糕行業(yè)市場(chǎng)調(diào)研分析報(bào)告
- 大數(shù)據(jù)分析及應(yīng)用項(xiàng)目教程(Spark SQL)(微課版) 實(shí)訓(xùn)單匯 許慧 實(shí)訓(xùn)1-10 Hadoop集群環(huán)境搭建- Zepplin數(shù)據(jù)可視化案例分析
- 汽車發(fā)動(dòng)機(jī)消聲器產(chǎn)品供應(yīng)鏈分析
- 帶釘跑鞋產(chǎn)品供應(yīng)鏈分析
- 工業(yè)用電動(dòng)打蠟機(jī)產(chǎn)品供應(yīng)鏈分析
- 氣球駕駛用引擎產(chǎn)品供應(yīng)鏈分析
- 手持式游戲機(jī)產(chǎn)業(yè)鏈招商引資的調(diào)研報(bào)告
- 球網(wǎng)細(xì)分市場(chǎng)深度研究報(bào)告
- 皮革用蠟商業(yè)機(jī)會(huì)挖掘與戰(zhàn)略布局策略研究報(bào)告
- 第三單元綜合卷-2024-2025學(xué)年統(tǒng)編版語(yǔ)文五年級(jí)上冊(cè)
- 中型直升機(jī)交易協(xié)議(2024年)版
- 語(yǔ)法填空技巧課件-高中英語(yǔ)初高中銜接
- 道法認(rèn)識(shí)生命 課件-2024-2025學(xué)年統(tǒng)編版道德與法治七年級(jí)上冊(cè)
- 可靠性評(píng)估指標(biāo)體系構(gòu)建
- 2024年四川甘孜州事業(yè)單位招聘歷年高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
- 專題08 向量的運(yùn)算(上海中考特色題型)30題(解析版)
- 年度成本控制與削減方案計(jì)劃
- 2024內(nèi)蒙古能源發(fā)電投資集團(tuán)限公司金山第二熱電分公司招聘120人高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
- 2024市場(chǎng)營(yíng)銷知識(shí)競(jìng)賽題庫(kù)(試題及答案169題)
- 四級(jí)勞動(dòng)關(guān)系協(xié)調(diào)員題庫(kù)+答案
評(píng)論
0/150
提交評(píng)論