数字图像处理学习记录
实验内容
(1)基于均值滤波器的图像复原。
img=imread('cameraman.tif');%读取图片
subplot(2,3,1);
imshow(img); %显示图像
title(''),xlabel('原图');
img_noise=double(imnoise(img,'gaussian',0.06)); %对图像附加高斯噪声
subplot(2,3,2);
imshow(img_noise,[]); %显示加噪图像
title(''),xlabel('高斯噪声污染的图像');
img_mean=imfilter(img_noise,fspecial('average',3));%对附加有高斯噪声的图像实行均值滤波器
subplot(2,3,3);
imshow(img_mean,[]);%显示算术均值滤波后的图像
title(''),xlabel('用3x3算数均值滤波器滤波');
img_mean=exp(imfilter(log(img_noise),fspecial('average',3)));%对附加有高斯噪声的图像实施几何均值滤波
subplot(2,3,4);
imshow(img_mean,[]);
title(''),xlabel('3x3的几何均值滤波器滤波');
Q=-1.5; %对高斯噪声图像进行Q取负值的逆谐波滤波
img_mean=imfilter(img_noise.^(Q+1),fspecial('average',3))./imfilter(img_noise.^Q,fspecial(('average'),3));
subplot(2,3,5);
imshow(img_mean,[]);
title(''),xlabel('Q=-1.5的逆谐波滤波器滤波');
Q=1.5; %对高斯噪声图像进行Q取正数的逆谐波滤波
img_mean=imfilter(img_noise.^(Q+1),fspecial('average',3))./imfilter(img_noise.^Q,fspecial(('average'),3));
subplot(2,3,6);
imshow(img_mean,[]);
title(''),xlabel('Q=1.5的逆谐波滤波器滤波');
(2)基于顺序统计滤波器的图像复原。
img=imread('cameraman.tif');%读取图片
subplot(2,3,1);
imshow(img); %显示图像
title(''),xlabel('原图');
img_noise=double(imnoise(img,'salt & pepper',0.06));%加“椒盐”噪声
subplot(2,3,2);
imshow(img_noise,[]); %显示图像
title(''),xlabel('椒盐噪声污染的图像');
img_mean=imfilter(img_noise,fspecial('average',5));%对附加“椒盐”噪声的图像实行算术均值滤波
subplot(2,3,3);
imshow(img_mean,[]); %显示图像
title(''),xlabel('均值滤波结果');
img_median=medfilt2(img_noise);%对附加“椒盐”噪声的图像实行中值滤波
subplot(2,3,4);
imshow(img_median,[]); %显示图像
title(''),xlabel('中值滤波结果');
img_median2=medfilt2(img_noise);
subplot(2,3,5);
imshow(img_median2,[]); %显示图像
title(''),xlabel('再次中值滤波结果');
(3)基于带阻滤波器的图像复原。
img=imread('lenazhouqizaosheng.jpg');%读取图片
[M,N]=size(img);%得到图像的高度和宽度
subplot(2,2,1);
imshow(img); %显示图像
title(''),xlabel('含有周期噪声的原图');
IF=fftshift(fft2(img)); %对加噪图像进行傅里叶变换,并将原点移至中心点
IFV=log(1+abs(IF)); %加噪图像的频谱
subplot(2,2,2);
imshow(IFV,[]); %显示加噪图像的频谱
title(''),xlabel('加噪图像的频谱');
freg=50; %设置带阻滤波器的中心频率
width=5; %设置带阻滤波器的频带宽度
ff=ones(M,N);
for i=1:M
for j=1:N
ff(i,j)=1-exp(-0.5*((((i-M/2)^2+(j-N/2)^2)-freg^2)/(sqrt((i-M/2)^2+(j-N/2)^2)*width))^2);%高斯带阻滤波器
end
end
subplot(2,2,3);
imshow(ff,[]); %显示高斯带阻滤波器
title(''),xlabel('高斯带阻滤波器');
out=IF.*ff; %矩阵点乘实现频域滤波
out=ifftshift(out); %原点移回左上角
out=ifft2(out); %傅里叶变换
out=abs(out); %取绝对值
out=out/max(out(:)); %归一化
subplot(2,2,4);
imshow(out,[]); %显示滤波结果
title(''),xlabel('滤波效果图');