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

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



     

  • 相关阅读:
    SpringBoot--日期格式化
    SpringBoot--使用redis实现分布式限流
    SpringBoot--集成Shiro
    xxl-job搭建、部署、SpringBoot集成xxl-job
    SpringBoot--使用socket搭建聊天室
    SpringBoot--数据库管理与迁移(LiquiBase)
    SpringBoot--防止重复提交(锁机制---本地锁、分布式锁)
    Springboot--元注解及自定义注解(表单验证)
    java类对象的初始化顺序
    java23种设计模式(三)单例模式
  • 原文地址:https://www.cnblogs.com/tornadomeet/p/2390742.html
Copyright © 2020-2023  润新知