带阻滤波器的传递函数为:
D0为截止半径(或是截止宽度)
D1、D2由下式确定,表示与(u0,v0)和(-u0,v0)点的距离,此时(u0,v0)是在频域中心为坐标原点表示的,所以是对称关系。
使用二阶巴斯沃特带阻滤波器对周期噪声图像滤波:
噪声图像如下:
首先观察其频谱,了解周期噪声分布:
噪声分布在频域图像的竖直方向,在水平方向上没有。画频域图像中心竖直方向的频谱,得到噪声起始两点的位置,分别距离图像上边137和201,即u0=137,u1=201,v0=v,v1=v 。
由此构造如下带阻滤波器
滤波器和频域图像相乘得到以下图像
最终得到的图像
具体Matlab代码如下(以图像左上方为坐标原点):
clc;
clear;
close all;
img=imread('5.png');
img=rgb2gray(img);
subplot(331),imshow(img),title('原图');
F=fftshift(fft2(img));
subplot(332),imshow(log(abs(F)+1),[]),title('频域图像');
[M,N]=size(F);
subplot(333),plot(abs(F(:,round(N/2)))),title('中心竖直线上频谱');
u=0:M-1;v=0:N-1;
[V,U]=meshgrid(v,u);
D0=14;
n=2;
u0=137;u1=201;
D1=abs(U-u0);
D2=abs(U-u1);
H=1./(1+(D0^2./(D1.*D2)).^n);
subplot(334),imshow(abs(H),[]),title('滤波器图像表示');
subplot(335),mesh(H),title('滤波器透视图');
G=F.*H;
subplot(336),imshow(log(abs(G)+1),[]),title('滤波后的频域图像');
g=real(ifft2(ifftshift(G)));
subplot(337),imshow(g,[]),title('滤波图像');