【计算机视觉文章阅读之一】Perspective-aware Manipulation of Portrait Photos_siggraph2016

Perspective-aware Manipulation of Portrait Photos 对人脸进行多视角转化处理

这篇文章是siggraph2016上的一股清流,siggraph上的文章一般都是做几何操作,操作内容比较难,并且文章内容很繁琐,需要有一定基础的人才能对文章有自己的体悟,但是本篇文章做的事情很容易理解,并且文章写得简单易懂,接下来对文章展开阅读。

  • 一、文章大体概括
  • 二、相关模型知识介绍
  • 三、文章主要内容
  • 四、结果评估
  • 五、不足之处与未来研究

一、文章大体概括

首先看这个题目,关键词在于其处理的是portrait人像照片,一般是那种人像前景清晰的图片,perspective-aware多视角感知,这里涉及到了对不同视角条件下用摄像机不同参数拍摄到图片的不同,接下来就这个部分讲解一下,好让大家清楚地认识到这篇文章主要做的是什么事情。
【计算机视觉文章阅读之一】Perspective-aware Manipulation of Portrait Photos_siggraph2016_第1张图片
上图中我们可以看到,左右两幅图分别是在不同焦距下,相机与汽车距离不同所拍摄到的大致相同的画面内容。其中焦距大小我们可以理解成为正常摄像机镜头通过改变相距改变画面放大的程度。下图很好地体现焦距与视角范围的关系:
【计算机视觉文章阅读之一】Perspective-aware Manipulation of Portrait Photos_siggraph2016_第2张图片
可以看出,当相机距离物体比较远,要与相机距离物体比较近的时候拍摄到物体大小相同,那么就要采用大焦距,大焦距就意味着拍摄到的视角范围比较小。因此我们看上方红汽车的例子中,左侧小焦距大视角范围与右侧的相比,因为要表现更多的场景信息在同样大小的图片上,因此看起来就像是有点红汽车被压缩了的样子。而这篇文章想要做的事情,大致可以理解是红汽车左图与右图之间的转化。
而文章给出了http://faces.cs.princeton.edu/ 一些样例结果展示,并且还可以自己上传图片操作,下图给出了一些小样例:
【计算机视觉文章阅读之一】Perspective-aware Manipulation of Portrait Photos_siggraph2016_第3张图片
上图左侧是远距离大焦距,右侧是近距离小焦距,会发现作为一张证件照,右侧图片会有一点变形。文章进行的就是从左图变换到右图,或者从右图的状态变换到左图。这么做的意义在于右边图片是很多自拍的时候会有的照片,会有大鼻子,耳朵比较奇怪、脸部结构异样等一些问题。

二、相关模型知识介绍

【计算机视觉文章阅读之一】Perspective-aware Manipulation of Portrait Photos_siggraph2016_第4张图片

在上图这个相机坐标系中,P表示场景中物体的位置,我们想要得到这个物体在相纸上的位置,其实是满足一个透视相机模型:
【计算机视觉文章阅读之一】Perspective-aware Manipulation of Portrait Photos_siggraph2016_第5张图片

而正常在计算的时候,我们忽略了景色深度可能带来的影响,认为原来物体上的P点并不具有深度信息,因此有了弱透视相机模型:
【计算机视觉文章阅读之一】Perspective-aware Manipulation of Portrait Photos_siggraph2016_第6张图片
而这篇文章想要进行的就是探讨怎么在进行计算的时候考虑进像距对相机模型的影响,也就是文章建立的是强透视相机模型,此外,本文还用到的模型是浙大曹晨实验室提出的人脸建模的方法FaceWarehouse [Cao 2014]。

三、文章主要内容

文章主要的工作分为5步,也很好理解。第一步,根据已有数据库中的图片,建模出一个普适性高的人头模型,这一步就是系统初始化3D模型的效果;第二步,在给定的训练照片中找到五官的基准点,用点标出人的五官;第三步,把3D模型跟五官基准点相匹配起来;第四步,改变3D模型中的参量,就可以实现拍摄距离改变、视角旋转等结果,但是还只是3D的结果;第五步,把3D模型上的变化映射到2D的图片上,得到最终的结果。接下来每一步具体来分析一下过程。

1、张力模型的建立(tensor model)

这里写图片描述
以上公式中,每一个字母都是一个表示特征的矩阵,C是每一个人脸矩阵跟平均值之间的差异值进行HOSVD奇异值分解之后得到的关键张力,这一步是这个模型独有的,让模型更加复杂准确;v表示的是原始的人脸向量;β表示的是这个人特殊性;γ表示的是人的表情;A表示的是数据库中所有人脸的平均水平。通过这几个矩阵就得到了人脸模型的基本表现形式。
这里写图片描述
由于现在使用的是以相机为中心的坐标系,要想成功渲染出模型的话需要考虑在世界坐标系下各个点的坐标,于是这里就设计了一个转换的过程,K表示固有矩阵,R是旋转量,T是平移量,这样就建立了一个3D人头模型建立的过程。

2、检测照片中脸部关键点

采用09年提出来的方法可以自动检测出66个五官特征点,很多应用例如face++等等现在都可以做到这一个功能,但是这66个点对这个模型而言,缺少了对头顶和耳朵轮廓上的标定,因此原来的66个点,再加上三个点,头顶和两个耳朵,总共69个点达到了检测的效果。

3、模型与点之间的匹配映射

现在已经有了一个3D模型,和输入图片上面的五官标定点,现在就要把3D模型跟特征点相匹配。这里用到的第一个是比较简单传统的算法,就是坐标下降法,一维一维独立的去计算1模型中提到的每个变量的极值,就是误差最小的地方。
【计算机视觉文章阅读之一】Perspective-aware Manipulation of Portrait Photos_siggraph2016_第7张图片
以上算法流程图显示了变量匹配的先后顺序,先进行旋转和平移变量的变化,因为如果坐标不正的话,脸会是扭曲的,这个时候就去调节相机矩阵的话,就会导致不正确的焦距。之后再进行β身份识别、γ表情、K相机固有矩阵这几个变量的变化,找到最小值。一般迭代三次就可以得到结果,以下是每项逐渐匹配的过程:
【计算机视觉文章阅读之一】Perspective-aware Manipulation of Portrait Photos_siggraph2016_第8张图片

4、改变参量

接下来只需要对已经形成的与图片匹配的3D模型进行参数的改变,就可以得到想要的距离 姿势改变的结果图。例如,要想改变摄像机距离,就是调整模型中的平移矩阵T;要想旋转人头,就要改变模型中的R参量。

5、2D上相应变化

上一步是在模型上对参数做出了调整,得到了模型结果,现在人脸上可以得到一个好的距离变化的结果,但是映射到2D的图片的时候,对于背景中,有可能因为模型的变化而扭曲,这里采用三角划分为基础的插值运算得到一个人脸周围密度估计场。之后将人脸之外的区域用光滑插值的方法进行平滑,最后用平滑之后的密度场信息去回推图片信息,也就是对人脸之外的图片进行平滑。

四.结果评估

1、2D图片五官基准点选择了69的效果

【计算机视觉文章阅读之一】Perspective-aware Manipulation of Portrait Photos_siggraph2016_第9张图片
可以明显看出差别的是耳朵附近,如果只用66个点的话,耳朵部分将被当做是背景,产生不必要的奇怪的拉伸效果。

2、非真人头像的实验

【计算机视觉文章阅读之一】Perspective-aware Manipulation of Portrait Photos_siggraph2016_第10张图片
因为人在拍照的时候,周围环境对其影响特别大,因此他还用人体模型来做了一组实验,并且给所有的拍摄过程打光、还有其他的周围环境一样,然后看效果。最后一张图的白色地方表示不重合信息,可以发现效果还是很好的。

3、运行时间

基本上将给定的图片匹配形成3D模型需要5秒的时间,而改变模型相应的值只需要1秒的时间,基本可以达到实时的效果。

五、不足之处和未来发展

1、未来可以扩充匹配的数据库,完善匹配的效果。
2、只改变原来已有的数据,如果旋转太多,旋转到照片中没有出现的画面,就会产生错误结果。
3、可以加入对头发的处理,特别是女性长头发并不是将其列入背景范围,而是也考虑进操作。
4、在变动人脸的时候,由于焦距的不同,人眼聚焦方向是变化的,可以加入在旋转人头时候眼球转动的影响。


[1]: Fried O, Shechtman E, Goldman D B, et al. Perspective-aware manipulation of portrait photos[J]. ACM Transactions on Graphics (TOG), 2016, 35(4): 128.

你可能感兴趣的:(【计算机视觉文章阅读之一】Perspective-aware Manipulation of Portrait Photos_siggraph2016)