• Face 2 to 3 D


    前情分析

    这里主要写一下二维人脸重建该人脸的三维模型的一些基础的知识。

    主流做法

    • 多视图几何重建。其需要采集不同角度的人脸,对设备的要求很高。
    • 通过RGBD或者RGB图像去重建,由模型特点所致,无法生成模型细节。

    单张图像重建

    3DMM方法

    • 对设备要求低,算法简单,易于移动端时间实时重建。
    • 基于模型的方法,重建的结果非常完整,拓扑结构已知(对于换脸,换表情之类很友好)。
    • 基于模型的方法,对模型依赖太高。

    这里的前提是我们已经有了输入图像人脸的关键点,已有模型的人脸关键点,输出人脸的三维网格。

    在Blanz的方法中,他们扫描200张成年人的人头模型,每个模型包含大约70000个顶点。经过PCA处理,制作成参数化人脸模型,每张人脸模型的拓扑结构相同,只是顶点位置或颜色有所差异。你可以把各个特征向量看作是人脸不同的特征,比如脸的长短,胖瘦等。

    这里人脸模型分成两个向量:

    形状:(S = (X_1,Y_1,Z_1,X_2,dots,Y_n,Z_n)in R^{3n})
    纹理:(T = (R_1,G_1,B_1,R_2,dots,G_n,B_n)in R^{3n})

    因此任意一个新的人脸都可以由这些特征向量线性组合生成:

    (S = ar S+sum^m_{i=1}a_iS_i; T=ar T+sum^m_{i=1}b_iT_j;)

    (sum_{i=1}^ma_i=sum^m_{i=1}=1)

    这样的话原本的任务就变成了对(a_i,b_i)的求解了。

    其原理和这个动图演示的差不多,也是调整权重,对已有数据进行线性组合得到3D人脸。
    blendshape是3d软件里用来做模型形变的一种技术,通过调整权重,设计师可以将目标模型变化成一系列预定义的模型,或者这些模型的任意线形组合。
    image

    根据给定的图像去得到人脸模型,比较像渲染的逆过程,重建算法的关键在与找出合适的参数,使三维人脸模型在平面的投影尽可能接近原图像。如果不考虑纹理特征,问题可以简化为"使人脸模型关键点在平面上的投影与2D人脸关键点的位置尽可能接近"

    人脸关键点检测结果一般是二维点, 也就是说, 脸的朝向不同,检测到的脸部边缘点也会不一样,2d人脸的边缘点并不在真正的脸颊边缘线上。

    详情可看下图,上排图像的蓝点是二维人脸监测点,下排图像蓝点是模型关键点。其中红色对应的是2d的点,可以清楚的看出,图像检测出的2d边缘点与模型本身3d边缘点不同。因此,在迭代工程中,需要不断更新模型的3d边缘点索引,使二者一一对应。
    image

  • 相关阅读:
    shell脚本程序练习
    02、重定向和管道符
    01、bash的基本特性
    python--03day
    python--02day
    python--01day
    Django之Form
    Django之ajax
    csrf的中间件
    Django之中间件
  • 原文地址:https://www.cnblogs.com/A-FM/p/15354639.html
Copyright © 2020-2023  润新知