阅读笔记----Graphcut Textures-Image and Video Synthesis Using Graph Cuts

Graphcut Textures-Image and Video Synthesis Using Graph Cuts

算法分为两块:1.从候选矩形中根据比较候选块与已输出的像素进行比较,选择一个合适的块 2.从矩形先选出最优部分(不规则的形状),仅这一部分选入输出图。

其中取一个块的部分需要用到图割算法,是本算法的核心。

阅读笔记----Graphcut Textures-Image and Video Synthesis Using Graph Cuts_第1张图片

Seam是接缝,offset是相对左上角原点的偏移量。

 

通过图割选出块中合适区域

在接缝时,使用一个较小的块(block),如32*32.

第一个块(block)随机放,第二个块(block)与之前的块重叠这放,两个块重叠部分为4或8个像素宽度。

为了将这个问题转化成图割问题,首先需要选取一个匹配两个块(patch)像素质量的方法。旧的块(patch)即输出图,新的块(patch)即输入图。最简单的手段即使比较两个块(patch)重相邻像素对之间的颜色差异作为标准。

S,t是相邻的像素,A,B分别表示旧块(patch)新块(patch)。

阅读笔记----Graphcut Textures-Image and Video Synthesis Using Graph Cuts_第2张图片

自上而下找到一条低损失的路径。即M最小。切断的地方要算M。

A与1、2、3像素之间权重无穷大,表现为1、2、3像素必须来自A块。

 

当输出图像的一个区域内已经有多个块(patch),并且有潜在可见的接缝,若有一个新的块(patch)要加入时,旧的接缝可能会被改变。

阅读笔记----Graphcut Textures-Image and Video Synthesis Using Graph Cuts_第3张图片

A,B为已有的块,新进来一个C,可能会更新AB接缝。

阅读笔记----Graphcut Textures-Image and Video Synthesis Using Graph Cuts_第4张图片

在老的接缝处插入新的接缝节点s1,s2,s3,s4,并将新的节点连向新的块(patch)。计算M,1到s1的损失函数M(1,4,A1,B4)(只在4被分配到B时计算),s1到4的损失函数M(1,4,B1,A4)(只在1被分配到B时计算)。但是我个人认为在这里1是不可能归到B去的,因为1到A的权重为正无穷。图片和文字没有对应。

如果接缝节点和B的路径被切断,说明旧的接缝未被改变。

如果s1与B的路径未被切割,说明旧的接缝被改变。

如果一个接缝节点与相邻像素被分割,说明有一个新的接缝在同一位置,并且一个新的损失函数需要被加入到最终损失量中。

对于接缝节点之多一条边可以被割,为了满足度量的三角不等式规则

 

其实不只重叠一个边界,在这个算法中尝试在整个区域中已经被早期块(patch)放置的像素覆盖区域中放一个新(patch)的块很常见。这样做的目的是用新的块覆盖潜在可见的接缝。

阅读笔记----Graphcut Textures-Image and Video Synthesis Using Graph Cuts_第5张图片

图中大的浅色方块是已经输出的像素块A,深色小的方块是新来的块(patch)B,可以看到其覆盖了旧的接缝,重新定义了新的接缝。

 

 

选取候选块(即选取合适的偏移位置)

1随机放置 2整块匹配 3子块选取

限制条件:只选取未被选过的偏移位置

此外对于2和3需要先在当前输出中找到一个需要大量改进的区域。

用现存的接缝的损失量量化特定区域的误差,然后选择误差最大的区域。

当选出这种区域后,强制选块(patch)算法选出来的块(patch)完全重叠这个区域。当输出图未被完全初始化时(即还未被块完全覆盖时),选出来的误差可能包含空白区域。包含了不同的目的:扩展纹理区域,以及和初始化部分的结构保持一致。

 

1.随机放置

一个新的块(patch)(整张输入图像)被随机放到一个偏移位置。使用图割算法选取合适部分放入到输出图中,重复此方法。

 

2.整块匹配

找到与当前合成输出图中误差区域最匹配的部分,并合成输出。

计算并规范化方差和,公式如下:

其中I,O表示输入输出图,p为像素位置,t为偏移位置,At表示偏移后的输入图与输出图的重叠部分。

 

通过C(t)求概率函数

其中σ 是标准差,k控制选择的随机性,k越小越准确与C有关,k越大越随机。

 

3.子块(sub-patch)匹配

先选一个小的子块(sub-patch)(一般来说小于输入图像)从输出图中选

在实现过程中,这个子块(sub-patch)略大于或等于误差区域大小。

从输入图中找与这个输出图像子块(sub-patch)匹配的子块(sub-patch)。

并且通过偏移,使他们重合。

损失函数为:

其中So表示输出图像子块(sub-patch)。

然后用同(3)的概率函数。

 

拓展

更改损失函数

  1. 未考虑频率,通常接缝更多的分布在低频部分(平滑区域)

通过计算水平垂直梯度表现

重新定义:

d表示像素s、t的方向 表示A沿d方向的梯度

 

羽化和多分辨率拼接

当没有一个好的接缝时,可以羽化(通常使用高斯核)接缝处像素,使其逼真。

提前找出会与接缝相遇的偏移块(patch),通过高斯核对其进行羽化,再去计算P(s)公式3.

另外使用多尺度拼接,可以让接缝不那么明显,但是会降低对比度。

 

用快速傅里叶变化加速

将(4)重写为上式。

前两项可以通过区域求和表(summed-area tables),最后一项用FFT。

 

你可能感兴趣的:(图像处理)