数字图像处理之低通滤波器实现原理及⽅法(Matlab)
1.傅⾥叶变换与频域
在之前的⽂中,我们已经进⾏过⼀些基本的图像处理。⽐如,使⽤低通滤波可以将图像模糊,也有些许降噪的作⽤。这些都是在空间域内进⾏的滤波处理,这个处理主要是依靠卷积来进⾏计算的。⾸先,从连续的⼀维卷积⼊⼿,如下所⽰。
matlab求傅里叶变换将上式进⾏傅⾥叶变换,可以得到如下结果。
从这个式⼦,我们可以得到⼀个重要的结论。也就是,函数与卷积的傅⾥叶变换所得到的结果,是函数与的傅⾥叶变换与的乘积。再将其总结得简单易懂⼀些,有如下结论。
在将其扩展到⼆维的形况下,假设尺⼨为MxN的图像,如下关系是成⽴的。
其实到这,基本的原理就明了的。我们所看到的图像,均为空间域内的表现形式,我们⽆法辨识出频域内的图像。要进⾏频域内的滤波器处理,⾸先就需要进⾏傅⾥叶变换,然后直接进⾏滤波处理,最后再⽤反傅⾥叶变换倒回到空间域内。
到此,已经可以开始空间域内的滤波处理了。但是,还有⼀点需要注意的地⽅。使⽤某个⼀维信号来举例⼦,⼀维信号的傅⾥叶变换是以2π为周期的函数。所以,我们常常使⽤的范围[-π,π]来表⽰这个信号的傅⾥叶变换,如下所⽰。
这样做的好处是,靠近0的成分就是低频,靠近-π与π的成分就表⽰⾼频。⽽对于图像⽽⾔,在Matlab中,我们使⽤fft2()这个函数来求取图像的傅⾥叶变换。
[plain]
正在上传…正在上传…
1. g = fft2(f);
上⾯这个代码求取的,其实是范围[0,π]内的傅⾥叶变换。为了⽅便理解,下图画出了本⾏代码所求取的图像的傅⾥叶变换的范围(右)和与其等效的⼀维傅⾥叶变换的范围(左)。
很显然,这并不是希望的范围,下⾯这个代码可以求取[0,2π]内的傅⾥叶变换。
[plain]
正在上传…正在上传…
1. P = 2*M;
2. Q = 2*N;
3. F = fft2(f,P,Q);
下图画出了本⾏代码所求取的图像的傅⾥叶变换的范围(右)和与其等效的⼀维傅⾥叶变换的范围(左)。所得到的图像F(u,v)的尺⼨为PxQ。
我们需要对其移动⼀下,如下图所⽰,我们需要的是粉⾊范围的区域。
下⾯,从数学上分析⼀下,如何获得这个部分的频谱。对于傅⾥叶变换,有如下性质。
这个特性称为平移特性,粉⾊部分的频谱,将带⼊上式,我们可以得到如下式⼦。
为次,我们已经得到了粉⾊范围的频谱。越靠近傅⾥叶频谱图像中间的成分,代表了低频成分。其Matlab代码如下所⽰。
[plain]
正在上传…正在上传…
1. [M,N] = size(f);
2. P = 2*M;
3. Q = 2*N;
4. fc = zeros(M,N);
5.
6. for x = 1:1:M
7. for y = 1:1:N
8. fc(x,y) = f(x,y) * (-1)^(x+y);
9. end
10. end
11.
12. F = fft2(fc,P,Q);
代码所得到的结果,如下图所⽰。
接下来,我们总结⼀下频域滤波的步骤:
①:先将图像做频域内的⽔平移动,然后求原图像f(x,y)的DFT,得到其图像的傅⾥叶谱F(u,v)。
②:与频域滤波器做乘积,
③:求取G(u,v)的IDFT,然后再将图像做频域内的⽔平移动(移动回去),其结果可能存在寄⽣的虚数,此时忽略即可。
④:这⾥使⽤ifft2函数进⾏IDFT变换,得到的图像的尺⼨为PxQ。切取左上⾓的MxN的图像,就能得到结果了。
2.低通滤波器
2.1理想的低通滤波器
其中,D0表⽰通带的半径。D(u,v)的计算⽅式也就是两点间的距离,很简单就能得到。
使⽤低通滤波器所得到的结果如下所⽰。低通滤波器滤除了⾼频成分,所以使得图像模糊。由于理想低通滤波器的过度特性过于急峻,所以会产⽣了振铃现象。
2.2巴特沃斯低通滤波器
同样的,D0表⽰通带的半径,n表⽰的是巴特沃斯滤波器的次数。随着次数的增加,振铃现象会越来越明显。
2.3⾼斯低通滤波器
D0表⽰通带的半径。⾼斯滤波器的过度特性⾮常平坦,因此是不会产⽣振铃现象的。
3.实现代码
close all;
clear all;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论