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%运行结果如下:

    通过本章的练习,只能达到对小波的感性认识,因为小波领域内有很多理论知识,有很多不是很好理解,估计以后用多了会有进一步的认识的。



 

作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 欢迎转载或分享,但请务必声明文章出处。 (新浪微博:tornadomeet,欢迎交流!)
posted on 2012-03-11 22:20  tornadomeet  阅读(4152)  评论(0编辑  收藏  举报

阿萨德发斯蒂芬