基于样本块修正的图像修复算法与实现
来源:用户上传
作者:殷娟娟
摘要:针对信息缺损的图像,提出修正传统像基于样本块的图像修复方法。本文在Criminisi算法的基础上,提出了满足于不同结构区域信息自动修复需求的一种样本块大小的自适应选取方法,以弥补传统基于样本块的修复算法中忽略图像纹理结构而使用大小固定不变的样本块这一缺陷。并通过实验进行验证,结果表明基于样本块修正的图像修复算法可以改善和提高了传统修复方法实验的结果和误差。
关键词:图像修复;纹理结构;Criminisi算法
中图分类号:TP393 文献标识码:A
文章编号:1009-3044(2020)14-0044-03
數字图像修复是将一幅有破损(或者腐蚀)的图像,利用某种数字方法填充未知的破损区域的技术,其目的是将缺损图像修复为完整图像,且视觉无法察觉。该技术在旧照片修复、景物移除,文物绘画、壁画修复,影视作品等许多领域有广泛的应用。
目前图像修复算法主要分为三大类:一是基于偏微分方程的小区域破损图像修复算法,二是基于纹理合成的大区域破损图像修复算法,三是基于深度学习的图像修复算法。这些算法的思想和实现步骤各不相同。对于样本块修复算法而言,Cri-minisi等人最先提出了以块为单位的图像修复技术,该算法主要是通过寻找图像待修复区域和完好区域之间的最佳匹配来完成图像的修复。该方法可以修复基于纹理合成的大区域破损图像,但也存在很多问题,比如该算法中用已知样本块补全待修复区域时,样本块大小是固定的,如果样本块太大对于纹理结构复杂的图像,就不会得到较好的修复,修复效果不佳;相应的如果样本块太小对于待修复区纹理结构单一的图像,又会显得耗时。
本文对基于样本块的图像修复算法进行仿真研究,并针对样本块的大小进行改进,利用邻域相关信息自动调整样本块大小,以适应不同纹理和结构的修复。
1基于样本的图像修复
1.1 Criminisi算法基本思想
基于样本进行图像修复的核心思想是利用图像本身的冗余性,用图像已知部分的信息来补全未知部分。具体可以分为以下几个步骤。
首先,根据待修复图像的结构特征,在待修复区域边缘处选取优先度最高的像素点P,并以P为中心确定一个n*n大小的样本块。
然后,在图像的完好区域搜索与该样本块最相似匹配块,计算匹配误差。
最后,将最优匹配块中的信息复制到待匹配块中,并更新已修复后像素点的置信度。重复上述步骤,直到全部破损区域修复完成为止。
1.2优先度函数
优先度是指图像修复过程中待修复区域样本块补全的优先次序,根据优先权度的大小顺序来确定样本块被填充的顺序。优先度的计算需要考虑两个因素:一是周围像素可信度高的位置要优先修补,二是位于图像梯度变化剧烈的位置要优先修补。综合二者得到所有优先度之后,挑选优先度最高的像素优先修补。因而优先度的计算在图像修复的整个过程中尤为重要,而且直接影响最终的修复效果。各待修补块的优先度函数定义为:
公式(2)、(3)中,P为待修复区域边缘上的一点,Ω为图像中的待修复区域,ψp为以P为中心的待修复块,ψp表示待修复区域的大小(即其像素点个数),▽IP⊥为p点的等照度线的方向,可以用灰度梯度表示,np是填充前缘aΩ上p点处的法向量,a为归一化因子(对于灰度图像,a=255)。
2样本块自适应优化方法
2.1 Criminisi改进算法思想
本文的算法思想与Criminisi和传统的基于样本块的算法思想大致相同,只是在一些细节上都采用自己的实现方法。比如,前面介绍的自定义模板大小和颜色选择等,还有在程序中对置信度的更新均直接采用填充的已知值,这样既不影响图像修复结果,也简化了运算;此外,还在搜索最佳匹配块的步骤中采用先求模板中匹配块与目标块像素点的方差和,再求标准差的运算方法,并结合算法复杂度和图像处理效果两方面的考虑,对方差和相同的结果(如4个2的平方和与1个4的平方和,两者值相同,但为了视觉上的全局一致性,我们会选择采用前者的值)做了一个求4次方的运算,以获得更好的匹配,且也不会增加太多的运算量。
2.2改进算法的实现
算法的实现步骤:
(1)根据图像特征将图像进行二值化。待修复区域的像素点用0表示,已知区域的像素点用1表示;
(2)寻找填充前缘。条件:在填充前缘的点自身标记为1,且其上下左右四个邻近点的标记至少有一个1和一个0;
(3)计算边缘上每个点所在目标块的优先级。每个像素点的初始置信度设置分别为c(p)=0(p为待填充点)和c(p)=1(p为已知点)。等照度线方向的单位向量可用图像在x和v方向的灰度梯度表示,边缘法线单位向量用做好标记的点(即用0和1分别表示未知和已知点)的梯度表示;
(4)在所有目标块中找出最高优先级的目标块ψp;
(5)对灰度图像进行扫描,在已知图像区域ψ中找出与ψP最匹配的模块ψq,用于填充ψp区域。可将ψP中已知点的灰度值与ψq中对应点的灰度值进行标准差运算,得出标准差结果中最小的ψq就是我们想要的填充块;
(6)将ψq的像素值复制到ψp位置;
(7)修改填充后模块ψp的置信度值:c(p)=c(q)(这里的c(q)是最佳匹配块ψq的置信度值),同时将已填充了的点标记为1;
(8)重复(2)-(7)步骤(注:像素点的置信度已不再需要初始化);
(9)程序结束。当边缘点个数为0时,程序结束退出。
3实验结果与分析
第一组实验原始图像大小为100*100,不同位置的掩膜代表不同位置的破损区域,如图2所示,三组实验中,图(a)掩膜位于纹理结构稀疏区域,图(b)掩膜位于纹理结构密集区域,图(c)掩膜位于梯度变化剧烈区域,采用Criminisi传统算法,使用相同尺寸的模板对破损位置不同的图像进行修复,修复效果分别如三组图的最后一幅“修复结果”所示。
由图1(a)、(b)、(c)三组实验的修复结果可见,破损位置位于图像纹理结构不明显的位置时修复结果较好,破损位置位于纹理结构清晰的位置时,修复结果较模糊,而破损区域位于图像梯度变化较大的边缘处时,因修复过程中使用固定大小的模板进行搜索修复使填充修补出的效果出现一些误差。
第二组实验中原始图像采用同样的大小,三组实验的破损位置位于同一梯度变化较大的位置,在利用改进后的Criminisi算法进行破损图像的修复实验,采用不同模板大小,修复效果分别如三组图的最后一幅“修复结果”所示。
第二组实验中,(a)图是带掩膜的破损图像,(b)、(c)、(d)三幅图像分别是在图像修复处理时采用不同尺寸样本块的修复结果。图(b)是用15*15的样本块时的修复结果,显然眼睛和鼻子的特征被填充到待修复域当中了,这是因为输入图像原本就比较单调,且眼睛处的纹理特征与待修复区域十分相似,产生了匹配错误从而出现了图示(b)修复结果一的情况。图(c)是用9*9的样本块时的修复结果,图(d)是用3*3的样本块时的修复结果。当采用3*3模板时,由于每一次迭代时几乎只填充了模板中一个像素点,而其余的点都用来做运算判断了,所以尽管输入的仍然是这幅较为单调的小图像,在用3*3模板处理后视觉上已经有相对不错的修复结果了。
4结束语
针对传统基于样本块的修复算法中忽略图像纹理结构而使用大小固定不变的样本块这一缺陷,提出了满足于不同结构区域信息修复时样本块大小修正的方法。然而,评价一个算法的优劣不能只看结果,还要从实施过程的复杂度、运算时长等多角度考量。实验中我们能够发现,虽然用较小的样本块修复图像的效果较好一些,但是由于每一次迭代时被真正被填充的个数变少了,导致相应的迭代次数增加,所以总的运行时间变长了。这在处理较大图像时,增加的时间复杂度会更多,因而算法的性能也需要进一步提升。
转载注明来源:https://www.xzbu.com/8/view-15266951.htm