MATLAB源代码
clear;
clc;
close all;
Image=imread('yuantu.jpg');
I=rgb2gray(Image);
subplot(2,2,1),imshow(Image),title('原始图像');
noisy=imnoise(I,'gaussian'); %添加高斯噪声
f=double(noisy); % 数据类型转换,MATLAB不支持图像的无符号整型计算
f=fft2(f);
g=fftshift(f);
[N, M]=size(g);
%巴特沃斯低通滤波
r1=fix(M/2);
r2=fix(N/2);
d0=60;
n=2;
for j=1:M
for m=1:N
d=sqrt((j-r1)^2+(m-r2)^2);
h=1/(1+(d/d0)^(2*n));
s(m,j)=h*g(m,j);
end
end
s=ifftshift(s);
s=real(ifft2(s));
s=uint8(s);
subplot(2,2,2),imshow(s),title('巴特沃斯低通滤波');
%指数低通滤波
r1=round(M/2);
r2=round(N/2);
d0=60;
n=1;
for j=1:M
for m=1:N
d=sqrt((j-r1)^2+(m-r2)^2);
h=exp(-(d/d0)^n);
x(m,j)=h*g(m,j);
end
end
x=ifftshift(x);
x=real(ifft2(x));
x=uint8(x);
subplot(2,2,3),imshow(x),title('指数低通滤波');
%梯形低通滤波
[f1,f2]=freqspace(size(I),'meshgrid'); %生成频率矩阵序列
d0=0.1;
d1=0.4;
r=sqrt(f1.^2+f2.^2);
hd=zeros(size(I));
hd(r<d0)=1;
for i=1:size(I,1)
for j=1:size(I,2)
if r(i,j)>=d0&r(i,j)<=d1
hd(i,j)=(d1-r(i,j))/(d1-d0);
end
end
end
Y=fft2(double(I));
Y=fftshift(Y);
Ya=Y.*hd;
Ya=ifftshift(Ya);
Ia=real(ifft2(Ya));
subplot(2,2,4),imshow(uint8(Ia)),title('梯形低通滤波');
图像处理结果
编程思路
读取原始图像,对图像进行灰度化处理,添加高斯噪声(或椒盐噪声…),计算傅里叶谱,对傅里叶变换的结果进行平移,然后对图像进行三种滤波处理。巴特沃斯低通滤波:d0表示截止频率,n表示的是巴特沃斯滤波器的阶数,控制曲线的衰减速度。随着阶数n的增加,振铃效应会越来越明显。改变参数,观察参数对图像的影响。指数、梯形低通滤波器同理,根据函数,给定参数。
分析
不同的滤波方法在处理含有不同噪声的图像有不同的效果。更改参数,会产生微小变换。指数低通滤波器没有振铃现象,梯形低通滤波与指数低通滤波器相比较,滤波输出图像有一定的模糊和振铃效应。
说明
有从网上其他作者学习