使用Matlab对图像进行基于小波的去噪处理
基于小波的去噪是一种分析方法,它利用时间频率,根据信号的特点选择合适的频段。
一个信号描述了随时间变化的各种物理量。而噪声是一种不需要的信号,它干扰了携带原始信息的信号。这导致信号信息的参数发生变化。去噪是去除信号中的噪声的过程。
小波分析可以应用于日常生活中的活动,如特征提取、人脸识别、数据分析和预测、语音识别、数字分析等等。
摆脱信号传输过程中污染的图像噪声,是非常具有挑战性的。一些算法正在被发现,但它仍然是一个挑战。
在这篇文章中,我们将讨论一种叫做基于小波的图像去噪的方法,它是最有效的方法之一。
前提条件
- 安装了[Matlab]。
- 对[Matlab]语言的正确理解。
简介
在信号的远距离传输过程中,有可能会受到噪声的污染。这里的目标是使用小波技术去除图像信号中的噪声。
信号通过加法获得噪声,其一般形式为。
f'(x,y) = f(x,y) + n(x,y)
其中f'(x,y) 是被噪声污染的信号,f(x,y) 是原始信号,n(x,y) 是噪声信号。
噪声信号n(x,y) ,对于所提出的方案,其基本假设是:
- 噪声是加性的
- 噪声是一个随机信号(均值为零的白高斯信号)
- 噪声具有高频率。
要了解更多关于噪声信号和方程式的信息,可以阅读这篇文章。
在这里,我们的目标是使用小波技术将噪声n(x,y) ,从噪声图像f'(x,y) 。
基于小波的去噪方案
去噪方案包括将信号通过一个分解器,利用离散小波变换(DWT)将其分解为各种小波系数。
离散小波变换是一种用于将图像像素转换为小波的方法,用于基于小波的压缩和编码。
然后对系数进行阈值处理并重建以形成原始图像。这个重建的过程被称为逆向离散小波变换(IDWT)。
在这里,图像阈值化是对前景和背景信号的分离。它是一种图像分割方法,通过将灰度图像转换为二进制图像,将其隔离。
灰度图像是只包含一种颜色的图像,有两种可能的强度值,就是黑色和白色。这些值通常为0代表黑色,1代表白色。
使用反离散小波变换(IDWT)来获得去噪图像。反离散小波变换用于寻找阈值标签。我们可以使用其他方法,如通用阈值、Bayes、SURE、MinMax等。
Matlab的WaveletAnalyzer工具
这是一个在Matlab中找到的内置工具,不需要安装。
它主要用于图像去噪。要访问它,在命令提示符上输入wavelet analyzer 。我们会得到一个新的窗口,如下图所示。
WaveletAnalyzer工具
访问该工具后,我们找到Wavelet 2-D ,因为要去噪的图像是二维的。当你点击它时,一个新的窗口打开了。
WaveletAnalyzer工作区
点击File -> Load -> Image ,导入要去噪的图像。并且,选择要去噪的图像。
在WaveletAnalyzer中打开一个有噪声的图像
在上面窗口的左上角,选择小波(去噪方法),如:bior 2.2 ,作为它的协同效率,以及分解的级别。
请注意,
Db,haar,sym, 和coif是正交小波,具有紧凑的支持(较小的支持)。
bior,rbior是双正交小波,具有紧凑的支持。mey,dmey是正交小波,具有非紧凑支持。
这些方法是以发明他们的人命名的。
正交小波是一个单一的缩放函数。当一个小波是双正交的,它产生一个单一的缩放函数,一个小波用于分解,另一个用于重建。缩放函数可以用来缩小或放大函数。
水平分解涉及到将信号通过低通和高通滤波器,从而使结果信号被降频2次。
我们得到一个高频信号,高通滤波器有详细的系数,低通滤波器有低频的近似系数。这就是一级分解(第一级)。
当这个过程从低通滤波器开始继续进行时,层次会增加。分解的最大数量通过以下方式计算。
max.分解数=
其中N 代表信号长度。
上面描述的整个分解是离散小波变换(DWT),而相反的则是IDWT。
当按下Analyzer 按钮时,我们的图像就被去噪了。这给了我们一个带有小波系数图的窗口。

图像去噪
在一级(),我们对图像的水平线、对角线和垂直线的细节进行处理。这也适用于第2级()。
在窗口的左侧,选择Threshold 方法,也选择噪声结构。在这种情况下,我们选择scaled white noise ,因为它是高斯白噪声。
使用滚动条,我们可以修改阈值,然后点击denoise 按钮。
去噪
我们得到的去噪图像如上图所示。这就是你如何使用小波分析器工具对图像进行去噪的方法。
小波去噪中使用的函数
wdencmp - 它可以用来对一维和二维信号进行去噪。这意味着它既可以用于音频,也可以用于图像。
语法。
imgden = wdencmp('gbl_or_Ivd', img, 'wname', N, THR, SORH, KEEPAPP)
其中
img是我们输入的噪声图像。imgden是去噪后的输出图像。gbl_or_ivd:使用gbl为单一阈值,或使用Ivd为依赖水平的阈值(或者使用gbl或Ivd)。wname是使用的小波的类型。N代表分解级别。thr: 阈值水平。sorhs或 分别对应于软阈值和硬阈值。hkeepapp阈值:它是0或1。当近似系数不能被阈值化时,它为0,如果可以,则为1。
当前景和背景的物体之间的强度分布非常明显时,就会使用单一阈值法。
在水平阈值法中,每一级的阈值都被重新标定,以得出与每一级的小波系数的标准差相对应的新的阈值。
硬阈值是指将绝对值低于阈值的系数设置为零的过程。
软阈值是指首先将绝对值低于阈值的系数设置为零,然后将非零系数向零收缩的方法。
用于寻找去噪默认值的函数(THR、SORH、KEEPAPP)
默认值是用ddencmp 自动找到的。该函数的语法是。
[THR, SORH, KEEPAPP] = ddencmp('den', 'wv', img)
我们传递输入的噪声图像(img),定义的去噪方法和小波(WV)。执行这个函数,我们得到这些常数的值。
显示wdencmp和ddencmp使用的代码示例
我们首先从PC上加载原始图像。
[filename, pathname] = uigetfile('*.*', 'select input image');
fileWithPath = strcat(pathname, filename);
img = imread(fileWithPath); % assigning the image to this variable fileWithPath.
我们使用imread 函数读取图像。图像img 是原始图像。我们手动添加噪音,使图像产生噪音。
imgn = imnoise(img, 'gaussian', 0, 0.005); %add noise
请注意,我们添加的
gaussian噪声的平均值为0,方差为0.005。
然后,我们定义信号扩展模式dwtmode ,这是信号的周期性扩展。这是用下面的代码完成的。
dwtmode('per'); %signal extension mode
我们首先执行ddencmp 函数。因此,当我们执行这个函数时,我们将得到thr,sorh,keepapp ,这些将被用于wdencmp 。
[thr, sorh, keepapp] = ddencmp('den', 'wv', imgn); %finding default values
在定义了thr,sorh,keepapp 之后,我们将它们传递给wdencmp 函数,如下图所示。
% Denoise image using global thresholding.
imgden = wdencmp('gbl', double(imgn), 'sym4', 2, thr, sorh, keepapp);
这样做是为了使用图像阈值对图像进行去噪。
注意,小波和阈值处理方法不能重命名。这是Matlab中识别它们的方式,任何改变都会导致错误。
gbl 代表单阈值方法。 用于小波的分解, 是分解级别。sym4 2
当我们执行该代码时,我们得到imgden 作为输出。这就是去噪后的图像。我们显示图像以看到差异,我们使用下面的代码。
subplot(131), imshow(img), title('Original Image')
subplot(132), imshow(img), title('Noisy Image')
subplot(133), imshow(uint8(imgden), []), title('denoised image')
我们找到SNR(信噪比)。
%Finding SNR
Orig_vs_Noisy_SNR = 20*log10(norm(double(img(:)))/norm(double(img(:))-double(imgn(:)))); % This gives the value of ratio between the original image and the noisy image.
Origin_vs_denoised = 20*log10(norm(double(img(:)))/norm(double(img(:))-double(imgden(:)))); % This gives the value of ratio between the original image and the denoised image.
信噪比有助于我们理解去噪的效果。前者帮助我们理解原始图像与噪声图像之间的差异,而后者代表原始图像与去噪图像。
下面是执行该代码后得到的图像。

总结
对于处理图像或音频的工程师来说,小波变换是一个重要的功能。这是因为它有助于对信号的分析,并对信号进行分解以便进一步分析。
正如我们在这里学到的,小波变换适用于图像处理等各个领域。它们也可以应用于音频信号分析领域和其他许多领域。
Matlab是一种非常重要的语言,使理解小波更加容易。它有许多内置的特点和功能,使这种分析更容易。