基于DSP的图像运动模糊恢复

(整期优先)网络出版时间:2009-12-22
/ 4

基于DSP的图像运动模糊恢复

张志峰

【摘要】本文基于DSP的图像处理技术,对模糊图像进行恢复。通过建立运动模糊数学模型,进行了消除运动模糊的仿真实验,通过模拟并选择适当的图像恢复算法进行模糊图像处理,争取保持实时性,使图像能清晰的恢复出来。在图像恢复技术中,点扩展函数(PSF)是影响图像恢复结果的关键因素,所以常常利用先验知识后验判断方法估计PSF函数来恢复图像,其中维纳滤波恢复运动模糊图像效果较好。

【关键词】图像处理;维纳滤波;点扩展函数。

第一章图像退化/恢复处理的模型

图像在形成、传输和记录过程中,由于受多种原因的影响,质量会有所下降,典型表现为图像模糊、失真、有噪声等。这一降质过程称为图像的退化。

如下图所示用退化函数把退化过程模型化,它和加性噪声一起,作用于图像f(x,y),产生一幅退化的图像g(x,y),恢复的目的就是原图像的一个估计f^(x,y)。

方法实现过程如下:

第一步:读入运动模糊图像,对运动模糊图像g(x,y)作傅立叶变换,计算其频谱,得到运动模糊图像g(x,y)的频谱图p(x,y)。

p(x,y)=log(1+abs(fftshift(fft2(g(x,y))))

对运动模糊图像做傅立叶变换fft2得到其频谱,并将其高频点用fftshift移至频谱图的中心。一般情况下,频谱图上出现零值的位置不是很明显,通常对其转化成对数形式。这样处理,就可以得到清晰的频谱图,方便提取暗线信息。

第二步:对频谱图p(x,y)做Canny边缘检测,得到频谱图的边缘检测图像e(x,y)。

e(x,y)=edge(p(x,y),’canny’,0.97)

edge表示边缘检测函数,参数’canny’表示使用canny最优算子作为边缘检测器,经过实验确定边缘检测的阈值参数值设定为0.97最为合适。经过上述canny边缘检测,在边缘检测图像的中心点两侧就会存在两条有一定问隔的清晰直线。

第三步:对边缘图像e(x,y)做哈夫变换,得到哈夫变换图像h(x,y),并检测哈夫变换图像中存在的两个亮点的数据。哈夫变换使得在迪卡尔坐标空间中共线的点相交于极坐标空间中的一点。这样,对存在两条平行直线的边缘图像做哈夫变换,就可以在哈夫变换图像中得到两个亮点。根据这两个亮点在极坐标空间的ρ和θ值可以计算出运动方向和模糊长度。

[h(x,y),theta,rho]=hough(e(x,y))

B=houghpeaks(h(x,y),2)

hough表示哈夫变换函数,houghpeaks用来检测哈夫变换图像h(x,y)中的两个亮点。B是2×2的向量,第1行和第2行分别代表检测到的两个亮点在极坐标空间的ρ和θ值。

第四步:计算运动方向和模糊长度。

根据哈夫变换图像中两个亮点的信息,可以精确的计算得到运动方向和模糊长度。

1、运动方向的计算

在哈夫变化图像中,两个亮点的θ值分别是频谱图中心两侧两条暗线的角度(水平为0°,逆时针方向为正)。为求得运动方向的精确值,对两个亮点的θ值求平均。

angle=-1*((theta(B(1,2))+theta(B(2,2)))/2

2、模糊长度的计算

两个亮点的ρ值之差的绝对值是频谱图中心两侧两条暗线的垂直距离,即频谱图中相邻暗线垂直距离的两倍。在分析运动模糊图像的频谱图时指出:相邻暗线垂直距离与运动方向没有关系,当运动方向为水平时,模糊长度即是频谱图中的暗线个数。因此,可以根据频谱图的大小,即图像的大小和相邻暗线垂直距离计算出暗线的个数。通过实验验证,频谱图中的暗线存在一定宽度,其宽度值取为2时即可得到准确的暗线个数,即模糊长度

Length=(M/(abs(rho(B(1,1))-rho(B(2,1)))+2))*2

第五步:带入PSF产生函数

PSF=fspecial(,length,angle)

第三章运动模糊图像的恢复算法

图像恢复技术可以划分为两组:确定性和随机性的。确定性的方法对于带有很小噪声且退化函数已知的图像有效。原始图像从退化图像的逆变换得到。随机性技术根据的随机准则,即最小二乘法,找到最优的恢复。在多数实际情况中,我们没有足够的有关退化的知识,必须对其进行估计和建模。下面介绍一下几种恢复方法:

(1)逆滤波恢复[2]

在六十年代中期,逆滤波开始被广泛地应用于数字图像恢复。Nathan刚二维去卷积方法来处理得到的图像。由于和噪声相比,信号的频谱随着频率升高下降较快,因为高频部分主要是噪声。Nathan采用的是限定逆滤波传递函数最大值的方法。

在同一时期,Harris采用PSF的解析模型对图像总由于大气扰动造成的模糊进行了逆滤波处理,Mcglamery则采用由实验确定的PSF来对大气扰动图像进行逆滤波。从此以后,逆滤波就成了模糊图像恢复的一种标准技术。

逆滤波原理[3]

恢复退化图像最简单的方法是直接逆滤波。在该方法中,用退化函数除退化图像的傅里叶变换G(u,v)来计算原始图像的傅里叶变换估计F^(u,v),逆滤波退化公式:

F^(u,v)=[G(u,v)-N(u,v)]/H(u,v)

这个公式说明逆滤波对于没有被噪声污染的图像很有效,这里不考虑在u,v空间的一些位置上H(u,v)接近0时可能遇剑的计算问题,幸运的是忽略这些点在恢复结果中并不会产生可感觉到的影响。但是,如果出现噪声就会引起儿个问题:第一,对于H(u,v)幅值比较小的频率噪声的影响可能变得显著起来。这种状况通常对于高频u,v。在实际中,通常H(u,v)幅值衰减得比N(u,v)快得多,因此噪声的影响可能支配整个恢复结果。将恢复限顶在H(u,v)足够人的u,v原点处的一个小领域中,可以克服这个问题。第二个问题针对噪声本身的频谱,我们通常没有充分的有关噪声的信息来足够好地确定N(u,v)。为了克服H(u,v)接近0所引起的问题,在分母中加入一个小的常数k,的公式如下:

F^(u,v)=[G(u,v)-N(u,v)]/[H(u,v)+k]

(2)有约束最小二乘方原理

由于大多数图像恢复问题都不具有唯一解,或者说恢复具有病态特征。为了克服这一问题,通常需要在恢复过程中对运算施加某种约束。

设对图像施加某一线性运算Q,求在约束条件

│g-HfT│^2=│n│^2¬¬

下,使│QfT│^2为最小的fT作为原理g的最佳估计。

利用拉格郎日乘数法,先构造一辅助函数:

j(fT,k)=│QfT│^2一k(│f-HfT│}^2-│n│^2)

令其对fT的导数为0,并求得:

f^=(HTH+γQTQ)-1HTf

式中γ=l/k。把式g代入约束条件中可以证明,│n│^2是γ的单调递增函数。

因此可以用迭代法求出满足约束的待定系数γ,首先任取一个γ,代入g^中若结果大于│n│^2时,便减少γ:反之增加γ,再重复上述过程、直到约束条件被满足为止。把求得的γ代入,便最后求得最佳估计出gT。

我们可以直接从空间域的有约束最小二乘方恢复得到它的频域解:

F^(u,v)=1/H(u,v)*(│H(u,v)│^2/(│H(u,v)│^2+γ│C(u,v)│^2))*G(u,v)

应用有约束最小二乘方恢复方法时,只需有关噪声均值和方差的知识就可对每幅给定的图像给出最佳恢复结果。

(3)Richarson-Lucy恢复

Richarson—Lucy(RL)算法是目前应用很广泛的图像恢复技术之一,是一种迭代方法。RL算法能够按照泊松噪声统计标准求出与给定PSF卷积后,最有可能成为输入模糊图像的恢复图像。当PSF已知,但图像噪声信息未知时,也可以使用这种恢复方法进行有效的恢复。RL迭代公式:

(4)维纳滤波恢复[4]:

维纳滤波是诺伯特•维纳在二十世纪四十年代提出的一种滤波器,并在1949年出版,与设计一个特定频率响应所用的通常滤波器设计理论不同,维纳滤波器从另外一个不同的角度实现滤波器。仅仅在频域进行滤波的滤波器,仍然会有噪声通过滤波器。维纳设计方法需要额外的关于原始信号所包含频谱以及噪声的信息。维纳滤波可以归于反卷积算法一类,它应用于一维信号,并取得很好的效果。以后算法义被引入二维信号处理,也取得相当满意的效果,尤其在图像恢复领域,由于维纳滤波器的恢复效果良好,计算量较低,并且抗噪声性能优良,因而在图像领域得到了广泛的应用,并不断得到改进发展,许多高效的恢复算法都是以此为基础形成的。

维纳滤波公式如下:

F^(u,v)=1/H(u,v)*(|H(u,v)|^2/(|H(u,v)|^2+γ*Sn(u,v)/Sk(u,v))))*G(u,v)

简化的维纳滤波公式如卜:

F^(u,v)=1/H(u,v)*(|H(u,v)|^2/(|H(u,v)|^2+K))*G(u,v)

其中K为噪声系数。可以通过试验求得近似值。

(5)比较各个恢复办法:

在大部分图像中,邻近的像素是高度相关的,而距离较远的像素其相关性却较弱。由此,我们可以认为典型图像的自相关函数通常随着与原点的距离增加而下降。由于图像的功率谱是图像本身自相关函数的傅里叶变换,我们可以认为图像的功率谱随着频域的升高而下降。

一般地,噪声源往往具有平坦的功率谱,即使不是如此,其随着频率的升高而下降的趋势也要比典型图像的功率谱慢得多。因此,时以料想功率谱的低频部分以信号为主,然而高频部分则主要被噪声所占据。为了解决以上问题,采用了维纳滤波进行模糊图像恢复。维纳滤波对噪声放大有自动抑制作用,且噪声越强,作用越明显避免了噪声的过多放大作用。维纳滤波是对一族图像在统计平均意义上给出的最佳恢复。

逆滤波对噪声比较敏感,恢复结果受噪声的影响较大。有约束最小二乘法在无噪声或噪声很小的情况下恢复效果比较理想,对于含有一定强度噪声的情况下,恢复效果也不令人满意。RL算法在不含有噪声的情况下恢复效果随着迭代次数的增加而变得越来越好,但是对于含有噪声的图像,RL法对噪声起到放大作用,而且RL法随着迭代次数的增加计算时间也大幅度增加,不利于运动模糊的实时恢复。维纳滤波法可以通过选择合适的参数来抑制噪声,而且其算法是在频域完成,计算速度相对来说要优于其它算法。综上考虑,决定选用维纳滤波作为运动模糊图像的恢复算法。

第四章软件开发环境

当今软件开发越来越强调软件的可移植性、易修改、易维护、可扩充性、可复用性等特点,传统的结构设计思想已经不能适应强大的软件需要,取而代之的是面向对象设计思想的_产生。相对于传统的结构化设计思想,面向对象的数据封装性、继承性和多态性等特点使得复杂的程序升发变得简单高效,充分体现了现代软件工程的需要,因此己成为现代软件开发的必然趋势。

Matlab软件[5]:

MATLAB是由MathWorks公司开发的一种主要用于数值计算及可视化图形处理的工程语言。它将数值分析、矩阵计算、图形图像处理、信号处理和仿真等诸多强大的功能集成在较易使用的交互式计算机环境之中,为科学研究、工程应用提供了一种功能强、效率高的编程工具。一幅数字图像是一个被量化的采样的二维矩阵,而MATLABi语言又是进行矩阵运算的最好工具。Matlab相对于其它软件有三个方面的优点:

a.高效方便的矩阵和数组运算,强大的数学运算功能,能够方便、高效的实现图像中大量的矩阵运算,显得大为高效方便,这是其他高级语言所不能比拟的。矩阵是MATLAB最基本的数据单元,MATLAB的数据结构都是依矩阵来表示的。

b.可扩展性好。这是Matlab最重要的特点,它允许用户自行建立特定功能的.m文件。研究人员不仅可以利用Matlab提供的“Toolbox”,还可方便的构造专用的函数,从而扩展了其应用范围。

c.易学易用性好。Matlab不需要用户有高深的数学知识和程序设计能力,不需要用户深刻了解算法及编程技巧。

d.高效性。Matlab语句功能十分强大,一条语句可完成十分复杂的任务。如“FFT2()”语句可完成对指定数据的快速傅立叶变换,相当于数百条C语言语句的功能。

e.提供了图像处理工具箱,是进行数字图像研究的很好选择。

1.Ccslink

MatablinkforCCSDevelopmentTools工具可以使开发人员在MATLAB环境下就可以方便、灵活地完成对CCS及目标DSP的操作,大大简化了TIDSP程序开发的分析、调试和验证过程,在DSP系统设计中有着很好的应用价值[7]。

2.Simulink

Simulink是一个用来对动态系统进行建模、仿真和分析的软件包,它支持连续、离散及两者混合的线性和非线性系统,也支持具有多种采样速度的多速率系统[8]。

Simulink为用户提供了用方框图进行建模的图形接口,采用这种结构画模型就像你用笔和纸来画一样容易。它与传统的仿真软件包用微分方程和差分方程建模相比,具有更直观、方便、灵活的优点。Simulink包含有sinks(输出方式)、Source(输入源)、Linear(线性环节)、Nonlinear(非线性环节)、ConnectiOnS(连接与接口)和Extra(其它环节)子模型库,而且每个子模型库中包含有相应的功能模块。用户也可以定制和创建用户自己的模块。

CCS软件:

随着半导体制造工艺的发展和计算机体系结构等方面的改进,DSP芯片的功能越来越强大,速度更快、体积更小并更省电,在图像处理领域具有不可替代的优势和非常巨大的应用潜力。各DSP生产厂家为便于用户进行DSP应用开发一般都提供了集成开发环境。

而图像处理与识别是DSP应用中的一个极其重要的领域。在调试过程中,图像处理开发者可以对数字图像数据进行重构,以直观评价算法的性能。CCS是TI公司推出的一款集成性的DSP软件开发工具,它支持以图像的方式将存储器中的图像重构,并且可以将数据存储在计算机的硬盘中便于采用其它软件进行图像重构和直观评价。

开发者可以对软件编辑、编译、调试、代码性能、代码优化和项目管理等工作。除此以外,它还提供了实时分析调试和数据可视化功能。但是,在使用CCS之前,首先应该很好地理解其文件系统的构成和各级文件的走向。如下图所示,

工程文件来自二种类别:“.C”源文件;“.asm”源文件和“.h”文件,通过创建“Project”来编译,链接相应的“.lib”库函数和“.cmd”连接文件,最后生成目标代码。

下图介绍了CCS的各文件的关系:

下面介绍下MATlABCCSLink在DSP系统设计中的应用:

集成在MATlLAB中的MATLABLinkforCCSDevelopmeentTools(简称CCSLink)提供了,MATLAB、TIDSP集成开发环境(CCS)和硬件DSP的双向连接,允许开发者在MATLAB的环境下就可以完成对CCS和硬件目标DSP的操作。开发者可以利用MATLAB中强大的可视化、数据处理和分析函数对来自CCS和TIDSP的数据进行分析和处理,而在DSP集成开发开发环境CCS下,要完成这些操作往往是相当困难的。

利用CCSLink可以像操作MATLAB变量一样来操作DSP的存储器或寄存器,即整个目标DSP对于MATLAB几乎是透明的,在Matlab环境下就可以完成对CCS的操作,可以把数据从CCS中传送到MATLAB中去,也可以把MATLAB中的数据传到CCS中。CCSLink可以支持CCS能够识别的任何目标板,包括TI公司的DSK、EVM板和用户自己开发的目标DSP(C6000等)板,它为TIDSP应用系统设计的调试和测试阶段提供了强大的支持。

实现MATILAB与CCS以及目标DSP的数据交换的三种方式:

1、与CCS的连接对象

利用与CCS的连接对象可以创建CCS与MATLAB的连接。运行MATLAB命令就可以运行CCS中的应用程序,与目标DSP存储器和寄存器进行双向数据交换。

2、与RTDX(实时数据交换)的连接对象与RTDx的连接对象提供了MATLAB与目标DSP之间的实时通信通道。利用此通道可以实时地与目标DSP进行数据交换而不用停止DSP上正在执行的程序。

3、嵌入式对象在MATLAB环境中能够创建一个代表嵌入在目标C程序中的变量的对象。利用嵌入式对象可以像处理MATLAB的变量那样直接访问嵌入在目标DSP的存储器和寄存器中的变量。

第五章用SIMULINK构建的维纳滤波模块

Simulink构建的图像如下图:

在本设计初期,我本来是打算直接用C语言编程,但由于在对于FFT2的编程上遇到了困难,并且始终无法解决,最后决定直接用matlab软件中的FFT2进行本设计。后来又通过matlab软件得到PSF和它本身自带的维纳滤波函数进行检测所得到PSF的正确性和恢复算法的仿真,最后决定用simulink进行维纳滤波建模,然后转化为C程序,最后在CCS软件上进行运动模糊图像恢复仿真。

图像中噪声经常存在,不仅影响图像的质量,也影响模糊图像的恢复效果。本文针对最常见的高斯噪声。一般来说,对图像的去噪处理要在恢复处理之后进行,特别是去噪效果很好的方法尤其如此。因为去噪效果好的方法在对图像去噪后,实际上对图像的像素值改变过多,从而使去噪后的图像与原来的退化模型不再匹配,因而就很难得到较好的恢复效果。对于带噪图像,如果噪声不是太多,应该先进行图像恢复然后再进行去噪处理。如果噪声太多,可对图像进行轻微地去噪处理,然后再进行恢复处理,最后根据恢复效果决定是否再次进行去噪处理,或者采用锐化和增强等其它图像处理方法以得到更好的视觉效果。

存在未解决的问题:

人工模糊的运动数据(包括运动量、运动方向及噪声干扰等)是理想化的,恢复质量比较高:实际模糊的运动数据是无法完全确定的,恢复质量略差。有像素的信息才能得以恢复。而边沿点由于没有足够的相邻像素可以利用,所以导致恢复图像会出现一条条竖条文(振铃效应)和影像反色现象(鬼影效应)。这是运动模糊图像恢复过程中不可避免的。

模糊图像的恢复离不开点扩散函数(PSF),影响图像恢复结果的原因还有以下几点:①很难具体确定模糊点数,如果差1个像素或者几个像素都将对恢复后的图像产生很大影响。②运动装置的速度不可能是完全匀速而我们所得出结论都是以匀速运动为前提的。除了本文研究的任意方向匀速直线运动模糊以外,实际情况下还存在着非匀速直线运动模糊情况等问题,这是我们以后努力的方向。

【参考文献】

[1]刘微.运动模糊图像实时恢复的多DSP方案.《电子器件》,2005年04期.

[2]洪汉玉.非零边界旋转运动模糊图像的恢复算法.《中国图像图形学报》,2004年03期.

[3]王旭辉.运动模糊图像的快速恢复[硕士学位论文].上海:上海大学,2001.3.

[4]孙丽李.运动模糊图像的恢复[硕士学位论文].济南:山东大学,2000.4.

[5]王向平,刘智勇,尹征琦,朱劲.车辆运动模糊图像恢复的一种新方法,《自然科学报》1999,13(2):11.