图像和视频中的前景准确估计问题,在实际应用中具有十分重要的意义。它是图像编辑和电影制作中的一项关键技术。1996年Alvy Ray Smith等人的《Blue Screen Matting》[1],正式定义了Image Matting问题,即Image Matting问题核心是以下公式:
证件照换背景应该算是最简单的Image Matting,由于证件照背景属性的特殊性,这个抠图很容易可以实现。算法分为几个步骤:
1. 读入原始证件照图片
2. 转换到HSV色彩空间
3. 设置HSV空间的阈值获得图片背景的mask
4. 腐蚀膨胀去除干扰点
5. 遍历像素点替换背景颜色
这里代码很简单,python+opencv库:
import cv2
import numpy as np
img = cv2.imread('lqt.jpg')
# 缩放
img = cv2.resize(img, None, fx=0.5, fy=0.5)
rows, cols, channels = img.shape
cv2.imshow('img', img)
# 转换hsv
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_blue = np.array([90, 70, 70])
upper_blue = np.array([124, 255, 255])
mask = cv2.inRange(hsv, lower_blue, upper_blue)
cv2.imshow('Mask', mask)
# 腐蚀膨胀
erode = cv2.erode(mask, None, iterations=1)
cv2.imshow('erode', erode)
dilate = cv2.dilate(erode, None, iterations=1)
cv2.imshow('dilate', dilate)
# 遍历替换,line27指定背景颜色
for i in range(rows):
for j in range(cols):
if dilate[i, j] == 255:
img[i, j] = (0, 0, 255)
cv2.imshow('res', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
传统方法部分,有比较典型的三种经典算法:Bayesian Matting、Closed Form Mating、KNN Matting[3-5]。时间关系,我就不在这里写了 PS:公式太多,整理了word,再搬过来又要用LaTex再敲一遍 但是这些传统方法的思想还是很值得思考,有兴趣的可以研究一下,网上也有很多资料。
近年来,随着深度学习技术的发展,使得Deep Learning在计算机视觉领域的应用变得越来越广泛。主要介绍2017年CVPR的Deep Image Matting[6]和AlphaGAN[7]。
这个网络基于典型的Encoder-Decoder结构,做深度学习的应该比较熟悉这种结构在图像分割和以图得图的GAN网络中最常见。Encoder用pre-trained的VGG16,把fc6从全连接换成了卷积,并在输入增加了第四通道channel4,用来存放输入的trimap,因为channel4而增加的weights全部初始化为0。Decoder用简单的unpooling(上池化)和convolution的组合来做upsampling(上采样)和空间结构推断。右边的refine network是为了解决第一阶段预测输出边缘blur的情况。
值得一提的是这篇文章提出了两种Loss,这两种Loss分别是Alpha-prediction Loss和Compositional Loss。Alpha-prediction Loss即Ground Truth α \alpha α值和预测每个像素 α \alpha α值之间的绝对差异。
基于前面Deep Image Matting的启发,我们知道Image Matting这个任务本质上是一个以图得图的任务,而处理这种任务最常见的就是图像分割和GAN(生成对抗网络)。这里我们选择探究GAN网络在Image Matting问题上的应用。
生成对抗网络GAN由生成网络G(Generator)和判别网络D(Discriminator)组成。在训练过程中,生成网络G的目标是尽量生成真实的图片去欺骗判别网络D。而D的目标是尽量把G生成的图片和真实的图片区分开来。这样G和D构成了一个动态的“零和博弈”。GAN就是通过Generator和discriminator进行零和博弈,来不断生成,不断欺骗来获得更好的效果。
2018年BMVC有一篇论文:AlphaGAN。这篇文章是基于之前的Deep Image Matting做的。AlphaGAN matting 很大程度上借鉴了Deep Image matting,源码在这。
AlphaGAN matting 将Deep Image matting中的深度网络拿来作为了GAN的generator,改进只是只是把encoder中的VGG16换成了ResNet50,并把少部分卷积层替换,采用的损失函数和5.1中我们提到的loss一致。AlphaGAN matting 的discriminator采用PatchGAN,也是以图得图问题中比较先进且常用的discriminator。PatchGAN对图片中每个N×N的小块(Patch)计算概率,然后将这些概率求平均值作为整体的输出,这样做可以加快速度以及加快收敛。
到目前为止,大家都能看出来Image Matting最大的弊端:给定一张图,需要一张手工标记的trimap才能开始Image Matting。下面我们讨论怎样让trimap的生成变得更加智能。
前面提到的Image Matting方法都需要手工标注的Trimap才可以进行抠图。而这些trimap大多依赖手工标记生成,如利用Photoshop等,但这些专业的图像操作软件对于普通人利用起来并非易事。于是网上也有封装好的Robust Matting程序来协助我们手工标记来生成trimap。
我们想到用显著图(saliency map)结合一些图像处理方法来实现从原始图片到trimap,再从trimap到图。从而实现只需要给定一张原始图片,就可以输出抠完图的结果。
算法流程:
如上图所示,相关方法在标准数据集上都做到了很不错的matting效果,部分matting算法在一些细节部分存在丢失,但整体的效果都不错。
在对标准数据集的图片进行测试后,我们采用自己找来的图片来提取trimap后利用之前提到的五种方法进行抠图,实验效果如下图所示,相关结果也比较优秀。
最后是我们提出的利用显著性检测来实现对一些图片生成trimap的结果展示,可以看出在一些显著性比较明显的图片上,trimap生成也还不错:
说实话,对于多目标,自动生成trimap再抠图可能并不是那么明智的选择;而对于复杂场景,显著图效果会直接影响trimap的效果,比如上面两张图。我也尝试过用端到端的GAN来自动生成Trimap没怎么优化效果很差,期待后面能看到新奇的工作来让Image Matting更智能!
参考文献
[1]AR. Smith and JF. Blinn. “Blue screen matting.” Conference on Computer Graphics and Interactive Techniques, 1996.
[2]J. Sun, J. Jia, CK. Tang, and HY. Shum. “Poisson matting.” ACM Transactions on Graphics, 2004:315-321.
[3]Y.Y. Chuang, B. Curless, D. Salesin, R. Szeliski. “A Bayesian Approach to Digital Matting.” The IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2001.
[4]A. Levin D. Lischinski and Y. Weiss. “A Closed Form Solution to Natural Image Matting.” The IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2007.
[5]Q. Chen, D. Li, C.-K. Tang. “KNN Matting.” The IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2012.
[6]Ning Xu, Brian Price, Scott Cohen and Thomas Huang. “Deep Image Matting.” The IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2017.
[7]S. Lutz, K. Amplianitis, and A. Smolic. “AlphaGAN: Generative Adversarial Networks for Natural Image Matting.” The British Machine Vision Conference (BMVC), 2018.
[8]Q. Hou, MM Cheng, X. Hu. “Deeply Supervised Salient Object Detection with Short Connections.” IEEE Transactions on Pattern Analysis and Machine Intelligence(TPAMI), 2018:1-1.