【发布时间】:2018-08-20 20:40:39
【问题描述】:
AVDepthData 中的深度值(来自 TrueDepth 相机)是表示距相机的距离(以米为单位),还是表示距相机平面的垂直距离(即相机空间中的 z 值)?
我的目标是从深度数据中获得准确的 3D 点,而这种区别对于准确性很重要。我在网上找到了很多关于 OpenGL 或 Kinect,但不是 TrueDepth 相机。
FWIW,这是我使用的算法。我在使用某些 OpenCV 特征检测找到的像素处找到深度缓冲区的值。下面是我用来在let cgPt: CGPoint 的给定像素处查找真实世界 3D 点的代码。这个算法似乎工作得很好,但我不确定深度假设是到相机平面的距离是否会引入小误差。
let depth = 1/disparity
let vScreen = sceneView.projectPoint(SCNVector3Make(0, 0, -depth))
// cgPt is the 2D coordinates at which I sample the depth
let worldPoint = sceneView.unprojectPoint(SCNVector3Make(cgPt.x, cgPt.y, vScreen.z))
【问题讨论】: