天天看點

雷射雷達(LiDAR)| Open3D:第四節 表面重建之凸包法convex hull1. convex hull法2. 實作過程

本節基于Open3D中的凸包法實作點雲的表面重建
雷射雷達(LiDAR)| Open3D:第四節 表面重建之凸包法convex hull1. convex hull法2. 實作過程

1. convex hull法

convex hull凸包法:是包含所有點的集合的最小凸包,基于Qhull思想來實作。

1.1 加載資料

# 加載包
import open3d as o3d
import numpy as np

# 讀取點雲
pcd = o3d.io.read_point_cloud("./tree/Tree_singel.pcd")
pcd.paint_uniform_color([0.5, 0.5, 0.5])  # 渲染為灰色
o3d.visualization.draw_geometries([pcd],width = 700, height = 900)
           
雷射雷達(LiDAR)| Open3D:第四節 表面重建之凸包法convex hull1. convex hull法2. 實作過程

2. 實作過程

2.1 計算過程

采用

compute_convex_hull

函數來計算點雲凸包,然後通過

create_from_triangle_mesh

以以三角形網格的形式傳回。

hull, idx = pcd.compute_convex_hull()
hull_ls = o3d.geometry.LineSet.create_from_triangle_mesh(hull) # 生成三角網
hull_ls.paint_uniform_color((1, 0, 0))  
o3d.visualization.draw_geometries([pcd, hull_ls]) # 同時顯示兩組點雲
           
雷射雷達(LiDAR)| Open3D:第四節 表面重建之凸包法convex hull1. convex hull法2. 實作過程

2.1 擷取凸包頂點

# hull, idx = pcd.compute_convex_hull()
hull_cloud = pcd.select_by_index(idx)
hull_cloud.paint_uniform_color((0, 0, 1))  
o3d.visualization.draw_geometries([hull_ls,hull_cloud, pcd]
           
雷射雷達(LiDAR)| Open3D:第四節 表面重建之凸包法convex hull1. convex hull法2. 實作過程
雷射雷達(LiDAR)| Open3D:第四節 表面重建之凸包法convex hull1. convex hull法2. 實作過程