【问题标题】:Kinect V2 Depth Frame Pixel SizeKinect V2 深度帧像素大小
【发布时间】:2017-07-19 07:30:14
【问题描述】:

kinect v2 提供分辨率为512 x 424 像素的深度帧,视野为70.6 x 60 degrees,平均每度约7 x 7 像素。 [Source]。

但是我找不到任何关于深度帧像素大小的信息,或者有没有任何方法可以根据给定的信息计算像素大小?

【问题讨论】:

    标签: pixel depth-buffer kinect-v2


    【解决方案1】:

    您是在问如何在深度数据中映射像素大小?

    depth coordinate system 与其在 KINECT 传感器上的原点和方向正交。 基本trigonometry 告诉我们直角三角形中对边和相邻边之间的关系是Tan A = a/b,所以水平方向有tan(FOV/2) = (FrameWidth/2)/depth,因此有FrameWidth = 2*depth*tan(35.3),所以有width of 1px = depth*2*tan(35.3)/512,类似的是height of 1px = depth*2*tan(30)/414

    const int FRAME_WIDTH = 512;
    const int FRAME_HEIGHT = 424;
    const float FOV_HORIZONTAL = 70.6 * PI / 180.0; // convert to radians
    const float FOV_VERTICAL = 60.0 * PI / 180.0;   // convert to radians
    const float HORIZONTAL_SCALING = 2 * std::tan(FOV_HORIZONTAL / 2.0) / (float)FRAME_WIDTH;
    const float VERTICAL_SCALING = 2 * std::tan(FOV_VERTICAL / 2.0) / (float)FRAME_HEIGHT;
    

    对于每个深度像素,您可以通过简单的缩放来计算其宽度和高度:

    width = HORIZONTAL_SCALING * (float)depth;
    height = VERTICAL_SCALING * (float)depth;
    

    【讨论】:

    • 非常感谢您的回答,您能解释一下您的代码或链接到源吗?
    • 非常感谢您的进一步解释,抱歉回复晚了。如果我理解正确,这只适用于 Kinect 的深度图像,对吧?因此,如果我有一个从 Z-Buffer 图像渲染的深度图像,其中像素离中心越远,z 值就越高,这种机制不起作用,所以首先必须将像素投影到相机平面?
    • 是的,这是用于“预投影”的 KINECT 深度数据,如我链接的文档页面中所述。
    猜你喜欢
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 2014-11-05
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多