欢迎来到天天文库
浏览记录
ID:14665397
大小:523.00 KB
页数:4页
时间:2018-07-29
《基于多项式拟合的法线估计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、基于多项式拟合的法线估计、点云平滑和数据重采样本小节介绍基于移动最小二乘法(MLS)的法线估计、点云平滑和数据重采样。有时,测量较小的对象时会产生一些误差,这些误差所造成的不规则数据如果直接拿来曲面重建的话会使重建的曲面不光滑或者有漏洞。这些不规则很难用统计分析消除,所以为了建立完整的模型必须对表面进行平滑处理和漏洞修复。在不能进行额外扫描的情况下,我们可以通过对数据重采样来解决这一问题,重采样算法通过对周围数据点进行高阶多项式插值来重建表面缺少的部分。此外,由多个扫描点扫描结果配准后得到的数据直接拿来曲面重建的话会产生“双墙”等人造伪数据,即某块区域会
2、出现重叠的两个曲面。重采样算法也可以对这个问题进行处理。图1法线估计结果如图1左侧,是一个由两组点云数据配后得到的数据集的表面法线估计的结果,由于配准造成的误差,法线有噪声,即使在同一平面上的点集,其法线方向不严格一致;右侧则是同一数据集经过点云平滑后再进行法线估计所得到的结果,明显比左图准确一致的多。为了对重采样前后曲率特征进行量化衡量,我们绘制出了数据集中每点的曲率,得到图2,与上图可视化结果一致,平滑处理前的曲率特征方差很大,而平滑后的则方差较小。 图2曲率图本小节我们一起学习用最小二乘法对点云进行平滑处理的例子。代码首先,在PCL(PointCl
3、oudLearning)中国协助发行的书[1]提供光盘的第15章例1文件夹中,打开名为resampling.cpp的代码文件,同文件夹下可以找到相关的测试点云文件bun0.pcd。 解释说明下面对打开的文件关键语句进行解析。#include//PCL中所有点类型定义的头文件#include//打开关闭pcd文件的类定义的头文件#include//kdtree搜索对象的类定义的头文件#include//最小二乘法平滑处理类定义的头文件以上代码进行与本程序相关的类和函数的头文件声明。pcl::PointCloud::Ptrcloud(newpcl::Poin
4、tCloud());pcl::io::loadPCDFile("bun0.pcd",*cloud);//加载bun0.pcd文件由于例子中用到的pcd文件只有XYZ坐标,我们把它加载到PointCloud对象中,XYZ坐标字段在本演示中是必需有的,其他字段可有可无,但如果存在也会在处理后的输出点云中被保留。mls.setComputeNormals(true);//设置在最小二乘计算中需要进行法线估计进行法线估计,如果不需要法线估计,就跳过这一步。pcl::MovingLeastSquaresmls;//定义最小二乘实现的对象mlsMovingLeast
5、Squares模板类的第一个模板参数为点类型PointXYZ是设置输入点云类型的,输入的数据中只有xyz坐标字段,它在输出的时候被平滑了,而第二个模板参数为点类型PointNormal,即输出为只包含法线的点云。mls.setPolynomialFit(true);可以通过不需要多项式拟合来加快平滑速度,设置为ture时则在整个算法运行时采用多项式拟合来提高精度,缺省值和其他用来控制平滑过程的参数请参照相关类的API。pcl::io::savePCDFile("bun0-mls.pcd",mls_points);//保存结果如果法线和处理后的原始数据必须
6、在相同PointCloud对象中,则需要将这两字段连接起来形成新的点云。编译并运行该程序利用光盘提供的CMakeLists.txt文件,在cmake中建立工程文件,并生成相应的可执行文件,生成执行文件后,就可以运行了,在cmd中键入命令:...>resampling.exe也可以通过pcd_viewer.exe来观察平滑后的点云,如图3所示,用户可以用其他数据测试进行平滑前后的对比。...>pcd_viewer.exebun0-mls.pcd图3平滑后的点云可视化效果敬请关注PCL(PointCloudLearning)中国更多的点云库PCL(Point
7、CloudLibrary)相关官方教程。参考文献:1.朱德海、郭浩、苏伟.点云库PCL学习教程(ISBN978-7-5124-0954-5)北京航空航天出版社2012-10
此文档下载收益归作者所有