基於三個kinect的人體建模


   單個 kinect的人體重建,在Kinect SDK 1.8中,Kinect Fusion的效果已經很不錯了。其缺點顯而易見,一是掃描時間長,重建對象也需要長時間保持靜態;二是需要人體或者kinect轉動以實現全方位掃描,操作起來繁瑣。而運用三個kinect來進行人體重建,只需要將三個kinect按照一定方位(比如兩兩相距120°角度)固定位置,人體即使不動也能實現對人體的全身掃描,相比之下時間花銷短。

    基於三個kinect的人體重建,首先要對三個kinect相機進行標定,得到相機內外參數。這樣每個相機看到空間一點的坐標是一致的,三個相機坐標系得以統一。標定方法是兩兩標定,即取某一kinect相機(記為A)為參考,其他兩個(記為B、C)分別與A標定,得到兩組相機參數。這里,我是用的matlab自帶的標定方法stereoCameraCalibrator,見鏈接matlab。例如,用兩個處於同一水平線的kinect(如下圖所示)進行標定測試,得到的參數是旋轉矩陣R為:

0.9949 -0.0196   0.0991
0.0235 0.9990  -0.0384
-0.0983 0.0405    0.9943

    平移向量T為:

-280.5068  2.5255   -25.4387

    由標定結果可以看出,R矩陣接近於單位矩陣,表明兩相機位置上是基本平行的。平移向量中-280.5068表示兩相機x方向距離為28cm,而x方向的實際距離為26~27cm,這說明標定精度還是比較可靠的。

    標定之后可以得到兩組相機參數(旋轉矩陣和平移向量),這在之后的點雲拼接中會有用。

 

點雲獲取


 

 

     通過sdk中內置的轉換函數,將由kinect獲取到的深度圖像轉換為點雲數據,並保存。如下圖所示為一個角度獲取的點雲。

 

 

點雲處理

      由於點雲的數據量非常龐大,並且存在着冗余數據和噪聲干擾,增加了計算復雜度。因此在點雲拼接之前需要預先對點雲進行處理。這其中的關鍵問題是提取點雲數據中能反映曲面特征的點,精簡數據並且去除噪聲,提高重建的精度和效率。去噪方法是聯合雙邊濾波算法

點雲拼接 

      三維點雲拼接實質是將不同坐標系下得到的數據點雲進行坐標變換,通過兩片或多片數據點雲中找出正確的排列關系,拼接成一片完整的數據點雲。其中的關鍵問題就是利用旋轉矩陣和平移矩陣,通過ICP算法對點雲進行配准。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM