2014-10-06 76 views
1

我在Windows 7中使用MS SDK,我打算從3D骨架中提取一些頭部方向。但繪製3D座標時我感到很驚訝。估計的頭部位置總是向前傾斜。從我觀看相機的靜態位置,我以3幅圖像爲例,兩隻手和頭部都用黃色着色,骨骼的右側用洋紅色表示,左側用青色表示。使用Kinect骨架3D

3D skeleton from the front view

(1)從主視圖3D骨架

rotating the same skeleton from (1)

(2)旋轉的從(1)

top view of (1)

相同骨架(3) (1)頂視圖

所以,問題是,

  1. 是正確的技術?

  2. 儘管我更改了默認參數,但我沒有得到任何改進。有關工作設置骨架過濾參數的任何提示?

回答

1

我不知道您是否使用V1和V2,但他們對於這些問題類似...

  1. 這是無論從Kinect的SDK和解剖學上的正確。畫一條從肩膀中心到頭頂中心的線會導致一條向前傾斜的線。你可以在SDK Browser Samples(Body Basics)中看到這個例子。

  2. 我不確定你試圖將關節位置映射到什麼地方,但是這裏有一個demo,它顯示了每個關節的JointOrientation數據。評論中有源代碼演示瞭如何獲取這些值。

Here是Kinect的SDK聯合類型(V2,但類似於V1)

+0

親愛IntStarFoo,謝謝您的回答。我在C#中使用SDK 1.8。儘管以http://msdn.microsoft.com/en-us/library/jj131024.aspx(用於遊戲手勢)的方式使用骨架過濾,我發現肢體的大小是如此可變。當我在Kinect 1.5米處揮動右手,沒有阻塞時,我測量肘關節到腕關節和腕關節之間的距離,我發現這些值在經過的時間內有所不同。防爆。 e-to-w,從18cm到28cm,w-to-h從1cm到15cm。我必須校準我的傳感器嗎?我的Kinect錯了嗎?我認爲這個值我不能識別任何東西。 – Carl 2014-12-05 21:47:10

+0

沒問題。很高興我能幫上忙。你如何測量距離?您需要使用3D點進行測量。你在測量E和W之間的3D矢量嗎?或者你在使用1個或2個軸進行測量? – IntStarFoo 2014-12-07 16:32:55

+0

根據Kinect的3D關節位置(以米爲單位),我計算了從手肘到手腕的歐氏距離,這是3D矢量的範數,由ex。 ElbowRight-To-WristRight = norm(3DWRightRight-3DElbowRight),但正如我所說,在運動過程中,它有很大的波動,這似乎很奇怪。 – Carl 2014-12-08 02:48:28

2

現在頭部相對於頸部軸線的旋轉可以通過兩個肩部的深度來計算。首先計算頸部中心和肩關節之間的深度差(z距離),並獲得頸部中心和肩部之間的差異(x距離),並通過獲得tan值可以得出身體旋轉了多少。