3d模型如何生成點雲數據?
計算機圖形,3d, cg
—————————— 2016.08.11 補充 ————————————
有朋友說obj格式用pcl_mesh2pcd是可以均勻採樣的。我用mesh2pcd一直core dumped,所以沒運行成功過,因此補充。—————————— 2016.07.20 更新 ————————————
請善用搜索引擎,多讀源代碼么么噠。
啃論文時發現了另一種方法,首先生成Depth map,然後再生成點雲,這種方法的好處在於可以設定viewpoint。
(Depth map生成很多庫都可以實現,也有源代碼;Depth 轉點雲,參考PCL庫里的png2pcd,以及 c++ - Converting depth map, stored in a Mat to a point cloud using pcl)圖片來自 Sliding Shapes for 3D Object Detection in Depth Images(ECCV2014)—————————— 正文 ————————————
這問題問得好籠統……我按照我的理解來回答好了。
(我知乎的第一個專業類回答(°////°))首先,最簡單的情況:你的3D模型是*.ply或者*.obj格式的。那麼你可以直接調用PCL庫里的tool,例如:pcl_ply2pcd, pcl_obj2pcd,(劃掉pcl_mesh2pcd). 它的原理就是提取模型mesh的頂點(Vertex)坐標/法向量坐標。
至於*.pcd文件轉成點雲,很簡單,PCL的tutorials里有代碼。其次,如果你的3D模型是其它複雜的格式,比如COLLADA(*.dae),那就稍微麻煩一些。可以調用Assimp庫,它是一個3D模型讀取庫,支持讀取十幾種3D文件: Collada(*.dae;*.xml ) Blender (*.blend) Biovision BVH (*.bvh) 3D Studio Max 3DS (*.3ds) 3D Studio Max ASE (*.ase) AutoCAD DXF ( *.dxf )等。
然後提取你需要的數據,有用數據一般都是3D模型的meshes的頂點坐標和法向量,可以很簡單就轉成*.ply或者*.pcd文件。
最後一個問題是:以上提到的都是提取3D模型的meshes的頂點(Vertex)坐標,對於點雲來說點數不夠,而且在3D模型存在平面或者是簡單立方體的情況下幾乎沒有點。
所以又需要PCL庫了,pcl_mesh_sampling可以輕鬆解決這個問題。它是通過調用VTK(Visualization ToolKit)讀取模型,在3D模型平面均勻地採樣點然後生成點雲,並且你可以選擇需要的點數, 以及voxel grid的採樣距離。以上都是通過使用各種庫,我處理點雲也都是用大神的輪子進行各種拼接,更高端的辦法恕實力不夠暫時想不到。
例圖如下:
我是一隻*.obj格式的愚蠢的模型豬
我是一隻經過pcl_obj2pcd轉換後的愚蠢的點雲豬網站裡面有例子代碼,看看代碼,再讀讀assimp的說明(http://www.assimp.org/lib_html/data.html),整合一下就可以自己寫代碼轉格式了。
Blensor: Blender Sensor Simulation
這是基於Blender的一個插件。和其他答主提到的直接提取點雲數據的方法不同,Blensor是將三維模型導入Blender中然後模擬使用Scanner對三維模型進行掃描。這樣做的好處是和實際掃出來的數據很像,可以方便地選擇掃描的位置、設置多個點雲用於registration、添加noise或者模擬的設備。這些特性在需要toy data進行測試時比較有用。請問maxwell3D模型中的某個平面的數據如何導出呢?謝謝
請問,這個PCL-1.6.0-AllInOne-msvc2010-win64安裝好以後並沒有應用程序,無法進入軟體界面,請問這個軟體如何使用
額 可以分享下 pcl_mesh_sampling 是怎麼實現的嗎 O(∩_∩)O
可以試試點雲重建軟體,好多都可以實現點到ply,ply到離散點
推薦閱讀:
TAG:點雲庫PCL |