Skip to content

tsdf计算问题 #11

@1icas

Description

@1icas
  const Vec3fda xylambda(
          (uv.x() - cam_params.principal_x) / cam_params.focal_x,             // (x/z)
          (uv.y() - cam_params.principal_y) / cam_params.focal_y,             // (y/z)
          1.f);
  // 计算得到公式7中的 lambda
  const float lambda = xylambda.norm();

  // step 2.3 计算 SDF, 参考论文公式6中括号的部分
  // 这里的 camera_pos 已经是该体素中心点在当前世界坐标系下的坐标了, 论文中的公式的意思是计算相机光心到该点的距离, 就相当于这个坐标直接取欧式二范数
  // 前面乘的负号是因为, 咱们定义 SDF 表示中平面前的部分为正, 平面后的部分为负
  // SDF 其实也就是表示了空间体素点的(预测值 - 观测值)
  const float sdf = (-1.f) * ((1.f / lambda) * camera_pos.norm() - depth);

关于上面这块代码,有一些疑问需要咨询大神。
1.xylambda到底代表了什么。为什么xylambda存储了 x/z 和 y/z (相机坐标系)。x/z和y/z表示的具体含义是什么,我一直没有搞明白。
2.sdf的计算方式。 代码中计算sdf的方式如上面所示((1.f / lambda) * camera_pos.norm() - depth)。然后我看其他kinectfusion实现的时候,我发现有的计算方式是直接让 相机坐标系下体素块的z值去和 深度图的z值相减。 实现方式有区别,这2种实现方式有什么不一样呢?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions