基於三個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算法對點雲進行配准。