3. 点云预处理

原始激光雷达点云往往包含数十万到数百万个三维点,直接送入语义分割网络会带来三个问题:计算量过大、噪声干扰严重、以及地面点与目标点混叠。点云预处理的目标,是在尽量保留语义信息的前提下,把点云整理成“干净、规整、可计算”的输入。本节按处理顺序梳理六个关键环节:滤波、降采样、去噪、地面分割、法向量估计与特征提取。

一、核心原理:预处理是一条有序的信号链

点云预处理不是若干独立操作的堆叠,而是一条有先后依赖的信号链。滤波先剔除明显越界的点,降采样控制点密度,去噪抑制离群点,地面分割把地面与地物分离,法向量估计为每个点提供局部几何方向,特征提取则把邻域几何压缩成可学习的描述子。顺序颠倒会带来副作用:例如先降采样再去噪,可能把噪声点当作邻域中心,污染局部统计量;先做地面分割再降采样,则可能因地面点被抽稀而破坏地面连续性。

点云预处理信号链与关键参数 原始点云 XYZ + 强度 ① 滤波 直通 / 半径 / 统计 ② 降采样 体素栅格 voxel ③ 去噪 SOR / ROR ④ 地面分割 RANSAC / CSF ⑤ 法向量 PCA 邻域 ⑥ 特征提取 FPFH · 曲率 · 线性度 · 平面度 · 垂直度 · 高度 规整点云 + 特征 送入分割网络 典型参数参考 体素边长 0.1–0.3 m | SOR 邻域 20–50、标准差倍数 1.0–2.0 | RANSAC 距离阈值 0.15–0.3 m | 法向量邻域 20–40 点 地面坡度阈值 5°–15° | 高度裁剪 −2.0–0.5 m | 强度阈值按传感器标定

二、方法流程:六个环节的具体做法

滤波用于限定感兴趣区域。直通滤波按 X/Y/Z 或强度设定上下限,快速裁掉车身、雨雾和远处稀疏点;半径滤波删除邻域内点数过少的孤立点;统计滤波则基于邻域距离的均值与标准差判定离群点。

降采样最常用体素栅格法:把空间划分为固定边长的立方体,每个体素内用质心或最近点代表。体素边长是精度与速度的平衡点,0.1 m 保留细节,0.3 m 显著提速但会削弱小目标。

去噪与滤波有重叠,但更强调统计意义上的异常点剔除。统计离群点移除(SOR)计算每个点到 k 个近邻的平均距离,超过全局均值加 n 倍标准差即判为噪声;半径离群点移除(ROR)则直接按邻域点数阈值过滤。

地面分割是语义分割的前置关键。RANSAC 拟合平面适合平坦道路,但坡道与起伏地形易失效;布料模拟滤波(CSF)把点云倒置后让虚拟布料下落,对坡度和台阶更鲁棒。分割后应保留地面点索引,供后续可行驶区域分析使用。

法向量估计对每个点的邻域做 PCA,最小特征值对应的特征向量即法向量方向,需统一朝向(如指向传感器或向上)。特征提取在此基础上计算曲率、线性度、平面度、垂直度、FPFH 等描述子,为网络提供几何先验。

# Open3D 预处理示例
pcd = o3d.io.read_point_cloud("frame.pcd")

# 1. 直通滤波:保留高度 -2.0 ~ 0.5 m
pcd = pcd.crop(o3d.geometry.AxisAlignedBoundingBox(
    (-50, -50, -2.0), (50, 50, 0.5)))

# 2. 体素降采样
pcd = pcd.voxel_down_sample(voxel_size=0.2)

# 3. 统计去噪
pcd, ind = pcd.remove_statistical_outlier(nb_neighbors=30, std_ratio=1.5)

# 4. RANSAC 地面分割
plane, inliers = pcd.segment_plane(
    distance_threshold=0.2, ransac_n=3, num_iterations=1000)
ground = pcd.select_by_index(inliers)
objects = pcd.select_by_index(inliers, invert=True)

# 5. 法向量估计
objects.estimate_normals(
    o3d.geometry.KDTreeSearchParamHybrid(radius=0.5, max_nn=30))
objects.orient_normals_towards_camera_location((0, 0, 0))

三、案例场景:城市道路语义分割前的整理

以 64 线激光雷达采集的城市道路为例,单帧约 12 万点。处理流程为:先按高度裁剪掉车顶以上与地面以下 2 m 的点,剩余约 9 万点;体素 0.2 m 降采样后约 2.4 万点;SOR 去噪剔除约 3% 的雨雾噪点;RANSAC 以 0.2 m 阈值分割地面,得到约 1.1 万地面点与 1.2 万地物点;对地物点估计法向量并计算曲率与高度特征。最终送入网络的张量规模下降约 80%,而车辆、行人、路沿的语义边界基本保留。

若下游网络直接消费原始点,可只做滤波与降采样;若使用基于几何特征的传统方法或需要法向量输入的网络,则必须完成全部六个环节。

四、常见误区与复盘清单

误区后果修正做法
先降采样再去噪噪声点成为邻域中心,统计量失真先去噪,再降采样
体素边长过大行人、锥桶等小目标消失按最小目标尺寸的 1/3 选取
RANSAC 阈值过松路沿、低矮障碍被误判为地面阈值 0.15–0.25 m,配合坡度约束
法向量朝向不统一特征符号翻转,网络难以收敛统一指向传感器或向上
忽略强度与时间戳丢失反射率与运动信息保留 intensity、ring、timestamp 字段
预处理参数没有“万能值”。同一套参数在高速公路与地下车库的表现可能完全相反,建议按场景建立参数档案,并用可视化工具逐帧抽查地面分割与去噪结果。

复盘时可用三个指标快速判断预处理质量:降采样后的点数是否与体素边长匹配、地面点占比是否与场景相符(城市道路通常 30%–50%)、法向量与局部平面的夹角残差是否小于 10°。三者正常,说明点云已具备进入语义分割网络的条件。