2017-07-19 328 views
0

kinect v2提供了一个深度帧,分辨率为512 x 424像素,其中fov为70.6 x 60 degrees,从而得到平均每度约7 x 7像素。 [Source]。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

KINECT field of view geometry

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; 
+0

谢谢你真的太多你的答案,可你也许解释一下你的代码或链接到源? – Kev1n91

+0

非常感谢您的进一步解释,谢谢您的回复。如果我理解正确,这只适用于Kinect的深度图像,对吧?因此,如果我有一个从Z缓冲图像渲染的深度图像,其中一个像素离中心越远,则z值越高,此机制不起作用,因此首先像素将不得不投影到相机? – Kev1n91

+1

是的,这是针对KINECT深度数据来的,这些数据来自于链接的doc页面中描述的“预先计划”。 – zeFrenchy