惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
A
About on SuperTechFans
WordPress大学
WordPress大学
I
InfoQ
The GitHub Blog
The GitHub Blog
N
Netflix TechBlog - Medium
Hugging Face - Blog
Hugging Face - Blog
阮一峰的网络日志
阮一峰的网络日志
Last Week in AI
Last Week in AI
Recorded Future
Recorded Future
D
DataBreaches.Net
大猫的无限游戏
大猫的无限游戏
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
aimingoo的专栏
aimingoo的专栏
月光博客
月光博客
罗磊的独立博客
博客园 - 叶小钗
量子位
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
The Blog of Author Tim Ferriss
Vercel News
Vercel News
G
Google Developers Blog
F
Fortinet All Blogs
博客园 - 三生石上(FineUI控件)
Microsoft Security Blog
Microsoft Security Blog
Engineering at Meta
Engineering at Meta
IT之家
IT之家
S
SegmentFault 最新的问题
B
Blog RSS Feed
MyScale Blog
MyScale Blog
Jina AI
Jina AI
The Register - Security
The Register - Security
Stack Overflow Blog
Stack Overflow Blog
博客园 - Franky
Attack and Defense Labs
Attack and Defense Labs
Webroot Blog
Webroot Blog
H
Hacker News: Front Page
C
Check Point Blog
博客园_首页
云风的 BLOG
云风的 BLOG
Recent Announcements
Recent Announcements
Schneier on Security
Schneier on Security
T
Tailwind CSS Blog
The Last Watchdog
The Last Watchdog
宝玉的分享
宝玉的分享
B
Blog
O
OpenAI News
博客园 - 【当耐特】
有赞技术团队
有赞技术团队
D
Docker

博客园 - 任程

主元分析(PCA)在计算机图形学中的应用 本博客代码公布(本文会不断更新) 机器人逆动力学(Robot Inverse Dynamics) 刚体动力学(Rigid Body Dynamics) Flock of Birds——总结使用过的虚拟现实设备之二(A Brief Summary of Several VR Devices) 多通道软件同步——代码设计 多通道的同步问题 《自己实现EarthSculptor的Splatting地形》的源代码 Interesting story about DI-Guy 利用billboard实现云的仿真 OST试验版 透视校正插值(Perspective-Correct Interpolation) Ogre中在SceneNode节点旁显示二维字的代码 Perlin噪声 虚拟现实现状——设备篇(译:State of VR-Devices) 多线程中Sleep函数的调用 用WiiRemote进行头部跟踪(Head Tracking for Desktop VR Displays using the WiiRemote) 分析碰撞检测库Opcode 用NVPerfHUD来分析3D程序
运动捕捉数据的行为分割
任程 · 2011-08-16 · via 博客园 - 任程

定义  

        我们有时会获得一些时间很长的运动捕捉数据文件,每个文件中包含多个行为动作(如图所示),比如走路、拳击、跑步、跳跃等等,而在进行运动编辑与运动合成时,常常希望一个片段只包含一种行为,例如你做运动片段插值的时候,可能只想要多个走路的运动片段,你不会想要把走路和一个特技动作进行直接的插值。

image

       当运动数据文件很多时,自动地对这些文件进行行为的分割就是很有用的了,分割后每个片段只包含一种类型的行为,也就是说给定一个运动数据文件m1,我们需要将m分割为m1,m2,…mS,分割的段数S与各个分割点是待求解的。

方法

       文章”Segmenting Motion Capture Data into Distinct Behaviors, J. Barbic and A. Safonova and  J.Y. Pan and  C. Faloutsos and J. K. Hodgins and N. S. Pollard”(以下简称该文章为”Segment一文”)旨在处理此问题,你可以在这里:http://graphics.cs.cmu.edu/projects/segmentation/看到与该文章的视频信息,并下载到该文中使用的运动数据文件。我这里要提供的是对其文中想法的一个简述,并提供源代码。

       Segment一文中介绍了三种分割的方法,分别是PCA方法(Principle Component Analysis)、PPCA(Probabilistic Principle Component Analysis)方法、GMM(Gaussian Mixture Model)方法。

       其中前两种方法都基于PCA主元分析,其基本思想是这样的:人体各关节的运动由很大的相关性(如步行动作中左臂向前摆动时右臂会向后摆动),因此利用PCA可以对人体动作进行降维从而提取出主要成分来;而两个不同的行为会具有不同的主元成分,那么利用此特点就可以将行为区分开来。首先对一个区间段内的运动数据进行PCA提取,然后不断的加长此区间的长度,如果在加长到某个数据帧时发现提取出的PCA成分与前面区间段的PCA成分差异较大,那么就断定运动在此处发生了行为切换。

       第三种方法基于混合高斯模型,其想法与以上也有相通之处,用高斯混合模型对整个运动序列进行建模,不同的行为会有不同的高斯分布,每个行为会聚集在自己的高斯簇周围,如果一个数据帧之前的运动片段聚集于一个簇,而其之后的运动片段聚集于另一个簇,那么就在此数据帧处对运动进行分割。

代码

       Segment一文的实验结果表明,PPCA方法得到的结果最优(具体实验请看原文),因此实现了PPCA方法,这里是代码下载:https://files.cnblogs.com/ArenAK/BehaviorSegmentation.zip,当然你可以基于此代码做一些调整,就能得到PCA方法,因为PCA方法较PPCA方法更简单。

       代码不当与需改进之处,欢迎指正。

代码使用方法:

直接运行main.m就可以了!

默认输入

运动数据文件Patient1.Mix 01.amc.txt

默认输出

程序运行完后,在matlab的命令行窗口显示类似这样的内容:
allcuts =
          1        1020        1819        2588        3157
4066        4666        6035        7234       8883        9192
9609       10208       10617
这就是分割点,每个数字代表在哪一帧进行分割。
另外程序会输出一些文件在result文件夹下,分为两类:
1. 原txt文件被转化为amc文件并输出,如Patient1.Mix 01.amc.txt被转换为如Patient1.Mix01.amc.txt.amc,你可以用能打开amc程序的三维软件查看动作。
2. 各个被分段后的amc文件,文件名以seg_开头,如seg_1.amc,seg_2.amc等,同样你可以查看分段得到的动作。

说明

代码包中包括了一个运动数据文件Patient1.Mix01.amc.txt作为输入,如果你想测试其它文件,请在网页http://graphics.cs.cmu.edu/projects/segmentation/ 中提供的链接下载,代码的输入可以是与此文件格式相同的txt文件,也可以是CMU数据库的标准amc文件(你可以在http://mocap.cs.cmu.edu/tools.php下载到查看amc文件的三维软件)。

输入的文件可以是一个或多个,将其放在ExperimentCMUData文件夹下即可。
另外,程序中有个参数threshold,默认值设为了500000,根据不同的文件,有可能你想要调节一下这个数:threshold越大,分段数越少;threshold越小,分段数越多。