我正在尝试实现基于示例的修复,如提议的Criminsi http://research.microsoft.com/pubs/67276/criminisi_tip2004.pdf等等人。以其原始格式(在进行进一步优化之前)。
我有一些理论上的疑问,想澄清一下。
我不确定补丁优先级和填充顺序的确定如何将线性结构传播到用户选择的目标区域。
据我了解,Criminsi 建议如下:
- 确定填充前沿 dΩ。
- 计算位于填充上的补丁的补丁优先级 [C(p)D(p)]
正面。
- 将纹理传播到补丁中 - 按照补丁的顺序
优先事项。
- 更新置信值。
- 根据剩余的未填充部分重新计算填充前沿 dΩ。
[重复这5个步骤,直到填满所有目标区域]。
现在,如果对算法的这种理解是正确的(并且,如果解释错误,请纠正我),我有以下疑问:
如果我总是只从填充前端填充补丁,并且如果
补丁固定在其空间位置(w.r.t上的其他补丁)
fill-front),然后我不明白填充的顺序如何
很重要。通过直接对源进行采样来填充补丁
区域,在所有迭代中保持不变。因此,我不
了解填充顺序将如何导致任何像素级别
传播纹理上的差异。据我收集的资料来看,最好的
来自源区域的匹配应保持不变,无论
命令。我在这里缺少什么?
基于此video http://www.youtube.com/watch?v=UYk9_fTZbAs(并假设它是正确的),补丁填充
并不总是只发生在填充前沿。这是如何运作的?
这是否意味着我们要计算所有补丁的优先级
立即确定目标区域并根据它们继续填充它们
优先事项?那么,填充前沿的确定有何影响以及
Criminsi 为什么要确定 dΩ?我明白克里明西的意思
该方法比传统的洋葱皮技术领先一步。
但具体如何呢?
在我深入研究 2-3 天的紧张编码之前,我真的很想澄清这些问题。
请帮忙。
提前致谢。
+++++++++++++++++++++++++++++++++++++++++
我在实现该算法时面临的另一个问题是:
在传播结构和纹理信息时,我直接对源区域进行采样,以获取两个补丁中已填充像素的最小 SSD。
困扰我的问题是:SSD 是什么?我尝试了 RGB/HSV 值的 SSD,但没有成功。我刚刚开始参考Criminisi for SSD,但我只是想知道......有没有更简单的方法?
任何帮助,将不胜感激。
前面填写:
这篇论文的想法是修复信息最可靠的第一个补丁,即填充前沿。
在这个细边框中,补丁的一部分由原始图像(在开始处)或先前的结果组成。
因此,视频是错误的(顺便说一句,结果也不太好)。
如果您不遵循填充前端方法,那么您需要一些全局优化过程来确保结果的正确性(请参阅流行的基于图切的纹理 http://www.cc.gatech.edu/cpl/projects/graphcuttextures/例如)。
补丁传播:
修复补丁时,您只需复制与当前 $\Omega$ 域相交的源补丁(位于更大的源区域内)的内容。
源区域是固定的,但不是您放置它的位置,这取决于当前填充的前像素。
优先级功能:
这里的直觉是,既然您要复制源补丁,那么您应该首先复制纹理最多的补丁。
这是为什么?假设您有一个纯半黑(左半白(右))图像,并且修复域位于中间。
如果没有优先权,您可能会先复制纯黑色或白色的色块。
使用优先功能,您将检测填充前沿中属于黑白区域边界的像素,在正确的位置复制一些半黑半白的色块,然后仅在相关位置添加纯黑/白色的色块。
为什么顺序很重要,即使前面很小
在下面评论的示例中,我们假设前面有 5 个像素 (1, 2, 3, 4, 5) 的填充,优先级顺序为 (3, 4, 5, 2, 1)。
由于填充前沿非常小,因此可以推断要修复的剩余区域非常小。
因此,用于填充孔的面片将相交。
然后,发生的事情是:
- 您复制像素 3 的源补丁。剩余的孔是空的,您可以复制与 $\Omega$ 相交的所有补丁
- 您寻找与像素 4 匹配的补丁。找到后,将其复制到 $\Omega$minus与前一个补丁(像素 3 的补丁)的交集。如果你交换3和4的优先级,那么你将不会保留源补丁的相同部分。
- 处理下一个填充前像素等。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)