1、使用PCL工具

 1 //创建一个模型参数对象,用于记录结果
 2 pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients);
 3 //inliers表示误差能容忍的点,记录点云序号
 4 pcl::PointIndices::Ptr inliers(new pcl::PointIndices);
 5 //创建一个分割器
 6 pcl::SACSegmentation<pcl::PointXYZ> seg;
 7 //Optional,设置结果平面展示的点是分割掉的点还是分割剩下的点
 8 seg.setOptimizeCoefficients(true);
 9 //Mandatory-设置目标几何形状
10 seg.setModelType(pcl::SACMODEL_PLANE);
11 //分割方法:随机采样法
12 seg.setMethodType(pcl::SAC_RANSAC);
13 //设置误差容忍范围,也就是阈值
14 seg.setDistanceThreshold(0.01);
15 //输入点云
16 seg.setInputCloud (cloud);
17 //分割点云
18 seg.segment (*inliers, *coefficients);

2、RANSAC拟合平面代码

while ((iterNum < iter_maxNum) && inPlaneNum_max <= RSample_pointsNum)
{inPlaneNum_t = 3;//当前拟合平面中点个数//随机抽3个点,验证不在一条直线上/*A(x1,y1)、B(x2,y2)、C(x3,y3)AB斜率:kAB=(y2-y1)/(x2-x1)BC斜率:kBC=(y3-y2)/(x3-x2)计算结果可得:kAB=kBC因为kAB=kBC,且共点B所以直线AB与直线BC共线。*/do {rand_i_1 = real(gen);rand_i_2 = real(gen);if (rand_i_1 == rand_i_2)continue;rand_i_3 = real(gen);if (rand_i_1 == rand_i_3 || rand_i_2 == rand_i_3)continue;x1 = r_sample[rand_i_1].x; x2 = r_sample[rand_i_2].x; x3 = r_sample[rand_i_3].x;y1 = r_sample[rand_i_1].y; y2 = r_sample[rand_i_2].y; y3 = r_sample[rand_i_3].y;} while (((y2 - y1)*(x3 - x2)) == ((y3 - y2)*(x2 - x1)));//x1 = r_sample[rand_i_1].x; x2 = r_sample[rand_i_2].x; x3 = r_sample[rand_i_3].x;//y1 = r_sample[rand_i_1].y; y2 = r_sample[rand_i_2].y; y3 = r_sample[rand_i_3].y;z1 = r_sample[rand_i_1].z; z2 = r_sample[rand_i_2].z; z3 = r_sample[rand_i_3].z;//求平面方程A_t = (y2 - y1)*(z3 - z1) - (z2 - z1)*(y3 - y1);B_t = (x3 - x1)*(z2 - z1) - (x2 - x1)*(z3 - z1);C_t = (x2 - x1)*(y3 - y1) - (x3 - x1)*(y2 - y1);D_t = -(A_t * x1 + B_t * y1 + C_t * z1);//求在平面内的点的个数temp = sqrt(A_t*A_t + B_t*B_t + C_t*C_t);//点到平面距离参数for (int i = 0; i < RSample_pointsNum; i++){temp_D = abs(A_t*r_sample[i].x + B_t*r_sample[i].y + C_t*r_sample[i].z + D_t) / temp;//点到平面距离if (temp_D < maxD){inPlaneNum_t++;}}//与最优(最大)个数比较,保留最优个数的平面公式if (inPlaneNum_t > inPlaneNum_max){A_best = A_t;B_best = B_t;C_best = C_t;D_best = D_t;inPlaneNum_max = inPlaneNum_t;}iterNum++;//迭代次数+1
}

转载于:https://www.cnblogs.com/zhuzhudong/p/11064415.html

PCL使用RANSAC拟合三位平面相关推荐

  1. PCL:RANSAC 平面拟合

    文章目录 1 平面方程 2 算法原理 3 代码实现 4 结果展示 5 注意 1 平面方程 平面方程 是指空间中所有处于同一平面的点所对应的方程,其一般式形如 Ax+By+Cz+D=0Ax+By+Cz+ ...

  2. python ransac 拟合平面,PCL利用RANSAC自行拟合分割平面,

    PCL利用RANSAC自行拟合分割平面, 利用PCL中分割算法. pcl::SACSegmentation<:pointxyz> seg; ,不利用法线参数,只根据模型参数得到的分割面片, ...

  3. PCL:RANSAC 圆拟合(二维圆 + 空间圆)

    文章目录 1 二维圆 1.1 SACMODEL_CIRCLE2D 模型 1.2 代码实现 1.3 结果展示 1.4 源码 2 空间圆 2.1 SACMODEL_CIRCLE3D 模型 2.2 代码实现 ...

  4. PCL:RANSAC算法拟合直线的两种实现方式

    pcl利用ransac实现直线拟合的方法 pcl::SampleConsensusModelLine pcl::SACSegmentation pcl::SampleConsensusModelLin ...

  5. PCL中RANSAC模型的使用

    RANSAC算法是什么 RANSAC算法于1981年由Fischler和Bolles提出,全程是RANdom SAmple Consensus,一般中文翻译为"随机抽样一致性算法" ...

  6. Ransac拟合椭圆

    一.Ransac算法介绍 RANSAC(RAndom SAmple Consensus,随机采样一致)最早是由Fischler和Bolles在SRI上提出用来解决LDP(Location Determ ...

  7. ransac 直线拟合 matlab,ransac拟合直线和平面(matlab版本)

    参考资料: 主要思想: 迭代100次,找出内点内点最多的参数模型. 修改的问题: 原作者ransac拟合直线的参数以及ransac拟合平面的参数我认为有误,在这个基础上进行了修正. 1 ransac拟 ...

  8. RANSAC拟合直线

    1.原理介绍 2.实现过程 3.和最小二乘的比较及其优缺点 1.原理介绍 RANSAC是"RANdom SAmple Consensus(随机抽样一致)"的缩写.它可以从一组包含& ...

  9. 【Python-ML】SKlearn库RANSAC拟合高鲁棒性回归模型

    # -*- coding: utf-8 -*- ''' Created on 2018年1月24日 @author: Jason.F @summary: 有监督回归学习-RANSAC拟合高鲁棒性回归模 ...

最新文章

  1. 【Java】Cloneable 接口讲解 (包含浅拷贝与深拷贝不一样的实现讲解)
  2. tcp unity 图片_用 Unity 做个游戏(七) - TCP Socket 客户端
  3. xgboost参数_XGBoost实战和参数详解
  4. java连接Oracle数据库
  5. SSL/TLS 工具 OpenSSL
  6. 【图像检索】基于matlab Hu不变矩图像检索【含Matlab源码 755期】
  7. 多测师肖sir_高级金牌讲师_简历制作
  8. 织梦采集工具-织梦CMS采集教程
  9. Q# 微软量子计算编程语言
  10. 为什么哪些90后程序员年薪50万+,他们经历了啥?
  11. wz框架登录功能详解——demo1
  12. RNA 提取步骤(trizol)
  13. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(一) 之 基层数据搭建,让数据活起来(数据获取)...
  14. 常见的网站攻击方式和防护方式
  15. 软考高项 ——【项目风险管理】
  16. 费舍尔方法(Fisher‘s method)的数学原理解释
  17. 关于火线、零线、地线
  18. 【莫言语录】莫言说过的经典语录摘记
  19. Scratch编程-画图模块12【蓝桥杯scratch编程题真题】
  20. 高通的熔丝(Blow eFuse)操作

热门文章

  1. java将输出结果写入csv文件_如何在Java中将数据写入.csv文件?
  2. 修改密码后服务器断开连接,SSH无需密码登录服务器且保持连接不断开的方法
  3. php7 v8js,Centos 7PHP7.0 安装V8JS扩展几乎都能安装成功
  4. python pandas 遍历 DataFrame
  5. 对象分割--Instance-sensitive Fully Convolutional Networks
  6. 给VMware虚拟机增加硬盘容量:Linux/Windows系统
  7. win7访问不了服务器共享文件夹权限设置,win7系统开启共享文件夹访问权限的操作方法...
  8. 计算机科学与技术历史步伐,计算机科学与技术1001班先进班级体申报材料.pdf
  9. 【每日一题】502. IPO
  10. 联想服务器升级微码文件,ThinkPad如何升级硬盘微码程序(适用于SL系列机器)