快捷搜索: 王者荣耀 脱发

【Matlab代码】图像的小波分解和重构实现

一、原理

MATLAB中实现图像分解和重构的命令主要有dwt2(idwt2)和 wavedec2( waverec2)。其中,进行一层小波分解的命令为dwt2,对应的小波重构命令为idwt2;进行多层分解的命令为wavedec2,对应的重构命令为 wavered2。

1.1 一层小波分解与重构

[CA,CH,CV,CD] = dwt2(X,‘wname’);

其中,dwt2表示离散小波变换;X为输入参数,是图像;wname是小波名字;输出变量CA为低低频分解信息,刻画原始图像的逼近信息;CH为低高频分解信息,刻画原始图像的横向细节;CⅤ为高低频分解信息,刻画原始图像的垂直细节;CD为高高频分解信息,刻画原始图像的对角线上的细节。

[CA,CH,CV,CD] = dwt2(X,Lo_D,Hi_D);

为另一种离散小波变换,输入参数为分解的低通滤波器和高通滤波器。

[CA,CH,CV,CD] = dwt2(X,Lo_D,Hi_D, mode, MODE);

为不同形式边界延拓的离散小波变换,其中,MODE表示不同的延拓方式,具体有对称延拓’sym’或者’symh’(半点对称),‘symw’ (全点对称),反对称延拓’asym’或者 ‘asymh’(半点反对称), ‘asymw’(全点反对称),零延拓’zpd’,一阶光滑延拓’spd’或者’spl’(边界保持导数一致进行延拓),常数延拓’sp0’,周期延拓’ppd’或者’per’。

对应的小波重构实现: X = idwt2(CA,CH,CV,CD, ‘wname’); X = idwt2(CA,CH,CV,CD, Lo_D,Hi_D); X = idwt2(CA,CH,CV,CD, mode, MODE);

1.2 多层小波分解与重构

[C,S] = wavedec2(X, N, ‘wname’);

其中, Wavedec2为多层小波分解函数;X为输入参数,是图像;N为分解层数; wname’是小波名字;输出变量C为所有分解信息的组合,具体为C=[A(N)|H(N)V(N)D(N)|…H(N-1)V(N-1)|D(N-1)…|H(1)V(1)D(1)],C为行向量;S为分解后各个频段图像的尺寸大小。

[C,S] = wavedec2(X, N, Lo_D,Hi_D);

为另一种离散小波变换。其中,输入参数N为分解层数;Lo_D和Hi_D分别为分解的低通滤波器和高通滤波器。由于C表达的是行向量,函数 appcoef2和 detcoef2分别能够返回二维表达的逼近图像的系数和高频各通道的图像系数,具体形式为

A=appcoef2(C,S, ‘wname’,N); D= detcoef2(O,C,S,N); O可以取’h’, ‘v’,‘d’, ‘all’,返回分解的水平高频,垂直高频和对角高频图像系数。 当O参数选all时,返回值是三个高通图像系数,即 [H,V,D]= detcoef(‘all’,C,S,N); 小波的多层重构命令为完全重构命令 waverec2和部分重构命令wrcoef2,具体为: wrcoef2用于实现由二维小波分解提取出的不同频段的信息重构图像。 type’为a,h,v,d分别对应的是低频信息、水平高频、垂直高频和对角高频信息

二、实例分析

2.1 dwt2一层小波分解与重构实例

用 MATLAB的dwt2命令对图像Lena进行分解重构,得到分解的低频和高频4个通道的图像,如图1所示。

图 1 小波分解的4个通道图像

用idwt2对分解图像进行重构,第一层分解的各个频率通道图像进行重构,如图2所示。

图 2 显示原始图像和由第一层各个频率通道重构的图像

2.2 wavedec2多层小波分解与重构实例

用 wavedec2命令、 detcoef2命令和 appcoe2f命令得到分解的各个层次的低频和高频图像,第二层分解的各通道图像如图3所示,第一第二层分解的各通道图像如图4所示。各分解图像拼接图和原图的对比如图5所示。

图 3 第二层小波分解的各个通道图像
图 4 第一第二层分解的各通道图像
图 5 原始图像和所有系数拼接后的图像

用 wavered2命令进行多层图像重构,由第二层各个频率通道图像进行重构的结果如图6所示。可以看出图像只由高层低通信号重构的结果为信号的概貌,而细节信息可由各层次的高频信息进行重构,从而实现信号的分层次分解和重构。

图 6 第二层各个频率通道图像进行重构的结果

三、资源获取

演示实例可从以下链接处获取:

经验分享 程序员 微信小程序 职场和发展