matlab运动模糊

matlab运动模糊,第1张

摘要:MATLAB是当今流行的科学计算软件,它具有很强的数据处理能力。在其图像处理工具箱中有四个图像复原函数,本文就这些函数的算法原理、运用和恢复处理效果结合实力效果作简要对比讨论。

前言

图像复原时图像处理中一个重要的研究课题。图像在形成、传输和记录的过程中,由于传感器的噪声、摄像机未对好焦、摄像机与物体相对运动、系统误差、畸变、噪声等因素的影响,使图像往往不是真实景物的完善影像。这种图像在形成、传输和记录过程中,由于成像系统、传输介质和设备的不完善,使图像质量下降的过程称为图像的退化。图像复原就是通过计算机处理,对质量下降的图像加以重建或恢复的过程。

图像复原过程一般为:找退化原因→建立退化模型→反向推演→图像复原

算法产生概述

开发算法时,首先要创建图像退化的线性数学模型,接着选择准则函数,并以适当的数学形式表达,然后进行数学推演。推演过程中通常要进行表达形式(即空域形式、频域形式、矩阵-矢量形式或变换域形式)的相互转换,最后得到图像复原算式。

退化数学模型的空域、频域、矢量-矩阵表达形式分别是:

g(x,y)=d(x,y)*f(x,y)+n(x,y)

G(u,v)=D(u,v)·F(u,v)+N(u,v)

g=HF+n

其中:g(x,y)、d(x,y)、f(x,y)、n(x,y)分别为观测的退化图像、模糊函数、原图像、加性噪声,*为卷积运算符,(x=0,1,2,…,M-1),(y=0,1,2,…,N-1)。

运动模糊的产生

景物与相机之间的相对运动通常会使相机所成的像存在运动模糊。对于线性移不变模糊,退化图像u0可以写成,u0=h*u+n,其中h为模糊核,*表示卷积,n为加性噪声。由du/dt=0,文献[5]将这种运动模糊过程描述为波动方程:

аu/аt+Vxаu/аx+ Vyаu/аy=0

其中,Vx=dx/dt, Vy=dy/dt为x,y方向上的速度分量并且通过分析该方程的达朗贝尔解得出结论:

vаu0/аx=u(x)-u(x-L)

其中v=

,即退化图像沿运动方向的导数等于原始图像和其移位L后图像的差,这里L也可以认为是模糊长度。

在MATLAB中,可以由fspecial函数创建一个确定类型的PSF(点扩散函数),然后使用这个PSF与原始图像进行卷积,从而得到退化(模糊)的图像。

维纳滤波图像复原MATLAB实现

MATLAB图像处理工具箱提供了维纳滤波图像复原函数deconvwnr,该函数的语法格

下:

J=deconvwnr(I,PSF)

J=deconvwnr(I,PSF,NSR)

J=deconvwnr(I,PSF,NCORR,ICORR)

说明:

J=deconvwnr(I,PSF)用于复原由于PSF以及可能的加性噪声卷积退化的图像I,该算法利用图像和噪声的相关矩阵,从估计图像与真实图像之间的最小均方误差意义上来说是最佳的。在没有噪声的情况下,维纳滤波器退化成理想的逆滤波器。

J=deconvwnr(I,PSF,NSR)中的NSR是信噪功率比,NSR可以是标量,或者是和图像I一样大小尺寸的数组,NSR的默认值为0。

J=deconvwnr(I,PSF,NCORR,ICORR)中的NCORR和ICORR分别是噪声和原始图像的自相关函数。NCORR和ICORR是不超过原始图像的尺寸和维数的任意尺寸和维数。一个N维的NCORR或ICORR数组对应每一维的自相关,如果PSF为向量,则向量NCORR或ICORR代表第一维的自相关函数;如果PSF为数组,则一维的自相关函数由PSF所有的非单维对称计算推得,标量NCORR或ICORR表示噪声或图像的功率。

最小二乘方图像复原MATLAB实现

MATLAB图像工具箱子提供了deconvreg函数,用来完成对模糊图像的约束最小二乘方复原。deconvreg函数语法格式如下:

J=deconvreg(I,PSF)

J=deconvreg(I,PSF,NOISEPOWER)

J=deconvreg(I,PSF,NOISEPOWER,LRANGE)

J=deconvreg(I,PSF,NOISEPOWER,LRANGE,REGOP)

[J,LAGRA]=deconvreg(I,PSF,...)

说明:

J=deconvreg(I,PSF)用于复原由于PSF以及可能的加性噪声退化的图像,在保持图像平滑的条件下,该算法在估计图像和实际图像间的最小二乘方误差的意义上来说是最佳的。

J=deconvreg(I,PSF,NOISEPOWER)中的NOISEPOWER是加性噪声功率,默认值是0;

J=deconvreg(I,PSF,NOISEPOWER,LRANGE)中的向量LRANGE制定了寻找最佳解的范围,该算法就是在LRANGE的范围内找到最佳的拉格朗日乘数。如果LRANGE是标量,算法假定LAGRA已经给定并等于LRANGE,此时忽略NOISEPOWER的值。LRANGE默认的范围为[le-9 le9];

J=deconvreg(I,PSF,NOISEPOWER,LRANGE,REGOP)中的REGOP是约束自相关的规则化算子。拉普拉斯算子是保持图像平滑的默认算子。REGOP的维数不能超过图像的维数,任意非单维必须与PSF的非单维相对应。

[J,LAGRA]=deconvreg(I,PSF,...)输出复原图像J以及拉格朗日乘数。

Lucy-Richardson图像复原MATLAB实现

当已知PSF,但对噪声的信息知道很少或者不知道噪声信息时,可以用Lucy-Richardson算法得到效果较好的复原图像。Lucy-Richardson采用迭代法,能够按照泊松噪声统计标准求出给定PSF卷积后,最有可能成为输入模糊图像的图像。MATLAB提供了deconvlucy函数,该函数通过加速收敛的迭代算法完成图像的复原。为了改善图像复原的质量,光学系统的特性也可以作为该函数的输入参数。deconvlucy函数的语法格式如下:

J=deconvlucy(I,PSF)

J=deconvlucy(I,PSF,NUMIT)

J=deconvlucy(I,PSF,NUMIT,DAMPAR)

J=deconvlucy(I,PSF,NUMIT,DAMPAR,WEIGHT)

J=deconvlucy(I,PSF,NUMIT,DAMPAR,WEIGHT,READOUT)

J=deconvlucy(I,PSF,NUMIT,DAMPAR,WEIGHT,READOUT,SUBSMPL)

说明:

J=deconvlucy(I,PSF用于恢复由PSF卷积和可能的加性噪声引起的退化的图像。该算法基于结果复原图像J的极大似然值,它是原始图像在泊松统计标准下的一个实例。

J=deconvlucy(I,PSF,NUMIT)中的NUMIT用于指定deconvlucy函数迭代的次数,如果不指定,默认值为10。

J=deconvlucy(I,PSF,NUMIT,DAMPAR)中的DAMPAR用于指定结果图像的偏差阈值,默认值为0;该参数指定了在收敛过程中,结果图像J与原始图像I背离的程度。

J=deconvlucy(I,PSF,NUMIT,DAMPAR,WEIGHT)中的WRIGHT表示每个像素的加权值,它记录了每个像素反映相机记录的质量。

J=deconvlucy(I,PSF,NUMIT,DAMPAR,WEIGHT,READOUT)中的READOUT制定了加性噪声值和读出相机噪声值,默认值为0。

J=deconvlucy(I,PSF,NUMIT,DAMPAR,WEIGHT,READOUT,SUBSMPL)中的SUBSMPL描述了已知PSF时子采样次数,默认值为1。

盲去卷积图像复原MATLAB实现

盲去卷积复原实在不知道PSF的情况下,利用原始模糊图像,同时顾及PSF和清晰图像的一种恢复方法。MATLAB提供了盲去卷积复原函数deconvblind,该函数的语法格式如下:

[J,PSF]= deconvblind(I,INITPSF)

[J,PSF]= deconvblind(I,INITPSF,NUMIT)

[J,PSF]= deconvblind(I,INITPSF,NUMIT,DAMPAR)

[J,PSF]= deconvblind(I,INITPSF,NUMIT,DAMPAR,WEIGHT)

[J,PSF]= deconvblind(I,INITPSF,NUMIT,DAMPAR,WEIGHT,READOUT)

[J,PSF]=deconvblind(...FUN,P1,P2,...,PN)

说明:

[J,PSF]= deconvblind(I,INITPSF)利用最大似然算法去卷积图像I,返回复原图像J和复原的PSF。INITPSF表示PSF的估计值;参数NUMIT用于指定迭代的次数,默认值为10;

参数DAMPAR用于指定结果图像的偏差阈值,默认值为0;参数WEIGHT制定了在图像复原中,采用输入图像I的哪些像素。参数READOUT用于指定相应的加性噪声值和读出相机的噪声值,默认为0。

[J,PSF]=deconvblind(...FUN,P1,P2,...,PN)中的FUN是一个描述PSF附加约束的函数。

附录:

I=Imread('football.jpg')

Len=30

Theta=45

PSF=fspecial('motion',Len,Theta)

BlurredA=imfilter(I,PSF,'circular','conv')

Wnrl=deconvwnr(BlurredA,PSF)¨

V=0.02

Blurred_I_Noisy=imnoise(BlurredB,'gaussian',0,V)

NP=V*prod(size(I))

J=deconvreg(Blurred_I_Noisy,PSF,NP)

BlurredC=imfilter(I,PSF,'symmetric','conv')

V=0.002

BlurredNoisy=imnoise(BlurredC,'gaussian',0,V)

Luc=deconvlucy(BlurredNoisy,PSF,5)

subplot(2,3,1)imshow(I)title('原图像')

subplot(2,3,6)imshow(PSF)title('运动模糊后图像')

subplot(2,3,2)imshow(Wnrl)title('维纳滤波修复图像')

subplot(2,3,3)imshow(J)title('最小二乘方修复图像')

subplot(2,3,4)imshow(Luc)title('Lucy-Richardson修复图像')

subplot(2,3,5)imshow(K)title('盲去卷积修复图像')

参考文献:

[1] 陈波.一种新的运动模糊图像恢复方法[J].深圳:深圳大学数学与计算机科学学院,2008.

[2] 刘刚,王立香,董延.MATLAB数字图像处理[M].机械工业出版社,2010.

[3] 康实.MATLAB的图像处理工具箱中图像复原函数的比较[J].广州:广东交通职业技术学院,2006.

[4] 徐志影,李晋平.MATLAB及其在图像处理中的应用[J].徐州:中国矿业大学资源学院,2003.

[5] CAI LIDONG.Traveling wave equation and restoration of motion blurred images[J]. Acta Automatica Sinica,2003,29(3):466-471.

[I1,map]=imread('fenj-mf.jpg') %读入运动模糊图像

figure(1)

imshow(I1)

len=30

theta=45

initpsf=fspecial('motion',len,theta) %建立复原点扩散函数

[J,P]=deconvblind(I1,initpsf,30)%去卷积

figure(2)

imshow(J) %显示结果图像如图4-7c(所示)

figure(3)

imshow(P,[],'notruesize')

程序没问题哦。这个程序需要调用。

下面是m程序

function h=motionblur(dirangle,winsize)

if nargin<2

    winsize=9

end

h=zeros(winsize)

ext=(winsize-1)/2

if (abs(abs(dirangle)-90) >=45) & (abs(abs(dirangle)-270)>=45),

    slope=tan(dirangle*pi/180) 

    rloc=round(slope*[-ext:ext])

    for i=1:winsize,

        h(ext-rloc(i)+1,i)=1

    end

else

    slope=cot(dirangle*pi/180)

    cloc=round(slope*[-ext:ext])

    for i=1:winsize,

        h(i,ext-cloc(i)+1)=1

    end

end

运行步骤:

在command window中输入:

motionblur(30,5)   %第一个参数就是输入角度。可以随意改。第二个参数只能是奇数整数。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11563433.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存