【正文】
步驟1:使用正向離散小波變換把空間域表示的圖變換成頻率域表示的圖; 步驟2:使用wavedec2函數(shù)對圖像進行分解,這個函數(shù)對于圖像細節(jié)系數(shù)的提取是最佳的; 步驟3:使用函數(shù)對量化系數(shù)進行編碼; 步驟4:基于小波變換矩陣算法的小波變換的實現(xiàn)。4. 基于小波變換矩陣算法的實現(xiàn)首先讀取圖像文件,然后利用wavedec2函數(shù)對圖像進行小波分解,采用函數(shù)appcoef函數(shù)從分解系數(shù)中取近似系數(shù),即利用語句cal=appcoef2(c,s,39。39。,1)。再具體對水平、垂直和斜線方向進行提取,然后利用提取的系數(shù),顯示壓縮后的圖像,并顯示出壓縮后圖像的大小。導入圖片利用wavedec2函數(shù)對圖像進行小波分解,得到分解系數(shù)顯示分解后低頻和高頻信息對圖像再進行一次分解,得到第一次壓縮的信息,并顯示出來利用圖像分解系數(shù),得到第二次壓縮的信息,并顯示壓縮后的圖片 小波變換流程5. 小波變換實現(xiàn)的函數(shù)dwt2是二維單尺度小波變換,其可以通過指定小波或者分解濾波器進行二維單尺度小波分解。而wavedec2是二維多尺度小波分解。dwt2的一種語法格式是[cA,cH,cV,cD]=dwt2(X,39。wname39。);而對應的wavedec2的語法格式是[C,S]=wavedec2(X,N,39。wname39。),其中N為大于1的正整數(shù)。也就是說dwt2只能對某個輸入矩陣X進行一次分解,而wavedec2可以對輸入矩陣X進行N次分解。 用于得到某一層次的小波系數(shù)的命令主要有以下幾個:detcoef2是求得某一層次的細節(jié)系數(shù),其中的一種格式是[H,V,D]=detcoef2‘a(chǎn)ll‘,C,S,N)。就是從分解系數(shù)[C,S]中提前第N層所有的細節(jié)系數(shù)(包括水平,垂直,對角,分別存入數(shù)組H,V,D)。而appcoef2是求得某一層次的近似系數(shù),程序中用到的是A=appcoef2(C,L,’wname’,N),是用小波‘wname‘從分解系數(shù)[C,L]中提取第N層近似系數(shù);還用到了wcodemat函數(shù),格式為 y=wcodemat(X,NB,OPT,ABSOLl) 。該函數(shù)是用來對矩陣X進行量化編碼,它返回矩陣X的一個編碼矩陣,在編碼中,把矩陣X中元素絕對值最大的作為NB(NB是一個整數(shù)),絕對值最小的作為1,39。row39。時,做行編碼。當OPT為39。col39。時,做列編碼,當OPT為39。mat39。時,做全局編碼,即把整個矩陣中的元素絕對值最大的元素作為NB,最小的作為1,該函數(shù)返回輸入矩陣X的一個編碼版本,為非0時,返回X的ABS(X)。 系統(tǒng)的具體實現(xiàn)及操作本界面設計的總體思路是通過一個主窗口和其它的子窗口關聯(lián)。在主窗口中,建立兩個圖像處理的菜單,通過單擊菜單去調用一個新的子窗口,在子窗口中實現(xiàn)相應的操作。 圖像壓縮系統(tǒng)界面圖像壓縮系統(tǒng)中有菜單操作還有按鈕操作。 文件及幫助操作的下拉菜單首先調用原始圖像,從電腦中任意選取一張原始圖像,這里選的圖像名稱是“”,(a)所示,(b),實現(xiàn)代碼如下: [filename, pathname] = uigetfile( ... {39。*.bmp。*.jpg。*.png。*.jpeg39。, 39。Image Files (*.bmp, *.jpg, *.png, *.jpeg)39。 ... 39。*.*39。, 39。All Files (*.*)39。}, ... 39。Pick an image39。)。fpath=[pathname filename]。 [I,map]=imread(fpath)。 figure。%用figure將圖像顯示出來 image(I)。 (a)選擇圖像 (b)打開的原始圖像 選擇圖像及打開的原始圖像然后對選取的圖像進行DCT系數(shù)的提取,代碼如下:D = dct2(rgb2gray(I))。 axes()。imshow(log(abs(D)))。title(39。DCT系數(shù)39。)。,在頻域中,高亮度的為絕對值大的系數(shù),能量主要集中在低頻成分中,即圖像的左上角。這一點和小波分解類似,能量主要集中在近似系數(shù)中。下面我們看一下左上的1/4塊系數(shù)矩陣所占得能量成分,這里能量用標準差定義。%接上例D(90:100,23:50) = 0。 %丟棄部分高頻分量axes()。imshow(D)。title(39。丟棄部分高頻的DCT系數(shù)39。)。subf=f(1:128,1:128)per=norm(subf)/norm(D)per= 可見在省去75%的系數(shù)的情況下,該分解仍然占有很高的能量成分,但這種掩碼方式有一個問題,以為在左側和上側的邊界也是低頻系數(shù),這種掩碼把這部分系數(shù)省略了,在使用DCT進行壓縮圖像中,一般是去分解系數(shù)的上三角陣。%接上例for i=1:256 for j=1:256 if(i+j)256 repf(i,j)=0 end endendper2=norm(repf)/norm(D)per2= I2 = idct2(repf)。 %頻譜進行逆變換axes()。image(wcodemat(I2))。title(39。壓縮后的圖像39。)。 經(jīng)DCT變換后的圖像,在省去一半系數(shù)的情況下,圖像的效果與原圖像幾乎沒有什么差別,只是在光線等非常細節(jié)的部分損失了一些細節(jié)信息。在DCT變換壓縮模塊中我們知道基于離散余弦變換的圖像壓縮算法,其基本思想是在頻域對信號進行分解,去除信號點之間的相關行,并找出重要系數(shù),濾去次要系數(shù),以達到壓縮的效果,但該方法在處理過程中并不能提供時域的信息,在比較關系時域特性的時域顯得無能為力。在這個方面,小波分析的就有優(yōu)勢多了,由于小波分析固有的時頻特性,可以在時頻兩個方向對系數(shù)進行處理,這樣就可以對我們感興趣的部分提供不同的壓縮精度。下面是利用小波變化的時頻特性來達到壓縮的效果,可以簡單的對比下看出小波變換在應用這類問題上的優(yōu)越性。設定剛才調用原始圖像為全局變量I,然后對圖像進行小波變換,代碼如下:[c,s]=wavedec2(I,2,39。39。)。cal=appcoef2(c,s,39。39。,1)。%用小波39。39。從分解系數(shù)[c,s]中提取第一層的近似系數(shù)ch1=detcoef2(39。h39。,c,s,1)。%水平方向的細節(jié)系數(shù)cv1=detcoef2(39。v39。,c,s,1)。%垂直方向的細節(jié)系數(shù)cd1=detcoef2(39。d39。,c,s,1)。%斜線方向的細節(jié)系數(shù)a1=wrcoef2(39。a39。,c,s,39。39。,1)。h1=wrcoef2(39。h39。,c,s,39。39。,1)。v1=wrcoef2(39。v39。,c,s,39。39。,1)。d1=wrcoef2(39。d39。,c,s,39。39。,1)。 %各頻率成分重構c1=[a1,h1。v1,d1]。axes()。image(c1)。axis square。title(39。分解后低頻和高頻信息39。)。cal=appcoef2(c,s,39。39。,1)。cal=wcodemat(cal,440,39。mat39。,0)。cal=*cal。axes()。image(cal)。colormap(map)。axis square。title(39。第一次壓縮圖像39。)。disp(39。第一次壓縮后圖像的大小為:39。),whos(39。cal39。)ca2=appcoef2(c,s,39。39。,2)。ca2=*ca2。axes()。image(ca2)。colormap(map)。axis square。title(39。第二次壓縮圖像39。)。disp(39。第二次壓縮后圖像大小為:39。)。whos(39。ca239。) 經(jīng)過小波變換后的圖像 ,分解后圖像的低頻信息主要集中在左上角,高頻信息細節(jié)信息主要集中在右下角部分,我們可以通過對局部細節(jié)系數(shù)的處理來達到局部壓縮的效果。通過圖像可以比較得出經(jīng)過一次壓縮后的圖像基本上沒有損失什么信息,再經(jīng)過一次壓縮后可以看到在邊緣部分損失了一些細節(jié)信息,也就是說,在實際的應用中,可以根據(jù)不同的需求,來決定對圖像進行多層變換,而且作用閾值的方式可能也不會是將局部細節(jié)系數(shù)全部清零,而且,作用的閾值可以是方向相關的,即在三個不同方向的細節(jié)系數(shù)上作用不同的閾值。而且我們可以比較原始圖像I與每次壓縮后的索引圖像占用的內存空間和顯示的圖像來考察壓縮效果。壓縮前圖像I的大小 Name Size Bytes Class I 600x800x3 1440000 uint8 arrayGrand total is 1440000 elements using 1440000 bytes第一次壓縮后圖像的大小為: Name Size Bytes Class cal 307x407 999592 double arrayGrand total is 124949 elements using 999592 bytes從上面的數(shù)據(jù)可以知道第一次壓縮后的圖像效果是比較理想的. 經(jīng)過一次壓縮后圖像在存儲時共占用 999592 bytes內存空間, 而原來的圖像I在存儲時要占用1440000 bytes 內存空間, 。再進行一次壓縮之后。 第二次壓縮后的圖像壓縮前圖像I的大小 Name Size Bytes Class I 600x800x3 1440000 uint8 arrayGrand total is 1440000 elements using 1440000 bytes第二次壓縮后圖像大小為: Name Size Bytes Class ca2 161x211 271768 double arrayGrand total is 33971 elements using 271768 bytes從上面的數(shù)據(jù)可以知道壓縮后的圖像效果是比較理想的. 經(jīng)過兩次壓縮后圖像在存儲時共占用 271768 bytes內存空間, 而原來的圖像I在存儲時要占用1440000 bytes 內存空間, 。第6章 結論和展望 結論本系統(tǒng)實現(xiàn)的主要工作面向基于小波變換的靜態(tài)圖像壓縮技術。主要得出的結論:(1)與傳統(tǒng)的DCT算法相比,運用的基于DCT變換矩陣算法,計算速度較快,有利于圖像壓縮和其他處理。(2) 運用了一種基于離散小波變換的圖像壓縮算法。通過將原圖像分裂為包含原圖像主要信息的主圖像與包含原圖像細節(jié)信息的副圖像,然后進行壓縮的方法,取得了良好的效果。 展望基于小波變換的圖像編碼技術,以下是當前和今后研究的熱點:(1)最佳小波基的選取。利用小波變換進行圖像壓縮編碼時,并非所有的小波基都適合對圖像進行分解,選擇不同的小波基對于圖像壓縮的效果有著直接的影響。在實際應用中,小波基的選取還要根據(jù)不同的圖像特點和不同的要求。如何選擇適合具體圖像的小波基,實現(xiàn)圖像從無損到有損的壓縮,獲得更高的壓縮效果,還有待于進一步的研究。(2)合理地組織小波系數(shù)。如何合理地組織圖像分解后的小波系數(shù),以達到快的排序速度和用較少的重要圖編碼來表達原圖像。(3)與人眼的視覺生理特性相結合。圖像的小波變換機制具有與人眼的信息感知和處理過程十分吻合的特性,但由于人們對人眼視覺生理特性研究的局限性,小波圖像壓縮編碼還沒有充分利用人眼的視覺特性。純粹從像素值出發(fā)的MSE準則與人眼的視覺判斷有一定的誤差。(4)小波壓縮算法中公認的一個難題沒有得到良好解決,這就是當比特率較低時出現(xiàn)的邊緣模糊現(xiàn)象,即Gibbs效應,究其本質,主要是因為這些算法均在均方誤差(MSE)準則下工作,而MSE準則不能很好地刻畫圖像邊緣和平坦區(qū)域的差別,按MSE準則進行優(yōu)化的方法有時難以達到良好的視覺效果。為了充分利用人眼視覺特性,改善和提高壓縮效果,有必要對傳統(tǒng)的MSE準則進行修正。(5)基于內容的圖像編碼?;趦热莸膱D像壓縮編碼是多媒體數(shù)據(jù)編碼的發(fā)展趨勢,它是信息處理的更高要求,更加接近于人類處理信息的方式。(6) 基于多小波或小波包變換的圖像壓縮編碼方法是在小波變換領域發(fā)展起來的新方法,它利用多個小波基對圖像進行分解,相對單小波變換,這種方法對紋理較多的圖像,壓縮性能更好。(7)將分形理論運用到小波編碼中,這種方法根據(jù)不同分辨率下的小波系數(shù)的相似性,利用分形編碼,以低分辨率的小波系數(shù)預測高分辨率的小波系數(shù),可以實現(xiàn)圖像的更高效的壓縮。參考文獻[1] E.O.Brigham,R.E.Morrow,.The fast Fourier transfo