【问题标题】:Biovision Hierarchical File (BVH) Euler angle specification differencesBiovision 分层文件 (BVH) 欧拉角规格差异
【发布时间】:2013-05-11 19:31:58
【问题描述】:

问题

我正在尝试通过解析 BVH 文件来获取功能。 BVH 文件通过NUICapture 导出,该软件通过 Kinect 捕捉身体运动。

我知道的所有 BVH 示例文件都以 ZXY 表示法指定欧拉角,而不是 ZYX,但 NUICapture 使用 ZYX 表示法导出 BVH 文件,所以我无法解析它。

背景

在 BVH 格式中,由于为每个身体部位指定的欧拉角,轴的顺序可能会有所不同。身体部位的旋转由指定轴的矩阵乘法指定,整个身体的运动被视为层次结构中所有连续身体部位的旋转的乘积。由于矩阵乘法不可交换,ZXYZYX 不同。

解决方案的尝试

我遇到的所有现有解析器都将ZXY 表示为事实上的标准,所有论文也是如此。我发现没有一个解析器能够解析 NUICapture 生成的 BVH 文件,BVHhacker 除外。但是 BVHhacker 没有可用的源代码,因此即使它似乎能够重放 NUICapture 捕获的动作,也无法访问 BVHhacker 解析器创建的内部表示。

我尝试使用开源 Python BVH 解析器(例如 BVHPlay)并尝试导入 NUICapture 的 BVH 文件,但出现文件输入错误,其他带有“正确”@ 的示例 BVH 文件不会出现这种情况987654331@ 格式。为了解决这个问题,我需要以某种方式纠正轴序列,但我不确定如何在不影响原始身体运动完整性的情况下做到这一点。对我来说,仅仅手动切换顺序以允许解析 BVH 可能是非常幼稚的。

【问题讨论】:

  • 请注意,BVHacker 现在是开源的,可在 GitHub 上使用。

标签: parsing kinect motion-detection


【解决方案1】:

呃...以正确的顺序应用旋转应该非常简单。 ZXY 是事实上的标准,但规范明确支持任意顺序。

如果您使用 3ds Max,我们以前为 CAT waaaay 编写了一个 BVH 解析器,您可以在“stdplugs\stdscripts\CATScripts\ImportBVH.ms”中找到它。该脚本手动解析 BVH 文件并支持多种欧拉顺序。我大约有 10 年没看过它了,所以不能保证正确性;但这个理论相当简单。

如果你不使用 Max,是的,你可以改变乘法的顺序。我不熟悉引用的 python 应用程序,但你要做的就是

ZXY = rotMatrix(Z) * rotMatrix(X) * rotMatrix(Y)
ZYX = rotMatrix(Z) * rotMatrix(Y) * rotMatrix(X)

但是,您无法更改 bvh 文件中的值,因此您无法进入文件并仅移动值以获得 ZXY 顺序的旋转。

【讨论】:

    【解决方案2】:

    查看本页底部:http://research.cs.wisc.edu/graphics/Courses/cs-838-1999/Jeff/BVH.html 如您所见,您以相反的顺序预乘每个轴的逆旋转矩阵,然后以正确的顺序(预)乘以矩阵。 因此,如果您有 R=XYZ,则将 R 预乘以 X^(-1),然后将结果乘以 Y^(-1),然后将该结果乘以 X,然后乘以 Y,最终得到 Y*X*Y^(-1)*X^(-1)*R。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      相关资源
      最近更新 更多