Image Matting传统方法和深度学习方法回顾 |
您所在的位置:网站首页 › matlab抠图算法 › Image Matting传统方法和深度学习方法回顾 |
Image Matting课题回顾
Introduction简单图像的Image Matting--证件照换背景复杂图像的Image Matting1. Deep Image Matting2. AlphaGAN Matting
结合显著性检测自动生成Trimap1. 手动标注生成Trimap2. 自动生成Trimap
实验结果写在最后
Image Matting是一个基本的计算机视觉问题,有着广泛的应用。这个是之前的一次大作业选题,一直忘记整理了。这篇博客主要从最简单的
证件照换背景入手,以此为切入点,开始探究复杂图片的Image Matting课题上经典的传统方法和近年来兴起的深度学习方法。在传统方法部分,有比较典型的三种经典算法:
Bayesian Matting、Closed Form Mating、KNN Matting。而在深度学习方面的
Deep Image Matting、AlphaGAN Matting。最后,经过对现有方法的对比总结,发现现有的方法有一个很大的问题是需要手工标记的Trimap才能进行Image Matting,因此尝试结合
显著图实现不需要人为标注Trimap,来进行抠图。
Introduction
图像和视频中的前景准确估计问题,在实际应用中具有十分重要的意义。它是图像编辑和电影制作中的一项关键技术。1996年Alvy Ray Smith等人的《Blue Screen Matting》[1],正式定义了Image Matting问题,即Image Matting问题核心是以下公式: I i = α i F i + ( 1 − α i ) B i {I_i} = {\alpha _i}{F_i} + (1 - {\alpha _i}){B_i} Ii=αiFi+(1−αi)Bi 其中 I i {I_i} Ii是原始图像的像素,为已知量; α i {\alpha _i} αi是透明度, F i {F_i} Fi是前景像素, B i {B_i} Bi是背景像素,这三个变量为未知量。对于这个公式的理解,我们可以把原始图像看做是前景和背景按照一定权重( α i {\alpha _i} αi透明度)叠加组成的。对于完全确定是前景的像素, α i = 1 {\alpha _i} = 1 αi=1;对于完全确定是背景的像素, α i = 0 {\alpha _i} = 0 αi=0;对于不确定是前景还是背景的像素, α i {\alpha _i} αi是介于0到1之间的浮点数。如下图所示,Image Matting问题研究的是,如何通过 I I I,推测出未知的三个变量 α \alpha α、 F F F和 B B B ,难度可想而知。![]() ![]() ![]() 证件照换背景应该算是最简单的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]。 1. Deep Image Matting
基于前面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)计算概率,然后将这些概率求平均值作为整体的输出,这样做可以加快速度以及加快收敛。 结合显著性检测自动生成Trimap到目前为止,大家都能看出来Image Matting最大的弊端:给定一张图,需要一张手工标记的trimap才能开始Image Matting。下面我们讨论怎样让trimap的生成变得更加智能。 1. 手动标注生成Trimap 前面提到的Image Matting方法都需要手工标注的Trimap才可以进行抠图。而这些trimap大多依赖手工标记生成,如利用Photoshop等,但这些专业的图像操作软件对于普通人利用起来并非易事。于是网上也有封装好的Robust Matting程序来协助我们手工标记来生成trimap。 我们想到用显著图(saliency map)结合一些图像处理方法来实现从原始图片到trimap,再从trimap到图。从而实现只需要给定一张原始图片,就可以输出抠完图的结果。 算法流程: 利用目前比较先进的显著物体检测算法(salient object detection)[8]来得到显著图。对显著图进行阈值分割,粗略地划分前景区域和背景区域。对得到的二值图分别进行一次腐蚀和一次膨胀操作。两次操作的差记为未知区域。由前景区域、背景区域、未知区域生成trimap。![]()
参考文献 [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. |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |