【问题标题】:Camera projection onto spatial map with Hololens 2使用 Hololens 2 将相机投影到空间地图上
【发布时间】:2021-09-02 02:33:57
【问题描述】:

我正在尝试将记录的图像(对颜色进行一些修改)投影到从 Hololens 2 设备门户的 3D 视图生成的空间地图上。 我用对应的 CameraToWorld 矩阵和 Projection Matrix 记录了图像

例如

Projection Matrix:
[1.53862 0.00000 0.00729 0.00000],
[0.00000 2.73525 -0.05193 0.00000],
[0.00000 0.00000 -1.00000 0.00000],
[0.00000 0.00000 -1.00000 0.00000]

CameraToWorld Matrix:
[0.99903 0.03822 -0.02210 0.01095],
[-0.03472 0.98934 0.14145 0.10689],
[-0.02727 0.14054 -0.98970 0.16761],
[0.00000 0.00000 0.00000 1.00000]

)

当我将 CameraToWorld Matrix 应用到 PCL 纹理映射时,我发现图像被投影到对面并且上下颠倒。因此,我添加了一个 180 度的 x 轴旋转。

我得到以下结果,位置不在正确的位置

The red square should be the correct position of monitor

我有以下问题

  1. 为什么会有旋转偏移?将 CameraToWorld 矩阵应用于 PCL 纹理映射函数的正确方法是什么?

  2. 我没有使用投影矩阵,我在投影过程中是否遗漏了什么?

【问题讨论】:

    标签: hololens texture-mapping pcl


    【解决方案1】:

    你在python项目中使用trimesh吗?如果是这样,场景的坐标系应该是左手坐标系,而空间映射的坐标系是右手坐标系,所以会有旋转偏移。为了得到空间映射的正确位置,需要将矩阵转换为对应的左手坐标矩阵。

    投影矩阵是为从世界坐标转换到相机坐标而设计的。如果您想将纹理添加到 3D 模型,则无需使用它。

    【讨论】:

    • 非常感谢Sarah,我终于完成了。我没有使用 trimesh,我使用 PCL::texturemapping 函数来完成 Hololens 和 PCL 的唯一区别是平移需要将 -1 乘以 z 轴,而旋转需要将 -1 乘以 x、y 轴跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    相关资源
    最近更新 更多