基于自适应样本块大小的纹理合成图像修复算法
2021-12-07王胜波王秀友刘华明时如梦毕学慧
王胜波,王秀友,刘华明,时如梦,毕学慧
(阜阳师范大学计算机与信息工程学院)
引言
数字图像修复在图像处理中占有重要地位。自从Bertalmio 等[1]提出数字图像修复后。随着科技发展,其普遍应用到人们生活中的不同领域。例如医学图像分割、旧照片修复、及移除图片中不感兴趣的目标物。虽然图像的修复结果不具有唯一性,但是修复的效果应满足在轮廓结构上具有一致性和纹理清晰,对于人们的观察给予视觉上的真实感。
在2001 年B.Bowen 等人[2]提出一种基于各向同性扩散模型的简单快速修复算法。该算法使用已知图像的矩阵信息,填充未知目标区域,修复时对待填充区域采用逐步迭代的卷积运算。此算法适用于局部小区域填充,对于较大的修复域出现携带虚假信息进入此区域。Criminis 等[3]提出一种基于样本块对图像目标区域进行修复方法。该方法通过数据项和置信度的乘积,判断目标区域边缘轮廓的填充次序即填充优先级。针对优先级高的像素点,在原图已知区域寻找最佳匹配块对其进行填充。然而该算法在修复过程中会出现局部结构不清晰或误修复。对于这类问题,该领域研究者分别提出自己的改进方法。Marcelo 等[4]提出对图像分解、纹理合成、图像修复方法。实现对图像纹理与结构的同时修复。Jia-Bin 等[5]提利用一种利用图像场景结构方法进行对缺失区域修复。该方法利用图像中层结构线索,基于块的情况下对图像平面和规律性进行检测,进一步引导图像补全。Telea 等[6]提出一种快速匹配算法,优点在于明确的维持一个狭窄的通道,即当前待修复区域的边界。使得已知区域与未知区域被明显分割开来,同时他指定了下一个待修复的像素点。Igor 等[7]提出TreeCANN 算法。其使用降维与松散kd 树搜索结合,提高搜索效率,采用积分图像方法加快图像传播,从而更快的匹配两副图像中的所有块。Alasdair 等[8]提出基于块迭代多尺度图像修复方法。该算法是基于最小化的全局泛函。从而提高修复的质量。
近年来,图像修复在智能交通、医学、摄影等方面有着广泛应用。随着连接主义的兴起,图像修复随之加入神经网络的潮流。Deepak 等[9]首个使用GAN 图像补全框架。文中提出基于图像上下文已知像素进行预测驱动的一种无监督的学习算法。编码器只对破损区域上下文进行编码,并使用结果特征,进一步从数据集中检索最近的相邻像素,生成的块在语义上与原始块相似。解码器对缩小后的特征图像进行上采样,对上采样图像进行卷积处理,目的是完善物体的几何形状。Wei 等[10]提出一种新的具有前景感知图像修复系统。该系统能够明确进行结构推理与内容补全。虽然基于神经网络对图像修复有一定优势,但部分修复框架,其将目标区域使用随机噪声来填充,这样修复的结果会出现部分不合理的图像块。
为了提高图像修复的质量,本文采用Barnes等[12]提出的快速随机搜索块匹配算法。并在此基础上进行改进,改进后的算法可同时移除多个目标物,对于不同目标物分别计算其轮廓面积,当移除物过于接近时,避免出现轮廓重叠现象,处理过程中引入PCA,提取出目标物的方向及中心点,并计算面积的均值。求均值与各个面积比值,并对其进行累加求和。得到的数值与移除目标个数的一半进行比较,计算块的大小。原图像进行下采样构建图像金字塔,通过上采样将各层图像相融合,在此过程中依据每层图像破损区域轮廓梯度信息与面积的比值作为当前层块大小选择依据,来提高图像的修复效果。
1 相关工作
1.1 Patchmatch 的概念
Patchmatch 核心思想通过图像中部分已知信息,去填充未知目标区域。根据目标区域的边缘信息,计算出像素的优先级。依据某点像素优先级,判断像素位置p 优先级值是否最大,若是则确定像素所属块P。其次在邻近目标区域边缘寻找最相似匹配块S,对块P 缺失部分进行像素补全。最后更新优先级权重,直到所有像素都被修复。
1.1.1 初始化
初始化即将数组中设置的初值通过插值映射公式,将其随机填充到映射表中。图像A 的每个像素。采用偏移量矩阵中相应的随机值为其赋值,同时在图像B 中查找对应的像素。本文算法以当前层为A 图,上一个级清晰图像为B 图,在图A 目标物边缘部分,依照其轮廓梯度变化,判断优先级较高的块T。使用T 块中已知像素信息,寻找在B 图中对应的块,填补T 块中未知信息。初始猜测时算法偶尔陷入局部最优,所以每次循环都调用从源到目标,从目标到源两个不同函数,来尽可能防止算法局部最优。
1.1.2 传播
图1 相似块传播示意图
首先以A 图块3 和B 图中对应的偏移块3’做相似度比较并记录为simliar1。之后将块3 和B 图块1’和2’分别进行相似度比较,记录为simliar2,simliar3,比较记录中的数值,其中最大者,对应B 图中的块与A 图块3 最相似。最后将A 图中相应块偏移量值赋予块3。如果simliar1 最大,则A 图中块3 偏移量值不变,其仍对应B 图中的块3’。如果simliar2 最大,则将A 图中块1 所属偏移量值赋予块3,此时块3 与B 图中块1’对应。如果simliar3 最大,则将A 图中块2 所属偏移量值赋予块3,此时块3 与B 图中块2’对应。
1.1.3 随机搜索
首先图像中每一像素点以当前偏移量为中心,在搜索范围内寻找最佳匹配的偏移量,替代当前偏移量。其次搜索的直径,开始为图片高宽最小尺寸。搜索半径大小为前一次的1/2,半径小于1 时结束本次搜索。设v0=f(x,y)尝试通过测试候选偏移序列来改善f(x,y),该序列与v0呈指数递减距离,偏移序列公式为:
其中Ri是[-1,1]x[-1,1]中均匀随机数,w是最大搜索”半径”,并且α是搜索窗口大小长宽比例。其中i=0,1,2…的切块,直到当前搜索半径wαi小于1 像素。w为图像宽高中的最小尺寸。α=1/2。
1.2 主成分分析PCA
主成分分析(PCA)是图像处理中常用的数据降维方法。可以处理图像中图形平移旋转事件的发生,主要思想是n维特征映射成k维特征,这k维特征是在原n维特征基础上正交得到。其实质是通过已知矩阵计算其协方差矩阵,进一步得到矩阵的特征向量及特征值,从中选出k个最大的特征值,提取与它们相关的特征向量组成相应矩阵。因此,PCA 可以找到数据变化最大的方向。其目的是将给定的维度p 的数据集x 转化为较小维度L 的可选数据集y。其中Y 是矩阵X 的霍特林变换[13(]KLT):
若要恢复X 矩阵做逆霍特林变换即可。
2 本文算法
2.1 目标物轮廓检测
在一开始对图像检测,获得不同目标轮廓,之后使用PCA 方法获得所有轮廓点的集合的中点,主方向等信息。将目标物的轮廓在掩模区域标出,但为防止轮廓出现重叠现象,获得轮廓角度后,转换轮廓并获得最小外接矩形。为了获得单点进行转换后的精确坐标使用公式:
Px为旋转后轮廓某点对应的x坐标,Ix是轮廓上某点的x坐标,Cx是某点所属轮廓的中心x坐标,A为设定的旋转角度,Iy为轮廓上某点的y坐标,Cy是某点所属轮廓的中心y坐标,Py是旋转后轮廓某点对应的y坐标。
2.2 选择初始块
块大小的初次计算,在图像金字塔构造之前,根据不同目标物轮廓面积之和与个数比值,在两个候选块中做出相应选择。首先,检测移除目标物轮廓,统计轮廓总面积和个数后,求出面积均值,其次,对每个目标物进行比较并计算出比值之和,最后,比值之和与目标物个数二分之一相比选择块大小。具体方式如下:
Si为第i个轮廓面积,n为目标物个数,sum为轮廓面积之和,mean为面积均值。S为均值与图片中各轮廓面积之比的和。Ps为初次选择块大小。
2.3 修复过程中块大小的选择
原始图像采用构建金字塔方式进行分解,金字塔每层图像分辨率大小不同。在上采样过程中进行对破损区域进行修复。图像上采样融合过程中,根据不同层图像破损区域相应轮廓梯度变化计算块大小。梯度信息提取使用Sobel 边缘检测算子,计算当前层目标区域轮廓像素梯度。Sobel算子对于噪声较多及灰度变化轻的图像有较好处理效果。本文方法与之前遍历整幅图像修复区域边缘,统计轮廓梯度信息方法,有更佳的适应性。算法依据当前层目标区域轮廓的梯度信息,计算出相应块。公式如下:
其中i代表当前图像所在金字塔中的层数,SGi为当前层目标轮廓区域梯度之和。Si+1 代表目标轮廓面积其至少为1。MGi为平均梯度,vari为当前层标准差。
其中:Ps为样本块大小,e-i和d是经过反复试验确定的测量标准。以上公式依据,不同层目标区域轮廓梯度信息,计算出每一层最合适的块,从而使修复较为理想。
图2 角点、边缘、纹理相应斑块的梯度信息与周围轮廓比值
第一组显示了矩形的块及周围区域。第二组计算块Ψa,Ψb,Ψc 的梯度值与相应层目标轮廓区域面积之比,用来判断纹理结构变化。以d 值为依据对每层进行块大小选择。
3 实验结果与分析
3.1 参数设置
在Windows 10 平台上,使用CLion 2019 语言编译器,采用Opencv 4.1.1 版本进行实验。本文开始设定块大小是根据移除多个目标物时,缺失区域平均大小,在块5x5、7x7,之间选择。图像下采样过程中,特定卷积核的使用,在采样效果上对于高斯卷积核更清晰。图像上采样进行修复时,依据当前层的目标区域轮廓梯度信息计算块大小。
3.2 实验结果与分析
为了测试文中方法的实际效果,实验过程中选取多幅图片,并且与其它算法进行比较如下图所示。
图3 为目标物移除修复。文献[6]结果在目标区域出现凸起现象。文献[12]修复后出现较大模糊区域。其它文献的结果修复区域后模糊状态降低。图(e)与图(f)虽然避免了较大模糊区域的出现但也不能使得黑色线条连贯,本文方法解决了目标物中心区域线条连贯性,使得在视觉上具有连通性。
图3 消防栓消去结果
图4 显示多个目标消去的结果。文献[6]结果在目标区域出现多处模糊现象,使图像部分失真。文献[12]在修复后部分填充区域,海水中出现白色斑块。文献[15]、文献[16],它们在修复效果上类似。但也出现一些模糊区域。本文方法较好的避免在填充区域出现斑块、模糊现象,在视觉上体现图像的真实性。
图4 人物消去修复结果
图5 显示方块的修复结果。根据对图(c)-(g)比对,可以看出文献[6],修复时斑块出现错误填充现象。其它文献虽然在一定程度上减少模糊现象,但也出现黑色块边缘有一定的突出。本文方法对目标区域修复后出现模糊及错误填充现象,有抑制作用,提高图像修复质量。
图5 方块消去修复结果
图6 对消除直线区域进行修复。文献[6]在图像顶端部分,出现块的错误填充。天空中部分块,覆盖山体原有块。文献[12]修复效果刚好与其相反。此类现象使得图像部分结构与原图不对称。图(e)与图(g)在修复结果上出现部分模糊现象。本文算法在一定程度上避免图像目标区域模糊和块填充错误现象。
图6 直线消去修复结果
图7 展示对不同目标物的移除后的修复效果。文献[6]修复结果中目标区域出现模糊及失真现象。文献[12]虽然减少目标区域模糊现象,但出现明显错误填充。文献[15]、文献[16],在修后都出现不同程度模糊现象。本文不仅降低去除目标的模糊现象,而且在消去砖块部分对纹理修复具有视觉可信性。
图7 相机与砖块同时消去修复效果
根据表1、2、3 中数据对比。文献[12]、文献[15]和本文方法有较高修复效率。本文方法不仅在结构相似度上与文献[12],有明显提高,而且减少修复时长。使用峰值信噪比对文中方法与文献[15]、文献[12]比较,图像失真现象有所降低。文献[12]在破损区域出现模糊及块的错误填充,文献[15]也出现局部模糊情况。本文方法在图像修复结果上模糊状态减少,提高修复效果。在金字塔图像每层进行选择时,合适的块大小不仅有利于提高修复效果,还可以缩短修复时间。
表1 不同图象修复方法的耗时对比(秒)
表2 不同图象修复方法的结构相似度对比
表3 不同图象修复方法的峰值信噪比对比
4 结束语
本文依据图像金字塔中每层图像包含目标区域轮廓梯度信息,在上采样过程中进行块大小的自适应选择。此外在进行多个目标消除时,采用对目标进行轮廓检测,计算修复区域面积及个数,进行初次块选择。在此过程中为了防止不同目标轮廓出现重叠现象,采用PCA 方法对修复区域进行中心及方向提取。本文方法由于块自适应选择,在移除多个目标时降低了修复结果模糊状况,在移除单个目标时结果具有较好的视觉真实性。