大家好,欢迎来到IT知识分享网。
.c3d 文件格式解析(更新中……)
什么是c3d文件?
"C3D" 文件通常指的是一种用于存储三维运动捕捉数据的文件格式。这种格式主要用于记录人体或动物在三维空间中的运动。C3D 文件包含了关于运动的各种信息,如关节角度、位置、速度等。 C3D 文件通常与运动捕捉系统相关联,这些系统使用摄像头、传感器或其他设备来捕捉和记录运动。这种文件格式的广泛应用领域包括生物力学研究、医学、运动分析等。
——GPT 3.5
Python读取c3d文件
使用ezc3d
pyomeca/ezc3d: Easy to use C3D reader/writer for C++, Python and Matlab (github.com)库对c3d
文件进行读取:
安装ezc3d
:
conda install -c conda-forge ezc3d
使用ezc3d
读取c3d
文件:
from ezc3d import c3d c = c3d('path_to_c3d.c3d') print(c['parameters']['POINT']['USED']['value'][0]); # Print the number of points used point_data = c['data']['points'] # c['data']['points'].shape: (4, 53, 38420) points_residuals = c['data']['meta_points']['residuals'] analog_data = c['data']['analogs']
值得注意的是,在c3d
文件中c['data']['points']
的shape(4, 53, 38420)
表示,一共有38420帧数据,每一帧数据有53个标志点,每个标志点的数据有四个标量用来表示标志点的空间位置信息。
通过查阅The C3D File Format A Technical User Guide发现:
如果 POINT:SCALE 参数为正数(正值的 POINT:SCALE 参数表明 3D 和模拟数据部分以有符号整数格式存储。),那么 3D 数据部分将包含每个存储的轨迹的有符号整数格式数据。请注意,POINT:SCALE 参数是被复制到 C3D 文件头部(第7-8个字)的参数部分数值之一,可以被软件应用程序快速定位并读取,无需对参数部分进行详细搜索。
如果 POINT:SCALE 参数为负数,那么3D数据部分将包含每个存储的轨迹的经过缩放的浮点数格式数据。该格式提供了更高的精度,并且由于数据存储为经过缩放的值,因此 POINT:SCALE 参数不用于将缩放因子应用于数据。但是,它仍然用于计算点残差值,并且在文件转换为整数格式时可能被应用于数据,因此在将3D点存储为浮点数值时计算有效的 POINT:SCALE 因子是重要的。由于浮点数格式需要八个16位字来存储单个3D点,这将导致C3D文件的大小是整数格式C3D文件的两倍。
前三个标量记录了3D数据点的经过缩放的X、Y和Z坐标值。第四个标量是一个浮点数值,必须转换为有符号整数,然后解释为两个字节。第一个字节存储了摄像机提供了用于计算3D点的信息,而第二个字节包含了3D点测量的残差。
3D点测量的残差示意图如下:
在光学动捕系统中,如果一个标志点反射两个红外相机发射的光,且被这两个相机接收到,就意味着这个点在这两条射线的交点上,这样就可以通过C1-D1和C2-D2的交点确定这个标志点的空间位置,然而由于真实情况下测量射线通常会非常接近,但可能不会完全相交,所以标志点的位置被计算为空间中两条直线之间最短长度线段的中点,于是得到了3D点测量的残差值。
c3d文件格式
以凌云光的FZMotion光学动捕系统导出的.c3d
文件为例,对c3d格式文件进行解析:
c3d
文件包含header
、parameters
和data
三个大类,其中header
定义数据的起始帧(first_frame
,lastframe
)、帧率(frame_rate
)和帧数(size
);parameters
定义数据的参数,每个参数一般由四个属性(description
、is_locked
、type
和value
)描述;data
则对应着实际的数据。
c3d
文件的结构树如下(以凌云光的FZMotion光学动捕系统导出的.c3d
文件为例):
─── c3d ├── data │ ├── analogs │ ├── meta_points │ │ ├── camera_masks │ │ └── residuals │ └── points ├── header │ ├── analogs │ │ ├── first_frame │ │ ├── frame_rate │ │ ├── lastframe │ │ └── size │ ├── events │ │ ├── events_label │ │ ├── events_time │ │ └── size │ └── points │ ├── first_frame │ ├── frame_rate │ ├── lastframe │ └── size └── parameters ├── ANALOG │ ├── BITS │ │ ├── description │ │ ├── is_locked │ │ ├── type │ │ └── value │ ├── DESCRIPTIONS │ │ ├── description │ │ ├── is_locked │ │ ├── type │ │ └── value │ ├── FORMAT │ │ ├── description │ │ ├── is_locked │ │ ├── type │ │ └── value │ ├── GEN_SCALE │ │ ├── description │ │ ├── is_locked │ │ ├── type │ │ └── value │ ├── LABELS │ │ ├── description │ │ ├── is_locked │ │ ├── type │ │ └── value │ ├── __METADATA__ │ │ ├── DESCRIPTION │ │ └── IS_LOCKED │ ├── OFFSET │ │ ├── description │ │ ├── is_locked │ │ ├── type │ │ └── value │ ├── RATE │ │ ├── description │ │ ├── is_locked │ │ ├── type │ │ └── value │ ├── SCALE │ │ ├── description │ │ ├── is_locked │ │ ├── type │ │ └── value │ ├── UNITS │ │ ├── description │ │ ├── is_locked │ │ ├── type │ │ └── value │ └── USED │ ├── description │ ├── is_locked │ ├── type │ └── value ├── EZC3D │ ├── CONTACT │ │ ├── description │ │ ├── is_locked │ │ ├── type │ │ └── value │ ├── __METADATA__ │ │ ├── DESCRIPTION │ │ └── IS_LOCKED │ └── VERSION │ ├── description │ ├── is_locked │ ├── type │ └── value ├── FORCE_PLATFORM │ ├── CAL_MATRIX │ │ ├── description │ │ ├── is_locked │ │ ├── type │ │ └── value │ ├── CHANNEL │ │ ├── description │ │ ├── is_locked │ │ ├── type │ │ └── value │ ├── CORNERS │ │ ├── description │ │ ├── is_locked │ │ ├── type │ │ └── value │ ├── __METADATA__ │ │ ├── DESCRIPTION │ │ └── IS_LOCKED │ ├── ORIGIN │ │ ├── description │ │ ├── is_locked │ │ ├── type │ │ └── value │ ├── TYPE │ │ ├── description │ │ ├── is_locked │ │ ├── type │ │ └── value │ ├── USED │ │ ├── description │ │ ├── is_locked │ │ ├── type │ │ └── value │ └── ZERO │ ├── description │ ├── is_locked │ ├── type │ └── value └── POINT ├── DATA_START │ ├── description │ ├── is_locked │ ├── type │ └── value ├── DESCRIPTIONS │ ├── description │ ├── is_locked │ ├── type │ └── value ├── FRAMES │ ├── description │ ├── is_locked │ ├── type │ └── value ├── LABELS │ ├── description │ ├── is_locked │ ├── type │ └── value ├── __METADATA__ │ ├── DESCRIPTION │ └── IS_LOCKED ├── RATE │ ├── description │ ├── is_locked │ ├── type │ └── value ├── SCALE │ ├── description │ ├── is_locked │ ├── type │ └── value ├── UNITS │ ├── description │ ├── is_locked │ ├── type │ └── value └── USED ├── description ├── is_locked ├── type └── value
Bug List
用Motion Builder打开时,.c3d
文件不要存储在中文路径下,不然会显示导入失败。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/129176.html