- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于多项式拟合的法线估计、点云平滑和数据重采样
本小节介绍基于移动最小二乘法(MLS)的法线估计、点云平滑和数据重采样。有时,测量较小的对象时会产生一些误差,这些误差所造成的不规则数据如果直接拿来曲面重建的话会使重建的曲面不光滑或者有漏洞。这些不规则很难用统计分析消除,所以为了建立完整的模型必须对表面进行平滑处理和漏洞修复。在不能进行额外扫描的情况下,我们可以通过对数据重采样来解决这一问题,重采样算法通过对周围数据点进行高阶多项式插值来重建表面缺少的部分。此外,由多个扫描点扫描结果配准后得到的数据直接拿来曲面重建的话会产生“双墙”等人造伪数据,即某块区域会出现重叠的两个曲面。重采样算法也可以对这个问题进行处理。
图1 法线估计结果
如图1左侧,是一个由两组点云数据配后得到的数据集的表面法线估计的结果,由于配准造成的误差,法线有噪声,即使在同一平面上的点集,其法线方向不严格一致;右侧则是同一数据集经过点云平滑后再进行法线估计所得到的结果,明显比左图准确一致的多。为了对重采样前后曲率特征进行量化衡量,我们绘制出了数据集中每点的曲率,得到图2,与上图可视化结果一致,平滑处理前的曲率特征方差很大,而平滑后的则方差较小。
?
图2 曲率图
本小节我们一起学习用最小二乘法对点云进行平滑处理的例子。
代码
首先,在PCL(Point Cloud Learning)中国协助发行的书[1]提供光盘的第15章例1文件夹中,打开名为resampling.cpp的代码文件,同文件夹下可以找到相关的测试点云文件bun0.pcd。?
解释说明
下面对打开的文件关键语句进行解析。
#include //PCL中所有点类型定义的头文件
#include //打开关闭pcd文件的类定义的头文件
#include //kdtree搜索对象的类定义的头文件
#include //最小二乘法平滑处理类定义的头文件
以上代码进行与本程序相关的类和函数的头文件声明。
pcl::PointCloud::Ptr cloud (new pcl::PointCloud ());
pcl::io::loadPCDFile (bun0.pcd, *cloud);//加载bun0.pcd文件
由于例子中用到的pcd文件只有XYZ坐标,我们把它加载到PointCloud对象中,XYZ坐标字段在本演示中是必需有的,其他字段可有可无,但如果存在也会在处理后的输出点云中被保留。
mls.setComputeNormals (true); //设置在最小二乘计算中需要进行法线估计
进行法线估计,如果不需要法线估计,就跳过这一步。
pcl::MovingLeastSquares mls;//定义最小二乘实现的对象mls
MovingLeastSquares模板类的第一个模板参数为点类型PointXYZ是设置输入点云类型的,输入的数据中只有xyz坐标字段,它在输出的时候被平滑了,而第二个模板参数为点类型PointNormal,即输出为只包含法线的点云。
mls.setPolynomialFit (true);
可以通过不需要多项式拟合来加快平滑速度,设置为ture时则在整个算法运行时采用多项式拟合来提高精度,缺省值和其他用来控制平滑过程的参数请参照相关类的API。
pcl::io::savePCDFile (bun0-mls.pcd, mls_points); //保存结果
如果法线和处理后的原始数据必须在相同PointCloud对象中,则需要将这两字段连接起来形成新的点云。
编译并运行该程序
利用光盘提供的CMakeLists.txt文件,在cmake中建立工程文件,并生成相应的可执行文件,生成执行文件后,就可以运行了,在cmd中键入命令:
...resampling.exe
也可以通过pcd_viewer.exe来观察平滑后的点云,如图3所示,用户可以用其他数据测试进行平滑前后的对比。
...pcd_viewer.exe bun0-mls.pcd
图3 平滑后的点云可视化效果
敬请关注PCL(Point Cloud Learning)中国更多的点云库PCL(Point Cloud Library)相关官方教程。
参考文献:
1.朱德海、郭浩、苏伟.点云库PCL学习教程(ISBN 978-7-5124-0954-5)北京航空航天出版社 2012-10
文档评论(0)