数字图像处理matlab代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、编写程序完成不同滤波器的图像频域降噪和边缘增强的算法并进行比较,得出结论。
1、不同滤波器的频域降噪
1.1 理想低通滤波器(ILPF)
I1=imread('eight.tif'); %读取图像
I2=im2double(I1);
I3=imnoise(I2,'gaussian',0.01);
I4=imnoise(I3,'salt & pepper',0.01);
figure,subplot(1,3,1);
imshow(I2) %显示灰度图像
title('原始图像'); %为图像添加标题
subplot(1,3,2);
imshow(I4) %加入混合躁声后显示图像
title('加噪后的图像');
s=fftshift(fft2(I4)); %将灰度图像的二维不连续Fourier 变换的零频率成分
移到频谱的中心
[M,N]=size(s); %分别返回s的行数到M中,列数到N中n1=floor(M/2); %对M/2进行取整
n2=floor(N/2); %对N/2进行取整
d0=40; %初始化d0
for i=1:M
for j=1:N
d=sqrt((i-n1)^2+(j-n2)^2); %点(i,j)到傅立叶变换中心的距离 if d<=d0 %点(i,j)在通带内的情况
h=1; %通带变换函数
else %点(i,j)在阻带内的情况
h=0; %阻带变换函数
end
s(i,j)=h*s(i,j); %ILPF滤波后的频域表示
end
end
s=ifftshift(s); %对s进行反FFT移动
s=im2uint8(real(ifft2(s))); %对s进行二维反离散的Fourier变换后,取复
数的实部转化为无符号8位整数
subplot(1,3,3); %创建图形图像对象
imshow(s); %显示ILPF滤波后的图像
title('ILPF滤波后的图像(d=40)');
运行结果:
1.2 二阶巴特沃斯低通滤波器(BLPF)
I1=imread('eight.tif'); %读取图像
I2=im2double(I1);
I3=imnoise(I2,'gaussian',0.01);
I4=imnoise(I3,'salt & pepper',0.01);
figure,subplot(1,3,1);
imshow(I2) %显示灰度图像
title('原始图像'); %为图像添加标题
subplot(1,3,2);
imshow(I4) %加入混合躁声后显示图像
title('加噪后的图像');
s=fftshift(fft2(I4));%将灰度图像的二维不连续Fourier 变换的零频率成分
移到频谱的中心
[M,N]=size(s); %分别返回s的行数到M中,列数到N中n=2; %对n赋初值
n1=floor(M/2); %对M/2进行取整
n2=floor(N/2); %对N/2进行取整
d0=40; %初始化d0
for i=1:M
for j=1:N
d=sqrt((i-n1)^2+(j-n2)^2); %点(i,j)到傅立叶变换中心的距离 h=1/(1+(d/d0)^(2*n)); %BLPF滤波函数
s(i,j)=h*s(i,j); %ILPF滤波后的频域表示
end
end
s=ifftshift(s); %对s进行反FFT移动
s=im2uint8(real(ifft2(s))); %对s进行二维反离散的Fourier变换后,取
复数的实部转化为无符号8位整数
subplot(1,3,3); %创建图形图像对象
imshow(s); %显示ILPF滤波后的图像
title('BLPF滤波后的图像(d=40)');
实验结果:
1.3 指数型低通滤波器(ELPF)
I1=imread('eight.tif'); %读取图像
I2=im2double(I1);
I3=imnoise(I2,'gaussian',0.01);
I4=imnoise(I3,'salt & pepper',0.01);
figure,subplot(1,3,1);
imshow(I2) %显示灰度图像
title('原始图像'); %为图像添加标题
subplot(1,3,2);
imshow(I4) %加入混合躁声后显示图像
title('加噪后的图像');
s=fftshift(fft2(I4));%将灰度图像的二维不连续Fourier 变换的零频率成分
移到频谱的中心
[M,N]=size(s); %分别返回s的行数到M中,列数到N中n1=floor(M/2); %对M/2进行取整
n2=floor(N/2); %对N/2进行取整
d0=40;
for i=1:M
for j=1:N
d=sqrt((i-n1)^2+(j-n2)^2); %点(i,j)到傅立叶变换中心的距离 h=exp(log(1/sqrt(2))*(d/d0)^2);
s(i,j)=h*s(i,j); %ILPF滤波后的频域表示
end
end
s=ifftshift(s); %对s进行反FFT移动
s=im2uint8(real(ifft2(s))); %对s进行二维反离散的Fourier变换后,取
复数的实部转化为无符号8位整数
subplot(1,3,3); %创建图形图像对象
imshow(s); %显示ILPF滤波后的图像
title('ELPF滤波后的图像(d=40)');
运行结果: