多帧点云数据拼接合并_PCL点云处理实践(二):点云的处理和拼接

滤除背景

我们获得的点云可能包含一部分背景的点云。要去除背景,只保留人体信息,最简单的方式是使用直通滤波器滤除较远点。这部分代码如下:1

2

3

4

5

6pcl::PassThrough<:pointxyz>pass; //设置滤波器对象

pass.setInputCloud(cloud); //设置输入点云

pass.setFilterFieldName("z"); //设置过滤时所需要点云类型的z字段

pass.setFilterLimits(0.0,1.0); //设置在过滤字段上的范围

//pass.setFilterLimitsNegative (true); //设置保留范围内的还是过滤掉范围内的

pass.filter(*cloud_filtered); //执行滤波,保存过滤结果在cloud_filtered

滤除背景也可以通过Kinect SDK实现,这部分可以参考SDK的“游戏者ID”。

移除离群点

激光扫描通常会产生密度不均匀的点云数据集。另外,测量中的误差会产生稀疏的离群点,使效果更糟。因此对每个点的邻域进行一个统计分析,并修剪掉那些不符合一定标准的点。1

2

3

4

5pcl::StatisticalOutlierRemoval<:pointxyz> sor;// 创建滤波器对象

sor.setInputCloud(cloud); //设置呆滤波的点云

sor.setMeanK(50); //设置在进行统计时考虑查询点邻近点数

sor.setStddevMulThresh(1.0); //设置判断是否为离群点的阈值

sor.filter(*cloud_filtered); //执行滤波处理保存内点到cloud_filtered

下采样

为什么要进行下采样?

Kinect直接得到的点云数据非常庞大,由于我们下一步要对其进行配准和拼接处理,如果不对点云进行适当精简,运算时间可能非常长。因此,要等效一个Point较少的点云,取代原始点云进行配准操作。

PCL实现的VoxelGrid类通过输入的点云数据创建一个三维体素栅格(可把体素栅格想象为微小的空间三维立方体的集合),然后在每个体素(即,三维立方体)内,用体素中所有点的重心来近似显示体素中其他点,这样该体素就内所有点就用一个重心点最终表示,对于所有体素处理后得到过滤后的点云。1

2

3

4pcl::VoxelGrid<:pointcloud2>sor; //创建滤波对象

sor.setInputCloud(cloud); //设置需要过滤的点云给滤波对象

sor.setLeafSize(0.01f,0.01f,0.01f); //设置滤波时创建的体素大小为1cm立方体

sor.filter(*cloud_filtered); //执行滤波处理,存储输出cloud_filtered

点云拼接

配准

什么是配准

配准是将一个点云找到与另一个点云相对应的部分,并得到两个点云之间的转换矩阵。

配准之后,我们就可以将一个点云转换到另一个点云所在的坐标系内。在同一个坐标系内的点云可以进行拼接,形成一个更大的点云。

PCL内置了许多配准算法,例如迭代最近点对(ICP)算法,正态分布变换算法,随机一致采样(ransac)算法,等等。实际使用中,往往需要根据点云的特征选取合适的算法。这里使用了ransac算法。

随机抽样一致性算法(RANSAC)

概述

RANSAC是“RANdom SAmple Consensus(随机抽样一致)”的缩写。它可以从一组包含“局外点”的观测数据集中,通过迭代方式估计数学模型的参数。

RANSAC通过反复选择数据中的一组随机子集来达成目标。被选取的子集被假设为局内点,并进行验证。

算法

RANSAC算法的输入是一组观测数据,一个可以解释或者适应于观测数据的参数化模型,一些可信的参数。

模型对应的是空间中一个点云数据到另外一个点云数据的旋转以及平移。

第一步随机选取点云中的一个点对,利用其不变特征(两点距离,两点法向量夹角)作为哈希表的索引值搜索另一个点云中的一个对应点对,然后计算得到旋转及平移的参数值。

用得到的变换模型去测试其它点,如果某个点适用于估计的模型,认为它也是局内点。

用所有假设的局内点去重新估计模型,重新计算旋转及平移的参数。

和上一个模型进行比较:是否有更多的局内点和更小的错误率。

然后迭代上述过程,直到找到最好的模型,或达到迭代次数。

优势和缺点

RANSAC的优点是它能从包含大量局外点的数据集中估计出高精度的参数。

RANSAC的缺点是它计算参数的迭代次数没有上限;如果设置迭代次数的上限,得到的结果可能不是最优的结果,甚至可能得到错误的结果。RANSAC只有一定的概率得到可信的模型,概率与迭代次数成正比。RANSAC的另一个缺点是它要求设置跟问题相关的阀值。

如何提高配准的精确度

对于两个点云来说,提高精确度的方法是选取合适的算法、增加迭代次数、修改参数。

实际配准中,我们可能要连续配准多个点云。这样,在两个点云匹配中出现的误差可能被放大。尝试了以下几种思路:第n个点云与第n+1个点云配准,得到转换矩阵。将第n-1个转换矩阵乘以这个转换矩阵,得到第n个转换矩阵。第n+1个点云乘以第n个转换矩阵,得到它投影到第1个点云所在坐标系的新点云。

上一方法的改进策略:同时由第1个点云向后出发,第n个点云向前出发进行配准,最终重合。

第n个点云与第n+1个点云配准,得到转换矩阵,并将第n+1个点云乘以转换矩阵,将得到的新点云替换第n+1个点云。

第n个点云与第n+1个点云配准,得到转换矩阵,并将第n+1个点云乘以转换矩阵,将得到的新点云拼接上第n个点云,然后替换第n+1个点云。

最终选择了第二种方法,它可以达到较好的效果。

配准部分的代码,根据采取的算法不同有所变化,建议从官方文档参看这部分代码。

最终效果

实际使用中,很难做到短时间高精度地配准出点云,对于一些情况,可能要进行有针对性的优化。这是测试中配准效果较好的一个:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502389.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html5 css3浏览器,五大主流浏览器CSS3和HTML5兼容性大比拼

五大主流浏览器CSS3和HTML5兼容性大比拼出处&#xff1a;快科技 2011-05-26 16:15:42 编辑&#xff1a;萧萧[爆料] 收藏文章各大主流浏览器对CSS3和HTML5的支持越来越完善&#xff0c;曾经让多少前端开发人员心碎的IE系也开始拥抱标准。就在前几天&#xff0c;W3C的HTML5社…

自学python 编程基础知识_python学习-基础知识-1

1、计算机历史 计算机使用高低电压的两种状态来描述信息。计算机可以理解的只有二进制数据即010100011....&#xff0c;1个比特位可以表示的状态只有2种&#xff0c;n个比特位可以表示的状态有2的n次方种。 所以如果想要描述天气状态&#xff1a;天晴、下雨、刮风、下雪、霜冻&…

comparator 字符串比较大小_Java中Comparable和Comparator实现对象比较

当需要排序的集合或数组不是单纯的数字型时&#xff0c;通常可以使用Comparator或Comparable&#xff0c;以简单的方式实现对象排序或自定义排序。A comparison function, which imposes a total ordering on some collection of objects. Comparators can be passed to a sort…

html中属性的作用,html的标签中 unselectable=on 属性的作用

在IE浏览器中&#xff0c;当input获得焦点时&#xff0c;点击有unselectable"on"属性的标签时&#xff0c;不会触发onblur事件。加上该属性的元素不能被选中。< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">< html>< h…

一个控制器怎么转发到另外一个控制器_楼宇自动化系统(BAS),DDC,一个最核心的控制器...

楼宇自动化系统(BAS)&#xff0c;一个熟悉又陌生的系统楼宇自控系统(BAS系统)设有一个中央监控中心&#xff0c;系统配置一个或多个网络控制器&#xff0c;由多条总线或计算机网络将各种功能的控制器与中央工作站相连&#xff0c;完成对空调、给排水、通风、电梯等子系统的监控…

秒表计时器怎么读_秒表怎么读数

展开全部秒表的大圈为秒&#xff0c;小圈为分。若大圈是30分格(顶上写的是30&#xff0c;可能有60格&#xff0c;表明精度到半秒)&#xff0c;小圈里62616964757a686964616fe59b9ee7ad9431333431366239一分钟就分为两小格&#xff0c;读完整的几分&#xff0c;若过了一小格&…

html封装windows,windows 系统封装,打造一份属于自己的系统!

在电脑的使用过程中&#xff0c;由于我们每个人的使用习惯和使用方式不同&#xff0c;所以我们都会对Windows系统进行自己的设置&#xff0c;尤其是一些搞数码软件的&#xff0c;如果不小心系统坏了&#xff0c;重装系统后&#xff0c;还得一一去进行重新设置&#xff0c;非常麻…

daoi php_聊聊这些年用过的AOI

外面下着雨&#xff0c;我在家里宅&#xff0c;听着歌喝着去年的茶&#xff0c;无聊的很&#xff0c;开个话题聊下这些年用过的AOI。某年进入AOI这行&#xff0c;我的很多老同事都早已转行了&#xff0c;由于我没什么过人之处&#xff0c;只会死干&#xff0c; 现在还在做AOI。…

python语言例子_【Python】SimPy的使用示例-Go语言中文社区

使用SimPY进行离散事件仿真 SimPY是一个Python下的第三方库&#xff0c;可以方便的进行离散事件的仿真。仿真速度比较快。下面记录一下我的一点心得&#xff0c;不保证完全正确&#xff0c;供参考。 安装 $ pip install -U simpy pycharm可以再File | Settings | Project: Simu…

所有的图放到一个html,拖放是HTML5标准的组成部分,若想要把drag1图片放入d

dataTransfer 对象主要有两个方法&#xff1a;getData() 和 setData()&#xff0c;用来取值和保存值。setData() 方法的第一个参数&#xff0c;也是 getData() 方法唯一的一个参数&#xff0c;是一个字符串&#xff0c;表示保存的数据类型。IE只定义了"text" 或 &quo…

vue变量传值_VUE 学习——父组件传值给子组件

在我们编写前端代码时&#xff0c;经常遇到的一种场景&#xff0c;子组件需要使用父组件的值&#xff0c;这种情况下&#xff0c;我们可以使用props帮助我们进行父子组件间的通信。这里我们先模拟一个场景&#xff0c;展示如何使用。场景&#xff1a;在父组件修改值&#xff0c…

matlab 最小二乘法拟合_Scripy实现最小二乘法与股票K线回归

python的Scripy提供了丰富的数学工具&#xff0c;python的科学计算包scipy的里面提供了一个函数&#xff0c;可以求出任意的想要拟合的函数的参数。那就是scipy.optimize包里面的leastsq函数。函数原型是&#xff1a;leastsq(func, x0, args(), DfunNone, full_output0, col_de…

html 调高德地图 导航,在H5页面内通过地址调起高德地图实现导航

项目中用到的一个功能是要通过点击地址来实现打开地图app实现地址导航。如下图&#xff1a;实现思路就是在H5页面内通过点击marker图标然后进行当前位置与页面上地址的路程规划与导航。由于项目中用到的是高德地图&#xff0c;所以这里用到的是调起高德地图APP来实现该功能。首…

.jar文件如何打开_ofd发票文件如何打开

有时候大家查找文件的时候会不会觉得很心烦&#xff0c;因为经常能碰到OFD格式的文件&#xff0c;但是我们却不知道怎么打开&#xff0c;造成了很多困扰。我以前也常常遇到这样的情况&#xff0c;但是最近我发现了一个好办法&#xff0c;迫不及待地想分享给大家了&#xff0c;可…

印刷体是什么意思_家长晒出4年级小学霸课前笔记,字迹堪比“印刷体”,老师都羡慕...

目前&#xff0c;很多小学生都在家里上网课&#xff0c;为了达到最佳学习效果&#xff0c;要提前做好预习工作&#xff0c;尤其是语文这一学科&#xff0c;更需要预习。这不就有一位4年级学霸的家长晒出了孩子日常课前预习笔记。他不仅对文章进行了合理的布置和预习&#xff0c…

不使用自带函数求区域的周长_Excel表格中最强大求和函数______DSUM函数

在Excel表格中说起求和函数&#xff0c;朋友们首先会想到的是sum、sumif、和sumifs函数。这篇文章为朋友们分享最强大求和函数&#xff0c;数据库函数之DSUM函数。这个函数不仅能完成各种要求的求和&#xff0c;还可以用于查找。一.DSUM函数说明&#xff1a;1.语法&#xff1a;…

python 用if判断一个数是不是整数_Python基础教程07-函数和模块的使用

在讲解本章节的内容之前&#xff0c;我们先来研究一道数学题&#xff0c;请说出下面的方程有多少组正整数解。x1x2x3x48事实上&#xff0c;上面的问题等同于将8个苹果分成四组每组至少一个苹果有多少种方案。想到这一点问题的答案就呼之欲出了。可以用Python的程序来计算出这个…

计算机科学美国大学专业,2018美国大学计算机科学专业大排名

麻省理工大学麻省理工学院素以世界顶尖的工程学和计算机科学而享誉世界&#xff0c;虽然不是藤校&#xff0c;却是拥有着领先世界一流的计算机科学及人工智能实验室。麻省理工学院大学计算机硕士专业毕业生可从事集成电路应用与系统设计&#xff0c;从事信息技术与计算机应用系…

前端跨域请求get_(单点登录)跨域SSO看这篇文章就够了:前端篇

前言前俩篇文章&#xff0c;我们从概念&#xff0c;聊到了服务器中设计的内容。不知道大家是否觉得通俗易懂呢&#xff1f;接下来的内容则有些偏向前端部分。正文三、Cookie传递3.1、通过URL参数实现跨域信息传递我们要在A域实现写入token到B域&#xff0c;需要在A域设计一个se…

win10 如何锁定计算机,Win10 1909 专业版怎么锁定计算机屏幕

Win10 1909 专业版怎么锁定计算机屏幕?如果我们需要暂时离开计算机&#xff0c;但不想关机或者注销当前登录&#xff0c;那么为了防止未经授权的使用&#xff0c;我们可以将计算机锁定。在本文中&#xff0c;win10之家小编给大家分享如何自动锁定Windows 10计算机。Win10 1909…