大盘点!汇总点云分割算法,涉及RANSAC、欧式聚类、区域增长等

这篇具有很好参考价值的文章主要介绍了大盘点!汇总点云分割算法,涉及RANSAC、欧式聚类、区域增长等。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者:PCIPG-zzl | 来源:计算机视觉工坊

添加微信:dddvisiona,备注:3D点云,拉你入群。文末附行业细分群。

点云分割优化,算法,聚类,数据挖掘,机器学习,人工智能

1 什么是点云分割

点云分割的目标是将点云数据中的点分成不同的组或类别,使每个组中的点都属于同一种物体或区域。根据空间,几何和纹理等特征对点云进行划分,使同一划分内的点云拥有相似的特征。点云分割的目的是分块,从而便于单独处理。分割过程有助于从各个方面分析场景,例如定位和识别对象、分类和特征提取。

点云的有效分割是许多应用的前提

  • 工业测量/逆向工程:对零件表面提前进行分割,再进行后续重建、计算特征等操作。

  • 遥感领域:对地物进行提前分割,再进行分类识别等工作

点云分割优化,算法,聚类,数据挖掘,机器学习,人工智能
image.png

2 点云分割、分类和实例分割概念区分

点云分类(Point Cloud Classification):点云分类是将点云中的每个点分配到预定义的类别或标签中的任务。点云分类可用于识别点云中的不同物体或地物,例如识别建筑物、树木、汽车等。为每个点分配一个语义标记。点云的分类是将点云分类到不同的点云集。同一个点云集具有相似或相同的属性,例如地面、树木、人等。点云分类也叫做点云语义分割。实例分割(Instance Segmentation):实例分割是一种更高级的任务,它不仅要求识别点云中的不同物体或类别,还需要为每个物体中的每个点分配一个唯一的标识符,以区分不同实例。这使得实例分割能够精确地区分出多个相同类别的物体,例如在一个点云场景中区分出多辆汽车或多棵树。点云语义分割是指把一个大规模场景下的点云按照不同的类别给每个点云一个语义标签,比如城市高速公路,所有的路灯会有一个相同的语义标签,所有的路面会有 一个相同的语义标签,所有的树木会有同一个语义标签。点云实例分割是在语义分割的基础之上,把所有的路灯再一个一个分开,区别出来每一个路灯。这里也推荐「3D视觉工坊」新课程《三维点云处理:算法与实战汇总》。

3 常见的点云分割算法

3.1 RANSAC算法

(Random Sample Consensus)随机采样一致性算法,采用迭代的方式从一组包含离群的被观测数据中估算出数学模型的参数。RANSAC算法假设数据中包含正确数据和异常数据(或称为噪声),正确数据记为内点(inliers),异常数据记为外点(outliers)点云分割优化,算法,聚类,数据挖掘,机器学习,人工智能该算法核心思想就是随机性和假设性:随机性是根据正确数据出现概率去随机选取抽样数据,根据大数定律,随机性模拟可以近似得到正确结果。假设性是假设选取出的抽样数据都是正确数据,然后用这些正确数据通过问题满足的模型,去计算其他点 ,然后对这次结果进行一个评分。算法流程

  1. 要得到一个直线模型,需要两个点唯一确定一个直线方程。所以第一 步随机选择两个点。

  2. 通过这两个点,可以计算出这两个点所表示的模型方程y=ax+b。

点云分割优化,算法,聚类,数据挖掘,机器学习,人工智能

image.png
  1. 将所有的数据点套到这个模型中计算误差。

  2. 找到所有满足误差阈值的点。

点云分割优化,算法,聚类,数据挖掘,机器学习,人工智能

image.png
  1. 然后我们再重复1~4这个过程,直到达到一定迭代次数后,选出那个被 支持的最多的模型,作为问题的解。

点云分割优化,算法,聚类,数据挖掘,机器学习,人工智能

image.png

RANSAC算法与最小二乘法区别RANSAC 算法适用性:RANSAC主要用于处理包含噪音和异常值的数据集。它通过随机采样和迭代的方式来找到最佳拟合模型,忽略了外点的影响,因此在数据中含有大量噪音或少量异常值的情况下表现较好。步骤:RANSAC通过随机选择内点样本进行模型拟合,并通过计算内点和模型之间的误差来判断外点。它迭代地选择具有最大内点数的模型作为最终拟合模型。优点:鲁棒性较强,能够在存在噪音和异常值的情况下仍然得到合理的模型估计。最小二乘法适用性:最小二乘法假设数据中的噪音较小,且异常值较少。它通过最小化数据点与模型之间的误差平方和来得到最佳拟合模型,适用于数据比较干净的情况。求解:最小二乘法可以直接求解或优化模型参数的解析解,对于线性问题尤其有效。然而,在存在较多噪音或异常值时,最小二乘法容易受到这些数据点的影响,导致估计结果不准确。优点:在数据相对干净,噪音较小的情况下,最小二乘法能够得到精确的模型估计。RANSAC算法被广泛应用在计算机视觉领域和数学领域,例如直线拟合、平面拟合、计算图像或点云间的变换矩阵、计算基础矩阵等方面,使用的非常多。总之,RANSAC和最小二乘法适用于不同类型的数据情况。RANSAC适用于含有噪音和异常值的数据,能够通过迭代的方式找到鲁棒性较强的模型。最小二乘法适用于相对干净的数据,能够得到精确的模型估计,但容易受到噪音和异常值的影响。在实际应用中,根据数据的特点选择合适的方法以获得准确的模型估计。

pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients);
pcl::PointIndices::Ptr inliers(new pcl::PointIndices);  //inliers用来存储直线上点的索引
pcl::SACSegmentation<pcl::PointXYZ> seg;//创建一个分割器
seg.setOptimizeCoefficients(true);      //可选择配置,设置模型系数需要优化
seg.setModelType(pcl::SACMODEL_LINE);   //设置目标几何形状
seg.setMethodType(pcl::SAC_RANSAC);     //拟合方法:随机采样法
seg.setDistanceThreshold(0.05);         //设置误差容忍范围,也就是阈值
seg.setMaxIterations(500);              //最大迭代次数,不设置的话默认迭代50次
seg.setInputCloud(cloud);               //输入点云
seg.segment(*inliers, *coefficients);   //拟合点云

3.2 欧式聚类算法

欧式聚类算法(Euclidean Clustering)是一种将点云数据分割成不同聚类(簇)的算法。它是点云分割中的一种常用方法,旨在将距离比较近的点分为同一簇,从而识别出不同的物体或结构。这个算法主要适用于包含较小噪音和具有一定距离差异的点云数据。基本思想

  1. 选择一个种子点(Seed Point)作为当前簇的起始点。

  2. 遍历所有未分类的点,计算它们与种子点的距离。如果距离小于设定的阈值,将其归为同一簇。

  3. 对于同一簇中的点,重复步骤2,将与当前簇内任一点距离小于阈值的点加入簇。

  4. 切换到下一个未分类的点,作为新的种子点,继续重复步骤2和3。

  5. 当所有点都被分类为某个簇,聚类过程结束。

pcl::search::KdTree<pcl::PointXYZ>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZ>);
tree->setInputCloud (cloud_filtered);

std::vector<pcl::PointIndices> cluster_indices;
pcl::EuclideanClusterExtraction<pcl::PointXYZ> ec;
ec.setClusterTolerance (0.02); // 2cm
ec.setMinClusterSize (100);
ec.setMaxClusterSize (25000);
ec.setSearchMethod (tree);
ec.setInputCloud (cloud_filtered);
ec.extract (cluster_indices);

一个桌子的场景图经过欧式聚类算法效果如下图所示。点云分割优化,算法,聚类,数据挖掘,机器学习,人工智能

3.3 区域增长算法

区域生长算法(Region Growing)是一种用于图像处理和分割的算法,主要用于将点云中的点分成不同的区域,从而识别出具有相似特性的区域。区域生长算法基于相似性原则,将相似度高的点聚集在一起,形成连续的区域。算法步骤:1.初始化:选择一个种子点,并将其标记为“已访问”。2.根据设定的相似性准则,计算当前点与种子的相似度。3.如果当前点与种子相似度超过设定阈值,则将其标记为当前区域的一部分,并将其加入当前区域。4.遍历当前点的邻居(相邻点),对每个邻居执行以下步骤:如果邻居未被访问过且与当前区域的相似度超过设定阈值,则将其标记为“已访问”并添加到当前区域。递归地对邻居的邻居进行相似性判断,将相似的像素或点添加到当前区域。5.重复步骤4,直到当前区域不能再生长为止。6.如果还存在未访问的点,选择一个未访问的点作为新的种子,重复上述步骤。7.当所有点都被分配到区域后,分割过程结束。这里也推荐「3D视觉工坊」新课程《三维点云处理:算法与实战汇总》。

pcl::RegionGrowing<pcl::PointXYZ, pcl::Normal> reg;
reg.setMinClusterSize (50);
reg.setMaxClusterSize (1000000);
reg.setSearchMethod (tree);
reg.setNumberOfNeighbours (30);
reg.setInputCloud (cloud);
reg.setIndices (indices);
reg.setInputNormals (normals);
reg.setSmoothnessThreshold (3.0 / 180.0 * M_PI);
reg.setCurvatureThreshold (1.0);

算法是针对小曲率变化面设计的,尤其适合对连续阶梯平面进行分割

4 参考资料

https://blog.csdn.net/luolaihua2018/article/details/120113848https://pcl.readthedocs.io/projects/tutorials/en/master/index.html#sample-consensus

—END—

高效学习3D视觉三部曲

第一步 加入行业交流群,保持技术的先进性

目前工坊已经建立了3D视觉方向多个社群,包括SLAM、工业3D视觉、自动驾驶方向,细分群包括:[工业方向]三维点云、结构光、机械臂、缺陷检测、三维测量、TOF、相机标定、综合群;[SLAM方向]多传感器融合、ORB-SLAM、激光SLAM、机器人导航、RTK|GPS|UWB等传感器交流群、SLAM综合讨论群;[自动驾驶方向]深度估计、Transformer、毫米波|激光雷达|视觉摄像头传感器讨论群、多传感器标定、自动驾驶综合群等。[三维重建方向]NeRF、colmap、OpenMVS等。除了这些,还有求职、硬件选型、视觉产品落地等交流群。大家可以添加小助理微信: dddvisiona,备注:加群+方向+学校|公司, 小助理会拉你入群。

添加小助理微信:cv3d007, 拉你入群
第二步 加入知识星球,问题及时得到解答

针对3D视觉领域的视频课程(三维重建、三维点云、结构光、手眼标定、相机标定、激光/视觉SLAM、自动驾驶等)、源码分享、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答等进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业、项目对接为一体的铁杆粉丝聚集区,6000+星球成员为创造更好的AI世界共同进步,知识星球入口:「3D视觉从入门到精通」

学习3D视觉核心技术,扫描查看,3天内无条件退款

高质量教程资料、答疑解惑、助你高效解决问题
第三步 系统学习3D视觉,对模块知识体系,深刻理解并运行

如果大家对3D视觉某一个细分方向想系统学习[从理论、代码到实战],推荐3D视觉精品课程学习网址:www.3dcver.com

科研论文写作:

[1]国内首个面向三维视觉的科研方法与学术论文写作教程

基础课程:

[1]面向三维视觉算法的C++重要模块精讲:从零基础入门到进阶

[2]面向三维视觉的Linux嵌入式系统教程[理论+代码+实战]

[3]如何学习相机模型与标定?(代码+实战)

[4]ROS2从入门到精通:理论与实战

[5]彻底理解dToF雷达系统设计[理论+代码+实战]

工业3D视觉方向课程:

[1](第二期)从零搭建一套结构光3D重建系统[理论+源码+实践]

[2]保姆级线结构光(单目&双目)三维重建系统教程

[3]机械臂抓取从入门到实战课程(理论+源码)

[4]三维点云处理:算法与实战汇总

[5]彻底搞懂基于Open3D的点云处理教程!

[6]3D视觉缺陷检测教程:理论与实战!

SLAM方向课程:

[1]深度剖析面向机器人领域的3D激光SLAM技术原理、代码与实战

[1]彻底剖析激光-视觉-IMU-GPS融合SLAM算法:理论推导、代码讲解和实战

[2](第二期)彻底搞懂基于LOAM框架的3D激光SLAM:源码剖析到算法优化

[3]彻底搞懂视觉-惯性SLAM:VINS-Fusion原理精讲与源码剖析

[4]彻底剖析室内、室外激光SLAM关键算法和实战(cartographer+LOAM+LIO-SAM)

[5](第二期)ORB-SLAM3理论讲解与代码精析

视觉三维重建

[1]彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进)

自动驾驶方向课程:

[1] 深度剖析面向自动驾驶领域的车载传感器空间同步(标定)

[2] 国内首个面向自动驾驶目标检测领域的Transformer原理与实战课程

[3]单目深度估计方法:算法梳理与代码实现

[4]面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)

[5]如何将深度学习模型部署到实际工程中?(分类+检测+分割)

最后

1、3D视觉文章投稿作者招募

2、3D视觉课程(自动驾驶、SLAM和工业3D视觉)主讲老师招募

3、顶会论文分享与3D视觉传感器行业直播邀请文章来源地址https://www.toymoban.com/news/detail-761997.html

到了这里,关于大盘点!汇总点云分割算法,涉及RANSAC、欧式聚类、区域增长等的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机视觉的几个经典算法 —— 最小二乘法 + RANSAC + 哈希算法(附DCT) + 图像聚类算法

    在了解最小二乘法之前,我们有必要先说说线性回归,所谓线性回归我们最常见的例子y=2x这个一元线性回归方程中,斜率2就是回归系数,它表示的是x变动时,y与之对应的关系,而线性回归就是表示一些离散的点在总体上是最逼近某一条直线的 这跟最小二乘法有啥关系呢?

    2024年02月08日
    浏览(44)
  • 随机采样一致性(RANSAC)三维点云的平面拟合算法(含C++代码)

            随机采样一致性(Random sample consensus,RANSAC) :RANSAC是一种鲁棒的模型拟合方法,它可以处理存在大量噪声和异常值的数据。在进行平面拟合时,RANSAC会随机选择三个点,然后计算这三个点确定的平面模型。然后,RANSAC会计算其他所有点到这个平面的距离,并根据

    2024年02月07日
    浏览(42)
  • PCL 改进快速欧式聚类

      【论文复现】——FEC: Fast Euclidean Clustering for Point Cloud Segmentation一文严格按照论文中描述的方法进行算法的复现,未添加点云聚类分割方法中通用的约束条件阈值。本文对代码中该不足之处进行优化改进。 FastEuclideanCluster.h

    2024年02月16日
    浏览(48)
  • PCL源码剖析 -- 欧式聚类

    参考 : 1. pcl Euclidean Cluster Extraction教程 2. 欧式聚类分析 3. pcl-api源码 4. 点云欧式聚类 5. 本文完整工程地址 聚类方法需要将无组织的点云模型P划分为更小的部分,以便显著减少P的总体处理时间。欧式空间的简单数据聚类方法可以利用 固定宽度box 的3D网格划分或者一般的 八

    2024年02月06日
    浏览(34)
  • PCL 欧式聚类(C++详细过程版)

      欧式聚类PCL里经典的点云聚类分割算法,具体算法原理和实现代码见:PCL 欧式聚类分割。为充分了解算法实现的每一个细节和有待改进的地方,使用C++代码对算法实现过程进行复现。 注意: 该算法的实现过程中,加入多线程可能会得到错误的结果。因此,未进行多线程

    2024年02月14日
    浏览(39)
  • 毫米波雷达点云 DBSCAN聚类算法

    聚类的目的是将一组数据点划分为具有相似特征或属性的组或簇。通过聚类分析,我们可以识别出数据中的内在模式、结构和关联关系,从而获得对数据的更深入理解。 具体来说,聚类的目的可以分为以下三部分: 发现数据的内在结构: 聚类可以将数据分成簇,这些簇可能

    2024年02月06日
    浏览(46)
  • 点云分割-pcl区域生长算法

    1、本文内容 pcl的区域生长算法的使用和原理 2、平台/环境 cmake, pcl 3、转载请注明出处: https://blog.csdn.net/qq_41102371/article/details/131927376 参考:https://pcl.readthedocs.io/projects/tutorials/en/master/region_growing_segmentation.html#region-growing-segmentation https://blog.csdn.net/taifyang/article/details/124097186

    2024年02月15日
    浏览(42)
  • 基于深度学习方法的点云算法5——PointConv(点云分类分割)

    请点点赞,会持续更新!!! 基于深度学习方法的点云算法1——PointNetLK(点云配准) 基于深度学习方法的点云算法2——PointNet(点云分类分割) 基于深度学习方法的点云算法3——PointNet++(点云分类分割) 基于深度学习方法的点云算法4——PCT: Point Cloud Transformer(点云分类

    2024年02月06日
    浏览(45)
  • 点云补全算法汇总

    点云补全就是希望基于观察到的残缺不全的点云生成完整的 3D 点云。由于扫描或者距离的原因导致点云局部缺失,对其进行补全,传统算法可能会补不完整,也可能会补的过于完整。 今天这里要讲的是PF-Net: Point Fractal Network for 3D Point Cloud Completion,整体网络模型: 骨骼点逐

    2024年02月03日
    浏览(18)
  • PCL 使用LCCP算法进行点云分割

      LCCP是Locally Convex Connected Patches的缩写,算法大致可以分成两个部分: 基于超体聚类的过分割。 在超体聚类的基础上再聚类。 /

    2024年02月12日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包