PCL三维重建笔记
三維重建的三種方法:
KinectFusion,直接獲取人體的三維點云數據,但獲得的點云分散而模糊
Opencv、OpenNI,操作過程過于繁瑣、配置環境過于復雜
利用Processing軟件編程,通過導入SimpleOpenNI庫,連接Kinect就可以直接獲得三維模型
相機標定:
相機標定得到的內參僅僅是對相機物理特性的“近似”
傳統相機標定假設相機是小孔成像模型,一般使用兩種畸變來模擬鏡片的物理畸變。但實際相機的物理特性很可能沒辦法通過上述假設來得到完全的擬合。所以需要意識到,每一次相機標定僅僅只是對物理相機模型的一次近似,再具體一點來說,每一次標定僅僅是對相機物理模型在采樣空間范圍內的一次近似。
文獻查詢:
https://www.zhihu.com/people/gai-yong-hu-wei-zhu-ce-72/activities
1. KinectFusion:
目的在于利用一臺圍繞物體移動的Kinect實時地三維重建。相比于簡單的三維點云拼接,該項目支持GPU加速,快速便捷。另外,如果持續的對物體進行掃描,可以不斷的提高重建
的精度,導出更為準確的三維數據格式文件。Kinect Fusion可以用于工業設計、3D打印機、室內設計、游戲制作、城市規劃等領域。但是該項目對設備的硬件要求較高,基于GPU重建的系統要求支持DirectX 11的顯卡,否則Kinect Fusion就運行不起來。
PCL模塊:
可視化(visualization)、配準(registration)、關鍵點(keypoints)、檢索(search)、輸入/出(io)、濾波(filters)、分割(segmentation)、特征描述與提取(feature)、曲面重建(surface)、八叉樹(octree)、采樣一致性(sample_consensus)、K-d樹(k-d tree)、深度圖(range_image)、通用模塊(common)
基于Kinect的物體三維重建:
Kinect的標定(棋盤標定);3D.X、3D.Y坐標的計算(真實世界坐標);R、G、B坐標的提取;點云數據配準(基于最小二乘法的最優匹配算法—ICP算法);降噪與濾波(均值濾波)
當相機位姿為0時:
當給出5張圖的相機位姿時:
點云融合流程:
2. Kinect點云融合:
二代Kinect相對一代各方面都有了顯著增強,Kinect1通過投射紅外散斑獲取場景的深度信息,Kinect2改進了獲取深度的技術,增加了紅外感應功能,除了深度圖像和彩色圖像,我們還可以直接采集其紅外圖像,這對于Kinect1是非常困難的。Kinect2提供了更高的圖像分辨率(彩色相機達到1920*1080),視覺效果更好,同時SDK中自帶識別手勢、骨骼等特征信息的功能,sample給的小程序也很有趣,有興趣可以體驗一下。多Kinect定點點云融合
關于配置環境,Kinect1運行系統要求至高為windows7,其他要求對于目前的電腦基本沒有壓力,安裝1系列的SDK即可(最高版本1.8);而Kinect2要求較高,運行系統需為windows8或windows10,USB接口必須是3.0,CPU主頻和顯卡不能太差,不然特別卡,目前其SDK只有2.0這個版本。由于Kinect2的特殊要求,暫時不支持單臺電腦同時連接多個Kinect,而Kinect1是可以的。
關于我要做的這個實驗,思路是非常簡單清晰的,主要是點云的拼接配準工作。計劃用三個定點的Kinect完成三個視角下的點云采集,最后完成點云拼接優化。固定好Kinect后,首先要做的是位置的標定,我用雙目標定的方法用Matlab標定工具箱得到不同Kinect坐標系間的旋轉平移矩陣,進而配準點云。在這里我折騰了較長時間,因為起初我用彩色相機采集的圖像進行標定,結果第一個Kinect下采集的點云通過計算的變換矩陣轉到第二個Kinect坐標系根本難以與該視角的點云對齊,后來才發現Kinect的彩色相機和深度相機采集的圖像差別很大,所以轉而尋求對深度圖進行標定。一種方法是改進原來的標定板,因為深度圖中黑白格幾乎沒差,檢測不到角點,需要制作凹凸狀的棋盤格,這無疑很麻煩。后來通過查找資料才發現,對于Kinect2,有一個很方便的功能是可以直接采集紅外圖像,而紅外圖像和深度圖像是對齊的,隨后的標定工作非常順利。用紅外圖像計算的轉換矩陣非常精確的將點云融合到了一起。由于拍攝的是人體模型,這方面就不放圖了。關于點云的轉換,我是通過一段簡單的PCL程序完成的,有些軟件貌似也可以做這項工作。點云融合的程序可在這里下載。
在不同視角點云采集方面,我用的是SDK自帶的一個Kinect Fusion做的sample,將該視角的點云保存為ply格式,后又通過格式轉換轉為pcd格式,作為PCL程序的輸入,輸出同樣是pcd格式,可根據需要再轉為其他格式的點云。做完點云融合后,視需求再做后續渲染工作,比如通過泊松重建算法優化重建模型。
3. 三維點云的拼接:
在三維重建的過程中每次只能測量有限的區域,那么拼接的操作就再所難免了,最終拼接的效果往往覺得了你做的產品是否真的有價值。很多市面上的產品在比較的時候首先看的是整體的重建效果,而整體的效果就是拼接決定的。拼接的效果由精度和效率決定的,首先是精度主要看最終拼接的點云之間融合的好壞,其次的效率,效率主要考察的是在拼接的過程是否流暢,是否需要很多標記點,好的拼接效率就是在使用少量的標記點也能拼接出高精度的效果。
點云配準是指掃描采用裝置獲得的兩組有重復區域的點云數據通過確定一個合適的坐標變換使兩組數據點云在一個統一的坐標系下對齊以及合并。
各類pcd點云數據模型:
https://github.com/PointCloudLibrary/data/tree/master/tutorials
Kinect實時采集場景(未加入RBG圖像):
場景1:
場景2:
其他學習博客:
博客:RGB-D實時重建那點事
http://blog.csdn.net/fuxingyin/article/details/58624264
博客:RGB-D Camera匯總
http://blog.csdn.net/MyArrow/article/details/52678020
博客:三維重建基礎
http://www.itboth.com/d/zUfEJrzMvQFf
Kinect的三維重建
http://www.itboth.com/d/vM7VJbyyEzea
tp://www.itboth.com/d/zUfEJrzMvQFf>
Kinect的三維重建
http://www.itboth.com/d/vM7VJbyyEzea
總結
- 上一篇: Python LDA主题模型实战
- 下一篇: Win10 + Opencv2.4.9