补丁优先级及其对Criminsi基于范例的修补的影响

时间:2013-08-22 07:24:14

标签: opencv image-processing

我正在努力实施Criminsi等人提出的基于绘画的示例。人。以其原始格式(在进一步优化之前)。

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

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

根据我的理解,Criminsi建议如下:

  1. 确定填充前沿dΩ。
  2. 计算填充上的补丁上的补丁优先级[C(p)D(p)] 前面。
  3. 按照补丁的顺序将纹理传播到补丁中 优先级。
  4. 更新置信度值。
  5. 从剩余的未填充部分重新计算填充前沿dΩ。
  6. [重复这5个步骤直到填满所有目标区域]。

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

    • 如果我总是只从填充前端填充补丁,如果是 补丁固定在它们的空间位置(w.r.t其他补丁) 填充前面,然后我看不到填写顺序如何 事项。通过直接采样源填充补丁 区域,对于所有迭代保持不变。因此,我没有 了解填充顺序将如何导致任何像素级别 传播纹理的差异。从我收集的,最好的 无论如何,源区域的匹配应保持不变 命令。我在这里想念的是什么?

    • 基于此video(并假设它是正确的),补丁填充 并不总是出现在填充前沿。这是如何运作的? 这是否意味着我们要计算所有补丁的优先级 目标区域立即进行,并根据他们的情况继续填充 重点是什么?然后,填充前沿确定如何重要 为什么Criminsi确定dΩ?我理解Criminsi的 方法比传统的洋葱皮技术领先一步。 但究竟如何?

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

    请帮忙。

    提前致谢。

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

    我在实施此算法时面临的另一个问题是:

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

    困扰我的问题是:什么是SSD?我尝试了RGB / HSV值的SSD但是没有用。我刚刚开始引用SSD的original citation Criminisi,但我只是想知道......有更简单的方法吗?

    任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

填写正面:

本文的想法是修复信息最可靠的第一个补丁,因此填充前沿。 在这个细边框中,贴片的一部分由原始图像(开头)或前一个结果组成。 因此,视频是错误的(结果不是很好)。

如果您不遵循填充前端方法,那么您需要一些全局优化过程以确保结果的正确性(例如,请参见流行的graphcut-based textures)。

修补程序传播:

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

优先功能:

这里的直觉是,由于您要复制源补丁,因此您应该首先复制纹理最多的补丁。 这是为什么?假设你有一个纯粹的半黑色(左半边和半白色(右)图像,并且修复域我在中间。 没有优先权,您可能首先复制纯黑色或白色补丁。 使用优先功能,您将检测填充前沿中属于黑色和白色区域之间边界的像素,在正确位置复制一些半黑色半白色色块,然后仅在相关位置添加纯黑色/白色色块

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

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

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

然后,会发生什么:

  1. 你复制像素3的源补丁。剩下的洞是空的,你可以复制所有与$ \ Omega $相交的补丁
  2. 你找到一个匹配像素4的补丁。一旦找到,你将它复制到$ \ Omega $ 减去与前一个补丁的交集(像素3的那个)。如果交换优先级3和4,则不会保留源补丁的相同部分。
  3. 处理下一个填充前像素等