泊松抠图论文复现

泊松抠图论文复现

简介

Poisson Matting论文,主要目标是从用户给定的Trimap,也就是指定的背景,前景和未知区域抠出前景。主要采用的Poisson 方程的方法。

这篇文章的抠图效果非常精细,但是实现出来的效果却不太尽如人意,但是由于本文只实现了Global Phase部分,所以可能并没有完全发挥这篇论文的全部实力。

项目github链接

形式化问题

给定一张图片 I ( x , y ) I(x,y) I(x,y),我们希望还原出一个遮罩(matte) α \alpha α和前景图片,背景图片,使得

I = α F + ( 1 − α ) B (1) I=\alpha F + (1-\alpha)B \tag{1} I=αF+(1α)B(1)

(这个方程省略了 ( x , y ) (x,y) (x,y),下述的所有方程都是如此,而不是矩阵的意思)

当然有一些确定为Foreground和Background的区域,我们称这两个区域为 Ω F , Ω B \Omega_F,\Omega_B ΩF,ΩB,我们真正希望计算的是位置区域 Ω \Omega Ω α \alpha α

我们定义外边界为 ∂ Ω = { p ∈ Ω F ∪ Ω B ∣ N ( p ) ∩ Ω ≠ ∅ } \partial \Omega = \{p\in \Omega_F\cup \Omega_B|N(p)\cap \Omega \neq \empty\} Ω={pΩFΩBN(p)Ω=}

其中 N ( p ) N(p) N(p)为p的四邻域。

泊松方程

我们先对方程(1)求导

∇ I = α ∇ F + ∇ α F + − ∇ α B + ( 1 − α ) ∇ B ∇ I = ∇ α ( F − B ) + α ∇ F + ( 1 − α ) ∇ B (2) \nabla I=\alpha \nabla F + \nabla \alpha F + -\nabla \alpha B + (1-\alpha)\nabla B \\ \nabla I=\nabla \alpha(F-B)+\alpha \nabla F+(1-\alpha)\nabla B \tag{2} I=αF+αF+αB+(1α)BI=α(FB)+αF+(1α)B(2)

接下来有一个很重要的近似,我们假设自然图片是平滑的,所以 α ∇ F + ( 1 − α ) ∇ B \alpha \nabla F+(1-\alpha)\nabla B αF+(1α)B是相对较小的,所以在global过程中就假设他们是0,因此得到

∇ α = ∇ I F − B (3) \nabla \alpha=\frac{\nabla I}{F-B}\tag{3} α=FBI(3)

因此最终,我们得到了最终的优化目标

α ∗ = arg min ⁡ α ∬ p ∈ Ω ∣ ∣ ∇ α p − ∇ I p F p − B p ∣ ∣ 2 d p (4) \alpha^*=\argmin_\alpha \iint_{p\in\Omega}|| \nabla \alpha_p-\frac{\nabla I_p}{F_p-B_p}||^2dp \tag{4} α=αargminpΩ∣∣∇αpFpBpIp2dp(4)

在已知 F , B F,B F,B的情况下。

当然我们有迪利克雷边界

α ^ p ∣ ∂ Ω = { 1 p ∈ Ω F 0 p ∈ Ω B (5) \hat \alpha_p|_{\partial \Omega} = \begin{cases} 1 & p\in\Omega_F \\ 0 & p\in\Omega_B \end{cases} \tag{5} α^pΩ={10pΩFpΩB(5)

全局解方法

形式化了问题之后,我们可以相关的泊松方程,得到如下的公式

Δ α = d i v ( ∇ I F − B ) = Δ I ( F − B ) − ∇ I ⋅ ( ∇ F − ∇ B ) ( F − B ) 2 (6) \Delta\alpha=div(\frac{\nabla I}{F-B}) \\ =\frac{\Delta I(F-B)-\nabla I \cdot (\nabla F-\nabla B)}{(F-B)^2}\tag{6} Δα=div(FBI)=(FB)2ΔI(FB)I(FB)(6)

我们现在就是希望解这个泊松方程。

细化问题

一个问题的雏形已经出现,但是还有很多细节需要讨论

  1. 彩色图三通道,怎么解泊松方程?
  • 原文通过合并为灰色通道解决
  1. 泊松方程通过什么来解?
  • 可以直接通过Eigen库解离散形式的泊松方程。

  • 但是注意到事实上这个方程式有限制条件的 0 ≤ α ≤ 1 0\leq \alpha\leq 1 0α1

  • 采取高斯迭代更为平滑

  1. F-B=0的情况?
  • 原文并未提及,实际处理两种方式:把F-B看成一个特别小的数,或者直接令 Δ α = 0 \Delta \alpha=0 Δα=0,实现起来发现效果差不多
  1. 上述讨论都是在F和B确定的情况下讨论的,但事实上并不知道F和B,怎么做?
  • 通过已知边界估算F和B,然后计算 α \alpha α,再反过来用 α \alpha α更新边界,如此迭代

主算法

在这里插入图片描述

备注:第三步骤的约等于是通过设置阈值来实现的,只有灰度差不超过阈值的图像才可以被添加。迭代终止条件是没有新的点加入F和B

代码实现方法

  • 使用ANN库,把所有边界点插入kd-tree来寻找最近点估计F,B

  • α \alpha α的计算分为Eigen库解方程计算和Gauss迭代计算两种方法

实现结果

原图:

在这里插入图片描述

暴力解方程:

在这里插入图片描述

高斯解方程:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值