2011-06-06 69 views
2

當我運行此Matlab code獲得深度圖像時,我得到的結果是一個480x640的矩陣。最小元素值是0,最大元素值是2711. 2711是什麼意思?這是從相機到圖像最遠部分的距離。但是2711的單位是多少?什麼是從Kinect收到的深度圖像

+0

matlab代碼包裝OpenNI。我不知道深度圖本身,但OpenNI/NITE標準的骨骼,手勢等單位是毫米。深度/ z值實際上是距離原點(這是設備本身)的距離 – Artium 2011-06-12 00:35:58

回答

5

我不知道Matlab代碼對深度有什麼影響,但它可能會對它進行一些處理,因爲Kinect發送的深度是11位,所以它不應該高於2048.嘗試瞭解它的功能,或者訪問由Kinect發送的原始數據。

由Kinect發送的數據不是一個合適的距離(這是一個「不一致」),所以你必須做一些數學轉換爲有用的單位。

OpenKinect project wiki(其中包含有關Kinect的有用信息):

從他們的數據,一個基本的一階 近似爲以釐米爲單位的原始 11位視差值轉換成深度 值是:100 /( - 0.00307 * rawDisparity + 3.33)。這種近似值在距離4米處約爲10釐米,距離在2.5米以內不到2釐米。

更好的近似由 斯特凡Magnenat在this post給出: 距離= 0.1236 * TAN(rawDisparity/ 2842.5 + 1.1863)的米。添加-0.037的最終偏移項中心 原始的ROS數據。近似值的平方和爲 .33釐米,而1/x近似值約爲1.7釐米。

一旦有了使用上述 測定,良好的 近似用於轉換(I,J,Z) 到(x,Y,Z)的距離爲:

x = (i - w/2) * (z + minDistance) * scaleFactor * (w/h) 
y = (j - h/2) * (z + minDistance) * scaleFactor 
z = z 
Where 
minDistance = -10 
scaleFactor = .0021. 
These values were found by hand. 

你可以在ROS website(以及其他許多!)上找到關於Kinect深度相機及其校準的更多細節。

+0

非常感謝您 – John 2011-06-06 15:11:52

+0

對於rawDisparity>〜1100,tan函數是負值http://www.wolframalpha.com/input/?i= y +%3D + .1236 + * + tan%28x +%2F + 2842.5 +%2B + 1.1863%29 +從+ 300 +到+ 2000。我誤解了嗎? – 2011-11-17 04:09:47

+0

哦,我看到第一個大致相同 - 然後我只是不明白這些方程的正確使用。 – 2011-11-17 04:14:36

0

如果您將數據映射到米級,它會稍微壓縮深度圖像。當我試圖在映射數據中查找平面時,發現這是一個問題。