前言:本篇博客先介绍滤波器滤除噪声,再介绍滤波器复原,侧重于程序的实现。

一:三种常见的噪声

图像复原MATLAB实现-LMLPHP

图像复原MATLAB实现-LMLPHP

图像复原MATLAB实现-LMLPHP

二:空间域滤波

空间域滤波复原是在已知噪声模型的基础上,对噪声的空间域进行滤波。
空间域滤波复原方法主要包括:

  均值滤波器

    算术均值滤波器

    几何均值滤波器
    谐波均值滤波器
    逆谐波均值滤波器
  顺序统计滤波器
    中值滤波器
    最大值/最小值滤波器

2.1算数均值滤波器

图像复原MATLAB实现-LMLPHP

 img=imread('D:/picture/ZiXia.jpg');
img=rgb2gray(img);
figure,imshow(img);//原图
img_noise=double(imnoise(img,'gaussian',0.06));
figure,imshow(img_noise,[]);//含有高斯噪声的图
img_mean=imfilter(img_noise,fspecial('average',));//滤波后的图
figure;imshow(img_mean,[]);

图像复原MATLAB实现-LMLPHP

2.2几何均值滤波器

图像复原MATLAB实现-LMLPHP

 img=imread('cameraman.tif');
img=rgb2gray(img);
figure,imshow(img);
img_noise=double(imnoise(img,'gaussian',0.06));
figure,imshow(img_noise,[]);
img_mean=exp(imfilter(log(img_noise+),fspecial('average',)));
figure;imshow(img_mean,[]);

图像复原MATLAB实现-LMLPHP

2.3谐波均值滤波器

图像复原MATLAB实现-LMLPHP

2.4逆谐波均值滤波器

图像复原MATLAB实现-LMLPHP

图像复原MATLAB实现-LMLPHP

采用逆谐波均值滤波器对附加胡椒噪声图像进行滤波的matlab程序如下:

 img=imread('cameraman.tif');  figure,imshow(img);
[M,N]=size(img);R=imnoise2('salt & pepper',M,N,0.1,);
img_noise=img;img_noise(R==)=;
img_noise=double(img_noise); figure,imshow(img_noise,[]);
Q=1.5;
img_mean=imfilter(img_noise.^(Q+),fspecial('average',))./imfilter(img_noise.^Q,fspecial('average',));
figure;imshow(img_mean,[]);

图像复原MATLAB实现-LMLPHP

采用逆谐波均值滤波器对附加盐噪声图像进行滤波的matlab程序如下:

 img=imread('csboard.tif');figure,imshow(img);
[M,N]=size(img);R=imnoise2('salt & pepper',M,N,,0.1);
img_noise=img;img_noise(R==)=;
img_noise=double(img_noise); figure,imshow(img_noise,[]);
Q=-1.5;
img_mean=imfilter(img_noise.^(Q+),fspecial('average',))./imfilter(img_noise.^Q,fspecial('average',));
figure;imshow(img_mean,[]);

图像复原MATLAB实现-LMLPHP

2.5中值滤波器

图像复原MATLAB实现-LMLPHP

图像复原MATLAB实现-LMLPHP

图像复原MATLAB实现-LMLPHP

 img=imread('cameraman.tif');
img_noise=double(imnoise(img,'salt & pepper',0.06));
img_mean=imfilter(img_noise,fspecial('average',));
img_median=medfilt2(img_noise);%一次中值滤波
img_median2=medfilt2(img_median);%二次中值滤波

图像复原MATLAB实现-LMLPHP

2.6最大值,最小值滤波器

图像复原MATLAB实现-LMLPHP

图像复原MATLAB实现-LMLPHP

图像复原MATLAB实现-LMLPHP

利用最大值滤波器消除胡椒噪声污染图像的matlab程序如下。

 img=imread('csboard.tif');
[M,N]=size(img);
R=imnoise2('salt & pepper',M,N,0.1,);
img_noise=img;
img_noise(R==)=;
img_noise=double(img_noise);
imwrite(uint8(img_noise),'csbord_pepper.jpg');
img_max=imdilate(img_noise,ones(,));
imwrite(uint8(img_max),'cameraman_saltpepper_max.jpg');

图像复原MATLAB实现-LMLPHP

利用最小值滤波器消除盐噪声污染图像的matlab程序如下。

 img=imread('csboard.tif');
[M,N]=size(img);
R=imnoise2('salt & pepper',M,N,,0.1);
img_noise=img;
img_noise(R==)=;
img_noise=double(img_noise);
imwrite(uint8(img_noise),'csbord_salt.jpg');
img_min=imerode(img_noise,ones(,));
imwrite(uint8(img_min),'cameraman_saltpepper_min.jpg');

图像复原MATLAB实现-LMLPHP

2.7带阻滤波器

图像复原MATLAB实现-LMLPHP

图像复原MATLAB实现-LMLPHP

图像复原MATLAB实现-LMLPHP

图像复原MATLAB实现-LMLPHP

 I=imread('pout.tif');
[m,n]=size(I);
J=I;
for i=:m
for j=:n
J(i,j)=I(i,j)+*sin(*i)+*sin(*j);%增加周期性噪声
end
end
IF=fftshift(fft2(I));
JF=fftshift(fft2(J));
IF=log(+abs(IF));
JF=log(+abs(JF)); subplot()%显示频谱
imshow(IF,[])
subplot()
imshow(JF,[])
%高斯带阻滤波器构造
fbrf=ones(m,n);
for i=:m
for j=:n
fbrf(i,j)=-exp(-0.5*(((i-m/)^+(j-n/)^-^)/(sqrt(i.^+j.^)*))^);%20为带阻中心,5为带宽
end
end
H=fbrf;
%频率域滤波
f=fftshift(fft2(J));
out=f.*H;%频率域滤波
out=ifft2(ifftshift(out));
out=abs(out);
out=out/max(out(:));%归一化【,】
subplot()
imshow(out,[]);
subplot()
imshow(J,[])

图像复原MATLAB实现-LMLPHP

图像复原MATLAB实现-LMLPHP

2.8带通滤波器

图像复原MATLAB实现-LMLPHP

2.9陷波滤波器

图像复原MATLAB实现-LMLPHP

图像复原MATLAB实现-LMLPHP

图像复原MATLAB实现-LMLPHP

图像复原MATLAB实现-LMLPHP

图像复原MATLAB实现-LMLPHP

 clear;
close all;
src = im2double(imread('D:/picture/ZiXia.jpg'));
src = rgb2gray(src);
subplot()
imshow(src);
title('原始图像');
[w h] = size(src);
srcf = fft2(src);
srcf = fftshift(srcf);
subplot()
imshow(srcf);
% 低通滤波
% flt = zeros(size(src));
% rx1 = w/;
% ry1 = h/;
% r = min(w,h)/;
% for i = :w
% for j = :h
% if(rx1-i)^ +(ry1 - j)^ <= r*r
% flt(i,j) = ;
% end
% end
% end
% 陷波滤波
flt = ones(size(src));
r = min(w,h)/;
rx1 = r
ry1 =h/
for i = :w
for j = :h
if(rx1-i)^ +(ry1 - j)^ <= r*r
flt(i,j) = ;
end
if(w-rx1-i)^ +(h-ry1 - j)^ <= r*r
flt(i,j) = ;
end
end
end
subplot()
imshow(flt);
title('滤波器图像');
dfimg = srcf.*flt;
dfimg = ifftshift(dfimg);
dimg = ifft2(dfimg,'symmetric');
subplot()
imshow(dimg):title('滤波后');

图像复原MATLAB实现-LMLPHP

2.9逆滤波

图像复原MATLAB实现-LMLPHP

 image_o=imread('D:/picture/lenagray.jpg');
subplot(,,);
imshow(image_o);
title('原图像');
%频率域退化图像,退化函数H(u,v)=exp(-0.0025*( (u-M/).^+(v-N/).^).^(/) )
%傅里叶变换
f=im2double(image_o);
F=fft2(f);
F=fftshift(F);
%执行退化
[M,N]=size(F);
[u,v]=meshgrid(:M,:N);%生成二维坐标系
H=exp(-0.0025* ( (u-M/).^+(v-N/).^).^(/) );
F=F.*H;
%傅里叶反变换
X=ifftshift(F);
x=ifft2(X);
x=uint8(abs(x)*);
subplot(,,);
imshow(x);
%
title('退化图像'); image_d=x;
%直接逆滤波图像复原 ff=im2double(image_d);%将图像灰度值归一化到0-1之间 % 傅里叶变换
f_Id=fft2(ff);
f_Id=fftshift(f_Id);
fH_Id=f_Id;
[M,N]=size(fH_Id);
% 逆滤波
threshold=;
if threshold>M/
%全滤波
fH_Id=fH_Id./(H+eps);
else
%对一定半径范围内进行滤波
for i=:M
for j=:N
if sqrt((i-M/).^+(j-N/).^)<threshold
fH_Id(i,j)=fH_Id(i,j)./(H(i,j)+eps);
end
end
end
end % 执行傅立叶逆变换
fH_Id1=ifftshift(fH_Id);
f_new=ifft2(fH_Id1);
f_new=uint8(abs(f_new)*);
subplot(,,);
imshow(f_new);
title('滤波半径=78的逆滤波复原图像');

图像复原MATLAB实现-LMLPHP

2.10维纳滤波

图像复原MATLAB实现-LMLPHP

图像复原MATLAB实现-LMLPHP

图像复原MATLAB实现-LMLPHP

图像复原MATLAB实现-LMLPHP

直接截图了,没敲

图像复原MATLAB实现-LMLPHP

图像复原MATLAB实现-LMLPHP

05-11 20:55