Halcom 发表于 2017-3-7 21:57:38

巴特沃斯带阻滤波器

function H = freqfilter_btw(M,N,D0,W,n)
% 巴特沃斯带阻滤波器
% input:
%   滤波器的类型,‘btw’
%   M,N:频域滤波器的尺寸
%   D0:带阻滤波器的截止频率
%   n:巴特沃斯滤波器的阶数
% output:
%       H:M xN的矩阵,表示频域滤波器矩阵,数据类型为double,
if nargin == 5
      n=1;
end
u = -M/2:M/2-1;
v = -N/2:N/2-1;
= meshgrid(u,v);
D = sqrt(U.^2+V.^2);

    H = 1./(1+(D*W./(D.^2-D0^2)).^(2*n));
endfunction Z = fftfilt2(X,H)
% 频域滤波
% 函数输入:
%       X:输入的空域图像矩阵,double类型
%       H,频域滤波器,一般为图像X的2倍时较好
% 函数输出:
%       Z:输出的空域图像局长呢,数据类型为double类型
% 二维傅里叶变换
F = fft2(X,size(H,1),size(H,2));
% 傅里叶反变换
Z = H.*F;
Z = ifftshift(Z);
Z = abs(ifft2(Z));
Z = Z(1:size(X,1),1:size(X,2));主程序为:D0 = 50; % 阻止的频率点与频域中心的距离
W = 3;% 带宽
n = 2;% 阶次
im = imread('coloredChips.png');         % 原图像
R = imnoise(im(:,:,1),'gaussian',0,0.01);% R + 白噪声
G = imnoise(im(:,:,2),'gaussian',0,0.01);% G + 白噪声
B = imnoise(im(:,:,3),'gaussian',0,0.01);% B + 白噪声
im = cat(3,R,G,B);                         % 原图像 + 白噪声
H = freqfilter_btw(2*size(R,1),2*size(R,2),D0,W,n);
R1 = fftfilt2(R,H);
G1 = fftfilt2(G,H);
B1 = fftfilt2(B,H);
im1 = cat(3,R1,G1,B1);
im1 = uint8(im1);
figure('color',)
subplot(121),imshow(im,[]); title('原始图像')
subplot(122),imshow(im1,[]); title('巴特沃斯带阻滤波图像')


页: [1]
查看完整版本: 巴特沃斯带阻滤波器