Matlab DIP(瓦)ch7小波練習


      在這一章中,主要進行小波圖像處理的練習,內容包括小波圖像濾波,小波圖像分解,小波圖像重構,小波圖像邊緣檢測,小波圖像平滑和去噪以及小波圖像的漸進重構等問題。其練習代碼和解釋以及結果如下所示:

  1 %% wfilters and wavefun
2 clc
3 clear
4 wname='haar';%說明是haar小波
5 [Lo_D,Hi_D,Lo_R,Hi_R]=wfilters(wname);%wfilters函數的功能是:計算4個正交或者雙正交的小波濾波器
6 subplot(221);stem(Lo_D);%stem為繪制火柴梗圖像
7 title('Decomposition low-pass filter');
8
9 subplot(222),stem(Hi_D);
10 title('Decomposition high-pass filter');
11
12 subplot(223),stem(Lo_R);
13 title('Reconstruction low-pass filter');
14
15 subplot(224),stem(Hi_R);
16 title('Reconstruction high-pass filter');
17 xlabel('The four filters for db5')
18%運行結果如下:


19
20 [phi,psi,xval]=wavefun(wname,10);
21 xaxis=zeros(size(xval));
22 figure,subplot(121),plot(xval,phi,'k',xval,xaxis,'--k');%haar尺度函數,'k'為黑線,'--k'虛黑線
23 title('Scaling Function');
24
25 subplot(122),plot(xval,psi,'k',xval,xaxis,'--k');%haar小波函數
26 title('Wavelet Function');
27%運行結果如下:


28
29 %% wavedec2
30 clc
31 clear
32 f=magic(8)%c產生8*8的魔方矩陣
33
34 [c0,s0]=wavedec2(f,0,'haar')%f表示輸入的圖像,0,表示第0個尺度上,c0表示小波變換系數,s0表示c中系數的排列記錄
35 [c1,s1]=wavedec2(f,1,'haar');%類似
36 [c2,s2]=wavedec2(f,2,'haar');%類似
37 [c3,s3]=wavedec2(f,3,'haar');%類似
38 [c4,s4]=wavedec2(f,4,'haar');%類似
39 [c10,s10]=wavedec2(f,10,'haar');%類似
40%運行部分結果如下:


41
42 %% fwtcompare函數的使用
43 clc
44 clear
45 f=imread('.\images\dipum_images_ch07\Fig0704(Vase).tif');
46 %fwt是快速小波變換的縮寫,fwtcompare是比較wavedec2和wavefast的執行時間,比率為ratio,差值為maxdifference
47 [ratio maxdifference]=fwtcompare(f,6,'db4')%此處是在第6個尺度,用db4正交小波對f進行比較得到的結果
48 %運行結果如下:
49


50 %% wavedec2 aapcoef2 detcoef2 wthcoef2
51 clc
52 clear
53 f=magic(8);
54
55 [c3,s3]=wavedec2(f,3,'haar');
56
57 approx=appcoef2(c3,s3,'haar')%appcoef返回的是一個近視矩陣
58 approx0=appcoef2(c3,s3,'haar',0)
59 approx1=appcoef2(c3,s3,'haar',1)
60 approx2=appcoef2(c3,s3,'haar',2)
61 approx3=appcoef2(c3,s3,'haar',3)
62
63 horizdet3=detcoef2('h',c3,s3,3)%detcoef2(o,c,s,n)是將c,s在尺度n上進行分解,返回水平,垂直,對角線細節
64 horizdet2=detcoef2('h',c3,s3,2)
65 horizdet1=detcoef2('h',c3,s3,1)
66
67 newc3=wthcoef2('h',c3,s3,2);%將小波閥值系數都設置為0
68 newhorizdet2=detcoef2('h',newc3,s3,2);
69
70 newc3=wthcoef2('h',c3,s3,1,46,'h');%設置硬閥值:46
71 newdiagonl_hard=detcoef2('h',newc3,s3,2);
72
73 newc3=wthcoef2('d',c3,s3,1,46,'s');%設置軟閥值:46
74 newdigaonl_soft=detcoef2('d',newc3,s3,1);
75
76 %% wavecut wavecopy db4
77 clc
78 clear
79 f=magic(8)
80
81 [c3,s3]=wavedec2(f,3,'haar');
82 approx=wavecopy('a',c3,s3);%c此處為返回c3,s3結構的近視矩陣(默認也是在尺度1上)
83 approx1=wavecopy('a',c3,s3,1;)%返回尺度1上的近視矩陣,所以與approx是一樣的,都是260
84
85 horizdet=wavecopy('h',c3,s3)%返回水平方向上的細節,返回矩陣4*4
86 horizdet3=wavecopy('h',c3,s3,3)%尺度3,返回數0
87 horizdet2=wavecopy('h',c3,s3,2)%尺度2,返回矩陣2*2
88
89 [newc3,horizdet2]=wavecut('h',c3,s3,2)%此函數的作用是返回一個新的小波分解結構newc3,和對應的水平細節賦0
90 newhorizdet2=wavecopy('h',newc3,s3,2);
91
92 %%一層分解子帶
93 clc
94 clear
95 f=imread('.\images\dipum_images_ch07\Fig0704(Vase).tif');
96 imshow(f);
97 title('小波一層分解原圖像');
98%運行結果如下:


99
100 [c,s]=wavefast(f,1,'db4');%一層分解
101 figure,wave2gray(c,s)%顯示小波分解系數圖像
102 %其分解圖像分布如圖所示
103 % Image W: ------- ------ ------------ -------------------
104 % | | | |
105 % | a(n) | h(n) | |
106 % | | | |
107 % ------- ------ h(n-1) |
108 % | | | |
109 % | v(n) | d(n) | | h(n-2)
110 % | | | |
111 % ------- ------ ------------
112 % | | |
113 % | v(n-1) | d(n-1) |
114 % | | |
115 % -------------- ------------ -------------------
116 % | |
117 % | v(n-2) | d(n-2)
118 % | |
119 title('db4自動縮放(一層分解)');
120%運行結果如下:


121
122 figure,wave2gray(c,s,8);
123 title('db4細節系數放大8倍(一層分解)');
124%運行結果如下:


125
126 figure,wave2gray(c,s,-8);
127 title('db4細節系數8倍放大的絕對值(一層分解)');
128%運行結果如下:


129
130 %% 二層分解子帶 db4
131 clc
132 clear
133 f=imread('.\images\dipum_images_ch07\Fig0704(Vase).tif');
134 imshow(f);
135 title('小波二層分解原圖像');
136%運行結果如下:


137
138 [c,s]=wavefast(f,2,'db4');%一層分解
139 figure,wave2gray(c,s)%顯示小波分解系數圖像
140
141 title('db4自動縮放(二層分解)');
142%運行結果如下:


143
144 figure,wave2gray(c,s,8);
145 title('db4細節系數放大8倍(二層分解)');
146%運行結果如下:


147
148 figure,wave2gray(c,s,-8);
149 title('db4細節系數8倍放大的絕對值(二層分解)');
150%運行結果如下:


151
152 %% 二層分解 子帶 haar 和小波圖像重構
153 clc
154 clear
155 f=imread('.\images\dipum_images_ch07\Fig0704(Vase).tif');
156 imshow(f);
157 title('小波二層(haar)分解原圖像');
158%運行結果如下:


159
160 [c,s]=wavefast(f,2,'haar');%一層分解
161 figure,wave2gray(c,s)%顯示小波分解系數圖像
162
163 title('haar自動縮放(二層分解)');
164%運行結果如下:


165
166 figure,wave2gray(c,s,8);
167 title('haar細節系數放大8倍(二層分解)');
168%運行結果如下:


169
170 figure,wave2gray(c,s,-8);
171 title('haar細節系數8倍放大的絕對值(二層分解)');
172%運行結果如下:


173
174 %重構圖像
175 g=waveback(c,s,'haar');%用waveback函數進行小波圖像重建
176 g=uint8(g);
177 figure,subplot(121),imshow(g);
178 title('waveback重構圖像');
179
180 g1=waverec2(c,s,'haar');
181 g1=uint8(g1);
182 subplot(122),imshow(g1);%用waverec2函數進行小波圖像重建
183 title('waverec2重構圖像');
184%運行結果如下:


185
186 %% 小波的方向性和邊緣檢測
187 clc
188 clear
189 f=imread('.\images\dipum_images_ch07\Fig0707(a)(Original).tif');
190 imshow(f);
191 title('小波邊緣檢測原始圖像');
192%運行結果如下:


193
194 [c s]=wavefast(f,1,'sym4');%尺度1上進行sym4小波分解
195 figure,wave2gray(c,s,-6);
196 title('sym4小波變換結果');
197%運行結果如下:


198
199 [nc,y]=wavecut('a',c,s);%小波近視矩陣都賦值為0
200 figure,wave2gray(nc,s,-6);%近視矩陣為0后的小波灰度圖像
201 title('將所有近似系數設為0的變換');
202%運行結果如下:


203
204 edges=abs(waveback(nc,s,'sym4'));%重構去掉近似后圖像
205 figure,imshow(mat2gray(edges));%mat2gray函數是將矩陣圖像轉換成強度圖像,即元素值位於0~1
206 title('反變換絕對值的邊緣圖像');
207%運行結果如下:


208
209 %% 基於小波圖像的平滑或模糊
210 clc
211 clear
212 f=imread('.\images\dipum_images_ch07\Fig0707(a)(Original).tif');
213 imshow(f);
214 title('小波圖像平滑原始圖像');
215%運行結果如下:


216
217 [c s]=wavefast(f,4,'sym4');%在尺度4上進行小波快速分解
218 figure,wave2gray(c,s,20);%用20個尺度來進行重構
219 title('sym4小波四次變換后結果');
220%運行結果如下:


221
222 [c,g8]=wavezero(c,s,1,'sym4');%該函數它會自動令取一個窗口畫圖,將對應尺寸細節置0
223 title('將尺度1的細節設置為0后的反變換');
224%運行結果如下:


225
226 [c,g8]=wavezero(c,s,2,'sym4');
227 title('將尺度2的細節設置為0后的反變換');
228%運行結果如下:


229
230 [c,g8]=wavezero(c,s,3,'sym4');
231 title('將尺度3的細節設置為0后的反變換');
232%運行結果如下:


233
234 [c,g8]=wavezero(c,s,4,'sym4');
235 title('將尺度4的細節設置為0后的反變換');
236%運行結果如下:


237
238 %%漸進重構
239 clc
240 clear
241 f=imread('.\images\dipum_images_ch07\Fig0709(original_strawberries).tif');
242 imshow(f);
243 title('小波漸進重構原始圖像');
244%運行結果如下:


245
246 [c,s]=wavefast(f,4,'jpeg9.7');%4尺度小波分解
247 figure,wave2gray(c,s,8);
248 title('4尺度小波分解系數(重構)')
249%運行結果如下:


250
251 f=wavecopy('a',c,s);%得到小波分解近視系數矩陣
252 figure,imshow(mat2gray(f));
253 title('近視系數小波圖像');
254%運行結果如下:


255
256 [c s]=waveback(c,s,'jpeg9.7',1);
257 f=wavecopy('a',c,s);
258 figure,imshow(mat2gray(f));%重構后近視小波系數圖像
259 title('重構1次后圖像');
260%運行結果如下:


261
262 [c s]=waveback(c,s,'jpeg9.7',1);
263 f=wavecopy('a',c,s);
264 figure,imshow(mat2gray(f));%重構后近視小波系數圖像,並且利用上次重構后的c,s
265 title('重構2次后圖像');
266%運行結果如下:


267
268 [c s]=waveback(c,s,'jpeg9.7',1);
269 f=wavecopy('a',c,s);
270 figure,imshow(mat2gray(f));%重構后近視小波系數圖像
271 title('重構3次后圖像');
272%運行結果如下:


273
274 [c s]=waveback(c,s,'jpeg9.7',1);
275 f=wavecopy('a',c,s);
276 figure,imshow(mat2gray(f));%重構后近視小波系數圖像
277 title('重構4次后圖像');
278%運行結果如下:

    通過本章的練習,只能達到對小波的感性認識,因為小波領域內有很多理論知識,有很多不是很好理解,估計以后用多了會有進一步的認識的。



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM