-
Notifications
You must be signed in to change notification settings - Fork 24
Open
Description
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种实现方式有什么不一样呢?
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels