2

我正在尝试按照Criminsi等人的建议实现基于示例的内画。人。以其原始格式(在进行进一步优化之前)。

我有一些理论上的疑问,我想澄清一下。

我不确定补丁优先级和填充顺序的确定如何将线性结构传播到用户选择的目标区域。

据我了解,Criminsi 提出以下建议:

  1. 确定填充前 dΩ。
  2. 计算位于填充前沿的补丁的补丁优先级 [C(p)D(p)]。
  3. 将纹理传播到补丁中 - 按照补丁优先级的顺序。
  4. 更新置信度值。
  5. 从剩余的未填充部分重新计算填充前 dΩ。

[重复这5个步骤,直到所有目标区域都被填满]。

现在,如果对算法的这种理解是正确的(如果解释有误,请纠正我),我有以下疑问:

  • 如果我总是只从填充正面填充补丁,并且如果补丁固定在它们的空间位置(相对于填充正面的其他补丁),那么我看不出填充顺序有多重要。补丁通过源区域的直接采样来填充,在所有迭代中都保持不变。因此,我不明白填充顺序将如何导致传播纹理上的任何像素级差异。据我所知,源区域的最佳匹配应该保持不变,无论顺序如何。我在这里想念什么?

  • 根据此视频(并假设它是正确的),补丁填充并不总是只发生在填充前端。这是如何运作的?这是否意味着我们要立即计算目标区域中所有补丁的优先级并根据它们的优先级继续填充它们?那么,填充前沿的确定有什么影响?为什么 Criminsi 还要确定 dΩ?我知道 Criminsi 的方法比传统的洋葱皮技术领先一步。但是,究竟如何?

在我深入研究 2-3 天的密集编码之前,我真的希望澄清这些问题。

请帮忙。

提前致谢。

+++++++++++++++++++++++++++++++++++++++++++

我在实现这个算法时面临的另一个问题:

在传播结构和纹理信息时,我直接对源区域进行采样,以找到两个补丁中已填充像素的 SSD 最少的补丁。

困扰我的问题是:SSD 是什么?我尝试了 RGB/HSV 值的 SSD,但没有成功。我刚刚开始引用 Criminisi for SSD 的原始引用,但我只是想知道......有没有更简单的出路?

任何帮助,将不胜感激。

4

1 回答 1

2

填充正面:

这篇论文的想法是在信息最可靠的地方修复第一个补丁,因此填充前沿。在这个细边框中,补丁的一部分由原始图像(在开始时)或以前的结果组成。因此,视频是错误的(顺便说一句,结果不太好)。

如果您不遵循填充前端方法,那么您需要一些全局优化过程来确保结果的正确性(例如,参见流行的基于图形的纹理)。

补丁传播:

修复补丁时,您只需复制与当前 $\Omega$ 域相交的源补丁(位于更大的源区域内)的内容。源区域是固定的,但不是放置它的位置,这取决于当前填充前像素。

优先功能:

这里的直觉是,既然你要复制源补丁,那么你应该首先复制纹理最多的补丁。这是为什么?假设你有一个纯半黑(左半白(右)的图像,而修复域 i 在中间。没有优先级,你可能会先复制纯黑色或白色块。使用优先级功能,你会检测像素在属于黑白区域边界的填充前,在正确的位置复制一些半黑半白的补丁,然后在相关位置只添加纯黑/白补丁。

为什么订单很重要,即使是小前线

在下面评论的示例中,我们假设我们有一个 5 个像素(1、2、3、4、5)的填充前沿,优先顺序为(3、4、5、2、1)。

由于填充前沿非常小,可以推断出要修复的剩余域非常小。因此,用于填充孔的补丁将相交。

然后,会发生什么:

  1. 您复制像素 3 的源补丁。剩余的孔是空的,您可以复制与 $\Omega$ 相交的所有补丁
  2. 你寻找一个匹配像素 4 的补丁。一旦找到,你将它复制到 $\Omega$减去与前一个补丁(像素 3 的那个)的交集。如果交换优先级 3 和 4,那么您将不会保留源补丁的相同部分。
  3. 处理下一个填充前像素等。
于 2013-08-22T08:46:56.027 回答