点云分割

https://www.cnblogs.com/xingshansi/p/6763668.html

一、RANSAC理论介绍

普通最小二乘是保守派:在现有数据下,如何实现最优。是从一个整体误差最小的角度去考虑,尽量谁也不得罪。

RANSAC是改革派:首先假设数据具有某种特性(目的),为了达到目的,适当割舍一些现有的数据。

给出最小二乘拟合(红线)、RANSAC(绿线)对于一阶直线、二阶曲线的拟合对比:

可以看到RANSAC可以很好的拟合。RANSAC可以理解为一种采样的方式,所以对于多项式拟合、混合高斯模型(GMM)等理论上都是适用的。

输入:
data —— 一组观测数据
model —— 适应于数据的模型
n —— 适用于模型的最少数据个数
k —— 算法的迭代次数
t —— 用于决定数据是否适应于模型的阀值
d —— 判定模型是否适用于数据集的数据数目
输出:
best_model —— 跟数据最匹配的模型参数(如果没有找到好的模型,返回null)
best_consensus_set —— 估计出模型的数据点
best_error —— 跟数据相关的估计出的模型错误

RANSAC简化版的思路就是:

第一步:假定模型(如直线方程),并随机抽取Nums个(以2个为例)样本点,对模型进行拟合:

第二步:由于不是严格线性,数据点都有一定波动,假设容差范围为:sigma,找出距离拟合曲线容差范围内的点,并统计点的个数:

第三步:重新随机选取Nums个点,重复第一步~第二步的操作,直到结束迭代:

第四步:每一次拟合后,容差范围内都有对应的数据点数,找出数据点个数最多的情况,就是最终的拟合结果

至此:完成了RANSAC的简化版求解。

这个RANSAC的简化版,只是给定迭代次数,迭代结束找出最优。如果样本个数非常多的情况下,难不成一直迭代下去?其实RANSAC忽略了几个问题:

  • 每一次随机样本数Nums的选取:如二次曲线最少需要3个点确定,一般来说,Nums少一些易得出较优结果;
  • 抽样迭代次数Iter的选取:即重复多少次抽取,就认为是符合要求从而停止运算?太多计算量大,太少性能可能不够理想;
  • 容差Sigma的选取:sigma取大取小,对最终结果影响较大;

  

以下内容转自:https://www.cnblogs.com/ironstark/p/4998037.html

点云分割可谓点云处理的精髓,也是三维图像相对二维图像最大优势的体现。不过多插一句,自Niloy J Mitra教授的Global contrast based salient region detection出现,最优分割到底鹿死谁手还不好说。暂且不论他开挂的图像处理算法,先安心做一个PCL吹~

  点云分割的目的提取点云中的不同物体,从而实现分而治之,突出重点,单独处理的目的。而在现实点云数据中,往往对场景中的物体有一定先验知识。比如:桌面墙面多半是大平面,桌上的罐子应该是圆柱体,长方体的盒子可能是牛奶盒......对于复杂场景中的物体,其几何外形可以归结于简单的几何形状。这为分割带来了巨大的便利,因为简单几何形状是可以用方程来描述的,或者说,可以用有限的参数来描述复杂的物体。而方程则代表的物体的拓扑抽象。于是,RanSaC算法可以很好的将此类物体分割出来。

RanSaC算法

  RanSaC算法(随机采样一致)原本是用于数据处理的一种经典算法,其作用是在大量噪声情况下,提取物体中特定的成分。下图是对RanSaC算法效果的说明。图中有一些点显然是满足某条直线的,另外有一团点是纯噪声。目的是在大量噪声的情况下找到直线方程,此时噪声数据量是直线的3倍。

  如果用最小二乘法是无法得到这样的效果的,直线大约会在图中直线偏上一点。关于随机采样一致性算法的原理,在wiki百科上讲的很清楚,甚至给出了伪代码和matlab,C代码。见网址https://en.wikipedia.org/wiki/RANSAC. 我想换一个不那么严肃或者说不那么学术的方式来解释这个算法。

  实际上这个算法就是从一堆数据里挑出自己最心仪的数据。所谓心仪当然是有个标准(目标的形式:满足直线方程?满足圆方程?以及能容忍的误差e)。平面中确定一条直线需要2点,确定一个圆则需要3点。随机采样算法,其实就和小女生找男朋友差不多。

  1. 从人群中随便找个男生,看看他条件怎么样,然后和他谈恋爱,(平面中随机找两个点,拟合一条直线,并计算在容忍误差e中有多少点满足这条直线)
  2. 第二天,再重新找个男生,看看他条件怎么样,和男朋友比比,如果更好就换新的(重新随机选两点,拟合直线,看看这条直线是不是能容忍更多的点,如果是则记此直线为结果)
  3. 第三天,重复第二天的行为(循环迭代)
  4. 终于到了某个年龄,和现在的男朋友结婚(迭代结束,记录当前结果)

  显然,如果一个女生按照上面的方法找男朋友,最后一定会嫁一个好的(我们会得到心仪的分割结果)。只要这个模型在直观上存在,该算法就一定有机会把它找到。优点是噪声可以分布的任意广,噪声可以远大于模型信息。

  这个算法有两个缺点,第一,必须先指定一个合适的容忍误差e。第二,必须指定迭代次数作为收敛条件。

  综合以上特性,本算法非常适合从杂乱点云中检测某些具有特殊外形的物体。

PCL中基于RanSaC的点云分割方法

  PCL支持了大量几何模型的RanSaC检测,可以非常方便的对点云进行分割。其调用方法如下:

  //创建一个模型参数对象,用于记录结果pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients);//inliers表示误差能容忍的点 记录的是点云的序号pcl::PointIndices::Ptr inliers (new pcl::PointIndices);// 创建一个分割器pcl::SACSegmentation<pcl::PointXYZ> seg;// Optionalseg.setOptimizeCoefficients (true);// Mandatory-设置目标几何形状seg.setModelType (pcl::SACMODEL_PLANE);//分割方法:随机采样法seg.setMethodType (pcl::SAC_RANSAC);//设置误差容忍范围seg.setDistanceThreshold (0.01);//输入点云seg.setInputCloud (cloud);//分割点云seg.segment (*inliers, *coefficients);

  除了平面以外,PCL几乎支持所有的几何形状。作为点云分割的基础算法,RanSaC很强大且必收敛,可以作为机器人抓取,识别等后续任务的前处理。

pcl 平面分割 RANSAC相关推荐

  1. 29 基于PCL的点云平面分割拟合算法技术路线(针对有噪声的点云数据)

    0 引言 最近项目中用到了基于PCL开发的基于平面的点云和CAD模型的配准算法,点云平面提取采用的算法如下. 1 基于PCL的点云平面分割拟合算法 2 参数及其意义介绍 (1)点云下采样 1. 参数: ...

  2. PCL中分割_欧式分割(1)

    基于欧式距离的分割和基于区域生长的分割本质上都是用区分邻里关系远近来完成的.由于点云数据提供了更高维度的数据,故有很多信息可以提取获得.欧几里得算法使用邻居之间距离作为判定标准,而区域生长算法则利用了 ...

  3. 3d激光雷达开发(平面分割)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 平面分割是点云数据经常需要处理的一个功能.在很多场景下面,平面数据都是没有用的.这个时候需要考虑 ...

  4. Open3d之点云平面分割

    Open3D还支持使用RANSAC从点云中分割几何图元. 要查找点云中最有可能存在的平面,我们使用segement_plane函数. 该方法具有三个参数:destance_threshold定义了一个 ...

  5. HDU1290 献给杭电五十周年校庆的礼物 平面分割空间问题

    点击打开链接 献给杭电五十周年校庆的礼物 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  6. 平面分割 题解(1.16 递推模拟)

    平面分割 代码一行,解析一箱~~ 解析 计f[i]:从1到i累加之和 先假设最好情况,p=2: 此时第一条会增加1个 第二条与第一条相交,再加2个 第三条与前2条相交,再加3个 - 故n条时共增加f[ ...

  7. 【9303】平面分割

    Time Limit: 10 second Memory Limit: 2 MB 问题描述 同一平面内有n(n≤500)条直线,已知其中p(p≥2)条直线相交与同一点,则这n条直线最多能将平面分割成多 ...

  8. 数学 —— 计算几何 —— 平面分割问题

    [直线分平面问题] 问题:n条直线,最多可以把平面分为多少个区域. 解:当有n-1条直线时,平面最多被分成了f(n-1)个区域.则第n条直线要是切成的区域数最多,就必须与每条直线相交且不能有同一交点. ...

  9. 平面分割(直线、面、折线)

    直线分割平面   求 n + 1 n+1 n+1条直线最多可以将平面分割成几部分,此时已知前 n n n条直线以将平面分割成了 a n a_n an​个平面,那么新加入的这一条直线最多可以和前 n n ...

最新文章

  1. python路径找类并获取静态字段
  2. log算子dog算子
  3. 目标驱动的软件度量(选译)
  4. Python实现 logistic 回归算法
  5. Leecode大厂热题100道系列题解
  6. Struts2的CRUD
  7. 现代儿童亟待满足的八种需要
  8. c语言python零基础教学_编程零基础应当如何开始学习 Python?附教程
  9. python抢货程序_写个Python程序上下班抢个顺风单
  10. Flutter的滚动以及sliver约束
  11. XOS 源码详解3: os_s_xxxx.s 汇编代码的 LDR指令
  12. c#app.config配置文件使用
  13. 微软Windows 11正式发布!(附安装教程)
  14. VC2010 Tab控件使用
  15. Domain Adaptive简介
  16. 力扣 6181. 最长的字母序连续子字符串的长度
  17. Telephone--短信发送/接收流程
  18. android wear 2.0 访问网络,离线AI使Android Wear 2.0断网也智能回复
  19. python学习笔记第六章文本词频统计
  20. SAP PI PO 接口配置主体传播 RSXMB_CONFIG_PP_NEW

热门文章

  1. 深入理解 C 指针阅读笔记 -- 第三章
  2. Python深入04 闭包
  3. 修改initrd做miniLinux
  4. gram矩阵的性质_线性代数(十五)标准正交基(Orthonormal Bases)和Gram-Schmidt正交化...
  5. 静态html页面传递参数,javascript静态页面传值的三种方法分享
  6. 买卖股票 状态机模型的理解
  7. php set name,PHP Gmagick setfilename()用法及代码示例
  8. jsp 跳到servlet路径_直接访问Jsp和从Servlet跳转到Jsp时的路径问题
  9. mysql文件怎么导入_mysql怎么导入sql文件
  10. linux ftp 不能上传,linux ftp用户没法上传。