图像修复三: Image Completion Approaches Using the Statistics of Similar Patches

前面介绍了基于边界优先级的图像填充和基于投票加权的填充方式,再实现了另外一个基于graph-cut的算法,应该算是实现的最后一个图像填充传统算法了。貌似目前用传统算法的已经不多了,看到Github上传统算法star基本个位数,star比较高的基本都是deep learning的项目,感觉时代大潮席卷而过,deep learning毕竟可以通过训练学习的方式修复原本不存在于图片中的信息,仅仅这一点,是传统算法无论如何都逾越不了的。之后的工作中深度学习的应用也会更广泛,

Contribution

这篇papaer是hekaiming14年发的PAMI, 其主要贡献点是patch offset的稀疏性。
自然图像中存在自相似的冗余性,其patch块之间的偏移量也存在稀疏的特性,基本集中在几个点上。这篇paper首先计算出k个主要的offset,然后对图片进行offset然后堆叠起来,后续的操作就和photomontage是一样的了,通过设计data term和smooth term,对图像进行Graph-Cut后,最后利用Gradient-domain fusion的操作融合,减少边界缝隙的影响。

dominate offsets

图像patch的offset可以通过PatchMatch,CSH等算法快速计算出图像中每一个patch对应最近邻的偏移量直方图。 对于直方图进行简单的滤波和非极大值抑制,即可得到图像中最大的k个dominate offsets.

一个简单的样例如下。

原图 offsets histogram
在这里插入图片描述 偏移值

Graph-based inpainting

不同offset的图像可以看作一个stack堆叠起来,作为待填充区域的候选值,也就形成了一个graph。 每个需要填充的点对应于图的节点,该节点对应的offset值则作为需要获得的标签,inpainting问题转化为一个多标签的问题,找到每个像素点对应的offset也就完成了图像的填充。
通过data term和smooth term 计算图的最小割,这里我是用的GCO-v3.0开源软件实现的。

E ( L ) = x Ω E ( L ( x ) ) + ( x , x ) x Ω , x Ω E s ( L ( x ) , L ( x ) ) E(L) = \sum_{x \in \Omega}E(L(x)) + \sum_{(x,x')|x \in \Omega, x' \in \Omega}E_s(L(x),L(x'))
data term很好理解,对于数据对应的offsets所对应的数据如果再已知区域内,则其dataterm = 0, 否则为inf。对于mask边界上的只有offset = 0情况下data为0,否则为inf

smooth 项计算如下,从这项来看,会更倾向于对于相邻的像素点获得相同的offsets值。当无法用相同值时则
E s ( a , b ) = I ( x + s a ) I ( x + x b ) 2 + I ( x + s a ) I ( x + x b ) 2 E_s(a,b) = ||I(x+s_a) -I(x+x_b)||^2 + ||I(x'+s_a) -I(x'+x_b)||^2

Graph-Cut之后获得每个pixel对应的offset值

|label
按照offsets对图像进行填充结果如下。
在这里插入图片描述

Gradient-domain fusion

再原图中计算梯度,按照offset值拷贝到对应区域,再重新计算散度,解poisson 线性方程即可减少边界上的影响。

挑了个看上去对比更明显一点的图,从中可以看出梯度域融合减少了边界过度的不自然问题,使得最终填充的图像更好地融合到背景中。不会显得那么突兀。

补全图 blending 图
在这里插入图片描述 在这里插入图片描述

code

代码已经上传到Github了,都是按照我自己看完paper后所思所写,如有错误,还请指正。

https://github.com/chwahaha/statistic-of-similar-patch-offset

猜你喜欢

转载自blog.csdn.net/weixin_42386880/article/details/86550921