1. 部分常用的小波变换函数
dwt2:实现一级二维离散小波变换
[ca,ch,cv,cd] = dwt2(Image, 'wavename');
% Image: 待分解图像
% wavename: 小波函数,如'db4'、'sym5'
% ca: 分解得到的低频分量
% ch: 分解得到的水平高频分量
% cv: 分解得到的垂直高频分量
% cd: 分解得到的对角高频分量
idwt2:实现一级二维离散小波逆变换
Image = dwt2(ca,ch,cv,cd, 'wavename');
% Image: 小波重构得到的图像
% wavename: 小波函数,如'db4'、'sym5'
% ca: 小波变换得到的低频系数
% ch: 小波变换得到的水平高频系数
% cv: 小波变换得到的垂直高频系数
% cd: 小波变换得到的对角高频系数
wavedec2:多级二维离散小波分解
[c, s] = wavedec2(Image, Num, 'wavename');
% Image: 待分解图像
% Num: 分解级数
% wavename: 小波函数,如'db4'、'sym5'
% c: 低频系数、水平高频系数、垂直高频系数、对角高频系数组成的向量
% s: 低频系数、水平高频系数、垂直高频系数、对角高频系数的长度
waverec2:多级二维离散小波重构
Image = waverec2(c, s, 'wavename');
% Image: 小波重构得到的图像
% wavename: 小波函数,如'db4'、'sym5'
% c: 低频系数、水平高频系数、垂直高频系数、对角高频系数组成的向量
% s: 低频系数、水平高频系数、垂直高频系数、对角高频系数的长度
appcoef2:提取小波分解的低频系数
A = appcoef2(c, s, 'wavename', N);
% A: 低频系数
% wavename: 小波函数,如'db4'、'sym5'
% N: 级数
% c: 低频系数、水平高频系数、垂直高频系数、对角高频系数组成的向量
% s: 低频系数、水平高频系数、垂直高频系数、对角高频系数的长度
detcoef2:提取小波分解的高频系数
[H,V,D] = detcoef2('all', c, s, N);
% A: 低频系数
% N: 级数
% H: 水平高频系数
% V: 垂直高频系数
% D: 对角高频系数
2. 基于小波变换的图像降噪(阈值法)
基干阈值的降噪方法是 按一定的规则(或阈值化)将小波系数划分成两类∶重要
的、规则的小波系数和不重要的或受噪声干扰的小波系数,并舍弃不重要的小波系数然后重构去噪后的图像。 常用的阈值函数有硬阈值和软阈值函数:
硬阈值方法指的是设定阈值,小波系数绝对值大干阈值的保留,小干阈值的置零,这样可以很好地保留边缘等局部特征,但会出现失真现象;软阈值方法将较小的小波系数置零,较大的小波系数按一定的函数计算,向零收缩,其处理结果比硬阈值方法的结果平滑,但因绝对值较大的小波系数减小,会损失部分高频信息,造成图像边缘的失真模糊。
2.1 带有高斯噪声的图像去噪
%%
%小波去噪
clc, clear, close all;
Image = imread('peppers.jpg');
subplot(231),imshow(Image), title('原图');
noiseImageg = imnoise(Image, 'gaussian'); %添加高斯噪声
subplot(232),imshow(noiseImageg), title('添加高斯噪声的图像');
noiseImages = imnoise(Image, 'salt'); %添加椒盐噪声
subplot(233),imshow(noiseImages), title('添加椒盐噪声的图像');
[c, s] = wavedec2(noiseImageg,2,'sym5'); %2层小波分解
%函数自动生成小波消噪或压缩的阈值选取方案
%'den': 信号消噪; 'wv': 小波分解
%'cmp': 信号压缩; 'wp': 小波包分解
%thr: 函数选择的阈值,sorh: 阈值使用方式,Sorh=s为软阈值;Sorh=h为硬阈值
%keepapp: 是否对近似分量进行阈值处理。可选为0或1
[thr, sorh, keepapp] = ddencmp('den', 'wv', noiseImageg);
%函数wdencmp用于一维或二维信号的消噪或压缩
%'gbl': 表示每层采用同一个阈值进行处理
%'lvd': 表示每层采用不同的阈值进行处理
[denoiseI, cxc, lxc, perf0,perf12] = wdencmp('gbl',c,s,'sym5',2,thr, sorh, keepapp);
subplot(234),imshow(denoiseI/255), title('降噪后的图像');
sigma = std(c);
thresh = 2*sigma;
csize = size(c);
c(find(abs(c)thresh); c(pos1) = (pos1) - thresh; %大系数向零收缩
pos2 = find(c |