PCL使用RANSAC拟合三位平面
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拟合三位平面相关推荐
- PCL:RANSAC 平面拟合
文章目录 1 平面方程 2 算法原理 3 代码实现 4 结果展示 5 注意 1 平面方程 平面方程 是指空间中所有处于同一平面的点所对应的方程,其一般式形如 Ax+By+Cz+D=0Ax+By+Cz+ ...
- python ransac 拟合平面,PCL利用RANSAC自行拟合分割平面,
PCL利用RANSAC自行拟合分割平面, 利用PCL中分割算法. pcl::SACSegmentation<:pointxyz> seg; ,不利用法线参数,只根据模型参数得到的分割面片, ...
- PCL:RANSAC 圆拟合(二维圆 + 空间圆)
文章目录 1 二维圆 1.1 SACMODEL_CIRCLE2D 模型 1.2 代码实现 1.3 结果展示 1.4 源码 2 空间圆 2.1 SACMODEL_CIRCLE3D 模型 2.2 代码实现 ...
- PCL:RANSAC算法拟合直线的两种实现方式
pcl利用ransac实现直线拟合的方法 pcl::SampleConsensusModelLine pcl::SACSegmentation pcl::SampleConsensusModelLin ...
- PCL中RANSAC模型的使用
RANSAC算法是什么 RANSAC算法于1981年由Fischler和Bolles提出,全程是RANdom SAmple Consensus,一般中文翻译为"随机抽样一致性算法" ...
- Ransac拟合椭圆
一.Ransac算法介绍 RANSAC(RAndom SAmple Consensus,随机采样一致)最早是由Fischler和Bolles在SRI上提出用来解决LDP(Location Determ ...
- ransac 直线拟合 matlab,ransac拟合直线和平面(matlab版本)
参考资料: 主要思想: 迭代100次,找出内点内点最多的参数模型. 修改的问题: 原作者ransac拟合直线的参数以及ransac拟合平面的参数我认为有误,在这个基础上进行了修正. 1 ransac拟 ...
- RANSAC拟合直线
1.原理介绍 2.实现过程 3.和最小二乘的比较及其优缺点 1.原理介绍 RANSAC是"RANdom SAmple Consensus(随机抽样一致)"的缩写.它可以从一组包含& ...
- 【Python-ML】SKlearn库RANSAC拟合高鲁棒性回归模型
# -*- coding: utf-8 -*- ''' Created on 2018年1月24日 @author: Jason.F @summary: 有监督回归学习-RANSAC拟合高鲁棒性回归模 ...
最新文章
- 【Java】Cloneable 接口讲解 (包含浅拷贝与深拷贝不一样的实现讲解)
- tcp unity 图片_用 Unity 做个游戏(七) - TCP Socket 客户端
- xgboost参数_XGBoost实战和参数详解
- java连接Oracle数据库
- SSL/TLS 工具 OpenSSL
- 【图像检索】基于matlab Hu不变矩图像检索【含Matlab源码 755期】
- 多测师肖sir_高级金牌讲师_简历制作
- 织梦采集工具-织梦CMS采集教程
- Q# 微软量子计算编程语言
- 为什么哪些90后程序员年薪50万+,他们经历了啥?
- wz框架登录功能详解——demo1
- RNA 提取步骤(trizol)
- ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(一) 之 基层数据搭建,让数据活起来(数据获取)...
- 常见的网站攻击方式和防护方式
- 软考高项 ——【项目风险管理】
- 费舍尔方法(Fisher‘s method)的数学原理解释
- 关于火线、零线、地线
- 【莫言语录】莫言说过的经典语录摘记
- Scratch编程-画图模块12【蓝桥杯scratch编程题真题】
- 高通的熔丝(Blow eFuse)操作
热门文章
- java将输出结果写入csv文件_如何在Java中将数据写入.csv文件?
- 修改密码后服务器断开连接,SSH无需密码登录服务器且保持连接不断开的方法
- php7 v8js,Centos 7PHP7.0 安装V8JS扩展几乎都能安装成功
- python pandas 遍历 DataFrame
- 对象分割--Instance-sensitive Fully Convolutional Networks
- 给VMware虚拟机增加硬盘容量:Linux/Windows系统
- win7访问不了服务器共享文件夹权限设置,win7系统开启共享文件夹访问权限的操作方法...
- 计算机科学与技术历史步伐,计算机科学与技术1001班先进班级体申报材料.pdf
- 【每日一题】502. IPO
- 联想服务器升级微码文件,ThinkPad如何升级硬盘微码程序(适用于SL系列机器)