0
kinect v2提供了一个深度帧,分辨率为512 x 424
像素,其中fov为70.6 x 60 degrees
,从而得到平均每度约7 x 7
像素。 [Source]。Kinect V2深度帧像素尺寸
但是我无法找到关于深度帧的像素大小的任何信息,或者是否有任何种类的方法可以根据给定的信息计算像素大小?
kinect v2提供了一个深度帧,分辨率为512 x 424
像素,其中fov为70.6 x 60 degrees
,从而得到平均每度约7 x 7
像素。 [Source]。Kinect V2深度帧像素尺寸
但是我无法找到关于深度帧的像素大小的任何信息,或者是否有任何种类的方法可以根据给定的信息计算像素大小?
你问你如何映射深度数据中像素的大小?
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;
谢谢你真的太多你的答案,可你也许解释一下你的代码或链接到源? – Kev1n91
非常感谢您的进一步解释,谢谢您的回复。如果我理解正确,这只适用于Kinect的深度图像,对吧?因此,如果我有一个从Z缓冲图像渲染的深度图像,其中一个像素离中心越远,则z值越高,此机制不起作用,因此首先像素将不得不投影到相机? – Kev1n91
是的,这是针对KINECT深度数据来的,这些数据来自于链接的doc页面中描述的“预先计划”。 – zeFrenchy