现在的位置: 首页 > 技术学习 > 技术学习 > 计算机视觉 > 正文

巴特沃斯(Butterworth)滤波器

2015年03月20日 技术学习, 计算机视觉 ⁄ 共 1093字 ⁄ 字号 暂无评论 ⁄ 阅读 745 次

利用巴特沃斯高通滤波器对受噪声干扰的图像进行平滑处理

源程序代码

I=imread('forest.tif');

imshow(I);

f=double(I);     % 数据类型转换,MATLAB不支持图像的无符号整型的计算

g=fft2(f);        % 傅立叶变换

g=fftshift(g);     % 转换数据矩阵

[M,N]=size(g);

nn=2;           % 二阶巴特沃斯(Butterworth)高通滤波器

d0=5;

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+0.414*(d0/d)^(2*nn));%计算传递函数

           end

result(i,j)=h*g(i,j);

end

end

result=ifftshift(result);

J2=ifft2(result);

J3=uint8(real(J2));

figure,imshow(J3);  % 滤波后图像显示

低通滤波器

clc; clear all; close all;
I=imread('rice.png');
figure;
subplot(2, 2, 1); imshow(I); title('原图像');
J1 = imnoise(I, 'salt & pepper');   % 叠加椒盐噪声
subplot(2, 2, 2); imshow(J1); title('加噪声图像');
g = fft2(double(J1));        % 傅立叶变换
g = fftshift(g);             % 转换数据矩阵
[M, N]=size(g);
nn = 2;                      % 二阶巴特沃斯(Butterworth)低通滤波器
d0 = 20;
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);
        T(i, j) = h;
    end
end
result = ifftshift(result);
J2 = ifft2(result);
J3 = uint8(real(J2));
subplot(2, 2, 3); mesh(T); title('滤波器示意图')
box on;
% 显示滤波处理后的图像
subplot(2, 2, 4); imshow(J3); title('滤波结果')结果

给我留言

留言无头像?


×