版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
多媒體技術(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語言使用Huffman編碼算法對(duì)給定圖像文件進(jìn)行編解碼實(shí)驗(yàn)原理Huffman編碼:Huffman編碼是一種基于圖像統(tǒng)計(jì)特征的變長編碼方法:概率小的符號(hào)用較長的碼字表示,概率大的符號(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)本身的大小-40LONG 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)過程(1)huffman樹數(shù)據(jù)結(jié)構(gòu)由于huffman樹為二叉樹,定義數(shù)據(jù)結(jié)構(gòu)為:structSNode{longintfreq;//頻率intdepth;//深度,編碼長度 chargray; structSNode*pPar;//父結(jié)點(diǎn) structSNode*pLeft;//左結(jié)點(diǎn) structSNode*pRight;//右結(jié)點(diǎn) char*code;//字節(jié)編碼};(2)灰度概率統(tǒng)計(jì)與排序讀取文件流時(shí),跳過文件頭的54個(gè)字節(jié),直接讀取數(shù)據(jù)域,從頭到尾遍歷統(tǒng)計(jì),將統(tǒng)計(jì)結(jié)果存入freq中,通過鏈表的插入排序算法形成有序鏈表: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樹生成與編碼同頁1圖示中編碼算法,有已知的有序單鏈表生成huffman樹: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)整樹中每個(gè)結(jié)點(diǎn)的深度 addtolist(&ptree[offset]);//將新產(chǎn)生的結(jié)點(diǎn),放到臨時(shí)隊(duì)列中 i++; } //構(gòu)建樹完成,生成編碼 for(i=0;i<256;i++) { if(nodes[i].freq>0) { createcode(&nodes[i]); } }}(4)解碼解碼過程為編碼的逆過程。編碼是從葉子節(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){//打開存儲(chǔ)解碼結(jié)果的文件 printf("fileopenerror"); exit(1); } if((hufin=fopen("huffman.txt","rt+"))==NULL){//打開存儲(chǔ)編碼結(jié)果的文件 printf("huffman.txtopenerror\n"); exit(1); } fread(debuf,sizeof(char),54,imgin);//讀出原始圖像的文件頭,圖像信息放到b中,因?yàn)槲募^沒有進(jìn)行編碼所以無需解碼直接拷貝 fwrite(debuf,sizeof(char),54,hufout);//將文件頭,圖像信息放到解碼后的文件中 //n=len+1; fgets(debuf,507132,hufin);//從文件中讀出所有的編碼序列,只讀n-1個(gè)第,并自動(dòng)使b【n】為‘\0 p=head;//每次解碼都要從樹的根節(jié)點(diǎn)開始 for(i=0;debuf[i]!='\0';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è)碼元的開始位置,但是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語句未能統(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)行填充的過程圖像修復(fù)技術(shù)的用途:藝術(shù)品修復(fù)、文物保護(hù)、影視特技制作、多余目標(biāo)物體剔除、圖像縮放、圖像的有損壓縮、視頻通信的錯(cuò)誤隱匿。圖像中常有缺失或者損壞的部分,即空白區(qū)域或者有誤的區(qū)域。圖像修補(bǔ)就是根據(jù)這些區(qū)域周圍的信息完成對(duì)空白區(qū)域的填充,以實(shí)現(xiàn)圖像的恢復(fù)。基本方法 利用深度圖的圖像修補(bǔ)1圖像的前景與背景實(shí)際場景中存在前景與背景的區(qū)別,前景會(huì)遮擋背景,而且前景與背景往往差距比較大。2深度圖用于表示3D空間中的點(diǎn)與成像平面距離的灰度圖。0~255表示,灰度值越大,表示場景距離成像平面越近,反之,灰度值越小,表示場景距離成像平面越遠(yuǎn)。前景的灰度值大,背景的灰度值小。如下左彩色圖,右深度圖3普通的圖像修補(bǔ)區(qū)分不了圖像的前景和背景,簡單的加權(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)過程基本思想:讀入一個(gè)像素點(diǎn),判斷其是否為空白點(diǎn);若不是空白點(diǎn),則跳過該點(diǎn),判斷下一個(gè)點(diǎn);若該點(diǎn)是空白點(diǎn),則選取以該店為中心的41*41大小的區(qū)域?yàn)閰⒖即翱?,由上述的基于深度圖的修補(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. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 駕駛員解除勞動(dòng)合同
- 直播主播就業(yè)協(xié)議
- 安防監(jiān)控土地廠房租賃合同范本
- 工業(yè)園區(qū)消防改造合同
- 企事業(yè)單位保安招聘合同
- 疫情期間廣告合同范例
- 暗股投資協(xié)議合同范例
- 銀行貸款協(xié)議三篇
- 軟件系統(tǒng)售后服務(wù)協(xié)議書(2篇)
- 退伍軍人短期療養(yǎng)活動(dòng)項(xiàng)目合同
- JJF(新) 99-2023 液體流量計(jì)現(xiàn)場校準(zhǔn)規(guī)范
- 專題28 語言綜合運(yùn)用新情境新題型(練習(xí)) -2024年高考語文二輪復(fù)習(xí)講練測(cè)(新教材新高考)(解析版)
- 湖南省長沙市雅禮集團(tuán)2023-2024學(xué)年部編版八年級(jí)歷史上學(xué)期期末歷史試卷(含答案)
- 鋼結(jié)構(gòu)拆除安全施工方案
- 計(jì)算機(jī)科學(xué)與人工智能教材
- 市政道路工程前期基本流程
- 新能源大學(xué)生職業(yè)生涯規(guī)劃書
- 化工新材料與新技術(shù)
- 共同投資光伏項(xiàng)目合作協(xié)議
- 文言文閱讀訓(xùn)練:桓寬《鹽鐵論》選(附答案解析與譯文)
- 四級(jí)公路施工組織設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論