2011-11-25 88 views
2

背景:比較Kinect的深度到OpenGL的深度有效

此問題與對象的3D跟蹤有關。我的系統將已知參數(X,Y,Z)中的對象/樣本投影到OpenGL,並嘗試與從Kinect傳感器獲得的圖像和深度信息進行匹配,以推斷對象的3D位置。

問題:

Kinect的深度 - >流程 - >以毫米爲單位值

OpenGL->深度buffer->值之間0-1

(其是非線性遠近之間映射)

儘管我可以使用http://www.songho.ca/opengl/gl_projectionmatrix.html上提到的方法從OpenGL恢復Z值,但這會產生非常慢的性能。

我相信這是常見的問題,所以我希望一定存在一些切肉刀解決方案。

問:

有效的方式來恢復眼睛z的OpenGL的座標?

或者有沒有其他解決上述問題的方法?

+0

看看OpenCV。我還沒有將它與OpenGL一起使用,但OpenCV幾乎可以實時完成大部分操作。 – Blender

+0

@Blender:你可以指點我的文檔...我也在那裏搜索,但沒有運氣。謝謝! – Rudi

+0

看看[這裏](http://opencv.willowgarage.com/wiki/Kinect)。 – Blender

回答

2

現在我的問題是Kinect的深度在毫米

不,事實並非如此。 Kinect報告它的深度爲任意單位的11位範圍內的值。只有在應用了一些校準之後,才能將深度值解釋爲物理單位。你說得對,OpenGL透視投影深度值是非線性的。

所以如果我正確理解你,你想通過檢索深度緩衝區的內容來模擬Kinect,對吧?然後,最簡單的解決方案是使用頂點和片段着色器的組合,其中頂點着色器將線性深度作爲片段着色器的附加變化傳遞,然後片段着色器用傳遞的值覆蓋片段的深度值。 (你也可以爲此使用額外的渲染目標)。

另一種方法是使用投影到場景深度範圍內的1D紋理,其中紋理值對深度值進行編碼。然後所需的值將在顏色緩衝區中。