数字图像的频域处理

         **

数字图像的频域处理

实验目的:
1.强化理解频域滤波器的作用。
2.设计不同的滤波器,并对图像处理结果进行分析。
实验内容和要求:
1.验证从空间滤波器获得频率域滤波器,并用转换后的滤波器实现频域滤波。(平滑、锐化的空间滤波器至少各选一种)
2.在频域中直接生成滤波器:
1)分别采用理想低通滤波器、巴特沃斯低通滤波器和高斯低通滤波器,截止频率自选,再做反变换,观察不同的截止频率下采用不同低通滤波器得到的图像与原图像的区别;
2)分别采用理想高通滤波器、巴特沃斯高通滤波器和高斯高通滤波器对其进行滤波(截至频率自选),再做反变换,观察不同的截止频率下采用不同高通滤波器得到的图像与原图像的区别。

运行结果(写清题号)
验证从空间滤波器获得频率域滤波器,并用转换后的滤波器实现频域滤波。(平滑、锐化的空间滤波器至少各选一种)
平滑滤波器代码原理:

f=imread('rice.tif');
subplot(221);imshow(f);title('原图像');
f=tofloat(f);
F=fft2(f);
S=fftshift(log(1+abs(F)));%log:幅度谱
subplot(222);imshow(S,[]);title('傅里叶居中处理');
h=fspecial('sobel');%sobel算子
PQ=paddedsize(size(f));%计算填充尺寸
H=freqz2(h,PQ(1),PQ(2));%空间滤波器转换成相应的频率滤波器
H1=ifftshift(H);
subplot(223);imshow(abs(H),[]);title('频率域居中');
subplot(224);imshow(abs(H1),[]);title('频率域分散');

运行图:
在这里插入图片描述

锐化滤波器代码原理:

f=imread('rice.tif');
%subplot(221);imshow(f);title('原图像');
f=tofloat(f);
F=fft2(f);
S=fftshift(log(1+abs(F)));%log:幅度谱
%subplot(222);imshow(S,[]);title('傅里叶居中处理');
h=fspecial('sobel');%sobel算子
PQ=paddedsize(size(f));%计算填充尺寸
H=freqz2(h,PQ(1),PQ(2));
H1=ifftshift(H);
%imshow(abs(H),[]);%title('1');
%figure,imshow(abs(H1),[]);%title('2');
gs=imfilter(f,h);
gf=dftfilt(f,H1);
subplot(231);imshow(gs,[]);
subplot(232);imshow(gf,[]);
subplot(233);imshow(abs(gs),[]);
subplot(234);imshow(abs(gf),[]);
subplot(235);imshow(abs(gs)>0.2*abs(max(gs(:))));
subplot(236);imshow(abs(gf)>0.2*abs(max(gs(:))));

运行图:
在这里插入图片描述

在频域中直接生成滤波器:
3)分别采用理想低通滤波器、巴特沃斯低通滤波器和高斯低通滤波器,截止频率自选,再做反变换,观察不同的截止频率下采用不同低通滤波器得到的图像与原图像的区别;
代码实现原理:%%PPT,此题还要针对不同滤波器做不同截止频率的对比

clear all;
I=imread('rice.tif');
subplot(221);imshow(I);title('原始图像');
I=im2double(I);
M=2*size(I,1);
N=2*size(I,2);
u=-M/2:(M/2-1);
v=-N/2:(N/2-1);
[U,V]=meshgrid(u,v);
D=sqrt(U.^2+V.^2);
D0=80;
H1=double(D<=D0);
J1=fftshift(fft2(I,size(H1,1),size(H1,2)));%时域图像转换为频域
K1=J1.*H1;
L1=ifft2(ifftshift(K1));%频域图像转换为时频
L1=L1(1:size(I,1),1:size(I,2));
subplot(222);imshow(L1);title('理想低通滤波器');
n=6;
H2=1./(1+(D./D0).^(2*n));
J2=fftshift(fft2(I,size(H2,1),size(H2,2)));%时域图像转换为频域
K2=J2.*H2;
L2=ifft2(ifftshift(K2));%频域图像转换为时频
L2=L2(1:size(I,1),1:size(I,2));
subplot(223);imshow(L2);title('巴特沃斯低通滤波器');
H3=exp(-(D.^2)./(2*(D0.^2)));
J3=fftshift(fft2(I,size(H3,1),size(H3,2)));
K3=J3.*H3;
L3=ifft2(ifftshift(K3));%频域图像转换为时频
L3=L3(1:size(I,1),1:size(I,2));
subplot(224);imshow(L3);title('高斯低通滤波器');

运行图:
在这里插入图片描述

理想低通滤波:%不同滤波截止频率的对比

img=imread('rice.tif');
i=double(img);
g=fft2(i);
g=fftshift(g);
[M,N]=size(g);
d0=15;
m=fix(M/2);
n=fix(N/2);
for i=1:M
    for j=1:N
        d=sqrt((i-m)^2+(j-n)^2);
        if(d<=d0)
            h=1;
        else
            h=0;
        end
        result(i,j)=h*g(i,j);
    end
end
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1));
figure,subplot(221),imshow(img),title('Original image');
subplot(222),imshow(J2),title('d0=15的低通滤波器');
%%%%%%d0=30的理想低通滤波器
d0=30;
m=fix(M/2);
n=fix(N/2);
for i=1:M
    for j=i:N
        d=sqrt((i-m)^2+(j-n)^2);
        if(d<=d0)
            h=1;
        else
            h=0;
        end
        result(i,j)=h*g(i,j);
    end
end
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1));
subplot(223),imshow(J2),title('d0=30的低频滤波器');
%%%%d0=100的理想滤波器
d0=100;
m=fix(M/2);
n=fix(N/2);
for i=1:M
    for j=i:N
        d=sqrt((i-m)^2+(j-n)^2);
        if(d<=d0)
            h=1;
        else
            h=0;
        end
        result(i,j)=h*g(i,j);
    end
end
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1));
subplot(224),imshow(J2),title('d0=100的低频滤波器');

在这里插入图片描述

当截止频率d0=15时,滤波后的图像比较模糊,振铃现象很明显;当d0=30时,图像模糊程度减弱,振铃现象仍存在;当d0=100时,滤波后的图像比较清晰,但高频分量损失后,图像边沿仍然存在一点振铃现象。

巴特沃斯低通滤波:

img=imread('rice.tif');
i=double(img);
g=fft2(i);
g=fftshift(g);
[M,N]=size(g);
nn=2;
d0=15;
m=fix(M/2);
n=fix(N/2);
for i=1:M
    for j=1:N
        d=sqrt((i-m)^2+(j-n)^2);
        h=1/(1+0.414*(d/d0)^(2*nn));
        result(i,j)=h*g(i,j);
    end
end
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1));
figure,subplot(221),imshow(img),title('Original image');
subplot(222),imshow(J2),title('d0=15的巴特沃斯低通滤波');
%%%%%d0=30的巴特沃斯低通滤波
d0=30
m=fix(M/2);
n=fix(N/2);
for i=1:M
    for j=1:N
        d=sqrt((i-m)^2+(j-n)^2);
        h=1/(1+0.414*(d/d0)^(2*nn));
        result(i,j)=h*g(i,j);
    end
end
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1));
subplot(223),imshow(J2),title('d0=30的巴特沃斯低通滤波');
d0=100;
m=fix(M/2);
n=fix(N/2);
for i=1:M
    for j=1:N
        d=sqrt((i-m)^2+(j-n)^2);
        h=1/(1+0.414*(d/d0)^(2*nn));
        result(i,j)=h*g(i,j);
    end
end
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1));
subplot(224),imshow(J2),title('d0=100的巴特沃斯低通滤波');

在这里插入图片描述

采用截止频率为15,30,100分别进行试验,滤波后的图像逐渐清晰,整体的振铃现象没有理想低通滤波器严重。

高斯低通滤波:

%%高斯低通滤波
img=imread('rice.tif');
i=double(img);
g=fft2(i);
g=fftshift(g);
[M,N]=size(g);
d0=15;
m=fix(M/2);
n=fix(N/2);
for i=1:M
    for j=1:N
        d=sqrt((i-m)^2+(j-n)^2);
        h=exp(-(d.^2)./(2*(d0^2)));
        result(i,j)=h*g(i,j);
    end
end
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1));
figure,subplot(221),imshow(img),title('Original image');
subplot(222),imshow(J2),title('d0=15的高斯低通滤波器');
%d0=30的高斯低通滤波
d0=30;
m=fix(M/2);
n=fix(N/2);
for i=1:M
    for j=1:N
        d=sqrt((i-m)^2+(j-n)^2);
        h=exp(-(d.^2)./(2*(d0^2)));
        result(i,j)=h*g(i,j);
    end
end
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1));
subplot(223),imshow(J2),title('d0=30的高斯低通滤波器');
%%%%d0=100的高斯低通滤波
d0=100;
m=fix(M/2);
n=fix(N/2);
for i=1:M
    for j=1:N
        d=sqrt((i-m)^2+(j-n)^2);
        h=exp(-(d.^2)./(2*(d0^2)));
        result(i,j)=h*g(i,j);
    end
end
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1));
subplot(224),imshow(J2),title('d0=100的高斯低通滤波器');

在这里插入图片描述

对比可知,高斯滤波的平滑效果不如巴特沃斯滤波器,但用高斯滤波后的图像无振铃现象。

4)分别采用理想高通滤波器、巴特沃斯高通滤波器和高斯高通滤波器对其进行滤波(截至频率自选),再做反变换,观察不同的截止频率下采用不同高通滤波器得到的图像与原图像的区别。
理想高通滤波器:

%理想高通滤波
img=imread('rice.tif');
i=double(img);
g=fft2(i);
g=fftshift(g);
[M,N]=size(g);
d0=15;
m=fix(M/2);
n=fix(N/2);
for i=1:M
    for j=1:N
        d=sqrt((i-m)^2+(j-n)^2);
        if(d>=d0)
            h=1;
        else
            h=0;
        end
        result(i,j)=h*g(i,j);
    end
end
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1));
figure,subplot(221),imshow(img),title('Original image');
subplot(222),imshow(J2),title('d0=15的高通滤波器');
%%%%%%d0=30的理想高通滤波器
d0=30;
m=fix(M/2);
n=fix(N/2);
for i=1:M
    for j=i:N
        d=sqrt((i-m)^2+(j-n)^2);
        if(d>=d0)
            h=1;
        else
            h=0;
        end
        result(i,j)=h*g(i,j);
    end
end
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1));
subplot(223),imshow(J2),title('d0=30的高通滤波器');
%%%%d0=80的理想高通滤波器
d0=80;
m=fix(M/2);
n=fix(N/2);
for i=1:M
    for j=i:N
        d=sqrt((i-m)^2+(j-n)^2);
        if(d>=d0)
            h=1;
        else
            h=0;
        end
        result(i,j)=h*g(i,j);
    end
end
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1));
subplot(224),imshow(J2),title('d0=80的高通滤波器');

在这里插入图片描述

当d0=15时,滤波后的图像灰度变换部分基本保留;
当d0=30时,图像的轮廓还能看到;
当d0=80时,只能看到细微轮廓。

巴特沃斯高通滤波器:

%巴特沃斯高通滤波
img=imread('rice.tif');
i=double(img);
g=fft2(i);
g=fftshift(g);
[M,N]=size(g);
nn=2;
d0=15;
m=fix(M/2);
n=fix(N/2);
for i=1:M
    for j=1:N
        d=sqrt((i-m)^2+(j-n)^2);
        if(d==0)
            h=0;
        else
        h=1-1/(1+0.414*(d/d0)^(2*nn));
        end
        result(i,j)=h*g(i,j);
    end
end
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1));
figure,subplot(221),imshow(img),title('Original image');
subplot(222),imshow(J2),title('d0=15的巴特沃斯高通滤波');
%%%%%d0=30的巴特沃斯高通滤波
d0=30
m=fix(M/2);
n=fix(N/2);
for i=1:M
    for j=1:N
        d=sqrt((i-m)^2+(j-n)^2);
        if(d==0)
            h=0;
        else
        h=1-1/(1+0.414*(d/d0)^(2*nn));
        end
        result(i,j)=h*g(i,j);
    end
end
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1));
subplot(223),imshow(J2),title('d0=30的巴特沃斯高通滤波');
d0=80;
m=fix(M/2);
n=fix(N/2);
for i=1:M
    for j=1:N
        d=sqrt((i-m)^2+(j-n)^2);
        if(d==0)
            h=0;
        else
        h=1-1/(1+0.414*(d/d0)^(2*nn));
        end
        result(i,j)=h*g(i,j);
    end
end
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1));
subplot(224),imshow(J2),title('d0=80的巴特沃斯高通滤波');

在这里插入图片描述

滤波结果比理想高通滤波器更加平滑,边缘失真情况较小。

高斯高通滤波器:

%%高斯低通滤波
img=imread('rice.tif');
i=double(img);
g=fft2(i);
g=fftshift(g);
[M,N]=size(g);
nn=2;
d0=15;
m=fix(M/2);
n=fix(N/2);
for i=1:M
    for j=1:N
        d=sqrt((i-m)^2+(j-n)^2);
        h=1-exp(-(d.^2)./(2*(d0^2)));
        result(i,j)=h*g(i,j);
    end
end
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1));
figure,subplot(221),imshow(img),title('Original image');
subplot(222),imshow(J2),title('d0=15的高斯低通滤波器');
%d0=30的高斯低通滤波
d0=30;
m=fix(M/2);
n=fix(N/2);
for i=1:M
    for j=1:N
        d=sqrt((i-m)^2+(j-n)^2);
        h=1-exp(-(d.^2)./(2*(d0^2)));
        result(i,j)=h*g(i,j);
    end
end
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1));
subplot(223),imshow(J2),title('d0=30的高斯低通滤波器');
%%%%d0=80的高斯低通滤波
d0=80;
m=fix(M/2);
n=fix(N/2);
for i=1:M
    for j=1:N
        d=sqrt((i-m)^2+(j-n)^2);
        h=1-exp(-(d.^2)./(2*(d0^2)));
        result(i,j)=h*g(i,j);
    end
end
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1));
subplot(224),imshow(J2),title('d0=80的高斯低通滤波器');

在这里插入图片描述

实验的体会与思考题
1.分析频域滤波和空域滤波的各自特点
从空域和频域低通滤波器对图片的滤波效果来看,空域滤波中,平滑滤波器算法简单,处理速度快,但在降低噪声的同时使图像产生模糊,特别是在边缘和细节处。而中值滤波器对椒盐噪声的抑制比较好,但对点,线较多的图像不太合适。空域低通滤波对椒盐噪声过滤效果较差,图像较为模糊。而在频域滤波中,去噪的同时将会导致图像边缘信息损失而使图像边缘模糊,并且存在振铃效应,而且计算量大,计算时间长。
从空域和频域高通滤波器对图片的滤波效果来看,空域滤波的算法比较简单,处理速度快,在锐化方面效果明显,线条突出;频域滤波中,算法复杂,计算慢,有些许振铃效应,图像效果显示比较平缓。

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值