Kinect學習(6)——深度圖與彩色圖配準(學習版2)

本次主要學習兩個使用標定+變換矩陣進行配準的方法,我還沒有實際去做,暫時僅做理論學習。

1、Kinect深度圖與攝像頭RGB的標定與配準

作者:aipiano
作者使用了第三方攝像頭采集RGB圖像,Kinect一代采集深度圖像。

第一步:RGB攝像頭標定
棋盤法:用待標定的攝像頭拍攝多幅不同視角下的棋盤圖片,將這些圖片扔給OpenCV或Matlab,從而計算出該攝像頭的內(nèi)參以及對應于每一幅圖像的外參。

第二步:深度攝像頭的標定
棋盤法:外置紅外光源照射棋盤圖,同時用黑膠帶把Kinect紅外發(fā)射器完全擋住,深度攝像頭獲取多幅紅外圖后,同樣使用OpenCV或MATLAB計算參數(shù)。

第三步:計算內(nèi)參
使用GML Calibration Toolbox計算RGB攝像頭和Kinect深度攝像頭的內(nèi)參。

第四步:配準(核心部分)
這一部分的原理原博講的很清楚,先利用深度攝像頭內(nèi)參矩陣把深度平面坐標(深度圖坐標)轉(zhuǎn)換到深度攝像頭空間坐標,再利用外參計算旋轉(zhuǎn)矩陣和平移矩陣,把深度攝像頭空間坐標轉(zhuǎn)換到RGB攝像頭空間坐標,最后利用RGB攝像頭內(nèi)參矩陣把RGB攝像頭空間坐標轉(zhuǎn)換到RGB平面坐標(RGB圖坐標)。這里只記錄一下最終測試程序的思路:

  1. 獲取Kinect的深度圖像;
  2. 獲取RGB攝像頭的圖像;
  3. 為深度圖像中的每一個像素附上對應的RGB顏色,比如你要給坐標為(x, y)的深度圖像素附上顏色,具體步驟如下;
  4. 構(gòu)造一個三維向量p_ir = (x, y, z),其中x,y是該點的像素坐標,z是該像素的深度值;
  5. 用Kinect內(nèi)參矩陣H_ir的逆,乘以p_ir得到對應的空間點坐標P_ir,具體公式見原文第四部分(配準);
  6. 由于P_ir是該點在Kinect坐標系下的坐標,我們需要將其轉(zhuǎn)換到RGB攝像頭的坐標系下,具體的,就是乘以一個旋轉(zhuǎn)矩陣R,再加上一個平移向量T,得到P_rgb;
  7. 用RGB攝像頭的內(nèi)參矩陣H_rgb乘以P_rgb,得到p_rgb,p_rgb也是一個三維向量,其x和y坐標即為該點在RGB圖像中的像素坐標,取出該像素的顏色,作為深度圖像中對應像素的顏色;
  8. 對深度圖像中的每一個像素都做上述操作,得到配準后的深度圖。

需要注意的是,p_irp_rgb使用的都是齊次坐標,因此在構(gòu)造p_ir時,應將原始的像素坐標(x,y)乘以深度值,而最終的RGB像素坐標必須將p_rgb除以z分量,即(x/z,y/z),且z分量的值即為該點到RGB攝像頭的距離(單位為毫米)。

雖然沒有實際去做,但是感覺很有可操作性,每一步都很具體,從作者的截圖來看效果也不錯。

2、kinect 2.0 SDK學習筆記(四)--深度圖與彩色圖對齊

作者:jiaojialulu
方法、公式和上面都一樣,還有源程序。源程序先不分析了,用到的時候再看。相機參數(shù)計算工具:Camera Calibration Toolbox for Matlab

另外,作者用SDK的MapDepthFrameToColorSpace函數(shù)法和上面這種標定配準法的結(jié)果圖像中都有重復紋理,他分析認為是因為深度攝像頭和彩色攝像頭不重合,導致深度圖上的一部分在實際的場景中不能被彩色攝像頭捕獲,導致附著遮擋物體的紋理。

關(guān)于重復紋理的問題,參考StackOverflow上的一個提問:Kinect for Windows v2 depth to color image misalignment

小結(jié)

深度圖與彩色圖配準的方法:

  • SDK函數(shù):
    MapColorFrameToDepthSpaceMapDepthFrameToColorSpace
  • 標定+坐標空間變換:
    先用棋盤法計算深度相機和RGB相機的內(nèi)參、外參,再按如下順序進行坐標空間轉(zhuǎn)換。(SDK函數(shù)所做的應該就是這部分工作)
    深度平面坐標(深度圖坐標) -> 深度相機空間坐標 -> RGB相機空間坐標 -> RGB平面坐標(RGB圖坐標)
  • 特征匹配:
    利用特征匹配方法匹配兩幅圖的特征點對,進而配準。這種方法還沒有研究。
3/09更新:

在用SDK函數(shù)MapColorFrameToDepthSpace時發(fā)現(xiàn)兩個問題。
1、為了深度圖顯示,往往會擴大深度圖數(shù)據(jù)一定倍數(shù)(我擴大了8倍,即左移3位),這會導致配準結(jié)果不準確,深度圖相對彩色圖有一定偏移。
2、與彩色圖對齊的深度圖兩側(cè)邊緣有弧度,這是不是產(chǎn)生了畸變??

另外,我在重建配準彩色圖的過程中出現(xiàn)了殘影,其原因是每次填充新一幀配準彩色圖時沒有刷新Mat為全0,導致有些無效的像素仍然保留了上一幀的像素。解決方法就是每次填充前重置Mat為全0矩陣。

再另外,使用MapDepthFrameToColorSpace重建配準彩色圖時出現(xiàn)了重影(重復紋理),原因如上面所說,應該是因為深度和彩色相機視角不同,導致(尤其是近處的)遮擋邊緣處,深度相機能獲取,但彩色相機不能獲取,因此此處的深度像素重復對應了遮擋物體邊緣像素。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容