第七章 采用AAM和POSIT的3D头部姿态估计(6)
TERMCRIT_ITER, 100, 1.0e-4f);
cvPOSIT( positObject, &srcImagePoints[0], FOCAL_LENGTH, criteria, rotation_matrix, translation_vector );
迭代完成之后,cvPOSIT将结果存储在rotation_matrix和translation_vector.下面的截图展示了带有白色圆圈的scrImgePoints,以及一个坐标轴来表明旋转和平移的结果。
参考前面的截图,让我们看一下输入的点和运行POSIT算法的结果: 1、白色圆圈表示输入点,同时坐标轴表示结果模型的姿态。
2、当通过一般标定过程获得焦距时,请确保你的相机使用了焦距。你可能想检查一下标定的过程可以访问:in the Camera calibrationsection in Chapter 2, Markerbased Augmented Reality on iPhone or iPad. POSIT当前的实现仅允许正方形的像素,因为对于焦距的长度没有余地在x和y轴上。
3、期望的旋转矩阵为下面的格式:
4、平移矢量为下面的格式:
POSIT和头部模型
为了使用POSIT作为姿态估计的一个工具,我们将使用一个3D头部模型。 There is one available from the Institute of Systems and Robotics of the University of Coimbra and can be found at http://aifi.isr.uc.pt/Downloads/OpenGL/ glAnthropometric3DModel.cpp
注意这个模型可以在它描述的地方获得:
float Model3D[58][3]= {{-7.308957,0.913869,0.000000}, ...
这个模型可以通过下面的截图看到:
先前的截图展示了POSIT可利用的一个58个点的3D头部模型。
为了使POSIT工作,相对于3D头部模型的点必须相应地匹配。注意,至少需要4个非共面的点和它们相应的2D投影来使POSIT工作,因此,它们必须作为参数传递,大致上和Diving into POSIT部分描述的那样。注意这个算法在匹配点的数量方面是线性的。下面的截图展示了匹配是怎么样完成的:
先前的截图展示了一个3D头部模型和一个AAM网格的正确的匹配点。
从网络摄像机或者视频文件跟踪
既然我们已经收集了所有的工具来获得6个自由度的人脸跟踪。我们可以应用它到一个相机流或者视频文件。OpenCV提供了VideoCapture类,这个类可以用下面的方式使用(获取跟到的信息,可以看:see the Accessing the webcamsection in Chapter 1, Cartoonifier and Skin Changer for Android)
#include \
#include %using namespace cv; int main(int, char**) {
VideoCapture cap(0);// opens the default camera, could use a //打开默认相机,可以使用一个视频文件路径替代
// video file path instead
if(!cap.isOpened()) // check if we succeeded //检查是否成功 return -1;
AAM aam = loadPreviouslyTrainedAAM(); //导入先前训练的AAM HeadModel headModel = load3DHeadModel();//导入3D头部模型
Mapping mapping = mapAAMLandmarksToHeadModel();//将AAM投影到头部模型 Pose2D pose = detectFacePosition();//检测人脸的位置 while(1) {
Mat frame;
cap >> frame; // get a new frame from camera
Pose2D new2DPose = performAAMSearch(pose, aam);
Pose3D new3DPose = applyPOSIT(new2DPose, headModel, mapping);
if(waitKey(30) >= 0) break; }
// the camera will be deinitialized automatically in VideoCapture // destructor return 0; }
算法是这样运作的。一个视频捕捉通过VideoCapture(0)来初始化,因此将使用默认的相机。既然我们使得视频捕捉工作了,同样地我们需要我们训练的主动表观模型,这在伪代码load PreviouslyTrainedAAM mapping中实现。我们同样为POIST算法导入3D头部模型并且导入存储在映射变量中的标记点到3D头部点的映射。
我们需要的所有事情导入之后,我们将从一个已知的姿态初始化算法,这是一个已知的3D姿态,已知的旋转和已知的一组AAM参数。这将通过OpenCV详细记载的Haar特征分类人脸检测器自动的完成(更多的细节在第六章非刚性人脸跟踪中的人脸检测器部分,或者OpenCV的级联分类器文献),或者我们可能手动地从先前标记的框架中初始化一个姿态。 同样可以使用一个brute-force方法,它将为每一个矩形运行一个AAM匹配,因为仅在第一帧的搜索中它很慢。注意通过初始化,我们想要通过它们的参数找到AAM的2D标记。
当所有的事情导入了之后,我们可以通过while 循环限定的主循环来进行迭代。在这个循环中,我们首先访问下一个获取的视频帧,然后我们运行一个主动表观模型,以便我们可以在下一帧图像中找到标记。既然在这一步,当前位置非常重要,我们将它作为一个参数传递给伪代码函数performAASearch(pose,aam)。如果我们找到了当前姿态,它通过误差图像收敛传递了一个信号,我们将获取下一个标记位置,因此我们可以将它们提供给POSIT。这发生在下面的命令行:applyPOSIT(new2DPose,headModel,mapping),这里新的2D姿态作为一个参数传递,同样地像我们先前导入的headModel和mapping。之后,我们可以在获得姿态中渲染任何3D模型,如一个坐标系轴或者一个增强现实的模型。当我们有了标记,通过模型的参数化可以获得更多有趣的效果,例如张开嘴或者改变眉毛的位置。
总结:
在这一章,我们已经讨论了主动表观模型是怎么样和POSIT组合来获得一个3D头部姿态。关于如何创建,训练和操作AAM的概述已经给出,读者可以使用这些背景到任何领域,例如医疗,图像处理,或者企业。进一步处理AAMs,我们熟悉了Delaunay三角剖分并且学习了如何使用这样有趣的结构作为一个三角剖分的网格。我们同样展示了如何OpenCV函数在三角形上执行纹理映射。另外一个感兴趣的主题是AMM匹配的方法。尽管只描述了反向组合投影算法,我们可以简单的通过使用它的输出来获得多年研究的结果。
学习了充足的理论和AAM的实践之后,我们投入到POSIT的细节来结合2D测量到3D测量,来阐述如何使用两个模型点之间的匹配来适配(拟合)一个3D模型。我们通过展示如何使用所有的工作到一个在线的人脸跟踪,这产生了6个自由度的头部姿态——个3的旋转度——3个平移。本章完整的代码可以从http://www.packtpub.com/下载。
References
? Active Appearance Models, T.F. Cootes, G. J. Edwards, and C. J. Taylor, ECCV, 2:484–498, 1998(http://www.cs.cmu.edu/~efros/courses/AP06/Papers/ cootes-eccv-98.pdf)
? Active Shape Models – Their Training and Application, T.F. Cootes, C.J. Taylor, D.H. Cooper, and J. Graham, Computer Vision and Image Understanding, (61): 38–59, 1995(http://www.wiau.man.ac.uk/~bim/Papers/cviu95.pdf)
? The MUCT Landmarked Face Database, S. Milborrow, J. Morkel, and F. Nicolls, Pattern Recognition Association of South Africa, 2010(http://www.milbo.org/ muct/)
? The IMM Face Database – An Annotated Dataset of 240 Face Images, Michael M. Nordstrom, Mads Larsen, Janusz Sierakowski, and Mikkel B. Stegmann,
Informatics and Mathematical Modeling, Technical University of Denmark, 2004, (http://www2.imm.dtu.dk/~aam …… 此处隐藏:3150字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [学前教育]MC9S12XS256RMV1 xs128芯片手册4
- [学前教育]安东尼语录经典语录
- [学前教育]e级gps控制测量技术设计书
- [学前教育]苏教版2022-2022学年八年级下学期期末
- [学前教育]装修公司推广 营销
- [学前教育]家政服务合同(完整版)
- [学前教育]湖北省2016届高三联考语文试题
- [学前教育]爱立信无涯学习系统LTE题库1-LTE基础知
- [学前教育]揭秘大众柴油车作弊软件原理
- [学前教育]人才流失原因及对策分析
- [学前教育]房屋建筑施工工程劳务分包合同
- [学前教育]国际贸易实务试卷A卷09.6
- [学前教育]校园废品回收活动计划方案书范文格
- [学前教育]电大成本会计试题及答案
- [学前教育]大学物理实验 华南理工出版社 绪论答案
- [学前教育]爱丁堡产后抑郁量表
- [学前教育]液压冲击的危害、产生原因与防止方法(
- [学前教育]学生工作总结高一学生期中考试总结_020
- [学前教育]人民医院医疗废物管理规章制度大全
- [学前教育]阳光维生素的巨大抗癌潜能阅读题答案.d
- 马云在云锋基金江苏论坛闭幕式的发言
- 试论小学体育教育中的心理健康教育-教
- 语文A版一年级下册《语文乐园一》教学
- 2021四川大学物理化学考研真题经验参考
- [人教A版]2015-2016学年高中数学 第二
- 终端网点销售返利协议书
- 江苏省2015年眼科学主治医师青光眼考试
- 2017年部编人教版八年级语文上册教案
- 十一中学七年级英语上册Unit7Howmuchar
- 以赛促教的创新性实验教学机制建设实践
- 平凉市崆峒区2015七年级下生物期末试题
- 琶洲(地块五)A、B塔楼1、2#塔吊基础
- 一级医院工作制度与人员岗位职责
- 2018北京西城区高三二模理科数学试题及
- 炒股密码线技术 - 图文
- 职高学生生涯发展辅导教案
- 语文人教版四年级上册8 世界地图引出的
- 最新最新人教版二年级上册全册数学教案
- 2017高考英语全国2卷精彩试题(有问题
- 普通心理学笔记




