一、ASM算法引入
当我们试图去对一个目标物体进行形状建模时,那么就用一个简单的矩形来说明如何对矩形(目标物体)进行形状建模吧。我们用四个顶点和每条边的中点来构造一个矩形,这样我们就可以仅仅通过排列这八个点来建立一个新的矩形实力。为了确保这个模型(八个点)总是能构造一个矩形,我们必须对这些点和他们之间的关联添加相应的限制。如下图所示,P2到P1的距离必须等于其到P3的距离,P3P5构成的向量必须与P5P7构成的向量垂直。

接下来,我们来想想如何对人的手进行形状建模吧,这更符合我们当下的需求。我们用手可以摆出各种各样的姿势,所以我们不仅要描述手指每个节点之间的关系,而且还要描述节点的位置如何随着手的姿态变化而变化。我们需要一种能够自动从样本形状中提取上述规则(类似如何通过对八个点的限制来生成矩形)的方法。
基于此我们就引出了ASM(Active Shape Model,主观形状模型),通过形状模型对目标物体进行抽象。ASM从一系列训练的形状模型中学习,得到一系列形状向量和目标物体的平均形状。SM是一种基于PDM的算法,。在PDM(Point Distribution Model,基于点分布模型)中,外形相似的物体,例如人脸、人手、心脏、肺部等的几何形状可以通过若干关键特征点(landmarks)的坐标依次串联形成一个形状向量来表示。

二、ASM算法实现过程
首先我们定义一个含有n个点的向量来表示一个形状x={p1,p2,…,pn},这些点表示在笛卡尔坐标系中。在2维中表示,pk=(xk,yk)。利用这一表示方法,我们来进行ASM的训练。在实际应用中,ASM算法的实现一般分为训练过程和搜索过程。通过训练图像样本获取训练图像样本的特征点分布的统计信息,并且获取允许特征点存在的变化方向,实现在目标图像上寻找对应的特征点的位置。训练样本需要手动的标记所有的特征点的位置,记录特征点的坐标,并且计算每一个特征点对应的局部灰度模型作为局部特征点调整用的特征向量。

  1. ASM的训练过程
    1)我们有N个用于训练的样本图像,对每个样本进行手动标记我们要建立模型的形状,并保存下来。这些用于标记的点,通常被称为物体形状的关键特征点,一般来说这些特征点应当很容易在训练样本中的所有图像中找到。
    2)有步骤1)得到的形状来自于不同的图像,我们很难保证目标物体在这些图像中处于相同的位置和方向。一般来说,我们使用Procrusts方法对这些形状进行相应的校正。这也是ASM训练的关键过程,可以理解为一种空间几何变换。
    3)计算平均形状。通过以上两步,我们得到了一组形状尽可能对齐的训练集X。我们有N个包含n个点的形状训练集,由此得到平均形状:
    4)PCA降维。降维的主要作用是减少非关键维度的影响,同时可以减少数据量、提升训练效果。
    5)描述每个已知特征点的局部特征,以便在该特征点附近进行搜索(可以在特征点附近矩形框中搜索,也可以沿法线方向搜索),以迭代的方式寻找新的特征点匹配位置。
  2. ASM的搜索过程
    先根据形状检测结果的大致形状位置,将前面计算得到的平均形状进行仿射变换(一种空间几何变换形式,图像的仿射变换可以理解为将图像按比例缩放、旋转、平移或剪切的组合,每个仿射变换对应图像空间的一个变换矩阵),得到一个初始的特征点模型(即初始化对齐形状),然后搜索特征点即可。换言之,ASM的搜索过程就是以空间几何变换为基础,在每个特征点的领域内进行迭代搜索,并结合局部特征点的特征匹配,获取新的特征点位置。

ASM算法原理及实现过程相关推荐

  1. 人工智能AI常见的经典K-means聚类算法原理和工作过程

    K-means聚类算法亦称K聚类均值算法,K-means算法是硬聚类算法中的一种.聚类算法是一类无监督机器学习.K-means算法是计算数据聚集的算法,主要通过不断地取离种子点最近均值的算法.K-me ...

  2. 第1期技术: DQN算法原理及实现过程

    深度强化学习实验室(DeepRLhub) 访问官网: http://deeprlhub.com 特别声明:本文是作者在充分知晓著作权细则的情况下,经过个人付出或者翻译他人著作内容,并已注明翻译原文来源 ...

  3. BP神经网络(反向传播算法原理、推导过程、计算步骤)

    BP神经网络 1.反向传播算法的原理 2.反向传播算法参数学习的推导 3.反向传播算法参数更新案例 3.1 反向传播的具体计算步骤 3.1.1 计算输出层的误差 3.1.2 计算隐藏层误差 3.1.3 ...

  4. 六轴机械臂运动学算法原理及其推导过程

    网站上关于六轴机械臂piper算法的讲解有很多,但其腕点姿态的推到较为模糊,故此写一篇关于六轴机械臂piper算法的推导讲解,供有缘人参考,如果您觉得有用,可以点个赞,吾将不胜感激,若是推导过程存在错 ...

  5. 深入一致性哈希(Consistent Hashing)算法原理

    2019独角兽企业重金招聘Python工程师标准>>> 本文为实现分布式任务调度系统中用到的一些关键技术点分享--Consistent Hashing算法原理和Java实现,以及效果 ...

  6. 【数据校验杂谈】循环冗余检验 (CRC) 算法原理

    2019独角兽企业重金招聘Python工程师标准>>> 循环冗余检验 (CRC) 算法原理 Cyclic Redundancy Check循环冗余检验,是基于数据计算一组效验码,用于 ...

  7. CORDIC算法原理详解及其Verilog实现

    CORDIC算法原理详解及其Verilog实现 本文的verilog代码 链接:https://pan.baidu.com/s/1GGbRjxO5CxoIODQAg1l6Lw 提取码:jo0h *本文 ...

  8. K均值(K-means)聚类算法原理与代码详解

    0. 算法原理: 上述过程简单描述: a: 初始数据 b: 选择质点 c: 根据质点划分 d: 求均值,更新质心点 e: 划分 f: 更新质心点 1. 代码实现: # K means 教程# 0. 引 ...

  9. TextRank算法原理和提取关键词的主要过程详解 计算句子相似度 计算句子重要性公式

    1.TextRank计算句子相似度和句子重要性的公式 2.TextRank算法提取关键词的过程 3.TextRank建立关键词无向图

最新文章

  1. mysql 5.7 innodb 预热_mysql5.7 InnoDB数据表空间文件平滑迁移
  2. 牛客题霸 NC13 二叉树的最大深度
  3. 开源网站统计程序 oracle,利用百夫长统计程序源码免费搭建独立网站统计软件工具...
  4. Mendix发布全球低代码报告,中国软件与低代码发展远超全球
  5. MySQL数据库----触发器
  6. 计算两个日期相差的天数,Calendar用法
  7. 计算机工程硕士论文全套,计算机工程硕士 论文写作注意事项
  8. mysql 自定义函数教程_MySQL自定义函数
  9. 《2020信息消费战“疫”案例集》发布 邬贺铨院士作序推荐(附下载连接)
  10. 消息队列(MQ)原理总结
  11. QQ音乐系统API接口文档
  12. node.js读取JSON文件
  13. GBS国标经纬度转高德经纬度
  14. 高频迷你信号发生器性能及其优势
  15. C语言课后问答题汇总
  16. c 语言count函数什么意思,在C ++ STL中设置count()函数
  17. JAVA毕业设计HTML5企业员工管理系统计算机源码+lw文档+系统+调试部署+数据库
  18. OpenCV人脸目标检测、摄像头实时检测
  19. 自动创建 api 模拟数据
  20. Android 大众点评的接入

热门文章

  1. 【iOS】—— FMDB的基础用法
  2. uniapp 埋点(友盟)
  3. Rime输入法小狼毫皮肤配色
  4. linux swap逻辑 主,swap是主分区和是逻辑分区有什么差异么??
  5. 解决微信电脑版备份的问题:当前网络状况复杂,请尝试使用其它网络
  6. opencv 彩色图像对比度增强
  7. 基于android的在线音乐播放器app设计
  8. 第104篇 Compound 中的 cTokens
  9. MLM模型中,是否应该按15%的比例mask?
  10. stay hungry,stay foolish