PatchMatch匹配部分理解(一)

时间:2024-04-11 18:03:54

版权声明:本文为博主原创文章,未经博主允许不得转载。

一 总体介绍

非参数切块采样方法的核心要素是对一个图像区域中的所有切块进行重复搜索,以获得另一个图像区域中最相似的切块。换句话说,给定图像或区域A和B,在诸如Lp的切块距离度量下在B中找到与A中的切块最近邻的每个切块。我们将此映射称为最近邻场(NNF),在插图中是示意图。使用蛮力搜索来解决这个问题是昂贵的-- 图像和切块大小分别为M和m个像素。即使使用加速度方法,如近似最近邻和降维,这个搜索步骤仍然是非参数切块采样方法的瓶颈,阻止它们达到交互速度。此外,这些基于树的加速结构使用具有相对大的存储空间O(M),这限制了它们对高分辨率图像的应用。
PatchMatch匹配部分理解(一)

图1 蛮力搜索示意图

为了有效地计算近似最近邻场,我们的新算法依赖于关于该问题的三个关键观察值:

1.1 Dimensionality of offset space.

第一,虽然切块空间的维度很大(m维),但它是稀疏分布的(O(M)个切块)。许多以前的方法通过使用树结构(例如,kd树,可以在 时间内搜索)和降维的方法(例如,PCA)来降低切块空间的维度以加速最近邻搜索。相比之下,我们的算法在2-D空间中搜索可能的切块偏移,从而实现更高的速度和存储效率

1.2 Natural structure of images.

第二,通常对每个像素的独立搜索忽略了图像中的自然结构。在切块采样合成算法中,输出通常包含来自输入的大量连续的数据块。因此,我们可以通过相互依赖的方式执行对相邻像素的搜索以提高效率。

1.3 The law of large numbers.

第三,虽然任何一个随机选择的切块分配都不太可能是一个很好的猜测,但是大量随机分配的一些重要部分可能是很好的猜测。随着该范围变大,具有正确偏移的切块可能性变得很大。

1.4 本文算法

提出了一种使用增量更新的计算近似NNF的随机算法。该算法从初始猜测开始,该初始猜测可以从先验信息导出也可以是简单地是随机场。迭代过程包括两个阶段:
传播,在传播过程中使用相干性来传播场中相邻像素的良好解;
随机搜索,在这个过程中当前偏移向量受到多个随机偏移量的影像。
(吹)
从理论和经验上都表明,该算法对于高达2MP的测试图像具有良好的收敛特性,并且在CPU上实现我们的方法与使用PCA的kd-树相比速度快了20-100倍。此外,在相同大小的图像上,我们提出的GPU实现方案大约比CPU版本快7倍。在原始图像之外我们的算法只需要很少的额外内存,这与之前构建辅助数据结构以加速搜索的算法不同。使用我们算法的默认参数设置,运行时为O(mM logM),内存使用率为O(M)。尽管这与最有效的基于树的加速技术具有相同的渐近时间和存储率,但是主要常数实质上更小。

二 加权最近邻算法

我们系统的核心是计算切块对应关系的算法。我们将最近邻域(NNF)定义为函数 ,对于两个切块D之间的一些距离函数,在图像A中的所有可能的切块坐标(贴片中心的位置)上定义的偏移。在图像A中给定贴片坐标a和在图像B中的其对应的最近邻居b,f(a)直接就是b-a。我们将f的值称为偏移量,并将它们存储在一个维数为A的数组中。
本节介绍一种计算近似NNF的随机算法。注意,促进这种算法的关键是我们在可能的偏移空间中搜索,相邻的偏移搜索作为协作,并且即使是随机偏移也可能是对大图像上的许多切块的良好猜测。
该算法有三个主要组成成分,如图2所示。最初,最近邻域填充了随机偏移或一些先验信息。接下来,将迭代更新过程应用于NNF,其中将良好的块偏移被传播到相邻像素,然后在邻域中进行随机搜索直到找到最佳偏移为止。
PatchMatch匹配部分理解(一)
图2 随机最近邻居算法的阶段示意:(a)最初切块具有随机分配;(b)蓝色切块检查上方/绿色和左/红色邻居,看看它们是否会改善蓝色映射,传播好的匹配;(c)切块随机搜索用于同心邻域的改进。
PatchMatch匹配部分理解(一)
图3 收敛说明。(a)仅使用来自底部图像的切块来重建顶部图像。(b)上面一行:通过第4节中描述的切块“投票”进行重建,下面一行:随机初始化偏移场,其大小可视化为饱和度,角度可视化为色调。(c)通过第一次迭代进行到1/4处,高质量偏移已经在当前扫描线上方的区域中传播(用水平条表示)。(d)通过第一次迭代进行到3/4。(e)第一次迭代完成。(f)两次迭代。(g)经过5次迭代后,几乎所有切块都停止了变化。小橙花只能在后来的迭代中找到很好的对应关系。

2.1 初始化

可以通过为随机场分配随机值或者通过使用先验信息来初始化最近邻场。当使用随机偏移进行初始化时,我们在整个图像B范围内使用独立的均匀抽样。在第4节中描述的应用程序中,我们使用粗到细的逐渐调整大小的过程,因此我们可以选择使用从金字塔中的前一个级别初始化猜测。但是,如果我们仅使用此初始猜测,则算法有时会陷入次优的局部最小值。为了保证这个先验的质量,同时仍保留一些摆脱这种局部最小值的能力,我们使用随机初始化执行算法的一些早期迭代,然后仅在的切块处与上采样的初始化合并其中D较小,然后执行剩余的迭代。

2.2 迭代

初始化之后,我们执行改进NNF的迭代过程。算法的每次迭代都如下进行:以扫描顺序(从左到右,从上到下)检查偏移,并且每次传播之后是随机搜索。这些操作在切块级别上交叉执行:如果Pj和Sj分别表示切块j处的传播和随机搜索,则我们按照下面顺序进行:P1,S1,P2,S2,……,Pn,Sn。

Propagation。

我们尝试使用已知的f(x-1,y)和f(x,y-1)偏移来改善f(x,y),假设切块偏移可能是相同的。例如,如果在(x-1,y)处有一个良好的映射,我们尝试使用该映射向右的一个像素转换为(x,y)处的映射。设D(v)表示A中的(x,y)处的切块与B中(x,y)+v处的切块之间的距离(误差)。我们将f(x,y)的新值取为 的arg最小值。
如果(x,y)具有正确的映射并且处于相干区域R中,那么R中(x,y)右下方的所有区域将被正确的映射填充。此外,在偶数迭代中,我们通过反向描扫顺序检查偏移来向上和向左传播信息,使用f(x + 1, y)和f(x, y + 1)作为我们的候选偏移。

Random search.

v0=f(x,y)v_0=f(x,y)我们尝试通过测试候选偏移序列来改善fx,yf(x,y),该序列与v0成指数递减距离:
PatchMatch匹配部分理解(一)
其中Ri是[1,1]×[1,1][-1, 1]×[-1, 1]中的均匀随机树,w是大的最大搜索“半径”,并且α\alpha是搜索窗口大小之间的固定比率。我们检查i=0,1,2,...i=0,1,2,...的切块,直到当前搜索半径wαiw\alpha^i小于1像素。在我们的应用中,w是最大图像尺寸,除非另有说明否则α=1/2\alpha=1/2。请注意,搜索窗口必须夹在B的边界上。
Halting criteria(停止条件). 虽然根据应用可以使用不同的停止标准,但实际上我们发现它可以很好地按照固定次数迭代。这里显示的所有结果都是用经历4-5次迭代计算的,之后NNF几乎总是收敛。收敛如图3和随附的视频所示。

三 Efficiency.

这种简单的方法的效率可以通过几种方式得到改善。在传播和随机搜索阶段,当尝试用候选偏移u改善偏移f(v)时,如果D(u)的部分和超过当前已知距离D(f(v)),则可以提前终止。此外,在传播阶段,当使用边长p和Lq范数的方形切块时,通过在重叠区域的总和中注意冗余项,可以在O(p)O(p)而不是P(p2)P(p^2)时间内递增地计算距离的变化。然而,这会产生额外的存储开销来存储当前最佳距离D(f(x,y))D(f(x,y))

acknowledgement

本篇博文来自《PatchMatch-A Randomized Correspondence Algorithm for Structual Image Editing》的翻译。