PCL---RANSAC随机采样一致性算法

2023-05-16

前言

通过前面的文章,我们基本上代建的相关环境。本文将继续基于此继续学习PCL相关采样一致性算法。
基础代码下载

1.准备

1.1 Ransac算法介绍

RANSAC从样本中随机抽选出一个样本子集,使用最小方差估计算法对这个子集计算模型参数,然后计算所有样本与该模型的偏差,再使用一个预先设定好的阈值与偏差比较,当偏差小于阈值时,该样本点属于模型内样本点 ( inliers),或称内部点、局内点或内点,否则为模型外样本点(outliers),或称外部点、局外点或外点,记录下当前的 inliers 的个数,然后重复这一过程。每一次重复都记录当前最佳的模型参数,所谓最佳即是inliers的个数最多 ,此时对应的inliers个数为 best_ninliers 。 每次迭代的末尾都会根据期望的误差率、 best_ninliers、总样本个数、当前迭代次数,计算一 个迭代结束评判因子,据此决定是否迭代结束。迭代结束后,最佳模型参数就是最终的模型参数估计值 。

1.2 准备

如上面文章一样,我们还是如以前一般添加两个按钮一个随机生成球的数据,另一个为用Ransac 算法进行球面检查(ps:Ransac也支持其他的检测如平面、圆柱、圆锥等)

    QPushButton *randomBallBtn;
    QPushButton  *sampleBtn;

    randomBallBtn = new QPushButton(PCLView);
    randomBallBtn->setObjectName(QString::fromUtf8("Random Ball"));
    randomBallBtn->setGeometry(QRect(50, 60, 120, 40));
    sampleBtn = new QPushButton(PCLView);
    sampleBtn->setObjectName(QString::fromUtf8("Sample"));
    sampleBtn->setGeometry(QRect(200, 10, 120, 40));
    
    randomBallBtn->setText(QCoreApplication::translate("PCLView","Random Ball", nullptr));

   sampleBtn->setText(QCoreApplication::translate("PCLView","Sample", nullptr));

如下图所示:
点击按钮
由于球坐标方程为:

R 2 = x 2 + y 2 + z 2 R^2 = {x^2 + y^2 + z^2} R2=x2+y2+z2
因此点击按钮Random Ball 随机生成的球代码如下所示:

    pointCloud->resize(10000);
    pointCloud->is_dense = false;
    auto r = 1024;
    auto r2 = r*r;
    for (auto i = 0;i< pointCloud->size();i++){
        auto x = 1024 * random() / (RAND_MAX + 1.0f);
        auto y = 1024 * random() / (RAND_MAX + 1.0f);
        this->pointCloud->points[i].x = x;
        this->pointCloud->points[i].y = y;
        pointCloud->points[i].r = 240 ;
        pointCloud->points[i].g = 255 ;
        pointCloud->points[i].b = 240 ;
        auto z = .0f;
        if (i%5 == 0){
            z = 1024 * random() / (RAND_MAX + 1.0f);
        }else z = sqrt(r2-(x*x) - (y*y));
//        else z = -sqrt(r2-(x*x) - (y*y));
        this->pointCloud->points[i].z = z;
    }
    updatePointCloud();

点击相关按钮实现相关1/4球面代码的生成,如下图请添加图片描述

2. Ransac 随机采用一致算法实现

按照官网相关内容:撰写一下内容

    auto modelSphere = std::make_shared<pcl::SampleConsensusModelSphere<PointT>>(pointCloud);
    std::vector<int> inliers;
    // 随机采样一致对象
    pcl::RandomSampleConsensus<PointT> ransac(modelSphere);
    // 设置最小的阈值
    ransac.setDistanceThreshold(.01f);
    // 计算模型
    ransac.computeModel();
    // 获取内部点
    ransac.getInliers(inliers);
    for (auto i: inliers){
        pointCloud->points[i].r = 0 ;
        pointCloud->points[i].g = 255;
        pointCloud->points[i].b = 0 ;
    }
    // 更新云图
    updatePointCloud();

运行代码如下所示:
请添加图片描述

3.总结

本文通过随机生成球面点云,通过PCL提供的Ransic检测算法对球面进行检测。并且进行相关点云的标记以及更改颜色。下文将从学习PCL相关的有关过滤相关内容

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PCL---RANSAC随机采样一致性算法 的相关文章

  • 【点云空间索引】python-pcl:KdTree与八叉树

    1 点云是什么 通过雷达 激光扫描 立体摄像机等三维测量设备获得的点云数据 具有数据量大 分布不均匀等特点 点云数据主要是表征目标表面的海量点集合 并不具备传统实体网格数据的几何拓扑信息 点云处理中最核心的问题就是建立离散点间的拓扑结构 实
  • Windows环境下pcl点云库 安装配置全流程(精简、有效)

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net zaibeijixing article details 130770476 本文为W
  • pointCloudsLibrary视频资料

    pointCloudsLibrary视频资料 版权 边缘疯狂试探 https www bilibili com video BV1JV411C7f3 前言 目前pointCloudsLibrary的资料很少 只有官网的文档 下面介绍一个点云
  • VS2019安装Qt插件(附安装失败解决方案)

    方法1 1 进入官网下载 qt vsaddin msvc2019 2 4 3 vsix 然后点击运行 2 点击install安装插件 3 等待安装完成Close 打开VS2019 4 在扩展下面就会出现Qt VS Tools 然后进入Qt
  • 两幅有偏差的影像同坐标的地物不一定一样

    第一幅图上 如果经纬度100 100上是只狗 那么另外一个图上同经纬度不一定有狗了 是有偏差的
  • 第七周PCL学习--点云配准(七)

    目录 引言 一 点云配准 1 1 定义 1 2 含义 1 3 配准过程 1 4 算法原理 1 5 实验 二 总结 三 参考 引言 随着计算机辅助设计技术的发展 通过实物模型产生数字模型的逆向工程技术 由于它的独特魅力获得了越来越广泛的应用
  • 【PCL】基于法线的差异来分割点云

    基于法线差异来分割点云 1 法向量的计算及可视化 法线又称法向量 因为在三维的点云中 根据一个点的K近邻点或者一个点的radius半径范围内的点拟合一个平面 而垂直这个平面且经过改点的线称之为法向量 法向量是点云点到另一个点的有方向的线段
  • 点云地图PCL转换成为八叉树地图octomap

    TODO 完成离线点云地图到八叉树地图的转换 进一步在线实时完成点云地图到八叉树地图的转换 转载自高翔的博客 SLAM拾萃 1 octomap 我是萌萌哒的分割线 大家好 时隔多年之后 我又开始了博客旅程 经历了很多事情之后呢 我发现自己的
  • pointCloudLibrary点云库pcl_viewer工具使用

    pointCloudLibrary点云库pcl viewer工具使用 1 pointCloudLibrary点云库在windows下使用pcl viewer工具 1 首先在点云库安装目录下找到pcl viewer exe 具体根据自己的安装
  • PCL求取三维点云模型每点曲率

    最近在做有关实验需要计算模型曲率 但是网上找了一圈也没找到满意的资料 最后发现PCL库可以很方便的求取模型中每一个点的曲率 但是我们要想将PCL库求得的曲率数据应用到自己的项目中需要将PCL库与我们的项目进行结合 并且在PCL求出曲率后存放
  • PCL1.8.0+VS2013环境配置

    一 PCL环境配置 1 下载PCL 1 8 0 AllInOne msvc2013 win32exe和PCL 1 8 0 AllInOne msvc2013 win32exe pdb然后解压 配置环境变量PATH 下载链接 https pa
  • pcl经典算法60例——所有代码参考链接(开源)

    pcl经典算法60例大集合 方法名称 开源链接 1 打开点云 MFC显示点云 柯西等式的博客 CSDN博客 2 显示法线 PCL计算点云的法线 pcl 法线 Tom Hardy的博客 CSDN博客 3 三角化 PCL学习笔记 点云曲面重建
  • 【PCL】得到一个点云中的最高值、最低值

    有一个点云 想得到它x y z三个轴上的最大值和最小值 可以用pcl getMinMax3D函数 在这儿 函数参数 1 点云 2 放最小值的容器 3 放最大值的容器 容器类型是点云中点的类型 正好有三个值 代码 Created by eth
  • 【点云重采样Resampling】Python-pcl 基于多项式平滑点云及法线估计的曲面重建

    1 点云重采样 基于多项式平滑点云及法线估计的曲面重建以实现重采样 可以使得点云数据更规整一些 没之前那么杂乱 set Compute Normals True 可以通过在最小二乘法中进行法线估计 提高重采样准确度 set polynomi
  • 点云绪论(点云数据及获取、点云数据处理、常用软件及开源库)

    文章目录 点云数据及获取 点云数据处理 常用软件及开源库 点云数据及获取 定义 点云 point cloud 三维点的数据集合属性 三维坐标 强度 颜色 时间戳 点云组织形式 organized the point cloud is lai
  • PCL-获取点云体素中的所有点的索引的方法

    使用 octree 将点云体素化之后 获取体素中所有点的方法 即OctreeContainerBase中的三个方法的介绍 getPointIndex getPointIndicesVector getPointIndices 这三个方法都是
  • 关于VTK9 vs2019编译QVTK 过程中的记录

    环境 vtk9 0 QT5 12 PCL 1 12 vs2019 x64 这段时间下载了VTK 9 0 并利用vs2019对QVTK进行了编译 1 只要在编译过程中勾选了QT相关选项 就一定可以生成QVTK相关的头文件和库 编译过程网上已经
  • PCL1.8的那些坑!各种编译及使用问题汇总

    在win10上用vs2013编译及使用pcl180遇见了各种坑 这里做个汇总 既是总结 也希望能给后来人引路 1 编译到visualization模块的时候 会有如下语句报错 if pcl visualization getColormap
  • 如何使用PCL将XYZRGB点云转换为彩色mesh模型

    如何使用PCL将XYZRGB点云转换为彩色mesh模型 最近完成了一个使用RGBD传感器 构建物体模型的小demo 其中有点难的最后一步是如何将获得的物体点云变成彩色mesh模型 效果图如下 从点云变成彩色mesh 其实整体的步骤可以总结如
  • 使用 scikit-image 和 RANSAC 稳健估计多项式几何变换

    我想用 scikit image skimage transform 和 skimage measure ransac 稳健地估计多项式几何变换 ransack 文档提供了一个非常好的示例 说明如何通过相似性变换来实现这一点 事情是这样的

随机推荐

  • ROS中显示inf问题(激光雷达laserscan rviz)

    需要改动两处代码 xff1a robot sim demo urdf sick tim urdf xacro 文件 xff1a 将带有 xff02 gpu xff02 的那一行注释掉 xff0c 使用非 xff02 gpu xff02 那一
  • 阿里云 开通 https CDN 客户端和服务器不支持常用的 SSL 协议版本或加密套件

    需要在CDN管理配置上添加https证书 HTTPS设置
  • 1e-7

    1e 7 就是10的负7次方
  • 3维空间中点、线、面之间的数学关系(python代码)

    1 面的定义 三维空间中的平面由两个量确定 xff1a 一个法向量 xff08 垂直于该平面的向量 xff09 一个已知点 xff08 位于该平面上的一个点 2 叉乘和点乘的区别 2 1叉乘的计算方式 xff0c 叉乘用来得到垂直于两条向量
  • 三维空间中,向量在另外一个向量或者面上的投影

    1 向量在另外一个向量上的投影 求向量u在向量v上的投影 定义为u xff0c 为两向量的夹角 一个向量有两个属性 xff0c 大小和方向首先明确向量点乘的含义 u v
  • C++编程02(引用、参数传递、内联函数)

    C 43 43 编程02 xff08 引用 参数传递方式 内联函数 xff09 引用 文章目录 C 43 43 编程02 xff08 引用 参数传递方式 内联函数 xff09 一 引用1 引用的实质2 引用必须初始化3 对数组建立引用 二
  • 使用Git bash查看之前版本和恢复最新版本的方法

    项目场景 xff1a 作为实习生 xff0c 一直在帮公司搞C 43 43 的图像识别项目 xff0c 因为总是改需求 xff0c 所以我的代码注释的一大片 xff0c 不便于整理 xff0c 有时候改的改的 xff0c 就找不到之前的版本
  • Windows平台下CMake使用报错No CMAKE_CXX_COMPILER could be found

    今天在笔记本建立了一个Cmakelists xff0c 使用cmake编译的时候 xff0c 报错 No CMAKE CXX COMPILER could be found No CMAKE C COMPILER could be foun
  • Cartographer编译方法及编译出错(glog库链接错误)解决方法

    最近在重新调试Carto代码 xff0c 想把自己的代码加入到Carto中 xff0c 原本想在IDE中调试 xff0c 然而Carto编译方式比较奇葩 xff08 catkin make isolated install use ninj
  • 什么是RTOS?RTOS与普通操作系统的区别

    一 xff1a 什么是RTOS RTOS Real Time Operating System xff0c 实时操作系统 实时性是其最大特征 xff0c 实时操作系统中都要包含一个实时任务调度器 xff0c 这个任务调度器与其它操作系统的最
  • 进度条(CSS)

    效果 xff08 实际有动态效果 xff09 html span class token tag span class token tag span class token punctuation lt span div span span
  • 终端命令行打开vscode

    在指定文件夹内 xff0c 使用终端命令行打开vscode 在当前目录打开vscode code 如果code命令无法使用 xff0c 需要配路径 xff0c 如下 xff1a 打开bash或者zsh配置文件 bash 用户请使用 vi b
  • 串口缓冲区管理分析

    一 概述 xff1a 串口使用时一般包含两个缓冲区 xff0c 即发送缓冲区和接收缓冲区 发送数据时 xff0c 先将数据存在发送缓冲区 xff0c 然后通过串口发送 xff1b 接收数据时 xff0c 先将接收的数据存在接收缓冲区 xff
  • array element has incomplete type

    http stackoverflow com search q 61 luaL reg 43 incomplete 43 type libs edje lua2 o edje lua2 c 183 error array type has
  • rt-thread学习记录(一)--内核的移植

    rt thread学习记录 xff08 一 xff09 内核的移植 1 基本选择 在rt thread官网上 xff0c 看到其对stm32芯片的支持 xff0c 因此选择stm32c8t6最小系统来进行移植内核 xff0c rt thre
  • rt-thread内核启动分析

    1 项目准备 上一节的基本环境 如rh thread 基本环境的搭建 硬件材料stm32f103C8T6 以及st link rt thread 内核启动官网分析 在分析rt thread代码的时候 由于rt thread的代码是十分优秀的
  • 达梦数据库sql语句记录

    登入 在ubuntu上安装好达梦数据 xff0c 并且生成实例 xff0c 在ubuntu上进行安装目录 xff0c 采用在tools目录下 xff0c 使用 disql进行命令行模式 xff0c 连接服务器 xff1a Conn sysd
  • vertx web开发(一)

    vertx web开发 最近在开发中 xff0c 由于spring 的大而全 xff0c 反而不实用于一下小项目 xff0c 因为spring boot在空载的情况 xff0c 至少其内存占用超过150M 而对于一些简单的项目反到不适用 而
  • kotlin协程实现原理

    传统runnable接口实现 在java中 xff0c 很多耗时的行为通过实现runnable接口 xff0c 并且通过线程运行下这些耗时的任务 xff0c 例如 xff1a span class token keyword public
  • PCL---RANSAC随机采样一致性算法

    前言 通过前面的文章 xff0c 我们基本上代建的相关环境 本文将继续基于此继续学习PCL相关采样一致性算法 基础代码下载 1 准备 1 1 Ransac算法介绍 RANSAC从样本中随机抽选出一个样本子集 xff0c 使用最小方差估计算法