把点云投影到地面, 根据每个区域内部的点的 高程变化,以及点数量统计 判断分类地面点和障碍物点 地面的区域高度变化小, 障碍物的区域高度变化大, 主要根据这个特征
适合室外场景的地面去除,不适合单个复杂点云模型的地面去除,可以多加尝试,调整里面的高差阈值参数
import open3d as o3d
import os
import numpy as np
# Load saved point cloud and visualize it
pcd_load = o3d.io.read_point_cloud("rabbit.pcd")
# convert Open3D.o3d.geometry.PointCloud to numpy array
xyz_load = np.asarray(pcd_load.points)
# o3d.visualization.draw_geometries([pcd_load])
print("数组的维度数目",xyz_load.ndim)
def remove_ground_by_grid_diff(target_np_noised):
"""
根据高程变化,以及点数量统计判断分类地面点和障碍物点
:param target_np_noised:
:return:
"""
leafsize = 0.25
x_min = np.min(target_np_noised[:, 0])
x_max = np.max(target_np_noised[:, 0])
y_min = np.min(target_np_noised[:, 1])
y_max = np.max(target_np_noised[:, 1])
# vis_point_rang