人像 matting 系列综述

本次针对人像的 matting 算法做些简单的调研和介绍。

参考一介绍了部分 matting 算法,也展示了一部分的效果。

自己尝试了 closed form matting、alpha matting、knn matting、shared matting

这里有一个迪士尼出的影像级 matting 算法论文和介绍,视频中对比了各种算法的效果。链接,效果好的出奇,也符合影像级的要求了,还能解决目标身上的绿色晕染的问题,确实厉害。

image matting是一个专门整理和对比各类 matting 算法的网站,可以从这里找到一些参考和思路。

貌似大部分的 matting 都需要有2张图,一张原图,另一张要么是 scribble image, 要么是 trimap。scribble需要交互式的划出前景和背景图,trimap 一般比较难生成,除了一些提到用膨胀腐蚀来生成以外,似乎真实的场景下,如果想直接做 matting 的话,很难拿到 trimap 的结构,感觉非常的学术研究用途(蛋疼)。

抠图的问题,本质上是要求解
I i = α i F i + ( 1 α i ) B i I_i=α_iF_i+(1−α_i)B_i

由于前景F 和背景 B 都是未知,约束不足(under-constrained),要求解 α α ,就得有用户输入提示(有 trimap 和 scribbles 两种,起始是给出了 α α 的初始估计,scribbles更简洁)和图像分布假设。

closed form matting介绍(2008 PAMI)

推导过程
源码可见
灰度图的处理:需要假设 F 和 B 是局部平滑的,由此可以得到需要求解的问题变成:
J ( α ) = α T L α J(α) = α^TLα
L L 即 matting laplace 矩阵,重要矩阵,正定且稀疏。最小二乘法求解 L L

彩色图的处理:有3个通道,假设图像符合 color line model,即假定子窗口内的前景和背景像素值不是固定的,而是位于一条直线上。同样是要求解 L L

L L 的求解是image 独立的,只跟input image 有关,跟其他无关。之后计算用户输入约束下的优化问题,略;
注:计算巨慢无比,500*333分辨率大概也得20-30s。

knn matting

推导过程
源码可见
跟前面的灰度图的假设一致,且,matting laplace 矩阵的定义也一致。重点是提出了一种新的矩阵 L L 的求解方式,即基于 KNN 的拉普拉斯矩阵计算方法。

定义像素的特征向量,计算相似度矩阵(取每个像素的 k 近邻),然后求解拉普拉斯矩阵,最后求解线性方程的解,即是 α \alpha

shared(alpha) matting

源码有多个版本,可以在 github 上搜索下
核心:速度加快。确实比较快一些,800*563的图,整个过程大概<10s,不过这里是 c++版本测试的,可能本身就比前面的 python 版本快。
引:

搜索过程:之所以叫 shared matting ,是因为在选择(前景-背景)候选集的时候,并不是每个未知像素都搜索以自己为中心的整个圆形区域。而是把圆分成了很多扇形,相邻像素搜索不重叠的扇形区域。避免了大面积搜索,同时由于相邻像素的 (alpha, F, B)值近似,因此将相邻像素的搜索结果(候选集)拿来共用,共同估计出当前像素的(alpha, F, B)。

猜你喜欢

转载自blog.csdn.net/u012384285/article/details/91413977