2017-07-19 119 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