資源描述:
《小波圖像分解與重構自編程序》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在行業(yè)資料-天天文庫。
1、用自編的程序實現(xiàn)小波圖像分解與重構收藏去年11月發(fā)布了一系列有關小波變換和圖像處理的文章,把學習小波過程中的心得體會和編寫的程序放在網(wǎng)上和大家共享交流。半年來,感謝大家的關注和幫助,在相互的討論交流中,我不斷地從大家提出的問題中拓展自己的知識面,對小波的理論及其應用有了更深入的了解和掌握。根據(jù)和大家討論交流中發(fā)現(xiàn)的問題,對博客中的程序進行修正。有關小波圖像分解和重構的兩篇文章中分享的程序,存在下列問題:(1)程序所用的小波函數(shù)只有非標準的Haar小波,其濾波器組為Lo_D=[1/21/2],Hi_D=[-1/21/2],是固化在mydwt2.m的程序中的,不能選擇其他的小波函
2、數(shù);(2)非標準的Haar小波,其分解出來的系數(shù)矩陣中,高頻系數(shù)的細節(jié)內(nèi)容(輪廓、邊緣等特征)不明顯;(3)函數(shù)mydwt2中列變換的矩陣對象為輸入矩陣,這是錯誤的,其矩陣對象應該是行變換后的緩存矩陣;(4)函數(shù)mydwt2的輸出用[LL,HL,LH,HH]表示,不是很規(guī)范,應改為[cA,cV,cH,cD]來表示,即一級小波變換輸出的系數(shù)矩陣有4個部分:平均部分、垂直細節(jié)部分、水平細節(jié)部分和對角線細節(jié)部分。(5)函數(shù)mywavedec2的輸出y是與輸入矩陣x相同大小的矩陣,并且已將N級分解后所有的平均、細節(jié)系數(shù)組合成一體的。實際上,這種定義只對Haar小波有效。(6)原程序中
3、要調(diào)用modmat函數(shù)對圖像矩陣進行修剪,使之能被2的N次方整除,主要是為了生成塔式結構圖像而設的,對上述問題修正后,這個modmat函數(shù)已不需使用了。針對上述問題,我對程序作了修正,發(fā)布在今天的3篇文章里,請大家點擊查看。新修正的程序更為簡潔易懂,功能也有所增強,可以用任意的小波函數(shù)進行小波分解,可根據(jù)小波分解系數(shù)矩陣重構出指定分解級的低頻系數(shù)和原始圖像。1、《小波圖像分解與重構程序存在的問題與解決辦法》??????上一篇文章中我們實現(xiàn)了小波的一維、二維信號分解與重構,其中的二維信號分解與重構,只要稍作修改,就可以實現(xiàn)圖像的分解和重構了。修改的工作,主要是對圖像信號進行規(guī)范
4、化處理、數(shù)據(jù)格式轉換和繪圖細節(jié)處理等。???????簡單起見,我們從黑白(灰度)圖像的分解、重構說起,因為彩色圖像的處理要復雜一點。在本文中,我們使用著名的Lena圖作為原始圖像。圖1首先,為了實現(xiàn)圖像的N層分解,對一幅m行n列的黑白圖像,我們要對其進行規(guī)范化處理,使其能被2的N次方整除。以下的modmat()函數(shù)實現(xiàn)此功能:?functiony=modmat(x,dim)%函數(shù)MODMAT()對輸入矩陣x進行規(guī)范化,使其行列數(shù)均能被2^dim整除%輸入?yún)?shù):x——r*c維矩陣;%??????????dim——矩陣重構的維數(shù)%輸出參數(shù):y——rt*ct維矩陣,mod(rt,2
5、^dim)=0,mod(ct,2^dim)=0[row,col]=size(x);?????????%求出輸入矩陣的行列數(shù)row,colrt=row-mod(row,2^dim);???%將row,col分別減去本身模2^dim得到的數(shù)ct=col-mod(col,2^dim);???%所得的差為rt、ct,均能被2^dim整除y=x(1:rt,1:ct);????????????%輸出矩陣y為輸入矩陣x的rt*ct維子矩陣?然后,將規(guī)范化后的圖像的數(shù)據(jù)格式由適合顯示圖像的uint8格式轉換為適合數(shù)值處理的double格式,再調(diào)用二維小波分解函數(shù)進行圖像分解,最后為了清晰地顯
6、示分解圖像的塔式結構,在圖像的相應區(qū)域繪制若干分界線。具體程序如下:?functiony=mywavedec2(x,dim)%函數(shù)MYWAVEDEC2()對輸入矩陣x進行dim層分解,得到相應的分解系數(shù)矩陣y%輸入?yún)?shù):x——輸入矩陣;%??????????dim——分解層數(shù)。%輸出參數(shù):y——分解系數(shù)矩陣。x=modmat(x,dim);???????????%首先規(guī)范化輸入矩陣,使其行列數(shù)均能被2^dim整除subplot(121);imshow(x);title('原始圖像');??%畫出規(guī)范化后的源圖像[m,n]=size(x);?????????????%求出規(guī)范化
7、矩陣x的行列數(shù)xd=double(x);??????????????%將矩陣x的數(shù)據(jù)格式轉換為適合數(shù)值處理的double格式fori=1:dim???xd=modmat(xd,1);???[dLL,dHL,dLH,dHH]=mydwt2(xd);??%矩陣小波分解???tmp=[dLL,dHL;dLH,dHH];?????????%將分解系數(shù)存入緩存矩陣???xd=dLL;????????????????????????%將緩存矩陣左上角部分的子矩陣作為下一層分解的源矩陣???[row,col]=siz