ASM是基于统计学习模型的特征点提取的一种方法。这个方法是95年就提出来的,不过至今仍是我认为比较好的人脸特征点提取的方案。方法的提出人Tim Cootes后来还提出了aam算法,也很有名,但如果简单是特征点的定位的话,我认为asm的效果可能更好一些。ASM跟大多数统计学习方法一样,也包括train和test(or fit)两部分,也就是形状建模build和形状匹配fit。这个算法其实很简单,可以用来做实时性的检测,但我还是看了很久,而且还有理解有问题的地方,肯定有很多不对的地方,希望大家多多指正。

一、模型的建立(build)

1.选择合适的特征点

特征点的选取很重要啊,这点不用我多说啦。好的特征点大概应该或多或少满足如下几点:边缘点、曲率大的、T型连接点和以上这些点的连线上的等分点。(如下图)

记录好这些特征点的顺序,以便于后面确定图形的边界和连线等等。这也是asm方法的优点,得到的特征点是有序的。这样得到一组特征点集X

我们这里把它看做是一个2n维的向量

2.形状统计模型

刚刚得到的2n维向量维数很高(因为图像中我们选择的特征点往往很多),但这2n维彼此是有很强的相关性的,彼此的位置距离是大致不变的。这里作者使用最最常用的PCA来进行降维,提取出主成分,这里作者叫它modes。于是任意一组特征点集可以看做是主成分向量空间的一个坐标点,而这个坐标原点就认为是这些点集的平均,这样任意点就是坐标原点加上一个向量。即:

这里P是包含了前t个主成分的协方差矩阵,b是一个t维的向量,用来控制特征点形状的变化,当b为0时,x即坐标原点(平均形状),其实是很好理解哈。但这里b不要太大,如果太大,会导致整个形状变化超出人脸的变化范围,会使人变得异常狰狞,大家懂的。。。所以作者这里做了约束

这步还有个问题,就是PCA中主成分个数t的选取,有两种方法:1)选择前s个;2)选择前k%的分量,这里作者推荐使用第二种方法。

3.把模型和新点集进行匹配

这个过程是asm方法的核心所在了,贯穿始终。说来也简单,无非就是把刚得到的模型进行旋转,放缩,平移。

其中T为旋转放缩平移矩阵

我们的目的就是是模型X和图像特征点集Y最接近,这里目标函数选择是其各点欧氏距离和最小

具体的匹配过程就是,先初始化b向量为0,得到模型X,用其他方法找到变换矩阵T,这个很简单,可以用其他方法(haar人脸检测器,光流法,kalman滤波等等等等)大致找到目标的位置和大小以及方向。求的Y,再利用Y反求b,并且更新b,直到收敛。这里比较容易陷入局部最小,也是该方法的一个缺点。

二、模型在图像中的匹配(fit)

说白了,也就是在图像中找到模型的匹配点,前面已经说过了,可以利用其它方法大致找到模型的位置大小方向(不要小瞧这步,如果预处理的不好,是很容易陷入局部最小的),接下来就是如何改善参数得到好的匹配结果了。模型中可以调整的参数有b、Xt、Yt、s、theta这5个参数。这里作者提到了两种手段:

1)先验信息认为特征点主要是图像的强边缘点,并且图像灰度的梯度服从高斯分布,只要找到模型特征点附近梯度最大的值,即认为是特征点所在的位置

示意图如下:

这种方法很明显,对图像的噪声很敏感,我这里不太推荐

2)对模型特征点周围的纹理信息进行采样,对比图像和模型训练集的纹理,找到纹理最接近的点即认为是特征点。作者这里比较纹理的工具是马氏距离。为了提高搜索的效率,作者还提到了多分辨率搜索周围像素纹理,对于粗糙的尺度,搜索范围大,对于细致的尺度,进行细致的搜索,提高了匹配的效率。这个方法是我比较推荐的。

至于代码,找到了很多版本,有基于opencv的,也有matlab的,大家可以到wiki的asm页面找到对应的链接,但我自己实践下来,总结一下,matlab我不是太熟悉,代码量太大,我放弃了学习。asmlib-opencv是一个在国外读书的国人写的,有源代码,但效果一般。还有个很牛的国人的作品asmlibrary,但核心部分只提供了lib,他的方法效果很好,代码风格也非常棒,实时性也很好,这里感谢作品作者对我的指点。还有个牛人猛写了不基于opencv的stasm,代码量太大,我果断放弃了。至于其他的一些作品都是只有demo,没有code,很让人遗憾。如果哪位大神有asm效果很好的基于opencv的源代码,能提供给小弟,不胜感激。

from: http://blog.csdn.net/yang_xian521/article/details/7468571

ASM(active shape models)算法介绍相关推荐

  1. 模型图像ASM(Active Shape Model) 主动形状模型总结

    时间紧张,先记一笔,后续优化与完善. 为了止防某些不良站网法非载转而且去掉我的载转识标,以及没到德道的人去掉识标称为创原文档,这里我定决采取片图的情势上传全部的总结文字以及公式,刚好这里有量大的公式, ...

  2. ASM、AAM算法介绍

    概述 下面给大家介绍一下人脸关键点检测之ASM.AAM模型,人脸关键点检测主要是在人脸图像中定位出关键位置如脸部轮廓.眉毛.眼睛.鼻子.嘴巴等,是人脸识别中重要的基础环节,应用场景主要有人脸姿态矫正. ...

  3. Computer Vision_2_Active Shape Models:Active Shape Models-Their Training and Application——1995

    此为计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面. 1. Active Appearance Models 活动表观模型和活动轮廓模型基本思想来源 Snake,现在 ...

  4. Active Contour Models 主动轮廓模型

    参考博客: https://www.mathworks.com/matlabcentral/fileexchange/19567-active-contour-segmentation 数字图像处理- ...

  5. shape context matlab,形状上下文(shape context)算法完全解读

    形状上下文(Shape Context)算法完全解读 前言 一. 轮廓提取(Canny Edge Detection)和轮廓点采样(Jitendra's Sampling) 二. 形状上下文(Shap ...

  6. 深度学习【使用pytorch实现基础模型、优化算法介绍、数据集的加载】

    文章目录 一 Pytorch完成基础模型 1. Pytorch完成模型常用API 1.1 `nn.Module` 1.2 优化器类 1.3 损失函数 1.4 线性回归完整代码 2. 在GPU上运行代码 ...

  7. 六种常用的文本聚类算法介绍

    文本聚类算法介绍 分类和聚类都是文本挖掘中常使用的方法,他们的目的都是将相似度高的对象归类,不同点在于分类是采用监督学习,分类算法按照已经定义好的类别来识别一篇文本,而聚类是将若干文本进行相似度比较, ...

  8. Vatti clipping 算法介绍

    文章目录 一.背景 二.基本概念 1. 点(Vertex) 2. 点的顺序(Vertex order) 3. 边 (Edge) 3.1 左侧边和右侧边(Left-hand Edge and Right ...

  9. 机器学习算法-k-means聚类算法介绍

    聚类算法介绍: 在"无监督学习"(unsupervised learning)中,训练样本的标记信息是未知的,目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律,为进一步的 ...

最新文章

  1. linux系统中find怎么用,linux系统中‘find’的详细用法
  2. windows系统下Python环境的搭建
  3. java中打开文件显示_从java程序中打开任何文件
  4. Python语言学习:python语言的特点、入门、基础用法之详细攻略
  5. 数据可用不可见,百度新版本联邦学习PaddleFL来了
  6. 常见RAID的各级别的特性简介(RAID0、1、5、6、10)
  7. vs java调试_基于VSCode的Java编程语言的构建调试环境搭建指南(作业三)
  8. linux如何执行平台,如何在Linux平台运行HelloWorld及测试项目
  9. POJ 2230 Watchcow 欧拉回路的DFS解法(模板题)
  10. Vue 之 slot(插槽)
  11. python进行对应分析_机器学习算法---对应分析
  12. HSF/Dubbo序列化时的LocalDateTime, Instant的性能问题
  13. 华为Mate 30 Pro再爆猛料:更“大”更高级了
  14. 依存句法分析 oracle,spaCy 第三篇:依存分析
  15. zlib源码导读[转]
  16. Hive基本查询语法
  17. 《视觉SLAM十四讲》笔记
  18. ROS入门——解决RLException: Unable to launch [xxx-2]
  19. 微信升级外链管理规范,「砍一刀帮我加速」要被禁止了
  20. Android Studio修改apk命名

热门文章

  1. 字节跳动AI科学家王崇学生时代论文获“时间检验研究奖”
  2. HuggingFace-transformers系列的介绍以及在下游任务中的使用
  3. NUXT: 视图和模板
  4. 相比薪酬,学习效率提升才是创业公司最有价值的报酬
  5. 数据分层/ODS/DW/DM
  6. RocketMQ-初体验RocketMQ(11)-过滤消息_自定义Java类筛选消息
  7. Android各种各样的Drawable-更新中
  8. 入门与实战_商品运营入门——实战秘籍
  9. SpringBoot配置嵌入式Servlet容器
  10. 2020-12-03 matlab 反馈函数 feedback