三维点云数据拾取与可视化技术

第42卷第7期2019年7月
测绘与空间地理信息
GEOMATICS&SPATIALINFORMATIONTECHNOLOGY
Vol.42ꎬNo.7Jul.ꎬ2019
收稿日期:2019-04-09
作者简介:叶美芬(1970-)ꎬ女ꎬ广东兴宁人ꎬ高级工程师ꎬ学士ꎬ主要从事地理信息系统工程㊁地图制图㊁工程测量㊁土地管理等工作ꎮ通讯作者:郑贵洲(1963-)ꎬ男ꎬ福建屏南人ꎬ教授ꎬ博士ꎬ2005毕业于中国地质大学(武汉)地图制图学与地理信息工程专业ꎬ主要从
事三维地理信息系统㊁时空数据挖掘及深度学习㊁资源与环境遥感㊁3S集成技术等相关工作ꎮ
三维点云数据拾取可视化技术
叶美芬1ꎬ郑贵洲2
(1.广东省地质测绘院ꎬ广东广州510800ꎻ2.中国地质大学ꎬ湖北武汉430074)
摘要:对三维点云数据进行高效的组织与管理是实现对目标对象三维重建和快速可视化的关键ꎮ本文深入研
究了在OSG环境下基于OpenGL计算着器的点云拾取算法ꎬ充分利用GPU强大的并行计算能力加速点的选取ꎮ提出了一种基于屏幕像素深度值的点云拾取算法ꎬ通过计算像素深度值判断鼠标单击点周围是否存在待拾取点ꎬ以此实现点的拾取ꎮ以VS2010为开发平台ꎬOSG为三维渲染引擎ꎬ使用C++编程语言结合Qt框架设计并实现了三维点云数据交互可视化平台ꎬ可快速渲染海量点云数据ꎬ交互拾取点云数据ꎮ关键词:三维点云ꎻ点云拾取ꎻ可视化
中图分类号:P237㊀㊀㊀文献标识码:A㊀㊀㊀文章编号:1672-5867(2019)07-0134-04
Technologyof3DPointCloudDataPickingandVisualization
YEMeifen1ꎬZHENGGuizhou2
(1.GeologySurveyingandMappingInstituteofGuangdongꎬGuangzhou510800ꎬChinaꎻ
2.ChinaUniversityofGeosciencesꎬWuhan430074ꎬChina)
Abstract:Efficientorganizationandmanagementof3Dpointclouddataisthekeytorealize3Dreconstructionandrapidvisualizationoftargetobjects.ThispaperhasstudiedindepththepointcloudpickingalgorithmbasedonOpenGLcomputeshaderunderOSGenvi ̄ronmentꎬwhichacceleratespointpickingbyusingthepowerfulparallelcomputingabilityofGPUꎬandproposesapointcloudpickingalgorithmbasedonthedepthvalueofthescreenpixelbycalculatingthepixeldepthvaluetodeterminewhetherthereisapointtobepickedupexistsaroundmouseclickpointinordertoachievethepointpicking.BasedonC++programminglanguageandQtframe ̄workꎬa3Dpointclouddatainteractivevisualizationplatformisdesigne
dandimplementedbyusingVS2010asdevelopmentplatformꎬ
andOSGas3Drenderingengine.Theplatformcanquicklyrenderandinteractivelypickmassivepointclouddata.Keywords:3Dpointclouddataꎻpointcloudpickingꎻvisualization
0㊀引㊀言来宾党建
激光雷达技术作为一种新型测量技术日益发展成熟ꎬ人们对于空间对象的探索也从二维空间上升到三维空间ꎮ激光雷达由于精度高㊁测量结果直观明了ꎬ已经被广泛应用于测绘㊁交通㊁应急救援㊁文化遗产等多个行业ꎮ相较于传统测量手段ꎬ激光雷达技术可以快速采集大量目标对象表面的三维点云数据ꎬ这些三维点云数据是海量离散点的数据集合ꎮ对三维点云数据进行高效的组织与管理是实现目标对象三维重建和快速可视化的关键ꎬ也是当前的研究热点之一ꎮ构建点云数据可视化系统ꎬ需要对场景中的对象执行空间变换㊁属性查询以及编辑等操作ꎬ这些操作都需要通过点云拾取来完成ꎬ点云数据快速拾取是处理海量点云数据交互操作的重要基础ꎮ目
前点云数据拾取方面ꎬ比较常用的是场景几何相关的拾
取方法[1-
2]ꎻ三维点云数据由一系列的空间离散点组成ꎬ点是没有形状大小的ꎬ由于其特殊性ꎬ直接通过射线求交的拾取方法并不适用于点云数据ꎬ郑德炯等基于八叉树索引结构实现了三维点云的快速拾取[3]ꎻ随着GPU技术的不断发展ꎬ基于GPU的拾取算法也得以实现ꎬ张嘉华等提出了基于几何着器的点云拾取算法[4]ꎮ国内外很多学者对点云数据可视化开展了深入的研究ꎬLevoyM等提出了一种通过对深度图形进行重采样得到不同层级金字塔的点云数据处理方法ꎬ在一定程度上解决了大数据量点云的渲染问题[5]ꎮZwicker等开发了开源的基于点采样的交互式几何处理软件PointShop3Dꎬ但不适用于海量点云数据[6]ꎮHoppe通过使用GPU来实现三维场景的实时性渲染ꎮ徐旭东等采用LOD技术实现了点云数据的高效
检索和可视化ꎬ但没有进行大数据量的实验[7]ꎮ陈驰等设计了一种利用多线程分时加载的双层四叉树索引算法实现内外存储器中的点云数据管理与快速调度[8]ꎮ本文在前人研究的基础上ꎬ开展了基于OpenGL计算着器的拾取算法和基于屏幕像素深度值的点云快速拾取算法研究ꎬ以OSG作为三维渲染引擎ꎬ结合Qt框架ꎬ使用C++编程语言实现了点云数据的三维可视化和快速拾取ꎮ
1㊀基于OpenGL计算着器的拾取算法
板东组
计算着器(ComputeShader)是OpenGL从4.3版本开始支持的新特性ꎬ独立于图
形渲染管线ꎬ是一个单独的计算模块ꎮOpenGL为计算着器提供了一组内置变量[6]ꎮgl_WorkGroupSize表示本地工作组的大小ꎬ由布局限定符local_size_x㊁local_size_y㊁local_size_z指定ꎻgl_NumWorkGroups是一个向量ꎬ包含了主程序中指定的工作组数目ꎻgl_LocalInvocationID表示当前执行单元在本地工作组中的位置ꎻgl_WorkGroupID表示当前本地工作组在全局工作组中的位置ꎻgl_GlobalInvocationID表示当前执行单元在全局工作组中的位置ꎻgl_LocalInvocationIndex则可以用一维的索引表示二维或者三维的数据ꎬ使用这些内置变量可以很方便地在并行计算过程中定位数据并进行操作ꎮ
在OSG环境下基于OpenGL计算着器的拾取方法的主要思想是将点云数据进行一系列的空间变换ꎬ得到其投影到屏幕上的坐标ꎬ然后在屏幕坐标系内计算距离鼠标点最近的点ꎬ以该点作为拾取点ꎬ如图1所示ꎬ具体实现步骤是
:
图1㊀基于计算着器的拾取算法流程图Fig.1㊀Flowchartofpickupalgorithmbasedon
㊀㊀㊀computationalshader
1)在主程序中将点云点坐标存入顶点数组vertexArr中ꎬ该顶点数组包含4个分量ꎬ前3个表示其空间坐标ꎬ第4个分量初始化为0ꎬ表示是否满足距离判断条件ꎬ若满足ꎬ则为1.0ꎬ反之为0ꎮ申请一个osg::VertexBufferObject类型的对象vboꎬ调用函数setArray()将vertexArr绑定到vbo上ꎬ作为计算着器的输入数据ꎮ将场景MVP矩阵即鼠标屏幕点坐标设为uniform变量用于传入计算着器中ꎬ设置场景几何节点的属性ꎬ将其作为叶节点的子节点ꎬ并开启VBO模式ꎮ
2)在主程序中申请一个osg::Program类型的变量ꎬ并绑定计算着器ꎬ设置工作组大小ꎮ程序指定一个线程组包含256个线程ꎬ每个线程用于处理一个数据点ꎬ因此设置的工作组大小为(int)((vertexArr.size()+256-1)/256)ꎮ
3)计算着器中ꎬ首先对传入点云数据点进行空间变换ꎬ即坐标值乘以传入的空间变换矩阵VPW计
算得到ꎬ将三维空间点映射到二维屏幕上ꎮ然后设定阈值Dꎬ分别计算每个点与传入的鼠标屏幕点坐标的距离ꎬ距离平方小于D的将纹理缓存写为1ꎬ反之则为0ꎮ计算着器中ꎬ使用imageLoad()读取点的坐标ꎬ通过gl_GlobalIn ̄vocationID.x获取当前的存储位置ꎬ使用imageStore()函数更新缓存ꎮ
4)在计算着器中完成计算后ꎬ通过调用vbo->getArray(0)得到顶点数组ꎬ取出顶点数组中第4个分量为1.0的点ꎬ在这些点中求出距离鼠标单机屏幕点最近的点ꎬ即为拾取点ꎮ
2㊀基于屏幕像素深度值的拾取算法
像素深度是指该像素点在3D世界中距离摄像机的距离ꎬ即Z坐标ꎮZ坐标和X㊁Y坐标一样ꎬ在执行变换㊁裁切和透视操作后ꎬZ的范围为[-1.0ꎬ1.0]ꎮDepthRange映射指定Z坐标的变换ꎬ这与用于将X和Y映射到窗口坐标的视口变换类似ꎬ但由于深度缓存的硬件方案对应用程序来说是隐藏的ꎬ因此调用DepthRange的参数是[0.0ꎬ1.0]ꎬ也就是说ꎬ相机的近平面被映射为0.0ꎬ远平面被映射为1.0ꎬ深度值越大ꎬ离相机越远ꎮ深度值存储在深度缓存(ZBuffer)中ꎬ可以用深度缓存的位数衡量深度缓存的精度ꎬ位数越高ꎬ则精确度越高ꎮ
本文提出一种基于屏幕像素深度值的三维点云数据拾取算法ꎬ该算法的主要思想是:如果屏幕内某像素上存在渲染对象ꎬ则其像素深度值位于(0.0ꎬ1.0)之间ꎬ反之ꎬ其深度值为1.0ꎮ对场景主相机设
置回调获取以鼠标单击点的屏幕像素为中心的9ˑ9区域范围内的81个深度值ꎬ按照一定的顺序遍历这些深度值ꎬ取其中第一个值不为1.0的像素作为拾取点的像素ꎬ根据其坐标通过矩阵变换反算真实三维坐标ꎬ并将其标记框渲染出来ꎬ所标记的点即为拾取点ꎮ如图2所示ꎬ具体实现步骤如下:
1)首先需要编写相机回调类ꎬ用来计算以鼠标单击点为中心的9ˑ9区域范围内的81个深度值ꎮ_x和_y是鼠标点击屏幕的像素坐标ꎬ_zValue是一个float类型的指针ꎬ指向取出的深度值ꎬ_depthImage是一个osg::Image类型的对象ꎬ用来存储屏幕像素信息ꎮ需要注意的是voidoperator()(osg::RenderInfo&renderInfo)const是一个
31第7期
叶美芬等:三维点云数据拾取与可视化技术
const函数ꎬ_x和_y会随着鼠标单击事件改变ꎬ因此需要将其设为mutable类型
尾矿库
图2㊀基于屏幕像素深度值的拾取算法流程图Fig.2㊀Flowchartofpick-upalgorithmbasedon
㊀㊀㊀㊀depthvalueofscreenpixel2)设置主相机回调ꎬ并将_depthImage与其关联起来ꎮ//实例化一个MasterCameraCallback类对象
_masterCameraCb=newMasterCameraCallback(main ̄Camera)ꎻ
//关联主相机和_depthImage
mainCamera->attach(osg::Camera::DEPTH_BUFFERꎬ㊀
_masterCameraCb->getDepthImage()ꎬ0ꎬ0)ꎻ//设置回调
mainCamera->setPostDrawCallback(_masterCamer ̄aCb)ꎻ
3)获取了以鼠标单击点为中心的9ˑ9区域范围内共81个像素的深度值ꎬ从中心点开始ꎬ其正上方的像素作为第二个遍历对象ꎬ按照顺时针的顺序依次遍历这些深度值ꎬ若所有像素的深度值均为1.0ꎬ则结束此处拾取操作ꎻ反之ꎬ取第一个深度值不为1.0的像素点作为拾取点ꎬ记录其坐标(xꎬyꎬdepthValue)ꎮ
4)根据屏幕像素点坐标反算真实三维坐标ꎮ首先计算空间变换矩阵VPWꎬ用步骤3)得到的屏幕像素点坐标右乘VPW矩阵的逆矩阵inverseVPWꎬ即可得到真实的三维坐标ꎮ
//计算空间变换矩阵VPW
osg::MatrixVPW=camera->getViewMatrix()∗camera->getProjectionMatrix()∗
camera->getViewport()->computeWindowMatrix()ꎻ//计算VPW矩阵的逆矩阵
osg::MatrixinverseVPW=osg::Matrix::inverse
(VPW)ꎻ
//计算真实三维坐标
_pointCoord=osg::Vec3f(xꎬyꎬdepthValue)∗inve ̄rseMVPWꎻ
5)根据得到的三维空间坐标ꎬ将其标记框渲染在屏幕上ꎬ所标记的点即为拾取点ꎮ
3㊀三维点云数据可视化
在点云索引和拾取方法的研究基础上ꎬ设计并实现了三维点云数据的交互可视化平台ꎮ交互可视化平台整体架构可以划分为工程管理模块㊁三维可视化模块㊁业务功能模块以及信息显示模块ꎬ工程管理模块主要负责管理用户所创建的工程ꎬ包括新建工程㊁打开工程㊁保存工程㊁关闭工程㊁工程信息设置等功能ꎮ工程配置信息以XML文件方式存储ꎮ三维可视化模块主要负责显示三维点云数据ꎬ并实现可交互式操作ꎮ业务功能模块根据具体的业务需求进行相关的功能开发ꎬ并将其展示在三维显示窗口ꎮ信息显示模块主要负责平台信息的显示工作ꎬ主要包括数据信息㊁程序运行信息以及平台状态信息ꎬ分别对应于程序运行界面中的面板窗口㊁控制台窗口以及状态栏ꎮ
三维可视化模块是主要模块之一ꎬ主要包括多线程数据调度㊁数据可视化以及用户交互三个方面ꎮ多线程数据调度通过不同的线程完成数据的读入㊁处理和渲染工作ꎮQThread是Qt的线程管理类ꎬ使用QThread将设备端数据读入过程置于一个线程中ꎬ提高读取效率ꎻ点云索引构建的线程类基于线程库pthread进行编写ꎬ应用STL模板实现ꎻ点云渲染工作则交由OSG内部的渲染线程
完成ꎮ数据可视化主要是点云数据的渲染工作ꎬ以及三维窗口中相关数据的折线图更新显示ꎬ前者在索引构建的基础上通过OSG进行渲染ꎬ后者则通过构造HUD相机实现ꎮHUD节点可以在屏幕上固定位置显示ꎬ不随场景变换而变换ꎬ设备数据折线如图3所示ꎮ用户交互主要包括鼠标事件和键盘事件ꎬ具体包括场景漫游㊁六视图观察㊁点云和航迹线显隐操作及单点拾取等操作ꎮ场景漫游的实现需要编写继承自osgGA::TerrainManipulator的Scene ̄Manipulator类ꎬ并通过设置场景中心和观察方向ꎬ实现视点跟随功能和六视图观察功能ꎬ如图4所示ꎮ点云和航迹线的显示和隐藏操作主要通过osg::Switch节点实现ꎬ该节点类似于开关ꎬ通过setChildValue(constNode∗childꎬboolvalue)函数设置其子节点的显示或隐藏属性ꎻ单点拾取功能则在基于屏幕像素深度值的拾取算法基础上进行实现ꎬ如图5所示
图3㊀设备数据折线图
Fig.3㊀Equipmentdatalinechart
31㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀
测绘与空间地理信息㊀
㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀2019年
图4㊀三维场景效果图Fig.4㊀3Dscene
renderings
图5㊀点云拾取效果图
Fig.5㊀Pickuppointcloudrenderings
4㊀结束语
本文以OSG作为三维渲染引擎ꎬ结合Qt框架ꎬ使用C
++编程语言实现了点云数据的三维可视化和可交互拾取
功能ꎮ提出了一种基于屏幕像素深度值的点云拾取算法并加以实现ꎬ最后对算法进行了平台集成ꎬ平台展示效果良好ꎬ实现了点云的快速拾取ꎮ本文虽然实现了三维点云数据的可视化与交互拾取操作ꎬ但仍存在很多不足:如点云渲染缺乏LOD机制ꎬ所有数据点以同一分辨率显示ꎬ㊀㊀
影响运行效率ꎻ场景对象和渲染效果过于单一ꎬ有必要将点云组织成以线㊁面㊁体以及三角网等方式显示的场景对象ꎬ增强平台的可操作性ꎻ交互拾取有待完善ꎬ实现多点拾取㊁框选以及套索拾取等方法是下一步的研究重点ꎮ
参考文献:
[1]㊀王剑ꎬ陆国栋ꎬ谭建荣.三维场景中图形对象的拾取方法[J].机械ꎬ2004ꎬ31(7):29-32.
[2]㊀朱明亮ꎬ董冰ꎬ王祎ꎬ等.三维场景中基于视口空间的拾取算法[J].工程图学学报ꎬ2008ꎬ29(2):94-97.[3]㊀郑德炯ꎬ卢科青.基于自适应八叉树的三维点云快速拾
取方法研究[J].JournalofMechanical&ElectricalEngi ̄neeringꎬ2016ꎬ33(4):417-420.[4]㊀张嘉华ꎬ梁成ꎬ李桂清.GPU三维图元拾取[J].
工程图学学报ꎬ2009ꎬ30(1):46-52.
智能灯光控制系统[5]㊀LevoyMꎬPulliKꎬCurlessBꎬetal.ThedigitalMichelangelo
project:3Dscanningoflargestatues[C]//Proceedingsofthe27thannualconferenceonComputergraphicsandinter ̄activetechniques.ACMPress/Addison-WesleyPublishingCo.ꎬ2000.
[6]㊀ZwickerMꎬPaulyMꎬKnollOꎬetal.Pointshop3D:An默洛尼卫生洁具
interactivesystemforpoint-basedsurfaceediting[C]//ACMTransactionsonGraphics(TOG).ACMꎬ2002.[7]㊀徐旭东ꎬ李泽.三维激光点云数据的可视化研究[J].计算机科学ꎬ2016ꎬ43(z1):175-178.
[8]㊀陈驰ꎬ王珂ꎬ徐文学ꎬ等.海量车载激光扫描点云数据的
快速可视化方法[J].武汉大学学报:信息科学版ꎬ2015ꎬ
40(9):1163-1168.
[编辑:任亚茹]
(上接第133页)
㊀㊀接下来为了解释时间序列的学习内容ꎬ将LSTM这一网络层进行了相应的学习可视化ꎮ以一个格网为例ꎬ同样也是8个神经元ꎬ对应了8条线ꎬ每条曲线就代表了这个神经元的学习变化ꎬ首先是输入LSTM时刻的变化曲线ꎬ隐藏单元的可视化ꎬ可以看到输入LSTM的时间还没有太明显的特征ꎬ从隐藏单元的可视化结果来看ꎬ很容易发现隐藏单元学习到了数据中的一些特征ꎬ时间周期性效果明显ꎬ也可以进一步说明模型的有效性ꎮ
4㊀结束语
文章用一个长时卷积深度模型来进行交通流的预测ꎬ从交通流数据本身的特征出发ꎬ从时间和空间两个角度来进行考量ꎬ并通过实验对模型的效果进行了验证ꎬ可以看出来模型在预测精度方面有较好的表现力ꎬ而且通过对模型的可视化分析ꎬ进一步解释了模型的学习能力ꎮ在未来的工作中ꎬ会细化时间的属性信息ꎬ对模型进行进一步的优化ꎬ争取在更短的时间内得到更好的效果ꎮ
参考文献:
[1]㊀BengioꎬY.ꎬP.SimardꎬP.Frasconi.Learninglong-te
rm
dependencieswithgradientdescentisdifficult[J].IEEETransactionsonNeuralNetworksꎬ2002ꎬ5(2):157-166.决战朝鲜攻略
[2]㊀ChenꎬH.ꎬS.Grant-Muller.Useofsequentiallearningfor
short-termtrafficflowforecasting[J].TransportationRe ̄searchPartCEmergingTechnologiesꎬ2001ꎬ9(5):319-336.
[3]㊀DingꎬQ.Y.ꎬX.F.WangꎬX.Y.Zhangꎬetal.ForecastingTrafficVolumewithSpace-TimeARIMAModel[J].Ad ̄vancedMaterialsResearchꎬ2010(156-157):979-983.[4]㊀王晓原ꎬ刘海红ꎬ王凤ꎬ等.交通流短时预测理论研究进展[J].交通运输研究ꎬ2006(12):156-162.[5]㊀夏劲ꎬ郭红卫.国内外城市智能交通系统的发展概况与趋势及其启示[J].科技进步与对策ꎬ2003ꎬ20(1):
176-179.
[6]㊀郑宇.城市计算  大数据解决城市问题[J].中国孵化器ꎬ2014(6):30-35.[7]㊀朱中ꎬ杨兆升.实时交通流量人工神经网络预测模型
[J].中国公路学报ꎬ1998(4):89-92.[编辑:刘莉鑫]
31第7期
叶美芬等:三维点云数据拾取与可视化技术

本文发布于:2024-09-20 11:42:05,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/461788.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   拾取   可视化   深度   实现   进行   屏幕
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议