*c3d文件是一种公用文件格式,自1980年代中期以来,已在生物力学,动画和步态分析实验室中用于记录同步的3D和模拟数据。3D Motion Capture System制造商、Animation行业的公司基本都为它提供支持。
作者这里大体上描述下*c3d文件格式。*c3d文件是一种二进制文件,这有利于应用程序快速读取与存储,但就是不直观。二进制数据根据CPU的不同分为Intel、DEC、SGI三种,Intel和DEC是低位在前存储,SGI是高位前端存储。大家在读*c3d文件时首先要读取文件具体是哪种二进制文件格式,后面的解析才是准确的。C3D文件文件格式是按照数据块存储的,每512个bit为一个数据块,这有利于数据查找与组织。
*c3d文件主要是头文件块512个字节,组与参数块1个或者多个数据块,再就是三维点和模拟数据块。
<头文件数据块>
*c3d头文件主要描述了,三维点的数量、模拟数据量、每帧模拟数据量、点的采样频率、Scal值等参数以及事件参数。*c3d存储三维点及模拟数据可以是I16整型数据格式或者是32位的浮点型,通过Scal值的正负来判断,Scal为负值,就是32位的浮点型,正值就是I16整型数据存储。
<组与参数数据块>
*c3d文件的组与参数主要是存储对各个参数的描述,比如POINT组(指的是三维点)这一个组里面又包含很多的参数,比如USED、SCAL、LABLES...;类似于一级树形结构。
<组的存储格式>
<参数存储格式>
*c3d文件组与参数的存储并不是先存组后存参数,是无需状态,有可能是存完一个组后,跟着存另一个组,也有可能是存第一个组下面的参数,具体存的组或者是参数根据第二个字节的正负判断,负数是组,正数是组下面的参数。
<数据块>
点与模拟数据的存储包含多个数据块。数据可以是整型数据存储也可以浮点类型存储,整形数据格式会小一倍,整形点数据需要乘以Scal还原成浮点类型,浮点类型则不需要。数据是一帧一帧的存储,先存点再存模拟信号(如果有的话)。
<整型点的数据格式>
一共是8个bit,注意最后的2个字节,1-7位是相机的掩码,最后8位是数据的残差。
<32位浮点型点的格式>
一共是16个bit,前12个bit是点的XYZ坐标,后面4个先转成16位整形再解析相机的掩码和数据的残差。
<模拟信号存储>
模拟信号的数据格式与点的数据格式必须保持一致,都是整型或者都是浮点型。模拟信号需要通过以下公式进行换算
ANALOG组下面读出OFFSET,SCAL,GEN_SCALE参数。
模拟信号的存储是每帧一个sample一个sample的存储,比如点的帧频是50Hz,模拟信号的帧频是200Hz,每帧需要存储4个sample,这个参数在头文件里面有描述。每个Sample里面包含多个通道的数据,具体多少通道参考ANALOG组下面USED参数的数值。
<方法一>
首先介绍下官网的方法,下载C3Dserver_setup.exe安装,安装完成后计算机就存在了C3Dserver的ActiveX控件。LabVIEW通过ActiveX控件对文件进行操作,比如读、修改及存储。这个分免费版和付费版。免费版与付费版的唯一区别就是免费版速度会慢,就是故意加了延时!但是这个打包成自己的做的软件毕竟是不方便,一个是慢一个是要安装插件,不是很专业。
<方法二>
最好的解决方案就是认真读文档用LabVIEW写一套*c3d文件编辑工具,不依赖第三方,作者就干了这事,制作了Motion_Lab_C3D LabVIEW库。
C3D_Reader支持文件头、事件头、组与参数、数据的读取。
C3D_Writer根据输入的头、组与参数、点、模拟数据,保存为标准的*c3d文件。另外开发了快速搜索数据结构,支持组与参数数据的快速检索与修改。
后面这套工具将集成到Azure Kinect Sensor&BodyTracking For LabVIEW工具包,用于人体跟踪后的动捕数据存储,这将有助于开发者将跟踪的动捕数据快速迁移到第三方软件进行运动生物力学学分析、动画制作等应用。下一个版本更新!
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !