人脸对齐 matlab,常用几种人脸对齐算法ASM/AAM/CLM/SDM

article/2025/9/23 14:50:05

常用几种人脸对齐算法ASM/AAM/CLM/SDM

常用几种人脸对齐算法ASM/AAM/CLM/SDM

转载:http://blog.csdn.net/huneng1991/article/details/51901912 SDM原理

转载:http://blog.csdn.net/linolzhang/article/details/55271815 人脸对齐算法

一、ASM算法

ASM(Active Shape Model)是指主观形状模型,即通过形状模型 对 目标物体进行抽象。

ASM 是一种 基于点分布模型(Point Distribution Model, PDM)的算法。在PDM中,外形相似的物体,例如 人脸、人手、心脏等的几何形状可以通过若干关键特征点(landmarks)的坐标依次串联形成一个形状向量来表示。基于ASM的人脸 通常通过 标定好的68个关键特征点 来进行描述:

ASM算法 分为 训练过程 和 搜索过程

ASM的训练过程如下:

1.1 搜集 T 个训练样本,样本数量根据需要(假定 T=100)

注:样本只需要包含人脸图像即可,大小和方向不需要限定(后续可以归一化)。

1.2 手动标记n个脸部特征点(假定 n=68)

需要配合标定软件将结果坐标存到文本文档。

1.3 构建形状向量

将记录下来的坐标点,按照顺序连成向量,每一个样本 描述为一个向量:

df666cca269e6fef8b528e9a936bef9c.png

1.4 进行归一化和对齐(采用Procrustes方法)

可以看作是通过简单的平移、旋转、缩放,在不改变点分布模型的基础上,将样本中多个人脸归一化到一个统一的标准。这个统一的标准即为平均脸。

*Procrusts归一化方法一般为使用一个四元数:旋转角度a, 缩放尺度s,水平位移x, 垂直位移y 。这里仅把他看作一个变化T,具体过程为:

(1)将训练集中的所有人脸模型对齐到第一个人脸模型(典型意义,可以自主选择);

(2)计算 平均人脸模型 X0;

(3)将所有样本模型对齐到平均人脸 X0,描述为: Xi = X0 + b (b为相对于平均脸的偏置);

任意的一个脸可以由平均脸和参数b来进行描述,参数b描述了平均脸到人脸的细微变化。

(4)重复(2)(3),直至X0收敛 或者到一定时间停止。*

1.5 PCA降维

PCA 降维主要作用是降低非关键维度的影响,减少数据量、提高效果,这个过程并不是必须的。

1.6 为每个特征点构建局部特征

局部特征用于在特征点附近进行搜索(可以在特征点附近的矩形框搜索,也可以沿法线方向搜索),以迭代的方式寻找新的特征点匹配位置。为防止光照变化,局部特征一般采用梯度特征描述(当然也可以通过颜色、纹理等,可以参考后续AAM算法)。

39dd5889b3c0c6ba0df532fe111b0846.png

ASM的搜索过程如下:

1.1 初始化对齐人脸

根据HOG人脸检测结果的大致人脸位置,将前面计算得到的平均脸 X0 进行仿射变换,得到一个初始的特征点模型:

X = M ( X0 ) + b

1.2 搜索特征点

a)针对每个特征点:

在特征点邻域内进行 迭代搜索,通过局部特征点的特征匹配,获取新的特征点位置;

关于特征点搜索方式,有的方法沿着边缘的法线方向提取,有的方法在特征点附近的矩形区域提取,这里先不展开讨论。

通过特征点选择算法,选择多个 候选点,候选点 采用上面同样的方法进行特征提取,然后与样本特征点模型进行匹配,匹配采用前面提到的马氏距离,距离最小的候选点即作为新的特征点中心。

b)采用 平均人脸模型 对匹配结果进行修正;

反复执行 (a)(b),直到收敛。

用初始模型在新的图像中搜索目标形状,使搜索中的特征点和相对应的特征点最为接近,持续优化 b,计算最接近模型。

目前关于ASM 主要的工具包:

1. Asmlib-opencv

基于opencv2.0,比较老了,效果一般,起步学习用。

链接地址:https://github.com/cxcxcxcx/asmlib-opencv

2. stasm

准确度还可以,开源。

链接地址:https://github.com/juan-cardelino/stasm

二、AAM算法

AAM 称为 主动外观模型(Active Appearance Model),AAM是在ASM的基础上,进一步对纹理(将人脸图像变换到平均形状 而得到的形状无关图像)进行统计建模,并将形状和纹理两个统计模型进一步融合为 外观模型。可以理解为:

Appreance = Shape + Texture

AAM 在对形状和纹理特征统一量纲后,建模和搜索过程和ASM基本相同。

三、CLM算法

CLM 是有约束的局部模型(Constrained Local Model),它通过初始化平均脸的位置,然后让每个平均脸上的特征点在其邻域位置上进行搜索匹配来完成人脸点检测。前面讲到的ASM也属于CLM的一种。

CLM分别继承 ASM和AAM的优点,在ASM的效率 与 AAM的效果之间做了平衡。抛弃了AAM的全局纹理方法,在ASM的基础上,通过特征点周围的局部纹理Patch,提高了ASM仅仅依靠灰度 带来的匹配问题,引用一张老掉牙的图 说明原理:

a21ae1eb8cfa4fba144788f61ad8382b.png

CLM的关键在于约束(Constrains),有两个层面的意思:

1)我们的眼睛、鼻子、嘴巴 相对位置是明确的,你不需要到鼻子上面找嘴巴(这肯定是怪物对不对?),这些Patch的位置称为Shape Model;

2)对于每个Patch,对应一个Local Model,你只需要在限定的位置周围(Local Region)进行查找匹配即可;

详细算法解析见:

http://blog.csdn.net/qq_15807167/article/details/54605710 人脸识别之人脸对齐(四)–CLM算法及概率图模型改进

四、SDM算法

SDM(Supervised Descent Method)是一种监督下降方法,属于解决非线性最小化NLS(Non-linear Least Squares)问题的一种方法。

解决非线性最优化问题通常有2个难点,

(1)方程不可微,或者计算量太大

(2)Hessian矩阵太大,或者不是正定矩阵

953696632afcf6475a7dff0155a6f979.png

SDM 人脸对齐的核心内容很简单,就是特征到偏移量的映射:

Ix = R

I 是特征,x是映射矩阵,R是偏移量。SDM人脸对齐方法训练的目的就是得到映射矩阵x。

步骤如下:

1)归一化样本,使样本的尺度统一;

2)计算均值人脸;

3)将均值人脸,作为估计人脸放在样本上,使均值中心和原始人脸形状中心对齐;

4)计算基于每一个均值人脸的标记点的特征,sift,surf或者hog,切记不要基于灰度值的相互特征;

5)将所有点的特征串在一起,形成样本特征,所有样本特征形成矩阵I;

6)计算估计人脸和真实人脸之间的偏移量,并形成矩阵R;

7)解线性方程Ix=R, matlab中可用x = I \ R,lapack中可用函数dgelsd。

估计形状加上预测偏移量就是结果,在实际情况中,共需要训练多层,二层以后需要使用上一层对齐的结果作为估计形状。

实际在运用过程中可能会遇到各种问题,总结下来有以下几点:

1)速度太慢,尤其是使用sift,surf特征;

2)无效,基于灰度值类的特征由于在标记点周围的小窗口内,灰度值基本一致,变化不大,这也是人脸的一个显著特征;

3)效果有待提高,hog特征有效的解决上述问题,但是始终不理想,尤其是,水平大角度偏转。

常用几种人脸对齐算法ASM/AAM/CLM/SDM相关教程


http://chatgpt.dhexx.cn/article/umESsbQA.shtml

相关文章

人脸识别篇---人脸对齐

人脸对齐 安装环境dlib 脚本实现运行代码实现效果运行问题 安装环境 dlib windows10安装dlib 在anaconda3下激活相应的环境 conda install -c conda-forge dlib参考 脚本实现 from imutils.face_utils import FaceAligner from imutils.face_utils import rect_to_bb impo…

人脸对齐算法常用评价标准总结

转载请注明作者和出处: http://blog.csdn.net/john_bh/ 文章目录 1. I O N 和 I P N ION和IPN ION和IPN2. M N E MNE MNE (the mean normalized error)3 A U C a AUCa AUCa(the area-under-the-curve)4. C E D CED CED (the Cumulative Errors Distribution curve)…

python练习3 人脸对齐以及dir、inspect的用法

一、人脸对齐 训练好的模型库文件(替换你的模型文件位置) import cv2 import dlib import matplotlib.pyplot as pltpath"D:\python\Lib\site-packages\cv2\photo.jpg" imgcv2.imread(path) graycv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#人脸分…

人脸识别中常用的人脸检测和人脸对齐

人脸检测和人脸对齐是人脸识别的前提,也是进行一切人人脸相关的人脸项目的开始步骤,本文将从常用的人脸检测的数据集,以及现在公用的比较好的方法开始讲述。 人脸检测常用的数据集 人脸检测的测试数据库有很多,这里仅选择FDDB和…

人脸对齐—级联回归模型和深度学习模型

人脸对齐任务即根据输入的人脸图像,自动定位出面部关键特征点,如眼睛、鼻尖、嘴角点、眉毛以及人脸各部件轮廓点等,如下图所示。 这项技术的应用很广泛,比如自动人脸识别,表情识别以及人脸动画自动合成等。由于不同的姿…

MTCNN 人脸检测 人脸对齐

MTCNN 人脸检测 人脸对齐 flyfish 总体 Loss Stage 0:Image Pyramid 假设图片的宽度是640,高度是480 MIN_DET_SIZE12 minsize70 factor0.709 0.1714285710.709 那么金字塔窗口大小分别是 wh:110,83 wh:78,59 wh:56,42 wh:40,30 wh:28,21 wh:20,1计算过程如下 从640和480…

人脸检测实战终极:使用 OpenCV 和 Python 进行人脸对齐

使用 OpenCV 和 Python 进行人脸对齐 这篇博文的目的是演示如何使用 OpenCV、Python 和面部标志对齐人脸。 给定一组面部标志(输入坐标),我们的目标是将图像扭曲并转换为输出坐标空间。 在这个输出坐标空间中,整个数据集中的所…

人脸预处理:人脸检测+人脸对齐

1 简介 对于人脸识别任务,人脸预处理至关重要。首先我们需要检测出图像中的人脸,然后通过人脸相似性变换得到对齐后的标准人脸。然后在对其进行人脸识别。在人脸识别过程中,往往检测到的人脸是倾斜的。相似性变换根据检测到的关键点和目标点…

dlib人脸配准(人脸对齐)

dlib人脸配准有两种方式。 一种是使用 get_face_chip()方法,使用5个关键点模型来进行配准,这种方法Dlib已经提供了完整的接口(imutils里也有类似函数, face_utils.FaceAligner,代码放在最后面)另一种是自己使用68点关键点模型&am…

基于OpenCV的人脸对齐步骤详解及源码实现

目录 1. 前言2. 人脸对齐基本原理与步骤3. 人脸对齐代码实现 1. 前言 在做人脸识别的时候,前期的数据处理过程通常会遇到一个问题,需要将各种人脸从不同尺寸的图像中截取出来,再进行人脸对齐操作:即将人脸截取出来并将倾斜的人脸…

人脸识别 (4) 人脸对齐

参考:FaceDetector/face_align.ipynb at master faciallab/FaceDetector GitHub 中文:从零开始搭建人脸识别系统(二):人脸对齐 - 知乎 Face Alignment Step-by-Step 1、Align Faces by Spatial Transform Operati…

OpenCV实现人脸对齐

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达 一、人脸对齐介绍 在人脸识别中有一个重要的预处理步骤-人脸对齐,该操作可以大幅度提高人脸识别的准确率与稳定性,但是早期的OpenCV版本不支持人…

人脸对齐(一)--定义及作用

参考: http://www.thinkface.cn/thread-4354-1-1.html http://www.thinkface.cn/thread-4488-1-1.html 人脸对齐任务即根据输入的人脸图像,自动定位出面部关键特征点,如眼睛、鼻尖、嘴角点、眉毛以及人脸各部件轮…

人脸关键点对齐

转:https://www.jianshu.com/p/e4b9317a817f 摘要: 从传统方法到深度学习方法,对人脸关键点定位/人脸对齐的发展进行梳理,对该领域中经典的方法,最新成果进行汇总,并给出相应的paper原文,项目主…

人脸对齐介绍

转自:https://cloud.tencent.com/community/article/532672 一、 人脸对齐,也叫做人脸特征点检测,图为人脸特征点例子 二、 人脸对齐有哪些应用? 1 五官定位 2 表情识别 3 人脸漫画、素描生成 4 增强现实 5 换脸 6 3D建模 三、 人…

常见的人脸对齐方法 python

人脸对齐 1. 通过Dlib库 1.1.环境需求: opencv-python dlib下载dlib库的68关键点文件: http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2 然后解压后得到shape_predictor_68_face_landmarks.dat。 其次,下面可能需要有一…

QGIS中也有“fishnet”——QGIS怎么生成渔网

QGIS堪称Mac上的ArcGIS,免费小巧,插件丰富,比ArcGIS更容易上手。今天分享的是如何在QGIS中生成规则网格,也就是ArcGIS中的fishnet功能怎么在QGIS中完美实现。 # 环境声明:QGIS3.10 MacOS10.15.6 # 分享背景&#xff…

ArcMap Fishnet生成规则网格

在利用ArcGIS处理数据时,有时需要对整个工作区域进行规则网格划分,这个在ArcGIS中是一件非常简单的事情,现在就将利用ArcGIS生成规则网格的步骤详细的介绍一下。 首先我有一个工作的范围,比如图一所示的范围: 我要在研…

POJ 1408 Fishnet

题目大意: 有一个1*1的正方形,分别给出下,上,左,右边每个边上的n个点,对边对应点连线,问这些线段相交的最大的四边形面积是多少(面积最大的定义是必须当前面积内没有更小的四边形内…

创建渔网工具

创建渔网(create fishnet)工具是指创建由矩形像元组成的渔网。输出可以是折线或面要素。创建渔网需要三条基本信息:渔网的空间范围、行数和列数以及旋转的角度。要指定这些基本信息可通过多种方法。例如,您可能不确定准确的行数和…