matlab图像复原算法
的有关信息介绍如下:
在一些实际应用中,由于噪声,畸变,系统误差等原因,使得图像并不能完全反映真实的景物,所以需要对图片进行恢复处理,想要对图片进行复原,首先需要了解图片退化的原因,根据原因建立退化模型,然后运用反过程来实现对图片的恢复,并用响应标准来判断图片恢复质量的好坏。Matlab也可以用于对图片进行恢复,图片恢复的主要方法有(1)逆滤波复原法(2)维纳滤波复原法(3)约束的最小二乘方滤波复原法(4)Lucy-Richardson滤波复原法(5)盲去卷积滤波法,下面就这些方法进行介绍:
(1)denconvwnr函数用于进行维纳滤波图像恢复,该函数调用函数如下:
J=denconvwnr(g,PSF,NACORR,FFACORR);
其中,g表示退化图像,J表示恢复图像,NACORR表示噪声自相关函数,FFACORR表示未退化图像的自相关函数
(2)deconvreg函数用于图像的最小二乘方滤波恢复,该函数的调用格式如下:
Deconvreg(I,PSF,NP,LRANGE,REGOP)
其中I表示输入图像,PSF表示点扩散函数,NP,LRANGE,REGOP是可选参数,分别表示图像的噪声强度,拉氏算子的搜索范围和约束算子。
(3)denconvlucy函数用于对图像进行Lucy-Richardson滤波复原,该函数的调用格式如下:
Fr=denconvlucy(g,PSF,NUMIT,DAMPAR,WEIGHT)
其中fr表示恢复图像,g表示退化图像,PSF点扩散函数,NUMEL表示迭代次数,DAMPAR表示恢复图像和原图像之间的差值,WEIGHT表示权重比
(4)deconvblind函数用于对图像进行盲去卷积滤波复原,该函数调用格式如下:
[fr,PSFe]=deconvblind(g,INITPSF);
其中g表示退化图像,INITPSF表示点扩散出错事故,PSFe表示函数最终计算的估算值,fr表示复原图像
逆滤波复原法
如果已知退化图像的傅立叶变换和系统脉冲响应函数(滤波传递函数)。则可以求出退化前图像的傅立叶变换,再利用傅立叶逆变换,得到退化前的图像,这就是逆滤波复原的基本原理。
示例:对图像进行逆滤波复原
编写对应的m文件如下:
clc;
I=imread('cameraman.tif');
subplot(2,2,1)
imshow(I);
title('原始图像')
[m,n]=size(I);
F=fftshift(fft2(I));
K=0.005;
H=[];
foru=1:m;
forv=1:n
p=(u-m/2)^2+(v-n/2)^2;
H(u,v)=exp((-K)*p);%%得到图像退化传递函数%%
end
end
T=F.*H;
I0=abs(ifft2(fftshift(T)));
subplot(2,2,2)
imshow(uint8(I0));
title('退化的图像');
I1=imnoise(uint8(I0),'gaussian',0,0.01);
subplot(2,2,3)
imshow(I1);
title('含有噪声的退化图像');
T1=fftshift(fft2(I1));
T2=T1./H;%%退化前的傅立叶变换%%
I2=ifft(fftshift(T2));
subplot(2,2,4);
imshow(uint8(I2));
title('逆滤波复原图像');
程序运行结果如下图:
维纳滤波复原法
维纳滤波就是最小二乘滤波,它是使原始图像与其恢复图像之间的均方误差最小的复原方法,对图像进行维纳滤波主要是为了消除图像中的噪声。
示例:利用维纳滤波器进行复原处理
编写对应的m文件如下:
clear all;
clc;
I=zeros(800,800);
I(300:500,500:600)=1;
noise=0.1*randn(size(I));
PSF=fspecial('motion',21,11);
Blurred=imfilter(I,PSF,'circular');
Blurrednoise=im2uint8(Blurred+noise);
NSR=sum(noise(:).^2)/sum(I(:).^2);%%信噪比倒数%%
NP=abs(fftn(noise)).^2;
NPOW=sum(NP(:))/prod(size(noise));
NCORR=fftshift(real(ifftn(NP)));
IP=abs(fftn(I)).^2;
IPOW=sum(IP(:))/prod(size(I));
ICORR=fftshift(real(ifftn(IP)));
ICORR1=ICORR(:,ceil(size(I,1)/2));
NSR=NPOW/IPOW;
subplot(2,2,1)
imshow(Blurrednoise,[]);
title('Blurred and noise图像');
subplot(2,2,2)
imshow(deconvwnr(Blurrednoise,PSF,NSR),[]);
title('deconvwnr(A,PSF,NSR)图像');
subplot(2,2,3)
imshow(deconvwnr(Blurrednoise,PSF,NCORR,ICORR),[]);
title('deconvwnr(A,PSF,NCORR,ICORR)图像');
subplot(2,2,4)
imshow(deconvwnr(Blurrednoise,PSF,NPOW,ICORR1),[]);
title('deconvwnr(A,PSF,NPOW,ICORR1)图像');
程序运行结果如下图:
约束的最小二乘方滤波复原法
约束最小二乘法是一种比较容易实现的线性复原的方法,除了要求关于退化系统的传递函数外,还需要知道某些噪声的统计特性,或者噪声与图像的相关性,
示例:对图像进行约束最小二乘方滤波恢复
编写对应的m文件如下:
clear all;
I=imread('trees.tif');
PSF=fspecial('gaussian',10,4);
Blurred=imfilter(I,PSF,'conv');
BN=imnoise(Blurred,'gaussian',0,0.01);
NP=0.01*prod(size(I));
[reg LAGRA]=deconvreg(BN,PSF,NP);
edged=edgetaper(BN,PSF);
reg2=deconvreg(edged,PSF,[],LAGRA);
subplot(2,2,1)
imshow(I);
title('原始图像');
subplot(2,2,2)
imshow(BN);
title('加入高斯噪声的图像');
subplot(2,2,3)
imshow(reg);
title('恢复后图像');
subplot(2,2,4)
imshow(reg2);
title('拉格朗日算子恢复图像');
程序运行结果如下图:
Lucy-Richardson滤波复原法
Lucy-Richardson算法是目前比较流行的一个算法,该算法是基于贝叶斯分析的迭代算法
示例:对图像进行Lucy-Richardson滤波恢复
编写对应的m文件如下:
clc;
I=imread('rice.png');
PSF=fspecial('gaussian',4,5);
Blurred=imfilter(I,PSF,'symmetric','conv');
BN=imnoise(Blurred,'gaussian',0,0.01);
luc=deconvlucy(BN,PSF,8);
subplot(2,2,1)
imshow(I);
title('原始图像');
subplot(2,2,2)
imshow(Blurred);
title('模糊后图像');
subplot(2,2,3)
imshow(BN);
title('含有噪声的图像');
subplot(2,2,4)
imshow(luc);
title('恢复后图像');
程序运行结果如下图:
盲去卷积滤波法
在PSF未知的情况下,盲去卷积滤波复原是实现图像恢复的有效方法,把不以PSF知识为基础的图像复原方法统称为盲去卷积滤波法
示例:对图像进行盲去卷积滤波复原
编写对应的m文件如下:
clc;
I=imread('eight.tif');
PSF=fspecial('motion',10,20);
Blurred=imfilter(I,PSF,'circ','conv');
INITPSF=ones(size(PSF));
[J P]=deconvblind(Blurred,INITPSF,15);
subplot(1,3,1)
imshow(I);
title('原始图像');
subplot(1,3,2)
imshow(Blurred);
title('模糊后图像');
subplot(1,3,3)
imshow(J);
title('恢复后图像');
程序运行结果如下图:



