system: [SYSTEM]

user: 3. 识别算法与重建 3.1. 匹配算法 SIFT算法是David Lowe于1999年提出的基于局部区域的特征描述子，能同时解决两幅图像之间发生的各种任意的旋转和平移，以及不同角度的仿射变换等情况下的匹配问题；另外SIFT扩展性强，可以很方便的与其他形式的特征向量进行联合 [ 3 ] 。 SIFT特征匹配分为三个工序：提取关键点，生成特征描述器，特征点匹配。SIFT算法先求解图像每 图1. 系统组成图 一个像素点的Hessian矩阵，并提取图像的特征点，然后进行计算高斯卷积 [ 4 ] ，将Hessian矩阵的行列式中的区域极大值点认为图像特征点。 当提取特征点的时候是在特征点邻接矩形区域内进行，利用Sobel算子来计算特征点区域水平和垂直方向的梯度，接着公式(1)和公式(2)计算幅值g和方向theta [ 5 ] 。 g = g x 2 + g y 2 (1) θ = arctan g y g x (2) 每个像素点都有一个幅值和方向，对于有颜色的图像会在R、G、B三个基色分量上计算梯度，并最终选取最大的幅值作为该像素点的最终幅值。然后对20 × 20 (单位为pixel)区域划分为4 × 4 (或2 × 2)的子区域，每个子域计算8 bin直方图(即每45˚为一个方向块) [ 6 ] 。最后根据计算出的梯度幅值和方向，将结果根据比例相加在直方图对应的方向块(即对应bin)中，形成梯度直方图得出该区域相关方向数据。 最后通过特征点描述子之间的欧式距离作为相似性度量结果。首先计算获得模板图的关键点描述子 R i = ( r i 1 ， r i 2 ， ⋯ ， r i 128 ) 和实时图的关键点描述子 S i = ( s i 1 ， s i 2 ， ⋯ ， s i 128 ) [ 7 ] ，然后计算任意两描述子相识性度量 d ( R i ， S i ) = ∑ j = 1 128 ( r i j − s i j ) 2 (3) SURF构造的金字塔图像与SIFT有非常大的不同点。SIFT使用的是DOG特征，而SURF [ 8 ] 使用的是Hessian矩阵行列式中的近似值图像，使得检测速度变快。图像中某个像素点的Hessian矩阵如下： H ( f ( x ， y ) ) = [ ∂ 2 f ∂ x 2 ∂ 2 f ∂ x ∂ y ∂ 2 f ∂ x ∂ y ∂ 2 f ∂ y 2 ] (4) 对某个像素点都有对应一个Hessian矩阵。在计算Hessian矩阵前，都需要对其先进行高斯滤波一下 [ 9 ] 。滤波后再进行求解Hessian矩阵，如公式(5)所示： H ( x ， σ ) = [ L x x ( x ， σ ) L x y ( x ， σ ) L x y ( x ， σ ) L y y ( x ， σ ) ] (5) 是高斯滤波之后的图像在x方向的二阶导数，而 L y y ( x ， σ ) 、 L x y ( x ， σ ) 为普通二阶导数。为了尽可能的减小相应的计算复杂度，就应该使用积分图像，该方法目的是在模糊图像的基础之上把原本的模块再近似。 使用一般方法计算图像的二阶导数比较复杂，所以引入了积分图的方法。它是指当前像素点所在的位置距离原点(0，0)坐标所包围面的所有灰度值之和 [ 10 ] 。计算图像中某一块矩形的区域灰度和 S x 利用矩形的4个顶点 ( X i ， Y i ) ( i = 1 ， 2 ， 3 ， 4 ，按从上到下、先左后右的顺序)的积分值 S ( x ， y ) 即可。 S x = S ( X 1 ， Y 1 ) + S ( X 4 ， Y 4 ) − S ( X 2 ， Y 2 ) − S ( X 3 ， Y 3 ) (6) 在函数定义之前要计算出每一坐标点原本的积分图像，然后才能计算essian的特征值情况。因为函数模板是相似的，所以需要修正特征值的计算方式： det ( H a p p r o x ) = D x x D y y − ( 0.9 D x y ) 2 (7) 其中0.9是一个经验值。 3.2. 三维坐标求解算法 在重建中，实验涉及三个坐标，分别是世界坐标、相机坐标和图像坐标。在重建中，实验涉及三个坐标，分别是世界坐标、相机坐标和图像坐标。世界坐标系是目标物体位置的参考系。在标定时确定标定物的位置，盛放重建后的物体的三维坐标。摄像机坐标系：其是摄像机站在自己角度上衡量的物体的坐标系。它是与拍摄物体发生联系的桥头堡，世界坐标系下的物体需先经历刚体变化转到摄像机坐标系，然后在和图像坐标系发生关系。它是图像坐标与世界坐标之间发生关系的纽带，沟通了世界上最远的距离。而图像坐标系：其是以摄像机拍摄的二维照片为基准建立的坐标系。用于指定物体在照片中的位置。 空间点的重建不仅与空间点或者空间结构在图像中的位置有关还与摄像机的内部和外部参数有关。三维重建的原理在于三种坐标之间的转换。 实验用最小二乘法来对特征点的三维坐标进行第一次求解。对图像中的特征点的坐标进行处理，使其为齐次坐标。并利用特征算法进行左右图像上的特征点匹配，并记录其齐次坐标，进而计算出投影矩阵，得出特征点的世界坐标。因为实际应用中提取的数据含有噪声，所以采用最小二乘法的方法来再次求解特征点的世界坐标值。 紧接着针对双目立体视觉系统，采用一种特殊的三维空间点求解方法，即基于视差原理的视差测距法两个摄像机平行共面放置，两个摄像机的光轴也互相平行，并且还有一对坐标轴共线，通过使用两个内参数相同的摄像机，使放置的双目视觉系统的基线距离固定，然后再获取摄像机的内参数求解物点的空间三维坐标。 对于图像中的一个特征点，获取其在左右图像的投影点坐标，并且计算出视差。因为两个摄像机中心连线距离即为基线，由公式(8)，计算出特征点的三维坐标。利用第一次测得的特征点坐标与本次测得的坐标进行均值，降低了实验误差，提高了测量精度。 X w = Z w f v 1 = u 1 B d Y w = Z w f v 1 = v 1 B d Z w = f B d (8) 其中 ( X w ， Y w ， Z w ) 为特征点的三维坐标， ( u 1 ， v 1 ) 为左图像的投影点坐标，d为视差，B为两个摄像机中心连线距离，f为焦距。 通过采用基于视差测距法和最小二乘法来求解三维坐标，得出实验精度与摄像机焦距、摄像机之间的基线长都有关系，焦距越长，基线越长，精度就越高。验证了三维重建的正确性和可行性，可以有效的应用于计算机视觉的应用中。 3.3. 人脸三维重建算法 人脸检测是人脸识别(Face Recognition)的基础，其经过几十年的发展已渐趋成熟。早期使用人工提取人脸特征，训练分类器，进行人脸检测的方法。缺点是当环境较复杂且变化强烈时，检测效果不理想。后来出现从通用的目标检测中移植过来的人脸检测方法效果较好，并能适应于复杂的环境变化，但很耗时。综合二者的优缺点，出现了基于级联结构的卷积神经网络的人脸检测算法，时间和效率皆优。 由于本实验只需得到人脸的大致区域，对算法精度没有过高要求。重点在于人脸的三维重建。所以本实验是利用Opencv提供的接口进行人脸检测并截取出人脸。 Opencv的人脸检测主要通过Haar分类器实现，预先训练好物体的检测器(xml格式)，包括正脸、侧脸、眼睛等特征。大概思路是首先将图像均衡归一化到同样大小，利用多级高检测率低拒绝率的多层树分类器逐步拒绝所有的非人脸部分，最后剩下的就是人脸区域。将人其标记截取出来。 对截取后的人脸利用SIFT算法进行特征点提取和匹配，然后利用匹配点坐标计算视差，求出对应点的三维坐标。 实验中提出了一种双目下基于形变模型的人脸重建方法。传统的基于形变模型的三维人脸重建一般分为两部分：一是获取原始人脸数据并建立组合模型；二是针对特定人脸图像使用模型进行匹配实现三维人脸的重建。本实验中的创新之处在于，原始人脸数据是利用三维测量原理计算得到，而非寻找二维与三维坐标的大致转换关系 [ 11 ] ，视差计算得到三维坐标的精度比之高很多。 三维人脸可视为线性子空间，即公式(9)。 S n e w = ∑ i = 1 m a i S i = a 1 S 1 + a 2 S 2 + ⋯ + a m S m (9) a i 为组合因子，满足 ∑ i = 1 m a i = 1 。 人脸的三维形状信息可用匹配点的坐标表示，即 S i = ( x 1 ， y 1 ， z 1 ， x 2 ， y 2 ， z 2 ， ⋯ ， x k ， y k ， z k ) T (10) 其中k为匹配点的数目。直接使用三维人脸数据重建三维人脸，计算量巨大。这里采用的是主成分分析(PCA)理论对样本数据库进行降维 [ 12 ] ，得到 S n e w = S ¯ + P β (11) 其中 S ¯ 为平均三维人脸，P为选取的主成分对应的特征向量集合， β 为形变因子。 采用基于贝叶斯最大后验概率的最优解法，令目标函数为 E ( β ) = ‖ P f β − Δ d ‖ 2 + η ‖ β ‖ 2 (12) 其中 η 权重系数。根据奇异值分解，有 P f = U Λ V T ，其中 Λ 为特征值构成的对角矩阵，U由 P f ( P f ) T 的特征向量构成，V由 ( P f ) T P f 的特征向量构成。得最优解为 argmin ‖ E ( β ) ‖ = V ( λ i λ i 2 + η ) U T Δ d (13) 将公式(13)的计算结果代入公式(11)，得到三维数据的重建结果为： S n e w = S ¯ + P V ( λ i λ i 2 + η ) U T Δ d (14) 然后为三维重建结果加上纹理图 [ 5 ] ，即完成了人脸的三维重建。