基于主动形状模型(Active Shape Models, ASM)的人脸特征点定位算法
字数 2862 2025-12-21 06:10:25
基于主动形状模型(Active Shape Models, ASM)的人脸特征点定位算法
题目描述
在计算机视觉的人脸分析任务中,精确地定位人脸的关键特征点(如眼角、鼻尖、嘴角等)是一个基础且重要的问题。主动形状模型(Active Shape Models, ASM)是一种经典的统计模型方法,用于定位图像中物体的轮廓或形状。ASM通过学习目标形状(如人脸)在训练集中的变化模式,构建一个参数化的形状模型。在拟合新图像时,它通过在模型形状点附近搜索局部图像特征(通常是灰度梯度),并迭代调整模型参数,使模型形状逐步逼近图像中目标的真实轮廓,从而实现特征点的自动定位。本题目将详细讲解ASM的核心思想、训练过程以及在新图像上拟合定位的完整步骤。
解题过程循序渐进讲解
-
问题定义与算法思想
- 问题:给定一张包含人脸的图像,如何自动、准确地找到一系列预定义的面部特征点的位置(例如68个或106个点)?
- ASM核心思想:ASM认为,同一类物体(如正脸)的形状虽然会因人而异,但其变化模式不是任意的,而是在一个低维的“形状空间”中变化。它通过以下两步解决定位问题:
- 建模阶段(训练):从一组标有特征点的训练图像中,学习该物体形状的平均形状和主要的形状变化模式(主成分)。
- 拟合阶段(测试):对于一个新图像,初始化一个平均形状,然后在每个特征点附近寻找最佳的新位置(基于局部图像外观),并利用学到的形状模型约束这些移动后的点,使其形成一个“合理”的形状。通过迭代“局部搜索”和“形状约束”,最终收敛到目标的真实轮廓上。
-
第一步:形状表示与对齐
- 形状表示:一个人脸的形状由所有特征点的坐标序列表示。对于N个点,形状向量为:
S = (x1, y1, x2, y2, ..., xN, yN)^T。 - 形状对齐(Procrustes Analysis):在训练前,必须消除训练集中各样本形状因平移、旋转和缩放带来的差异,只保留形状本身的差异。这个过程称为广义普氏分析。具体是对所有训练形状进行迭代对齐,使得它们相对于平均形状的差异(通常是点对点距离的平方和)最小化,从而得到一个纯粹描述形状变化的训练集。
- 形状表示:一个人脸的形状由所有特征点的坐标序列表示。对于N个点,形状向量为:
-
第二步:建立统计形状模型(建模阶段的关键)
- 计算平均形状:在对齐后的所有训练形状上,计算每个特征点的平均坐标,得到平均形状向量
\bar{S}。 - 主成分分析(PCA):
- 计算每个对齐后的形状
S_i与平均形状\bar{S}的偏差:dS_i = S_i - \bar{S}。 - 构建所有偏差向量的协方差矩阵。
- 对协方差矩阵进行PCA,得到一组特征向量(主成分)
P = [p1, p2, ..., pt]和对应的特征值(方差)\lambda_i。每个特征向量p_k代表了一种形状变化模式(例如,控制嘴巴开合、眉毛抬升的模式)。
- 计算每个对齐后的形状
- 参数化形状模型:任何一个“合理”的形状都可以由平均形状加上主成分的线性组合来近似表示:
S ≈ \bar{S} + P * b
其中,b = (b1, b2, ..., bt)^T是形状参数向量。通过限制b_k在±m√(\lambda_k)之间(m通常取2或3),可以确保生成的形状与训练数据中的形状相似,即符合先验知识。
- 计算平均形状:在对齐后的所有训练形状上,计算每个特征点的平均坐标,得到平均形状向量
-
第三步:建立局部外观模型
- 目的:为形状模型中的每个特征点,定义一个用于在图像中“寻找”该点的局部特征描述方法。
- 经典方法(基于灰度剖面):
- 对于训练图像中的每个特征点,沿该点所在轮廓的法线方向(向内和向外)采样k个像素点,形成一个长度为
2k+1的灰度剖面(灰度值向量)。 - 对这个灰度剖面进行归一化(通常是减去均值除以标准差),以削弱光照变化的影响。
- 对于同一个特征点(如左眼外眼角)在所有训练图像中,收集其对应的归一化灰度剖面。
- 为每个特征点建立一个简单的局部外观模型,例如,计算这些剖面样本的平均剖面以及剖面的协方差矩阵(或其逆矩阵,即马氏距离度量)。这个模型定义了“该特征点看起来应该是什么样”。
- 对于训练图像中的每个特征点,沿该点所在轮廓的法线方向(向内和向外)采样k个像素点,形成一个长度为
-
第四步:在未知图像上拟合模型(拟合/搜索阶段)
- 初始化:将平均形状
\bar{S}通过一个粗略估计的平移、旋转和缩放变换,放置到目标图像的大致区域(例如,通过人脸检测框)。 - 迭代搜索(一次迭代包含以下两个核心步骤):
- 步骤A:局部特征搜索:
对于当前形状估计中的每一个特征点i:- 沿着该点所在位置的法线方向,在其两侧各取一定范围(例如±5像素)。
- 在该法线线段上的每个候选位置
j,采样灰度剖面,并同样进行归一化。 - 计算该候选剖面与第
i个特征点的局部外观模型(平均剖面)的匹配度。经典方式是使用马氏距离d = (g - \bar{g}_i)^T * C_i^{-1} * (g - \bar{g}_i),其中g是候选剖面,\bar{g}_i和C_i是模型中的平均剖面和协方差矩阵的逆。距离最小的候选位置j*被选为该特征点本次迭代的最佳候选位置y_i。
- 步骤B:全局形状约束与更新:
- 经过步骤A,我们得到了一组无约束的、可能散乱的新点位置
Y = {y_i}。 - 目标是为当前的形状参数
b和姿态参数(平移t、旋转θ、缩放s)寻找一组最优值,使得由形状模型生成的点S ≈ \bar{S} + P * b在经过姿态变换T_{t,θ,s}(S)后,与观测到的候选点集Y的差异最小(通常是最小二乘)。 - 这是一个优化问题,可以通过迭代求解。求解后,我们得到了更新后的形状参数
b_new和姿态参数。 - 对形状参数施加约束:为了防止拟合出畸形的、训练集中未出现过的形状,需要将
b_new的每个分量b_k限制在±m√(\lambda_k)范围内。 - 用约束后的
b和新的姿态参数,计算新的模型点位置X = T^{-1}_{t,θ,s}(\bar{S} + P * b)。这个X就是本轮迭代后,经过形状模型“矫正”过的新形状估计。
- 经过步骤A,我们得到了一组无约束的、可能散乱的新点位置
- 步骤A:局部特征搜索:
- 收敛判断:重复进行迭代搜索(步骤A和B),直到形状参数
b和姿态参数的变化小于某个阈值,或者达到最大迭代次数。最终得到的形状X即为算法预测的人脸特征点位置。
- 初始化:将平均形状
总结
ASM算法巧妙地结合了局部图像特征匹配和全局形状先验约束。局部搜索负责让模型点向真实的图像边缘“吸引”,而PCA形状模型则像一个“弹簧”,确保这些点始终构成一个合理的人脸形状,防止其因为图像噪声或局部干扰而变得畸形。这个过程就像在一个弹性的人脸轮廓模板上,每个点都有一根可以伸缩的“探测杆”在图像中寻找边缘,同时整个模板的弹性又保证了整体形状的合理性,通过多次调整,最终稳定贴合到目标人脸上。ASM是后续许多更复杂模型(如主动外观模型AAM)的基础,在人脸对齐、医学图像分割等领域有重要应用。