您的位置首页生活百科

matlab图像复原算法

matlab图像复原算法

的有关信息介绍如下:

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('恢复后图像');

程序运行结果如下图: