利用低通滤波器和陷波滤波器对数字图像进行频域滤波

来源:互联网 发布:华为手机保护套淘宝网 编辑:程序博客网 时间:2024/06/16 13:10

1. 对图像做傅里叶变换,得到其频域图像

2 设计理想低通滤波器

3.滤波并显示结果图像

 4.设计陷波滤波器

5 滤波显示结果图像查看不同参数的效

matlab代码:

clear all;

close all;

clc;

%1.对图像做傅里叶变换,得到其频域图像

src = im2double(imread('image3.bmp'));

src = rgb2gray(src);

subplot(2,3,1);

imshow(src);

title('原始图像');

[w,h] = size(src);

 

srcf = fft2(src);

srcf = fftshift(srcf);%将频率为0的分量移到图像中心

%srcF = abs(srcf)

subplot(2,3,2);

imshow(srcf);

title('将频率为0的分量移到图像中心');

 

%2.设计理想低通滤波器

%定义低通滤波器

flt = zeros(size(src));

%滤波器圆心

rx1 = w / 2;

ry1 = h / 2;

r = min(w,h)/3;%半径

for i = 1:w

    for j = 1:h

        if(i-rx1)^2+(j-ry1)^2 <= r*r

            flt(i,j) = 1;

        end

    end

end    

 

%3.滤波并显示结果图像

subplot(2,3,3);

imshow(flt);

title('低通滤波器图像');

dFImg = srcf.*flt;

dFImg = ifftshift(dFImg);

dImg = ifft2(dFImg,'symmetric');

subplot(2,3,4);

imshow(dImg);

title('低通滤波器滤波图像')

 

%2.设计理想陷波滤波器

%定义陷波滤波器

flt = zeros(size(src));

%滤波器圆心

rx1 = w / 4;

ry1 = h / 2;

rx2 = w * 3 / 4;

ry2 = h / 2;

r = min(w,h)/7%半径

for i = 1:w

    for j = 1:h

        if(i-rx1)^2+(j-ry1)^2 >= r*r && (i-rx2)^2+(j-ry2)^2 >= r*r

            flt(i,j) = 1;

        end

    end

end

 

%3.滤波并显示结果图像

subplot(2,3,5);

imshow(flt);

title('陷波滤波器图像');

dFImg = srcf.*flt;

dFImg = ifftshift(dFImg);

dImg = ifft2(dFImg,'symmetric');

subplot(2,3,6);

imshow(dImg);

title('陷波滤波器滤波图像')

实验结果截图:

圆半径为r = min(w,h)/4时:


5:

7:

8:


可以看出圆半径为7左右时滤波效果比较好


0 0
原创粉丝点击