1. 从'看'到'分':为什么需要 LCCP 点云分割算法?
在三维视觉和机器人领域,处理过海量点云数据后,发现许多实际场景下经典算法更具优势。例如资源受限的嵌入式设备、高实时性要求的机器人导航或缺乏标注数据的工业质检项目,LCCP 算法往往更稳定且易于调优。
点云分割旨在将数百万个点构成的三维数据划分为代表独立物体的簇,如桌上的水杯或键盘。LCCP(Locally Convex Connected Patches,局部凸连接面片)是解决此问题的有效算法。它发表于 2014 年 CVPR,蕴含的几何思想巧妙,至今在 PCL(点云库)等开源工具中仍是重要的分割工具之一。
其核心思路符合直觉:人眼判断物体归属常依据连接处是'凸'还是'凹'。LCCP 将此数学化。首先通过 VCCS 等方法将点云预处理为超体素,随后检查相邻面片关系,判断连接属性。最终仅连接通过'凸性测试'的面片,形成完整分割。
该算法适用于机器人抓取、自动驾驶障碍物分离及三维建模物体提取等场景,有助于深入理解基于几何的感知原理。
2. 算法核心解密:凸性准则与无效连接判断
LCCP 算法的成败,几乎全系于它对两个相邻面片(超体素)连接关系的判断上。这部分是论文的精华,也是我们调参时需要反复琢磨的地方。它主要依赖两个准则:扩展凸性准则和合理性准则。分别解析如下。
2.1 扩展凸性准则:如何数学化地定义'凸'与'凹'?
扩展凸性准则,是整个 LCCP 判断的基石。它的目标很明确:给定两个相邻的超体素,我们需要一个可计算的数学标准,来判定它们的连接是凸的还是凹的。
首先,我们得有一些基本信息。每个超体素,通过 VCCS 预处理后,我们都能知道它的'心脏'位置(质心坐标)和它'脸'朝向的方向(法向量)。假设我们有两个好邻居,超体素 A 和 B。记 A 的质心为 $\vec{x_1}$,法向量为 $\vec{n_1}$;B 的质心为 $\vec{x_2}$,法向量为 $\vec{n_2}$。连接它们质心的向量就是 $\vec{d} = \vec{x_1} - \vec{x_2}$。
最基础的凸性判断源于一个直观的几何观察。我们计算两个法向量与连接向量 $\vec{d}$ 的夹角。如果连接是凸的(想象两个球体刚刚接触),那么两个法向量都会大致指向连接方向的外侧,并且它们与 $\vec{d}$ 的夹角关系满足一个特定不等式。论文里推导出一个非常简洁的判定式:如果 $(\vec{n_1} - \vec{n_2}) \cdot \vec{d} > 0$,那么我们就认为连接是凸的。这个公式的美妙之处在于它是对称的,交换 A 和 B 的顺序,结果不变。
但是,现实世界充满了噪声。在那些相对平坦的区域,两个超体素的法向量可能几乎平行,理论上 $\beta = |\alpha_1 - \alpha_2|$ 应该接近 0,这时 $(\vec{n_1} - \vec{n_2}) \cdot \vec{d}$ 的值会在 0 附近抖动,导致判断不稳定。可能因为一点点噪声,一个本该属于同一物体的平坦连接就被误判为'凹'而切开了。为了解决这个问题,作者引入了一个超级重要的参数:$\beta_{Thresh}$,中文可以叫'凹度容忍阈值'。
这个阈值的作用就像一个'缓冲区'。当 $\beta < \beta_{Thresh}$ 时,我们认为这两个面片处于'足够平坦'的关系,直接判定它们的连接为有效(凸),不再进行那个点乘判断。这样一来,算法对平坦区域噪声的鲁棒性就大大增强了。所以,基础版的凸性判断 CC_b 逻辑是这样的:
- 情况一:如果 $(\vec{n_1} - \vec{n_2}) \cdot \vec{d} > 0$,判凸。
- 情况二:如果 $\beta < \beta_{Thresh}$,也判凸。
- 其他情况,判凹。
然而,光有 CC_b 还不够强。考虑一种情况:一个轻微的凹面,可能因为噪声或计算误差,侥幸通过了 CC_b 的测试,导致本应分割开的部分被错误地连在了一起。为了应对这种'漏检',作者提出了一个更强的检查——引入第三方见证人。

