matlab图像复原算法
在一些实际应用中,由于噪声,畸变,系统误差等原因,使得图像并不能完全反映真实的景物,所以需要对图片进行恢复处理,想要对图片进行复原,首先需要了解图片退化的原因,根据原因建立退化模型,然后运用反过程来实现对图片的恢复,并用响应标准来判断图片恢复质量的好坏。Matlab也可以用于对图片进行恢复,图片恢复的主要方法有(1)逆滤波复原法(2)维纳滤波复原法(3)约束的最小二乘方滤波复原法(4)Lucy-Richardson滤波复原法(5)盲去卷积滤波法,下面就这些方法进行介绍:
操作方法
- 01
(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表示复原图像
- 02
逆滤波复原法 如果已知退化图像的傅立叶变换和系统脉冲响应函数(滤波传递函数)。则可以求出退化前图像的傅立叶变换,再利用傅立叶逆变换,得到退化前的图像,这就是逆滤波复原的基本原理。 示例:对图像进行逆滤波复原 编写对应的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=[]; for u=1:m; for v=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('逆滤波复原图像'); 程序运行结果如下图:
- 03
维纳滤波复原法 维纳滤波就是最小二乘滤波,它是使原始图像与其恢复图像之间的均方误差最小的复原方法,对图像进行维纳滤波主要是为了消除图像中的噪声。 示例:利用维纳滤波器进行复原处理 编写对应的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)图像'); 程序运行结果如下图:
- 04
约束的最小二乘方滤波复原法 约束最小二乘法是一种比较容易实现的线性复原的方法,除了要求关于退化系统的传递函数外,还需要知道某些噪声的统计特性,或者噪声与图像的相关性, 示例:对图像进行约束最小二乘方滤波恢复 编写对应的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('拉格朗日算子恢复图像'); 程序运行结果如下图:
- 05
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('恢复后图像'); 程序运行结果如下图:
- 06
盲去卷积滤波法 在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('恢复后图像'); 程序运行结果如下图: