2013-06-05 96 views
4

我正在使用紅外視圖和深度視圖在Kinect項目上工作。在紅外視圖中,使用CVBlob庫,我可以提取一些2D興趣點。我想找到這些2D點的深度。所以我認爲我可以直接使用深度視圖,如下所示:Kinect紅外視圖與Kinect深度視圖有偏移

coordinates3D[0] = coordinates2D[0]; 
coordinates3D[1] = coordinates2D[1]; 
coordinates3D[2] = (USHORT*)(LockedRect.pBits) 
[(int)coordinates2D[1] * Width + (int)coordinates2D[0]] >> 3; 

我不認爲這是獲得深度的正確公式。 我能夠在深度視圖中可視化2D興趣點。如果我在紅外視圖中得到一個點(x,y),那麼我在深度視圖中將它繪製爲(x,y)
的深度視圖中的紅色點我注意到紅色點並不是我期望它們的位置一個東西)。他們的位置存在系統性錯誤。

我認爲深度視圖和紅外視圖具有一對一的對應關係,不同於顏色視圖和深度視圖之間的對應關係。
這是真的,還是IR和深度視圖之間有偏移?如果有偏移量,我能以某種方式獲得正確的深度值嗎?

回答

3

深度並且顏色流不是從同一點獲取的,因此它們不完美地相互對應。他們的視場(視野)也不同。

  1. 相機

    • IR /深度FOV 58.5°X 45.6°
    • 顏色FOV 62.0°X 48.6°
    • 相機25毫米之間距離
  2. 我更正了這兩個流的640x480分辨率

    if (valid depth) 
    { 
    ax=(((x+10-xs2)*241)>>8)+xs2; 
    ay=(((y+30-ys2)*240)>>8)+ys2; 
    } 
    
    • x,y在座標深度圖像
    • ax,ay超出座標彩色圖像
    • xs,ys = 640,480
    • xs2,ys2 = 320,240

    ,你可以看到我的Kinect的已也是奇怪的y偏移量(甚至大於x偏移量)。我的轉換效果很好,航程達2 m我沒有進一步的措施,但它應該工作甚則

  3. 不要忘了來糾正從深度和深度圖像空間座標系座標

    pz=0.8+(float(rawdepth-6576)*0.00012115165336374002280501710376283); 
    px=-sin(58.5*deg*float(x-xs2)/float(xs))*pz; 
    py=+sin(45.6*deg*float(y-ys2)/float(ys))*pz; 
    pz=-pz; 
    
    • 其中px,py,pz是[m]中的點座標,相對於kinect

    我使用Z方向相反的相機座標系因此符號的否定

PS。我有舊型號1414,所以新型號可能有不同的校準參數

0

「紅外視圖」和「深度視圖」之間沒有偏移。主要是因爲它們是相同的東西。

Kinect有2臺攝像機。一臺RGB彩色攝像機和一臺深度攝像機,它使用紅外發射器產生處理數據時使用的場光場。這些給你一個彩色視頻流和一個深度數據流;沒有與深度數據分開的「IR視圖」。

enter image description here

UPDATE:

它們實際上是一回事。你所說的「深度視圖」僅僅是「IR視圖」的彩色版本;黑白圖像是「原始」數據,而彩色圖像是相同數據的處理版本。

Kinect for Windows Toolkit,看看KinectWpfViewers項目(如果你安裝了KinectExplorer-WPF的例子,它應該在那裏)。其中有KinectDepthViewerDepthColorizer類。他們將演示如何創建彩色「深度視圖」。

更新2:

每下面的評論我在前面已經說幾乎完全是垃圾。我很可能會去編輯它,或者在不久的將來全面刪除我的答案,直到那時它才能證明我曾經無效的信仰來自哪裏。

反正...看看CoordinateMapper類是另一種可能的解決方案。該鏈接將帶您到託管代碼文檔(這是我熟悉的),我正在查看C++文檔,看看我能否找到相同的。

我用它來映射標準顏色和深度視圖。它也可以映射紅外視圖(我不明白爲什麼),但我不是100%確定的。

+0

感謝您的回覆。實際上,有一個獨立於深度視圖的獨特IR視圖。我將發佈顯示兩個視圖的標準Kinect Explorer應用程序的屏幕截圖。通過並排查看圖像,它們似乎與無偏移量具有一對一的對應關係;我想確認這是一個事實,而不僅僅是一個觀察。 –

+0

我已根據您的圖片發佈更新了我的答案。 –

+0

深度視圖可用於推斷位置(x,y)處的深度,而IR視圖不能用於直接進行此操作。通過將紅外圖像與標準斑點圖案進行比較來處理紅外圖像來推斷深度,然後顯示紅外圖像,以便深度視圖中的像素強度顯示物理深度。因此,將深度視圖稱爲IR視圖的彩色版本並不準確。此外,紅外視圖是由Kinect的紅外接收器捕獲的真實圖像,可用於計算機視覺算法,而深度視圖主要用於僅推測深度。 –

0

此代碼從Kinect的縴夫的許多職位:

coordinates3D[0] = coordinates2D[0]; 
coordinates3D[1] = coordinates2D[1]; 
coordinates3D[2] = (USHORT*)(LockedRect.pBits) 
[(int)(coordinates2D[1] + 23) * Width + (int)coordinates2D[0]] >> 3;