当前位置:   article > 正文

数字图像处理学习笔记5:频率域滤波1(傅里叶频谱图,低通滤波-平滑,高通滤波-锐化)_理想低通滤波器 傅里叶谱

理想低通滤波器 傅里叶谱


前言

频率域滤波步骤:

在这里插入图片描述
频率域滤波分为低通滤波(平滑)与高通滤波(锐化):
低 通 滤 波 = { 理 想 低 通 滤 波 布 特 沃 斯 低 通 滤 波 高 斯 低 通 滤 波 低通滤波 =

{
=
高 通 滤 波 = { 理 想 高 通 滤 波 布 特 沃 斯 高 通 滤 波 高 斯 高 通 滤 波 高通滤波 =
{
=


一、傅里叶变换:傅里叶频谱图

使用下列代码得到图像的频谱图

I=imread('1.jpg');
I=rgb2gray(I);
figure
imshow(I)
I=im2double(I);
F=fft2(I);
F=fftshift(F);
F=abs(F);
T=log(F+1);
figure
imshow(T,[]);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

结果:
在这里插入图片描述若仅使用频谱图来进行简单滤波,只需要了解频谱图中心为0频分量,越接近边缘则是高频分量,其中高频分量代表图像中灰度变化较大的信息,如噪声和细节,低频则相反。


比如对上图加入椒盐噪声,得到:
在这里插入图片描述与上面的频谱图比较,发现频谱图外层的亮点明显增多,因为增加了椒盐噪声,高频分量变多。

使用频谱图进行滤波,就是在频谱图中减去低频或高频分量。


二、低通滤波

低 通 滤 波 = { 理 想 低 通 滤 波 布 特 沃 斯 低 通 滤 波 高 斯 低 通 滤 波 低通滤波 =

{
=


1.理想低通滤波

理想低通滤波是在频谱图中,以0频分量(中心点)为圆心,以r为半径作的圆中,使圆外的所有高频分量置零,即只保留圆内的低频分量,以此去除噪声。

理想低通滤波器函数为:
H ( u , v ) = { 1 , D< D 0 0 , D> D 0 H(u,v) =

{1,D<D00,D>D0
H(u,v)={1,0,D<D0D>D0
式中D为点到中心点的距离, D 0 D_0 D0为设置半径

函数各种表现形式如下:
在这里插入图片描述


以上面加了椒盐噪声的图为例进行理想低通滤波:

代码如下:

im1=imread('椒盐噪声图像.jpg');
im1=rgb2gray(im1);
figure
imshow(im1)

r=80;   %设置滤波圆半径参数为80
img_f=fftshift(fft2(double(im1)));  %傅里叶变换得到频谱
[m,n]=size(img_f);
P_x=fix(m/2);  
P_y=fix(n/2);  %获取圆心坐标
H=zeros(m,n);  
for j=1:n
    for i=1:m
        d=sqrt((i-P_x)^2+(j-P_y)^2);   %计算两点之间的距离,判断在圆外还是圆内
        if d<=r
            H(i,j)=1;   %圆内数值不变
        else
            H(i,j)=0;   %圆外置零,即滤除高频分量
        end
    end
end
img_lpf=H.*img_f; 
img_lpf=ifftshift(img_lpf);            %傅里叶反变换
img_lpf=uint8(real(ifft2(img_lpf)));   %取实数部分
figure
imshow(img_lpf)
imwrite(img_lpf,'理想低通滤波.jpg')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

滤波前后图像结果如下:
在这里插入图片描述


2.布特沃斯低通滤波

与理想低通滤波的“极端”不同,布特沃斯低通滤波器以渐变的方式改变频率的数值大小。

布特沃斯低通滤波函数为:
H ( u , v ) = 1 1 + [ D ( u , v ) / D 0 ] 2 n H(u,v) =\frac{1}{1+[D(u,v)/D_0]^{2n}} H(u,v)=1+[D(u,v)/D0]2n1
式中,D(u,v)为点到中心点的距离, D 0 D_0 D0为设置的半径

各种表现形式为:
在这里插入图片描述


代码如下:

im1=imread('椒盐噪声图像.jpg');
im1=rgb2gray(im1);
figure
imshow(im1)

r=80;   %设置滤波圆半径参数为80,可调
img_f=fftshift(fft2(double(im1)));  %傅里叶变换得到频谱
[m,n]=size(img_f);
O_x=fix(m/2);  
O_y=fix(n/2);  %获取圆心坐标
img=zeros(m,n);  %提前定义滤波后的频谱,提高运行速度
for j=1:n
    for i=1:m
        d=sqrt((i-O_x)^2+(j-O_y)^2);    %计算两点之间的距离
        H(i,j)=1/((1+d/r)^4);   %布特沃斯滤波器,这里设n=2,即2阶滤波器,n可调

    end
end
img=H.*img_f; %滤波
img=ifftshift(img);            %傅里叶反变换
img=uint8(real(ifft2(img)));   %取实数部分
figure
imshow(img)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

处理前后图像:
在这里插入图片描述


3.高斯低通滤波

高斯滤低通波器函数为:
H ( u , v ) = e − D 2 ( u , v ) / 2 D 0 2 H(u,v) =e^{-D^2(u,v)/2D_0^2} H(u,v)=eD2(u,v)/2D02

各表现形式如下:
在这里插入图片描述


代码如下:

im1=imread('椒盐噪声图像.jpg');
im1=rgb2gray(im1);
figure
imshow(im1)

r=80;   %设置滤波圆半径参数为80,可调
img_f=fftshift(fft2(double(im1)));  %傅里叶变换得到频谱
[m,n]=size(img_f);
O_x=fix(m/2);  
O_y=fix(n/2);  %获取圆心坐标
img=zeros(m,n);  %提前定义滤波后的频谱,提高运行速度
for j=1:n
    for i=1:m
        d=sqrt((i-O_x)^2+(j-O_y)^2);    %计算两点之间的距离
         H(i,j)=exp((-d.^2)/(2*(r).^2));   %高斯滤波器
        end
end
img=H.*img_f; %滤波
img=ifftshift(img);            %傅里叶反变换
img=uint8(real(ifft2(img)));   %取实数部分
figure
imshow(img)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

滤波前后结果:
在这里插入图片描述


4.小结

可以发现,高斯滤波和理想低通滤波程序中,只能调节半径一个参数,属于两个极端,而布特沃斯滤波器不仅可以设置半径,还可以设置阶数,通过调节阶数可以接近理想低通滤波与高斯低通滤波结果,处于两者之间的过渡。


三、高通滤波

低通滤波是减少高频分量,同理,高通滤波则是减少低频分量,并且高通滤波器可以由对应低通滤波器给出:
H H P ( u , v ) = 1 − H L P ( u , v ) H_{HP}(u,v) =1-H_{LP}(u,v) HHP(u,v)=1HLP(u,v)

则对应有三个高通滤波器:
高 通 滤 波 = { 理 想 高 通 滤 波 布 特 沃 斯 高 通 滤 波 高 斯 高 通 滤 波 高通滤波 =

{
=


1.理想高通滤波

理想高通滤波函数:
H ( u , v ) = { 0 , D< D 0 1 , D> D 0 H(u,v) =

{0,D<D01,D>D0
H(u,v)={0,1,D<D0D>D0
频谱图中心的值与原图像的灰度平均值相关,高通滤波中,将中心点置零,则滤波后的图像平均值变为0,图像表现较暗。


代码如下:

im1=imread('椒盐噪声图像.jpg');
im1=rgb2gray(im1);
figure
imshow(im1)

r=80;   %设置滤波圆半径参数为80
img_f=fftshift(fft2(double(im1)));  %傅里叶变换得到频谱
[m,n]=size(img_f);
P_x=fix(m/2);  
P_y=fix(n/2);  %获取圆心坐标
img_lpf=zeros(m,n);  %提前定义滤波后的频谱,提高运行速度
for j=1:n
    for i=1:m
        d=sqrt((i-P_x)^2+(j-P_y)^2);   %计算两点之间的距离,判断在圆外还是圆内
        if d<=r
            H(i,j)=0;   %圆内置零,去除低频分量
        else
            H(i,j)=1;   %圆外不变
        end
        img_lpf(i,j)=H(i,j)*img_f(i,j);
    end
end
 
img_lpf=ifftshift(img_lpf);            %傅里叶反变换
img_lpf=uint8(real(ifft2(img_lpf)));   %取实数部分
figure
imshow(img_lpf)
imwrite(img_lpf,'理想高通滤波.jpg')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

2.布特沃斯高通滤波

布特沃斯滤波函数为:
H ( u , v ) = 1 1 + [ D 0 / D ( u , v ) ] 2 n H(u,v) =\frac{1}{1+[D_0/D(u,v)]^{2n}} H(u,v)=1+[D0/D(u,v)]2n1


代码如下:

im1=imread('椒盐噪声图像.jpg');
im1=rgb2gray(im1);
figure
imshow(im1)

r=80;   %设置滤波圆半径参数为80,可调
img_f=fftshift(fft2(double(im1)));  %傅里叶变换得到频谱
[m,n]=size(img_f);
O_x=fix(m/2);  
O_y=fix(n/2);  %获取圆心坐标
img=zeros(m,n);  %提前定义滤波后的频谱,提高运行速度
for j=1:n
    for i=1:m
        d=sqrt((i-O_x)^2+(j-O_y)^2);    %计算两点之间的距离
        H(i,j)=1/((1+r/d)^4);   %布特沃斯高通滤波器,这里设n=2,即2阶滤波器,n可调
        img(i,j)=H(i,j)*img_f(i,j); %滤波
    end
end
img=ifftshift(img);            %傅里叶反变换
img=uint8(real(ifft2(img)));   %取实数部分
figure
imshow(img)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

3.高斯高通滤波

高斯高通滤波函数:
H ( u , v ) = 1 − e − D 2 ( u , v ) / 2 D 0 2 H(u,v) =1-e^{-D^2(u,v)/2D_0^2} H(u,v)=1eD2(u,v)/2D02


代码如下:

im1=imread('椒盐噪声图像.jpg');
im1=rgb2gray(im1);
figure
imshow(im1)

r=80;   %设置滤波圆半径参数为80,可调
img_f=fftshift(fft2(double(im1)));  %傅里叶变换得到频谱
[m,n]=size(img_f);
O_x=fix(m/2);  
O_y=fix(n/2);  %获取圆心坐标
img=zeros(m,n);  %提前定义滤波后的频谱,提高运行速度
for j=1:n
    for i=1:m
        d=sqrt((i-O_x)^2+(j-O_y)^2);    %计算两点之间的距离
         H(i,j)=1-exp((-d.^2)/(2*(r).^2));   %高斯高通滤波器
        img(i,j)=H(i,j)*img_f(i,j); %滤波
    end
end
img=ifftshift(img);            %傅里叶反变换
img=uint8(real(ifft2(img)));   %取实数部分
figure
imshow(img)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

4.小结

频率域除了上述三种高通滤波外,还有拉普拉斯锐化增强、同态滤波等方法,将在后面给出。


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/72526
推荐阅读
相关标签
  

闽ICP备14008679号