运动模糊图像复原实验报告
一、
运动模糊图像复原
【应用背景】
运动模糊是一种重要的图像退化原因,在图像采集的过程中,如果采集设备与目标之间存在足够大的相对运动,将会导致获得的图像模糊,这就是所谓的运动模糊。
现在大多数交通路口都设置有电子眼,拍摄记录车辆的违章行为,但是一般情况下违规车辆的行驶速度都较高,由电子眼拍摄到的有违规行为的车辆照片或多或少都存在运动模糊,因而导致很难准确获取包括车牌在内的车辆信息,如何利用图像复原技术对退化图像进行处理,得到相对清晰的图像就显得十分重要,另外,在国防航天等领域,图像的运动退化问题也十分常见,对于图像复原技术的研究具有重要的理论价值与现实意义
【模糊图像的一般退化模型】
图像的模糊过程可用下面的数学表达式表示:
𝑔 𝑥,𝑦 =𝑓 𝑥,𝑦 ∗ 𝑥,𝑦 +𝑛(𝑥,𝑦) f(x,y):原输入图像 n(x,y):噪声 h(x,y):退化函数
g(x,y):模糊图像
模糊过程即原始图像在被退化函数作用后再叠加上噪声的过程,其中 f(x,y)*h(x,y)表示原始图像与退化函数的卷积,退化模型可表示为下图[19]:
其中 H 为 h(x,y)的频域变换,也称作点扩散函数(PSF)或传输函数,退化过程在频域可表示为:
𝐺 𝑥,𝑦 =𝐹 𝑥,𝑦 𝐻 𝑥,𝑦 +𝑁(𝑥,𝑦)
G(u,v)、F(u,v)、H(u,v)和N(u,v)分别为 g(x,y)、f(x,y)、h(x,y)和n(x,y)的傅里叶变换。 【维纳滤波方法】
维纳滤波是一种线性滤波方法,以小误差准则为基础,即使恢复图像与原图像的均方误差小。
利用Matlab的维纳滤波恢复函数:deconvwnr(I,PSF) 其中参数I为输入图像,PSF为点扩散函数,PSF为:PSF=fpescial(‘motion’,len,theta)
其中,恢复图像的重点为确定参数len和theta
参数len为模糊图像位移的像素,theta为运动的角度。 【算法原理】
第一步:确定运动方向
对于匀速直线运动模糊而言,其点扩散函数具有零点,这就导致模糊图像的频谱也具有零点,在相应的频率处,频谱上会出现一系列平行的暗纹。若运动模糊角度为θ,则模糊图像频谱图上θ+90°方向会出现平行暗纹。因此,我们只需要鉴别出频谱图上暗纹的方向,即可得到模糊运动角度值。 算法特点:
Hough 变换进行直线提取: 直线表示:𝑥𝑐𝑜𝑠𝜃+𝑦𝑠𝑖𝑛𝜃=𝜌
x-y平面的每一条直线对应平面的一个点,同理𝜃-𝜌平面的每一条直线对应x-y平面的一个点,检测𝜃-𝜌平面中每点上的直线条数,也就等于 x-y 平面中待测直线上像素点的个数。 Sobel 边缘检测算子:
若某像素点位于边界处,则其相邻像素的灰度值变化就较大,对这种灰度值的变化进行量化统计就能够提取出图像的边界 第二步:确定运动模糊长度
1𝑇
𝑔 𝑥,𝑦 = 𝑓 𝑥−𝑥0 𝑡 ,𝑦−𝑦0 𝑡 𝑑𝑡+𝑛(𝑥,𝑦)
𝑇0
𝐿𝑐𝑜𝑠𝜃
𝑡𝑇 𝐿𝑠𝑖𝑛𝜃
𝑦0 𝑡 =𝑡
𝑇𝑥0 𝑡 =
𝐻(𝑢,𝑣)=𝑠𝑖𝑛𝜋𝑙𝐿/𝜋𝑙𝐿𝑒^(−𝑗𝜋𝑙𝐿) 其中,𝑙=𝑢𝑐𝑜𝑠𝜃+𝑣𝑠𝑖𝑛𝜃
从模糊图像的频谱可以直接得到位移的像素值。 【理想情况下MATLAB仿真】
为了检测以上原理,可以通过matlab进行图像的模糊,之后再进行复原:
从频谱上可以看出图像位移的角度和像素值,像素值可以直接数黑色线条直接得到,黑色线条角度与运动方向垂直。为了更好地得到线条的角度,可以利用Sobel
边缘检测做如上处理。
【水平运动模糊图像复原】
利用如上方法对作业图像进行复原:
由于运动方向已经确定,只需要对位移的像素进行确定,数频谱上黑色线条(包括边界)可以得到位移的像素点为17,以此为参数对原图像进行复原可以得到最右的图像。
仔细观察恢复图像可以发现,图像质量较原图有了极大的改善,但是产生了明显的振铃现象,查阅文献可以得知:
振铃产生原因主要为实际采集图像的模型与原理模型有一定差距,实际采集的图像模型为:
𝑔’(𝑥,𝑦)=𝑓(𝑥,𝑦)∗ℎ(𝑥,𝑦)·w(x,y)
𝐺’(𝑥,𝑦)=𝐹(𝑥,𝑦)𝐻(𝑥,𝑦)∗𝑊(𝑥,𝑦)=𝐺(𝑥,𝑦)∗𝑊(𝑥,𝑦) 原图像与窗函数卷积导致严重的振铃现象 【去振铃方法尝试】
1、循环边界法:
2、最优窗法:通过窗函数对边界进行抑制 窗函数为:
利用窗函数进行复原:
纵观上述两种方法,均为文献中实现效果较好的方法,但对于本幅图像的去振铃效果并不明显,甚至会加深振铃的作用。
【L-R算法】
Lucy-Richardson 滤波算法是一种迭代非线性算法,其优估计准则是大似然准则,即概率密度函数大的准则。 Lucy-Richardson算法在给定点扩散函数的前提下,按照泊松噪声统计标准求出与PSF的卷积,通过多次迭代使复原图像逼近真实图像。
L-R算法恢复效果如下:
有图为L-R算法恢复的结果,从上图可以看出,该算法得到的复原图像振铃现象并不是很严重,但略微有点模糊。
而且比较维纳滤波方法和L-R算法,L-R算法在鲁棒性上明显优于维纳滤波方法,L-R算法对len参数的精度要求误差大概在5左右,而维纳滤波要求绝对精确的len参数,否则将完全破坏图像信息。 【多种方法比较】
为了更好的恢复图像,我又尝试了一些方法,并与现有的方法进行比较,得到的比较图像为:
其中,标题下的数字为对图像质量的判断,数值越大表示图像质量越高,可以看到维纳滤波的图像质量最好,但由于振铃现象的存在,导致人眼识别时的效果较差,相应的,L-R算法是综合情况下最优的算法。 【带噪声的图像复原】
对于噪声图像,进行简单的滤波除噪之后,同样进行上述的各种方法进行恢复,
得到图像如下所示:
【方向未知运动模糊图像复原】
采用上述原理方法进行处理,得到以下频谱:
可以看到,由于模糊图像的模糊程度比较大,而且噪声的影响,导致频谱上并没有很多的有用信息,考虑针对此幅图像的特殊性,真正有信息的是图像中间的名片,这部分的信息能对len和theta参数造成影响,而周围背景区域所产生的有用信息较少,甚至会造成负面影响,因此将模糊图像进行截取得到下图:
从这幅图像进行分析可以得到参数len=3,theta=163
可以看出len参数的值仍有很大的误差,但theta的值对比图像特征比较符合。 因此考虑对len参数进行重新确定,主要方法为利用L-R算法进行遍历(L-R算法对len参数的鲁棒性比较好)。但是L-R算法迭代时间较长,且原图像像素规模较大,因此考虑将图像很小的一个局部进行复原,得到参数后再对全局图像进行处理,示意图如下:
利用上述参数对整体图像进行复原得到以下结果:
右图为复原图像,可以看出,比较大的字基本已经可以识别,但是小字由于模糊程度太大,恢复效果还有待更一步的改进。
二、离焦模糊图像复原 【实验方法】
经过文献调研和查阅资料,我们总结了主要复原算法有以下两种: 1、维纳滤波复原
点扩散函数的傅里叶变换为:
式中,J1 (·) 表示一阶第一类Bessel 函数,M×N为二维离散付立叶变换尺寸,,u , v,为数字化的空间频率, u = 0 ,1·····, M - 1; v = 0 , 1 ,······N - 1。由一阶第一类Bessel 函数的性质可知, H( u , v) 在频率域的第一个暗环(零点)的轨迹为:
当噪声较小的情况下,由公式(2)和公式(5)可知,可以由离焦模糊图像的付立叶变换D( u , v)第一个暗环(零点)所对应的空间频率u , v求出模糊半径r。模糊半径确定后,点扩展函数h ( x , y)和传输函数H( u , v)也跟着确定。
算法流程:
(1) 利用二维FFT计算离焦模糊图像的离散傅里叶变换G( u, v) ,求对应的幅度谱| G ( u, v) | 。
(2) u从0 至M - 1, u 从0 至u 做二重循环寻找| G ( u, v) | 第一个暗环所对应的零点, 求出所有零点所对应的模糊半径r;零点模糊半径的数学期望值即为模糊半径r。
(3) 分别利用拉氏算子g ( x, y) 进行微分和二维快速傅里叶变换计算微分图像的自相关S,将自相关S的分布由直角坐标系转化到极坐标系;根据估计的r,计算Sρ并确定Sρ=2γ,从而得到h ( x, y) 的参数r。
222
(4) 取局部大小为P = Q = 2,计算图像方差σ𝑓 ( x,y) ,确定minσ𝑓 ( x, y) 和minσ𝑓
( x, y) ,计算信噪比倒数γ。
(5) 利用下式作为滤波器进行一次维纳滤波。
2、基于微分图像自相关的离焦模糊图像盲复原
对于线性空间不变成像系统,图像退化过程可表示为
g ( x , y) = h( x , y) * f ( x , y) + n( x , y)
为了利用离焦点扩散函数的性质,假设不考虑噪声,对上式进行拉氏算子微分,并利用求卷积与求相关的转换关系,再对其求求自相关,可以得到:
式中表示二维相关运算;S f = f ( x , y) f ( x , y)为清晰图像的自相关,通常表现为对称单峰函数;是二维离焦PSF经过拉氏算子微分后的自相关函数,据上讨论,我们可望从S 中心附近的最小极小点位置确定光学离焦的参数。
根据以上分析,通过将算法有效融合,得到基于微分图像自相关的离焦模糊图像超分辨力盲复原算法,其计算过程为:
1) 采用拉氏算子对离焦模糊图像进行无方向微分处理; 2) 通过自相关估计出离焦PSF 的模糊半径Nr;
3) 由预测的Nr,采用MPMAP 法(6) 式迭代出复原图像,实现对离焦模糊图像的盲复原。 我们的工作:
我们小组对上述两种方法分别进行了实验,对于方法一,由于作业所提供模糊图像并非利用Matlab函数人为生成的,因此在文献中可以成功应用的方法在实际过程中难以直接应用,最关键的问题是原图像的傅里叶变换图像与方法中介绍的并不相同,我们认为是噪声过大的原因;对于方法二,我们成功了进行了实验,但是发现对模糊参数的估计误差较大,恢复结果差强人意。因此我们根据实际情况选择了一种实现简单、恢复结果不错的方法:
先根据模糊情况用粗精度遍历所有可能的模糊半径,建立一个图像清晰度评价函数对遍历结果进行评价并反馈,根据反馈结果确定参数的大概范围,再在此范围内进行一次细精度的搜索,找出评价函数取得最大值的结果定为最终输出结果。
这种方法的关键之处在于清晰度评价函数的建立,我们采用了拉普拉斯算子和作为清晰度评价结果,其表达式如下:
g = 𝑖𝑗 ( 8f(i,j)−f(i−1,j)−f(i+1,j)−f(i,j−1)−f(i,j+1)−f(i−1,j−1)−f(i+1,j−1)−f(i−1,j+1)−f(i+1,j+1))
对于一幅模糊图像,在每一象素附近的灰度值变化小,则g小。对最清晰图像,图像的轮廓鲜明,g达到最大值。 【实验结果】
对于defocus-1.tif,粗搜索结果:定位模糊半径为3;细搜索结果:定位模糊半径为2.6。
原图 模糊半径2.6
对于模糊程度更大的defocus-2.tif : 显然这张图像的模糊度比上一张更大,但是其图像清晰度评价在模糊半径为较小数时(如2,4)出现较大值,观察对应恢复图像其实恢复效果并不好,因此剔除这些异常值重新搜索。
粗搜索结果:定位模糊半径为17 细搜索结果:定位模糊半径为17
原图 模糊半径17
根据以上结果可以看出,虽然没能实现完全复原,但在不知道任何模糊信息的情况下恢复得到如此结果已经不错了,至少在效果上并不输于以上提到的两种方法,而且实现复杂度大大降低。
三、附录
【代码清单】 test1_1.m 多种复原方法比较 test1_2.m Win.m test2.m test2BL.m Hough.m GMG.m adpmedian.m 噪声图像多种复原方法比较 去振铃窗函数 未知方向运动图像参数初估计 未知方向运动图像局部图像参数遍历 Hough变换函数 GMG图像评价函数 中值滤波 LiJiaoFuYuan.m 离焦复原函数