🟠 RANSAC拟合

功能描述

该算子使用RANSAC算法对输入的点云数据进行几何模型拟合,能够拟合如平面、直线、球体和3D圆环等基本几何形状。

RANSAC是一种迭代算法,可以在输入数据中识别“局内点”(即符合模型的点)和“局外点”(即噪声或不符合模型的点),估算出准确的模型拟合参数。

使用场景

  • 几何对象检测:需要在复杂的3D场景中检测和定位特定几何形状的物体(例如,桌面、管道、球形物体、圆形孔洞)时。

  • 点云分割:根据点云是否符合某种几何模型,将其分割成不同的部分。例如,从场景中提取出所有平坦表面。

  • 噪声过滤:通过识别主要的几何结构,可以将不符合该结构的噪声点识别为局外点并进行分离。

  • 参数估计:从点云数据中提取特定几何形状的精确参数,例如平面的方程、球体的中心和半径等。

输入输出

输入项

点云:输入的待进行拟合的点云数据,可以是一个点云或点云列表。

输出项

拟合内部点云:拟合模型的点云(局内点)。

拟合外部点云:不属于拟合模型的点云(局外点)。

方程参数:拟合所得形状的方程参数列表。

  • 平面模型:[a,b,c,d],其中平面方程为ax+by+cz+d=0。(a,b,c)是平面的法向量,d是平面到原点的距离相关的参数。

  • 直线模型:[x,y,z,dx,dy,dz],其中(x,y,z)为直线上一点,(dx,dy,dz)是直线的方向向量。

  • 球模型:[center.x,center.y,center.z,radius],即球心的三维坐标和球的半径。

  • 3D圆环模型:[center.x,center.y,center.z,normal.x,normal.y,normal.z,radius],即圆心的三维坐标、圆平面法向量的三维坐标以及圆环的半径。

结果方向:拟合结果的主要方向向量列表。

  • 平面拟合:返回平面法向量[nx,ny,nz]。

  • 直线拟合:返回直线的方向向量[dx,dy,dz]。

  • 3D圆环拟合:返回圆环所在平面的法向量[nx,ny,nz]。

  • 球形拟合:不返回方向向量。

参数说明

该算子有两个版本:

  • RANSAC拟合:处理不带法向信息的点云。

  • RANSAC拟合(带法向):处理带有法向信息的点云。

两者核心功能和参数完全相同,仅处理的点云数据类型不同。

拟合最少点数

参数说明

每次迭代候选模型至少需要包含的点云点数才被认为是有效的。

调参说明

  • 增大此值:可以确保拟合出的模型是由足够多的点支撑的,有助于避免将噪声点或非常小的点簇误认为有效模型。但也可能导致无法检测到点数较少的真实物体。

  • 减小此值:允许拟合点数较少的模型。更容易检测到小型物体或物体的不完整部分,但也可能更容易受到噪声影响。此值不应小于定义所选几何模型所需的最小点数(例如,平面至少3个点,直线至少2个点)。

参数范围

[1,10000000],默认值:100

拟合最多点数

参数说明

每次迭代候选模型所能包含的最大点云点数。

调参说明

此参数通常用于防止一个非常大的、符合模型的结构(例如一个巨大的平面背景)消耗掉所有点,使得无法检测到其上的其他较小结构。如果主要目标是检测场景中最大的那个符合模型的结构,可以将此值设得非常大。

参数范围

[1,4000000],默认值:4000000

重复次数

参数说明

指的是对输入的每块点云数据,重复执行RANSAC拟合过程的次数。每次重复都有可能找到一个新的、不同的模型实例。一般而言,这个值跟输出结果的组数是对应的,若设为k,则一般会输出k组数据,除非拟合多次后还是拟合不到k个结果,则输出会小于k。

调参说明

  • 设置为1:算子将尝试找到最显著(通常是包含最多局内点)的一个模型实例。

  • 设置大于1:算子将尝试在点云中寻找多个模型实例。例如,如果场景中有多个桌面,增加此值可以帮助检测到所有的桌面。

注意:增加此值会显著增加计算时间。

参数范围

[0,5000],默认值:1

最大迭代次数

参数说明

在单次RANSAC拟合过程(由“重复次数”控制的一次尝试)中,算法进行随机采样和模型验证的最大迭代轮数。

调参说明

  • 增大此值: 算法有更多机会从数据中随机抽取到好的样本点来构建模型,从而增加了找到最佳可能模型的概率,尤其是在局内点比例较低(噪声较多)的情况下,但这会增加计算时间。

  • 减小此值: 计算速度更快,但在噪声较多或模型不明显时,可能无法找到好的模型。

参数范围

[0,100000],默认值:100

损失函数阈值

参数说明

定义了一个距离阈值。如果一个点到当前候选模型的距离小于或等于此阈值,则该点被视为此模型的“局内点”。

调参说明

  • 较小值:要求点必须非常靠近模型才能被接受。这会使得拟合对模型的形状要求更严格,结果更精确,但对噪声和点云的不完美性更敏感,可能会遗漏一些稍远的有效点。

  • 较大值:允许点离模型较远也被接受。这使得算法对噪声和形状偏差的容忍度更高,但也可能导致将一些局外点错误地包含进来,使得模型拟合不够准确。

建议根据点云的密度、噪声水平以及对模型精度的要求来仔细调整此参数。可以从一个适中的值开始,观察拟合结果,然后逐步调整。

参数范围

[0,1000000],默认值:8

拟合模型

参数说明

选择希望从点云中拟合的几何模型类型。

调参说明

根据需求在点云中检测的物体形状进行选择。例如,如果要检测桌面,选择“平面”;如果要检测管道(的一部分),可尝试“直线”(轴向)或后续的“RANSAC拟合(带法向)”中的“圆”。

参数范围

可选:平面、直线、球体、3D圆环

模型方向

参数说明

设置模型的期望主方向。

此参数仅在选择“平面”、“直线”、“3D圆环”模型时生效。对于“平面”模型,此为平面法向量;对于“直线”模型,此为直线方向;对于“3D圆环”模型,此为圆环所在平面的法向量。

调参说明

提供一个大致的参考方向。例如,如果需求是检测一个大致竖直的平面,可以将此参数设置为[0,0,1]或[0,0,-1](假设Z轴向上)。算法会在此参考方向和允许的“轴向浮动范围”(angleEps)内搜索最佳匹配。如果方向完全未知,此参数的约束作用会减弱,可以增大“轴向浮动范围”。

参数范围

[0,0,1]

轴向浮动范围

参数说明

设置拟合出的模型主方向与“模型方向”参数所指定方向之间允许的最大角度偏差。

仅在选择“平面”、“直线”、“3D圆环”模型时生效。

调参说明

  • 较小值(例如5-15°):表示您对模型的方向有较强的先验知识,拟合结果的方向会严格限制在"模型方向"附近。适用于目标方向已知且变化不大的情况。

  • 较大值(例如30-90°):表示模型方向的约束较松,允许在更大范围内搜索方向。适用于目标方向不确定或希望检测更大角度范围内的对象。

参数范围

[0,300],默认值:30,单位:°

半径大小

参数说明

设置期望拟合的“球体”或“3D圆环”的半径大小。

仅在选择“球体”、“3D圆环”模型时生效。

调参说明

提供一个期望半径的估计值,算法会结合“半径浮动范围”(radiusEps)在此估计值附近寻找最佳匹配。

参数范围

[0,10000],默认值:10,单位:mm

半径浮动范围

参数说明

设置拟合出的“球体”或“3D圆环”的半径与“半径大小”(radius)参数所指定半径之间允许的最大偏差。

单位为mm。此参数仅在选择“球体”、“3D圆环”模型时生效。

调参说明

  • 较小值(例如1-5mm):对模型的半径有较精确的估计,拟合结果的半径会严格限制在“半径大小”附近。

  • 较大值(例如10-50mm):表示模型半径的约束较松,允许拟合出半径与预设值有较大差异的模型,适用于半径不确定或希望检测更大半径范围内的对象。

参数范围

[0,300],默认值:5,单位:mm