我正在開發一個項目,該項目使用Kinect和OpenCV將導出的最終座標導出到Flash,以用於遊戲和其他程序。目前,我們的設置基於顏色並將指尖輸出爲(x,y,z)格式的Flash,其中x和y以像素爲單位,z以毫米爲單位。但是,我們希望使用Flash中的z深度值將這些(x,y)座標映射到「真實世界」值,如毫米。Kinect - 使用深度將地圖(x,y)像素座標轉換爲「真實世界」座標
據我所知,Kinect 3D深度是通過投影X軸沿着相機的水平線獲得的,Y軸是沿着相機的垂直軸線,而Z軸是從相機鏡頭直接向前的。深度值就是從任何給定物體到XY平面的垂線長度。請參閱下面鏈接中的圖片(從微軟網站獲得)。
Microsoft Depth Coordinate System Example
另外,我們知道的Kinect的視野的水平場在117度的角度投射。
使用此信息,我想我可以將任意給定點的深度值投影到x = 0,y = 0線上,並在該點繪製平行於XY平面的水平線,與相機的場視力。我最終得到一個三角形,分成兩半,高度爲所討論對象的深度。然後,我可以使用一個小三角解決視野的寬度。我的方程是:
W = TAN(THETA/2)* H * 2
其中:
- W =視場寬度
- THETA =視場角的水平視場(117度)
- H =深度值
(對不起,我不能發佈圖片,我想如果我可以)
現在,求解深度值爲1000mm(1米)的值爲約3264mm。
但是,實際上在生成相機圖像時,我會得到不同的值。也就是說,我在離攝像機1米遠的地方放了一根米棒,注意到畫面的寬度最多隻有1.6米,而不是估算的3.264米。
有什麼我在這裏失蹤?任何幫助,將不勝感激。
是從Kinect的儀表杆1米?或者距離它的起始加工範圍一米?如果直接從相機中獲取距離並將該距離添加到Kinect未命中的距離 – 2012-08-04 02:18:24
您使用Kinect的哪個庫:官方的KinectSDK,libfreenect,OpenNI? – 2012-08-04 08:17:26
我使用官方的Kinect SDK,Kinect補償了它無法讀取的深度(意思是它的起始深度大約超過30釐米)。在繼續進行中,我決定重構我的項目以使用Kinect將深度座標映射到骨架座標。 – user1449837 2012-08-07 21:41:34