机载三维激光扫描仪软件系统构建

2017-01-21 15:27王吕梁郭唐永李世鹏朱威王磊
软件导刊 2016年12期
关键词:点云

王吕梁+郭唐永+李世鹏+朱威+王磊

摘 要:三维激光测绘已广泛应用于城市测绘中,机载三维激光扫描仪是当前测绘领域的一个新标杆,但大部分技术仍由国外垄断,研发机载三维激光扫描仪和相配套的软件尤为必要。机载三维激光扫描仪研制需要从硬件和软件两个部分着手,从扫描仪得到原始点云数据后,通过相应软件对数据作后期处理,设计出友好的交互界面,展现场景,实现三维重构。

关键词:机载激光扫描仪; 点云; 三维重构

DOIDOI:10.11907/rjdk.162060

中图分类号:TP319

文献标识码:A文章编号:1672-7800(2016)012-0087-02

0 引言

机载三维激光测量技术是一项前沿性研究课题[1]。机载三维激光扫描仪具有很多传统测绘仪器无法比拟的优越性,有着广泛的应用领域[2],如地形测绘、灾害调查与环境监测、森林数字高程图获取、城市三维建模等,还应用于工程建设、逆向工程、电线管道布局、3D打印等领域。我国大部分激光扫描仪主要靠国外公司提供相关技术支持。研制出拥有自主知识产权的机载三维激光扫描仪具有重要意义。本文以扫描仪系统硬件为出发点,介绍硬件系统架构及其技术难点,针对硬件特点分析软件功能需求,最后利用点云库完成软件系统开发。

1 系统硬件架构

1.1 硬件架构分析

本系统分为仪器和软件两个部分。仪器设计需满足测量要求,实现高速精准扫描、全波段数据采集,具有效率高、可靠性好、便于维护等特点。仪器系统主要由6个部分组成,即激光发射系统、光学扫描镜与收发光路系统、高精度时间测量系统、高精度频率源系统、数据采集与处理系统、图像处理系统,如图1所示。

1.2 仪器功能实现

硬件系统的核心为扫描镜收发光路系统、高精度时间测量与控制系统和数据采集系统[4]。收发光路系统主要包括卡塞格林望远镜、变焦扩束准直系统、窄带光滤波等。由于激光的单色性较好,主要对蓝绿光波进行接收,采用可变增益的PMT光电倍增管,实现100dB的动态接收范围,确保能够接收到微弱的回波信号。

扫描仪测距由一个高精度时间测量系统实现,采用FPGA搭建控制电路来控制时间脉冲触发,采用先进的时间频率测控技术驯服高稳定度的铷原子钟,将高稳定度、低相噪双槽恒温晶振锁定在铷原子钟上,将GPS卫星的长期稳定性原子频标的中期稳定性与高稳晶振的短期稳定性完美结合,使采样频率同步在GPS原子钟信号上,保证激光扫描仪的探测精度。

数据采集系统由高速数字采集卡和磁盘阵列存储服务器构成。高速数字采集卡将光电转换系统输出的回波模拟信号转换为数字信号。机载三维激光扫描仪的探测发射脉冲宽度小于5ns,保证回波脉冲数据采集时不失真,系统设计的回波采样率达到1GHz,采样位数为12位。

2 系统需求分析

机载三维激光扫描仪主要用在测绘领域,分为近距离和远距离两种,其中远距离激光主要是激光雷达系统,近距离扫描仪主要为微软的Kinect[3-4]。

机载三维激光扫描仪软件系统关键为点云数据读取、数据分析处理及场景重建。所设计的软件要能够处理扫描仪的原始数据,包括数据分析处理、滤波精简、三维重建等。

软件系统主要由4个部分组成,包括数据读写、点云显示、滤波、网格重建[5]。实现激光扫描仪数据处理和使用,与扫描仪器构成一套完备的测绘系统,软件系统功能模块如图2所示。

3 系统软件实现

软件系统的关键技术在于点云读写存储、滤波和网格重建。基于QT平台和PCL(Point Cloud Library),通过CMake编译VTK(Visualization Toolkit)QT插件,实现可视化与点云库协同操作,由QT提供交互界面。

点云读写存储由PCL提供的IO类继承而来,主要针对PCD格式的点云数据和PLY格式的网格数据[6],格式统一,便于数据处理。读取点云数据时先根据文件后缀判断格式,是否以.pcd或者.ply格式结尾,是则读取,否则返回。读取后对数据进行稀疏判断,若为密集数据,则从数据中剔除NAN字符,完成数据读取。同理,完成点云的存储操作,作下一步处理,读取点云数据的程序代码如下:

QString filename = QFileDialog::getOpenFileName(this, tr("Open Point Cloud"),"D:",tr("Point Cloud Data(*.pcd *.ply )"));

PCL_INFO("File chose: %s\\n", filename.toStdString().c_str());

pcl::PointCloud:Ptr cloud_tmp(new pcl::PointCloud);

if (filename.isEmpty())

return;

int return_status;

if (filename.endsWith(".pcd", Qt::CaseInsensitive))

return_status = pcl::io::loadPCDFile(filename.toStdString(), *cloud_tmp);

else

return_status = pcl::io::loadPLYFile(filename.toStdString(), *cloud_tmp);

if (return_status != 0)

{

PCL_ERROR("Error reading point cloud %s\\n", filename.toStdString().c_str());

return;

}

//To determine whether the point cloud is dense or not

if (cloud_tmp->is_dense)

{

pcl::copyPointCloud(*cloud_tmp, *cloud);

}

else

{

PCL_WARN("Cloud is not dense! Non finite points will be removed\\n");

std::vector vec;

pcl::removeNaNFromPointCloud(*cloud_tmp, *cloud, vec);

}

点云的视图切换操作通过设置相机的位置矩阵函数setCameraPosition()实现,通过给定不同的矩阵参数,用户可以快速切换点云视角,选择出最好的视角场景效果。由编译后的VTK库生成的QVTKWidget控件提供视图操作,用户可以实现平移旋转与缩放等基本三维可视化操作。

点云滤波分为直通滤波、体素栅格滤波和统计学外点移除滤波3个部分。这些滤波方法主要目的是精简数据,去除飞点等噪声点,减小数据体积,优化点云数据结构,方便可视化操作和下一步数据处理,提高点云质量和计算速度。其中统计学外点移除滤波部分代码如下:

PointCloudT_XYZ::Ptr cloud_filtered(new PointCloudT_XYZ);

pcl::StatisticalOutlierRemoval outlierRemoval;

outlierRemoval.setInputCloud(cloud);

outlierRemoval.setMeanK(ui->lineEditMeanK->text().toInt());

outlierRemoval.setStddevMulThresh(ui->lineEdit_StddevMulThresh->text().toDouble());

outlierRemoval.filter(*cloud_filtered);

pcl::copyPointCloud(*cloud_filtered, *cloud);

点云的网格生成由贪婪投影三角网格化、栅格投影网格化和移动最小二乘法3个部分组成。贪婪投影三角网格化实现无序点云的快速重构,性能良好。栅格投影网格化计算速度稍慢,但可以实现破面、孔洞等的修复,栅格大小由用户界面设置。移动最小二乘法采用的是多项式插值方法,设置邻域点的个数和多项式阶数,在该范围内多项式拟合,拟合后的曲面进行估计法线,使法向量有序化,再对设置半径范围内的点采样处理,让点云分布均匀,完成这些操作后再进行存储,进一步网格化重建模型,得到的网格更加致密光滑。移动最小二乘法的实现代码如下:

pcl::search::KdTree::Ptr tree(new pcl::search::KdTree);

mls.setInputCloud(cloud);

mls.setSearchMethod(tree);

mls.setPolynomialFit(true);

mls.setPolynomialOrder(ui->lineEdit_MLS_setPolynomialOrder->text().toInt());

mls.setComputeNormals(false);

mls.setSearchRadius(ui->lineEdit_MLS_setSearchRadius->text().toDouble());

mls.setUpsamplingMethod(mls.SAMPLE_LOCAL_PLANE);

mls.setUpsamplingRadius(ui->lineEdit_MLS_setUpsamplingRadius->text().toDouble());

mls.setUpsamplingStepSize(ui->lineEdit_MLS_setUpsamplingStepSize->text().toDouble()

mls.process(*outputCloud);

4 结语

通过机载三维激光扫描仪系统构建,探讨了机载三维激光扫描仪技术,实现了仪器高速数据测量、采集和数据处理。配合编写的机载三维激光扫描仪软件系统,实现了点云数据的读写、精简滤波与三维重建,完成了设计要求和精度要求,具有一定的应用推广价值。后期研究中,将在仪器方面提高数据高采样频率、改进扫描点的算法、提高数据传输实时性及增大极限扫描距离等,在软件方面提高软件的稳定性、增加线程操作、优化算法、支持更多点云格式文件的操作、改善用户体验等,为三维激光扫描仪提供更多的技术支持。

参考文献:

[1] 党梦林,裴海龙. 基于QT的机载三维激光地形测绘软件构建[J]. 计算机测量与控制,2013(4):1084-1086+1089.

[2] 张小红. 机载激光雷达测量技术理论与方法[M]. 武汉:武汉大学出版社,2007.

[3] 李世鹏,郭唐永,罗青山,等.海陆一体机载激光扫描仪的设计[J]. 大地测量与地球动力学,2013(S2):58-60,70.

[4] 钟棉卿. 机载激光雷达系统初步方案研究[D].西安:西安科技大学,2012.

[5] 陈镔. 机载激光测量系统设计与实现[D].广州:华南理工大学,2010.

[6] 朱德海.点云库PCL学习教程[M].北京:北京航空航天大学出版社,2012.

(责任编辑:陈福时)

猜你喜欢
点云
基于立体视觉的无人机位姿测量方法
基于DNSS与点到平面的ICP结合的点云配准算法
基于Geomagic的汽车内门把手逆向设计
基于三维激光扫描点云的树冠面积快速精准计算方法