小波变换原理及在图像处理的应用

Part1-Introduction To The Wavelet Transform(简介)

1、Origin of the wavelet transform:
The theories of Wavelet originate from diffierent areas of study:

  • Engineering

  • Time-frequency analysis and Multiresolution Analysis

  • Computer Vision

  • Pyramidal algorithm

  • Physics

  • Pure Mathematics

2、Multiresolution Analysis(MRA-多分辨率分析与处理)

  • Multiresolution analysis is about analyzing a signal based on the information appeared in different scales of such signal – to mimic human beings in analyzing signals.

  • A signal of a certain “scale” refers to its best approximation at a certain resolution

  • By “traveling” from the coarse scales toward the fine scales, one zooms in and arrives at a more exact representation of the given signal
    在这里插入图片描述
    3、The Discrete Wavelet Transform(离散小波变换)
    A simple way to implement MAR is by using the Discrete Wavelet Transform(DWT):
    POLYU-2018
    The definition of wavelet transform shows that the wavelet analysis is a measure of similarity the basis functions(wavelets) and the original function .The coefficients ,named H0 for Low Pass Filter, and H1 for High Pass Filter, caculated indicate how close the function is to the danghter wavelet at that particular scale.
    在这里插入图片描述

Part2-Decomposition(DWT) and Reconstruction(Inverse DWT)–离散小波分解与重构

对于离散小波变换,由于很多小波函数不是正交函数,因此需要一个尺度系数(Scaling Coefficients)和一个小波系数(Wavelet Coefficients).因此,原信号函数可以分解成尺度函数(系数)和小波函数(系数)的线性组合,在这个函数中,尺度函数产生低频部分小波函数产生高频部分

1、一维Haar小波变换-分解

在这里插入图片描述

离散的信号经过Haar小波变换时,首先会将这个信号所携带的信息进行压缩,得到N/2个数据点进行存储,那么这些点信息就是由这些Scaling Coefficients-尺度系数来表征的。对于离散信号而言,其可能具有高频和低频成分,而小波系数或细节系数代表它的高频部分。

小波中的下采样就是对信号进行隔点采样,目的就是为了将信息进行压缩存储。
小波中的上采样就是隔点插零,目的是为了重构信号。

而对信号的滤波过程,在数学上等效为信号与滤波器冲激响应的卷积。

分解LP 滤波器(离散卷积算子):
在这里插入图片描述
分解HP滤波器(离散卷积算子):
在这里插入图片描述
离散时间卷积定理:

“离散卷积”是两个离散序列x(n) 和h(n) 之间按照一定的规则将它们的有关序列值分别两两相乘再相加的一种特殊的运算。具体可用公式表示为:
在这里插入图片描述
其中 y(n)就是经过卷积运算以后所得到的一个新的序列。

在工程上离散卷积有着广泛的应用,例如,在数字图像处理领域,为了将数字信号进行滤波,可以将表示成离散序列的图像信号C(n) 与数字滤波器的冲激响应h(n) 进行离散卷积运行。

多分辨分析的小波函数Ψ(t)和尺度函数φ(t)满足双尺度的差分方程:
在这里插入图片描述
多分辨分析每一层分解使信号f(t)通过一低通滤波器和带通滤波器,把信号分解为低频部分和高频部分。低通滤波器的特性由小波函数Ψ(x)确定,带通滤波器的特性由尺度函数φ(x)确定。分解后的系数由两部分组成:低频系数向量c1高频系数向量d1。低频系数向量c1由信号与低通滤波器(小波函数确定)的脉冲响应经过卷积运算得到,高频系数向量d1由信号与带通滤波器(尺度函数确定)经过卷积运算得到。

2、一维Haar小波变换–重构

逆变换过程:

3、二维Haar小波变换

二维图像信号

对于二维图像信号,可以用分别在水平和垂直方向进行滤波的方法实现二维小波多分辨率分解。图2.5为经过二维离散小波变换的分解后子图像的划分。其中:
(l)LL子带是由两个方向利用低通小波滤波器卷积后产生的小波系数,它是图像的近似表示。
(2)HL子带是在行方向利用低通小波滤波器卷积后,再用高通小波滤波器在列方向卷积而产生的小波系数,它表示图像的水平方向奇异特性。(水平子带)
(3)LH子带是在行方向利用高通小波滤波器卷积后,再用低通小波滤波器在列方向卷积而产生的小波系数,它表示图像的垂直方向奇异特性。(垂直子带)
(4)HH子带是由两个方向利用高通小波滤波器卷积后产生的小波系数,它表示图像的对角边缘特性。(对角子带)
第一个字母表示列方向的处理,第二个字母表示行方向的处理,图像的奇异特性通过低通时保留,通过高通时被滤除。
在这里插入图片描述
小波去噪方法也就是寻找从实际信号空间到小波函数空间的最佳映像,以便得到原信号的最佳恢复。

在这里插入图片描述
在这里插入图片描述

目前,小波去噪的方法大概可以分为三大类:

第一类方法–小波变换模极大值去噪法

利用小波变换模极大值原理去噪,即根据信号和噪声在小波变换各尺度上的不同传播特性,剔除由噪声产生的模极大值点,保留信号所对应的模极大值点,然后利用所余模极大值点重构小波系数,进而恢复信号;

第二类方法–小波系数相关性去噪法

对含噪信号作小波变换之后,计算相邻尺度间小波系数的相关性,根据相关性的大小区别小波系数的类型,从而进行取舍,然后直接重构信号;

第三类方法–小波变换阈值去造法

小波阈值去噪方法,该方法认为信号对应的小波系数包含有信号的重要信息,其幅值较大,但数目较少,而噪声对应的小波系数是一致分布的,个数较多,但幅值小。

4、小波阀值收缩去噪法:

1、 小波阀值去噪的基本思想:

Donoho提出的小波阀值去噪的基本思想是将信号通过小波变换(采用Mallat算法)后,信号产生的小波系数含有信号的重要信息,将信号经小波分解后小波系数较大,噪声的小波系数较小,并且噪声的小波系数要小于信号的小波系数,通过选取一个合适的阀值,大于阀值的小波系数被认为是有信号产生的,应予以保留,小于阀值的则认为是噪声产生的,置为零从而达到去噪的目的。其基本步骤为:
(1)分解:选定一种层数为N的小波对信号进行小波分解;
(2)阀值处理过程:分解后通过选取一合适的阀值,用阀值函数对各层系数进行量化;
(3)重构:用处理后的系数重构信号。

2、小波阀值去噪的基本问题

小波阀值去噪的基本问题包括三个方面:小波基的选择,阀值的选择,阀值函数的选择。
(1)小波基的选择:通常我们希望所选取的小波满足以下条件:正交性、高消失矩、紧支性、对称性或反对称性。但事实上具有上述性质的小波是不可能存在的,因为小波是对称或反对称的只有Haar小波,并且高消失矩与紧支性是一对矛盾,所以在应用的时候一般选取具有紧支的小波以及根据信号的特征来选取较为合适的小波。
(2)阀值的选择:直接影响去噪效果的一个重要因素就是阀值的选取,不同的阀值选取将有不同的去噪效果。目前主要有通用阀值(VisuShrink)、SureShrink阀值、Minimax阀值、BayesShrink阀值等。
(3)阀值函数的选择:阀值函数是修正小波系数的规则,不同的反之函数体现了不同的处理小波系数的策略。最常用的阀值函数有两种:一种是硬阀值函数,另一种是软阀值函数。还有一种介于软、硬阀值函数之间的Garrote函数。
另外,对于去噪效果好坏的评价,常用信号的信噪比(SNR)与估计信号同原始信号的均方根误差(MSE)来判断。

实例:基于通用阈值和SURE阈值的小波去噪方法的MATLAB实现

%
% 2d wavelet shrinkage image denoising with universal threshold
%
close all

% Load image
imagefilename = 'Lena512Gray.bmp';
thewavelet = 'db4';
noise_var = 300;

x = double(imread(imagefilename));
n = sqrt(noise_var)*randn(size(x));
xn = x + n;

% Make sure the additive noise will not make the signal component to have
% magnitude larger than 255.
for i=1:size(x,1)
    for j=1:size(x,2)
        if (xn(i,j) > 255) 
            xn(i,j) = 255;
        end
    end
end

std_noise = sqrt(sum(sum((xn-x).^2))/length(x)^2);

figure
imagesc([x,xn]);
axis image
colormap(gray);
title('original, noisy');


% 2d wavelet transform
% 1 levels decomposition with periodic extension.
dwtmode('per');
[ca1,ch1,cv1,cd1] = dwt2(x,  thewavelet);
[na1,nh1,nv1,nd1] = dwt2(xn, thewavelet);
[na2,nh2,nv2,nd2] = dwt2(na1, thewavelet);

% Display
figure
imagesc([ca1,ch1;cv1,cd1]);
axis image
colormap(gray);
title('1st level decomposition with periodic extension.');
figure
imagesc([na1,nh1;nv1,nd1]);
axis image
colormap(gray);
title('1st level decomposition with periodic extension of noisy image.');


% First normalize the wavelet coefficients such that the noise component
% has a variance of 1 
nor_nh1 = nh1/std_noise;
nor_nv1 = nv1/std_noise;
nor_nd1 = nd1/std_noise;

% Find the threshold!
disp('Universal threshold used for level 1')
thr_uni = zeros(1,3);
thr_uni(:) = sqrt(2*log(size(x,1)*size(x,2)));

% Shrinkage (SURE)

thr_sure = zeros(1,3);
thr_sure(1) = thselect(nor_nh1,'rigrsure');
thr_sure(2) = thselect(nor_nv1,'rigrsure');
thr_sure(3) = thselect(nor_nd1,'rigrsure');

disp('SURE threshold used for level 1');

% Shrinkage (universal threshold)
dnh1_uni = wthresh(nor_nh1,'s',thr_uni(1));
dnv1_uni = wthresh(nor_nv1,'s',thr_uni(2));
dnd1_uni = wthresh(nor_nd1,'s',thr_uni(3));
% Shrinkage (SURE)
dnh1_sure = wthresh(nor_nh1,'s',thr_sure(1));
dnv1_sure = wthresh(nor_nv1,'s',thr_sure(2));
dnd1_sure = wthresh(nor_nd1,'s',thr_sure(3));

% Denormalize the denoised wavelet coefficients
dnh1_uni = dnh1_uni*std_noise;
dnv1_uni = dnv1_uni*std_noise;
dnd1_uni = dnd1_uni*std_noise;

dnh1_sure = dnh1_sure*std_noise;
dnv1_sure = dnv1_sure*std_noise;
dnd1_sure = dnd1_sure*std_noise;



% Reconstruction (universal threshold)
rx = idwt2(ca1,ch1,cv1,cd1,thewavelet,size(x));
rdnx_uni = idwt2(na1,dnh1_uni,dnv1_uni,dnd1_uni,thewavelet,size(x));

% Reconstruction (SURE)
rdnx_sure = idwt2(na1,dnh1_sure,dnv1_sure,dnd1_sure,thewavelet,size(x));


figure
imagesc([x,xn,rdnx_uni,rdnx_sure]);
axis image
colormap(gray);
title('original, noisy, denoised(universal), denoised(SURE)');

res = sprintf('SNR of noisy image: %f dB', snr(x, xn));
res1 = sprintf('SNR of denoised image (universal threshold): %f dB', snr(x, rdnx_uni));
res2 = sprintf('SNR of denoised image (SURE): %f dB', snr(x, rdnx_sure));
disp(res);
disp(res1);
disp(res2);

Fig.1 Lena original image
Fig.1 Lena 原图

在这里插入图片描述
Fig .2 加入噪声之后的图像

在这里插入图片描述

在这里插入图片描述
计算各图像的SNR(信噪比)得到如下数据:
SNR of noisy image: 38.468755 dB
SNR of denoised image (universal threshold): 40.259733 dB
SNR of denoised image (SURE): 41.010018 dB

结论:小波变换在图像去噪等方面有着广泛应用,实现小波阈值收缩去噪的方法主要有通用阈值、软硬阈值、SURE阈值等。1阶SURE算法去噪较通用阈值算法去噪,SNR提高了大约1dB,去噪效果显著。

猜你喜欢

转载自blog.csdn.net/hhaowang/article/details/82909332