插件式架构的大规模三维点云可视化平台的制作方法

文档序号:24973433发布日期:2021-05-07 22:45阅读:92来源:国知局
插件式架构的大规模三维点云可视化平台的制作方法

本发明涉及一种大规模三维点云可视化平台,特别涉及一种插件式架构的大规模三维点云可视化平台,属于三维点云可视化平台技术领域。



背景技术:

点云是在某种坐标系下若干数据点的集合,在三维坐标系下,这些数据点用点的三维几何坐标信息定义,点云还可以带有颜色、光照法向量、强度等其它信息,随着点云技术的发展,点云的获取变得越来越简单便捷,成本也大幅降低。如今获取点云的方式多种多样,既可通过硬件传感器,也可通过软件合成的方式获取,本发明主要是使用各类三维扫描仪获取的点云。三维点云获取技术的日渐成熟,也推进了点云在各行业的应用,当前点云已被广泛利用在测绘、数字城市建设、逆向工程、工业设计、文物修复等领域,并有向影视动画、机器人、工业质量控制等新领域拓展的趋势,点云在各领域的广泛应用,也使对点云数据的处理与分析成为研发和运用热门。

点云技术的发展涉及计算机图形学、地学、测绘学、逆向工程等多个学科领域,各领域对点云技术的发展方向和应用各有不同,关注点有所差异,但是还是存在很多普遍共通的研发内容,而除了算法的研发,点云的可视化也是一个非常重要的研发热点,也是后续算法研发的基础。

但由于现有技术点云获取方式的局限性和缺陷性,点云数据在用于实际分析之前要做前置处理,以最大程度还原三维物体真实性,例如通过三维激光扫描仪获取点云过程中,由于受测量设备测量范围限制以及被测物体外形复杂性等原因,扫描一次只能得到物体某一部分的数据,这样通过多次扫描最终得到的是物体不同角度多次定位测量的点云数据,必须经过点云配准拼接才能得到物体整体的点云数据。同样,点云的去噪平滑、点云精简等也是点云前置处理的重要内容,点云数据包含三维物体的几何、颜色等丰富信息,由于点云具有数据量大的特征,使得点云可视化成为一个具有挑战性的问题,现有技术中,技术人员需要自己开发针对点云的可视化系统并且将自己的算法集成进去,或只进行算法的开发,然后使用第三方的点云可视化平台观察处理后的点云,前者费时费力,工作效率很低,技术人员往往不具备开发点云可视化系统的时间和精力;而后者则只能够利用第三方可视化系统观察处理后的点云,将算法集成进系统中还需要大量的额外工作,具有一定的难度,且大量第三方可视化系统并非开源,无法获取源码以便二次开发。

现有技术依然没有从根本上解决大规模三维点云可视化问题,现有技术的难点和本发明解决的问题主要集中在以下方面:

第一,三维点云一般数据量较大,给点云数据的高效可视化带来较大难度,现有技术的点云可视化平台由于缺少扩展性,造成点云算法的研发和点云的可视化互相独立,技术人员必须先将算法处理结果写入到文件,再使用可视化系统观察结果;并且点云的算法处理也分为几个步骤进行,技术人员对点云数据进行处理的过程中,会产生很多中间数据和中间结果,这些中间数据以独立文件的方式存储,而中间结果得不到完整保存;在技术人员编写算法过程中,为了得到最理想的结果,需要多次修改程序中的参数,比较不同参数下得到的处理结果,由于算法处理与可视化之间互相独立,技术人员需要不断的重新编译运行程序,并将不同参数状态下的算法处理结果写入到不同的文件中,不仅效率极低,也大幅增加了后期将算法集成到现有平台进行生产应用的工作量;

第二,现有技术点云获取方式局限性和缺陷性较大,点云数据在用于实际分析之前要做前置处理,以最大程度还原三维物体真实性,通过三维激光扫描仪获取点云过程中,由于受测量设备测量范围限制以及被测物体外形复杂性等原因,扫描一次只能得到物体某一部分的数据,这样通过多次扫描最终得到的是物体不同角度多次定位测量的点云数据,必须经过点云配准拼接才能得到物体整体的点云数据,由于点云具有数据量大的特征,使得点云可视化成为一个具有挑战性的问题,现有技术中,技术人员需要自己开发针对点云的可视化系统并且将自己的算法集成进去,或只进行算法的开发,然后使用第三方的点云可视化平台观察处理后的点云,前者费时费力,工作效率很低,技术人员往往不具备开发点云可视化系统的时间和精力;而后者则只能够利用第三方可视化系统观察处理后的点云,将算法集成进系统中还需要大量的额外工作,具有一定的难度,且大量第三方可视化系统并非开源,无法获取源码以便二次开发;

第三,现有技术的点云可视化平台研发存在明显短板,计算机图形领域的点云可视化软件倾向于片面的显示,普遍采用单文件的方式,平台没有良好的可扩展性,无法进行灵活的定制;测绘学和地学领域大部分只关注lidar数据,对其它数据类型的点云支持程度不够,激光扫描仪硬件制造商的配套软件也只专注于单一数据的可视化、数据处理、校准修正等功能,针对点云的算法模块相对薄弱,且无法灵活的进行算法扩展;对于逆向工程领域,点云规模较小,且只针对逆向工程中点云数据的曲线曲面拟合,功能相对单一;

第四,现有技术的穷举法求解网络服务组合问题,列举出所有的网络服务组合方案,然后计算比较它们的服务质量性能并从中找出服务质量性能最优的网络服务组合方案,但随着问题规模的增大,穷举法所需占用的资源也就越多,当问题规模达到一定程度时,就很可能出现计算机内存溢出、计算时间过长等问题,采用穷举法解决服务质量优选的网络服务组合问题有很大的局限性;

第五,现有技术利用演化算法求解网络服务组合问题,包括人工神经网络、蚁群算法、可能组合方案一一列出后,再将这些组合方案两两对比,这个过程需要的计算资源非常大,对于这类高维组合问题,专注于寻求全局最优组合方案的做法是不可取的,应该专注于在众多组合方案中寻找满足自己需求的组合方案。



技术实现要素:

针对现有技术的不足,本发明提供一种基于插件的点云可视化系统,提供一种高扩展性的点云可视化平台,让点云算法人员可以在其基础上进行算法的相关可视化开发和应用,达到提高研发效率的目的,并且尽量的保存算法研发过程中的阶段性数据和结果,为点云算法研发提供保障。

为达到以上技术效果,本发明所采用的技术方案如下:

插件式架构的大规模三维点云可视化平台,基于点云数据规模大的特征,提出一种灵活快捷的复合式三维点云组织与存储结构,提出大规模三维点云的可视化多层次渲染优化方法,基于插件式系统的设计方法,在qt插件架构的基础上提出灵活快捷的插件接口和功能全面丰富的系统插件架构,在此基础上,使用插件式平台将点云算法处理和可视化平台融合,开发基于插件的大规模三维点云可视化平台,本发明主要包括:

第一,基于大规模三维点云,提出复合式三维点云组织与存储结构,以顺序存储方式为基础,辅助使用索引八叉树和k-d树存储方式满足特定需求;

第二,在复合式点云组织与存储结构基础上,提出大规模三维点云的可视化多层次渲染优化方法,利用点云的八叉树存储结构实现大规模点云渲染中的视域体裁剪调度和多细节层次表示方法,提高大规模三维点云的渲染效率,大规模三维点云的可视化多层次渲染优化方法具体包括基于树形层次场景组织的视域体裁剪调度、多细节层次表示方法、改进的视域体裁剪调度和多细节层次表示方法;

第三,在qt插件架构的基础上,设计实现功能全面丰富的平台插件架构和灵活快捷的点云插件接口,并在平台点云io插件架构的搭配下,根据不同类型的点云数据自动选取相应的读写插件进行点云的读写;基于点云算法设计点云的算法插件接口,并为该接口设计可视化界面,实现开发者可视化的进行算法输入数据及输入参数的调整,插件式点云可视化平台设计具体包括qt插件架构、插件架构与接口类;

第四,基于本发明的点云数据组织存储结构、场景渲染方法和平台插件架构,提出基于插件的大规模三维点云可视化平台,本发明的文件io插件能加载包括点云数据的多类数据,平台插件架构具有扩展性,并保留算法处理的结果和数据,插件式三维点云可视化平台的实现具体包括开发平台与开发工具、点云可视化平台界面设计、工程文件设计、属性查看与更新、插件管理器、场景可视化窗口、日志窗口。

插件式架构的大规模三维点云可视化平台,进一步的,复合式三维点云组织与存储结构:融合顺序存储、八叉树存储和k-d树存储方式,实现插件式架构的大规模三维点云可视化平台中的点云组织与存储;

平台采用顺序存储作为最基础的三维点云组织与存储结构,在顺序存储的基础上采用储存点索引值的八叉树,基于k-d树在点云范围搜索和近邻搜索上的优势,在索引值八叉树的基础上采用k-d树存储八叉树叶结点的点云索引数据,融合顺序存储、八叉树存储和k-d树存储三种方式,便于实现渲染的优化;

点云的顺序存储采用分块连续内存方法,采用一次申请一小块连续内存,然后模拟操作系统通过记录管理这些连续小内存的地址手动进行这些小块连续内存的管理,通过将这些小块内存的地址记录在一个数组中的方式进行管理和访问,基于迭代器设计模式实现对分块连续内存的迭代访问器,同时,在分块连续内存的连续存储方式基础上,采用存储索引的一对八式八叉树,即八叉树中不直接存储点云数据,只存储点云的索引,真正的点云数据只存储于分块连续内存中,既保留进行点云基础操作的便利性,又得以利用八叉树的优点进行平台后续的渲染优化,在构建八叉树时,不对八叉树的深度进行限制,仅根据叶结点最大点云数目的临界值建立八叉树,对于八叉树的每个叶结点的点云数据,采用k-d树的存储方式,利用k-d树范围搜索和近邻搜索的优点。

插件式架构的大规模三维点云可视化平台,进一步的,视域体裁剪调度:在应用程序端进行一次手动的裁剪,如果一个物体不在视域内,则直接在应用程序端将它剔除掉,不进行绘制,节省结点计算消耗的资源;

视域在opengl中以视景体定义,视景体即从当前视点观察场景的可见部分,在透视投影情形下,视景体的形状为一个被截去顶端的金字塔,金字塔的顶端是虚拟摄像机的位置,底端是视景体的远裁面,平截金字塔的平面为近裁面,近裁面也是透视投影的投影面,金字塔的近裁面和远裁面中间的部分为视景体,所有处于该区域的物体在当前视点下可见,视域体裁剪调度问题被转换为确定一个物体相对于视景体的包含关系,即物体完全被视景体包含、物体部分被视景体包含、物体处于视景体之外,确定包含问题首先确定视景体空间,视景体空间由六个面决定,分别为上下左右裁面、近裁面和远裁面,确定视景体空间演变为确定这六个面的方程;

首先假设一种更为简单的情形,即模型视图矩阵是单位矩阵,相机处在世界坐标系的原点,相机的upvector指向世界坐标系的y轴正方向,相机看向世界坐标系的z轴负方向,假设一个点u在相机坐标系中的坐标是u=(xyzw=1)t,模型视图矩阵为单位矩阵,该点在世界坐标系和相机坐标系下坐标一致,q=(qij)为4×4的投影矩阵,点u经过投影变换后的坐标为u′=(x′y′z′w′)t,经过投影变换,点u′位于齐次的裁剪空间内,视景体是一个轴对齐的立方体,它的尺寸由图形api预先定义,;opengl中尺寸为-w′<x′<w′,-w′<y′<w′,-w′<z′<w′,如果点u′在变换后的这个立方体里,投影变换之前的点u也应当是在未变换的盒子,即视景体内,由此能推导出以下结论:一是如果-w′<x′,则x′在左裁剪面的内半平面内;二是如果x′<w′,则x′在右裁剪面的内半平面内;三是如果-w′<y′,则y′在下裁剪面的内半平面内;四是如果y′<w′,则y′在上裁剪面的内半平面内;五是如果-w′<z′,则z′在近裁剪面的内半平面内;六是如果z′<w′,则z′在远剪面的内半平面内;

如果平面的方程用f*x+e*y+s*z+g=0表示,得出左裁剪平面的方程:

x(q11+q41)+y(q12+q42)+z(q13+q43)+w(q14+q44)=0

因为w=1,因此方程写成:

x(q11+q41)+y(q12+q42)+z(q13+q43)+(q14+q44)=0

则方程的四个参数分别为:

f=q11+q41

e=q12+q42

s=q13+q43

g=q14+q44

重复上面的步骤得出其它五个裁剪平面的方程,裁剪面对应平面方程参数总结为:

左:f=q11+q41,e=q12+q42,s=q13+q43,g=q14+q44

右:f=q41-q11,b=q42-q12,c=q43-q13,g=q44-q14

上:f=q41-q21,b=q42-q22,c=q43-q23,g=q44-q24

下:f=q21+q41,e=q22+q42,s=q23+q43,g=q24+q44

近:f=q31+q41,e=q32+q42,s=q33+q43,g=q44+q44

远:f=q41-q31,b=q42-q32,c=q43-q33,g=q44-q34

通过视景体,即这六个裁剪平面确定一个物体是否在视景体内,将这个问题转换成确定一个物体的轴对齐包围盒与视景体的包含关系,确定轴对齐包围盒相对于视景体的位置,先确定一个点是否在视景体内,假设点u=(xuyuzu)t,点u位于视景体内等价于该点同时满足处于六个裁剪平面的正半空间内,确定点与平面之间的相对位置关系将点的坐标代入到平面方程中求值,并判断值的正负,即:

g=fxu+eyu+szu+g

若g>0,则表示该点位于平面的正半空间内,若g=0,则表示该点位于平面上,若g<0,则表示该点位于平面的负半空间内,判断轴对齐包围盒与视景体的包含关系的方法:依次判断包围盒的每个顶点,如果全部位于视景体内,则该包围盒被视景体完全包含;如果只有部分顶点在视景体内,则该包围盒与视景体相交;如果所有顶点均处于视景体外,则该包围盒在视景体之外,判断场景中的物体是否在可视范围内,如果不在可视范围,直接将其剔除掉。

插件式架构的大规模三维点云可视化平台,进一步的,利用树形层次场景组织加速渲染:基于轴对称包围盒裁剪,当使用八叉树组织场景时,从根结点开始检查根结点的轴对齐包围盒与视景体之间的包含关系,如果轴对齐包围盒不在视景体内,则不绘制任何内容;如果轴对齐包围盒被视景体完全包含,则场景需完全绘制;如果轴对齐包围盒与视景体相交,则继续检查根结点的子结点,对于任意的中间结点,如果轴对齐包围盒完全在视景体内或完全不在视景体内的话,无需再检查其子结点,直接选择完全绘制或丢弃。

插件式架构的大规模三维点云可视化平台,进一步的,多细节层次表示方法:在三维场景中根据物体距离视点的远近,改变物体绘制的复杂度,本发明实现多细节层次表示采用静态多细节层次表示方法,利用前置处理产生不同细节层次的三维物体模型,并且存储在内存或外存里,在场景渲染过程中根据物体与视点距离的远近选择不同细节等级的模型进行绘制;

基于八叉树组织结构,分层的自底向上进行抽稀,将子结点的点云数据抽稀并存储在其父结点中,绘制不同层级结点保存的点云数据,实现多细节层次表示。

插件式架构的大规模三维点云可视化平台,进一步的,基于视域体裁剪调度方法和多细节层次表示方法,本发明结合点云数据的特征对其进一步改进,利用点云的八叉树组织结构实现视域体裁剪调度和多细节层次表示方法;

本发明采用将检测包围盒和检测包围球两种方式相结合,对于点云八叉树中的结点,在检测其包围盒之前,先检测其包围球与视景体之间的包含关系,如果包围球在视景体之外,则直接剔除;如果包围球在视景体之内,则完全绘制该结点空间内的点云;如果包围球与视景体相交,则进行轴对齐包围盒的检测,快速过滤掉不在视域范围内的点云;

本发明基于点云数据的特征采用一种简洁的方式实现多细节层次表示方法,构建的点云八叉树中只有叶结点真正存储点云数据,在绘制时最终也是绘制叶结点,在绘制叶结点时,先计算出叶结点包围盒中心到视点的距离,按照这个距离确定绘制叶结点所存储点云绘制的细节程度,本发明使用opengl开发,opengl中指定结点数组的函数为glvertexqointer,该函数的第三个参数stride指定了一个顶点与下一个顶点数据的排列方式,默认为0代表顶点数据之间紧密排列,不为的时则表示顶点数据之间间隔排列,不同的stride值对应不同的细节等级,通过设置不同的stride值绘制点云,得到不同细节呈现的点云绘制效果。

插件式架构的大规模三维点云可视化平台,进一步的,本发明在qt插件架构基础上开发自身的插件架构和插件接口,采用低层api的标准规则,构建自身的插件架构,设计插件接口开发插件,低层api插件开发过程中主程序端的开发步骤为:

第一步,定义一系列接口类,这些接口类承担主程序与插件的信息交互;

第二步,使用宏q_declare_interface()使qt的元对象平台明确作为插件的接口类;

第三步,编写插件实现相应的接口,并使用qpluginloader来实例化和加载插件;

第四步,使用qobject_cast()在插件实例和实现的接口之间进行转换,使用接口提供的功能;

插件开发过程中插件组件端的开发步骤为:

第1步,声明一个类继承自qobject和这个接口想要实现的接口类;

第2步,在类中使用q_interfaces()宏让qt的元对象平台明确该类实现的接口;

第3步,编写插件代码并使用q_export_plugin2()宏导出实现接口的该类,成为插件;

qpluginloader实现插件的加载和卸载,检查插件是否链接到与主程序相同版本的qt库,并提供对插件实例的直接访问,qpluginloader通过简洁的load()和unload()函数实现插件的加载和卸载。

插件式架构的大规模三维点云可视化平台,进一步的,插件接口设计:插件接口的共同基类cspluginbase为本发明的所有插件提供一个统一的描述接口,本发明插件类继承该类,并提供插件开发者、插件介绍、插件详细介绍及插件的版本号信息,其中插件的版本号让插件开发者进行插件的更新操作,并在搜索到多个该插件的不同版本时,根据版本号决定载入哪个插件,版本号分为三部分,并根据程序代码不同类型的更新重写时进行相应的变更,具体规则为:一是主版本号,当对模块进行大规模的重写,导致无法实现向后兼容时,应进行主版本号的变更;二是子版本号,当对模块进行功能添加和更新,但仍能实现向后兼容,则应进行子版本号变更;三是修正版本号,当只对现有模块进行漏洞修补,不增加更新模块功能,模块仍然能向后兼容,则应进行版本号的修正;

本发明两种插件的接口设计为:

第一种,文件io插件接口:文件io插件实现将点云读取到平台内部数据结构,和将内存中的数据写入到指定文件中,其中最重要的两个纯虚函数是readfile函数和writefile函数,分别负责将指定文件读入一个cshierarchicalobject中和将一个cshierarchicalobject写入到指定文件中,cshierarchicalobject类的对象代表工程树中的每一个对象,filetyqe函数返回值是枚举类型cs_file_types,枚举变量中包括点云文件类型,errormessage函数返回插件内部发生的错误,主程序在插件工作不正常时通过该函数查看插件内部发生的错误;

第二种,算法插件接口:实现算法插件对主程序数据的访问,并将算法处理后的结果反馈到主程序工程中,算法插件接口类为其子类提供添加不同类型的参数的接口和通过参数名获取参数值的接口,inputtype函数定义该接口输入数据的类型,默认输入为点云数据,算法处理的过程在compute函数中进行,子类通过实现该纯虚函数完成对输入数据的处理。

插件式架构的大规模三维点云可视化平台,进一步的,本发明主程序在qt插件架构基础上,实现具有插件注册、插件查找功能的插件架构,插件架构分为二部分,即文件io插件架构和算法插件架构;

文件io插件架构的核心是csfilereaderhelper类,该类完成文件io插件的注册和通过指定文件名或文件类型获取对应文件io插件实例,该类采用singleton模式,文件io插件的注册通过addfilereader函数实现,在插件的注册过程中:一是对于同一个插件的不同版本,优先注册拥有较新版本号的插件;二是对负责同一种文件类型的文件io插件,默认注册最后一个尝试注册的插件;

主程序在读取程序工程文件时,若需要加载某文件到内存中,则使用该类获取对应文件类型的io插件实例,再将文件的读取交给该插件完成;同样在进行工程保存过程中,如果某对象需要保存到文件,则主程序也通过该类获取相应的插件实例,由该插件负责将对象写入文件中;

本发明插件架构的核心是算法自定义窗口,平台根据具体的算法插件,自动为其创建该窗口,该窗口在创建时,自动根据插件要求的输入数据类型加载当前工程中符合条件的数据,算法开发人员无需改变算法插件的代码,直接以可视化的方式进行输入数据和输入参数的更改,算法执行的结果自动保存到当前工程中以便后期保存,算法开发人员观察不同参数下的处理结果,选择最合适的结果保存,丢弃不理想的实验结果。

插件式架构的大规模三维点云可视化平台,进一步的,本发明基于qt和opengl开发,使用c++语言,本发明平台在包括windows、linux和macos的不同平台平台上运行,qt提供多种方便实用的控件,采用qtdesigner设计程序界面,本发明建立具有针对性的插件体系,平台具有很强的扩展性;qt提供对xml的支持,本发明基于xml设计工程文件和工程树模块,qt采用灵活且类型安全的信号/槽机制使程序各模块之间耦合性降低,在开发过程中使用cmake跨平台代码构建工具,通过cmakelists文件编写,针对不同平台不同集成开发环境的编译器生成指定的工程文件,平台做到一次编写,到处编译,到处运行,采用git分布式版本控制工具,在平台编写过程中随意根据不同目的创建分支修改代码,不必担心程序变得混乱且难以修复,多个开发者之间的协作简便。

与现有技术相比,本发明的贡献和创新点在于:

第一,本发明提出了一种灵活快捷的复合式三维点云组织与存储结构,提出了大规模三维点云的可视化多层次渲染优化方法,基于插件式系统的设计方法,在qt插件架构的基础上提出了灵活快捷的插件接口和功能全面丰富的系统插件架构,在此基础上,针对现有技术算法研发和可视化平台开发之间的壁垒,开发了基于插件的大规模三维点云可视化平台,为技术人员提供灵活快捷的接口,使其可以利用该平台以更快捷直观的方式进行算法开发,针对不同数据格式的点云数据,提供统一的接口,平台具有很强的可扩展性,具有很高的实用价值和广阔的应用前景;

第二,本发明的插件式架构的大规模三维点云可视化平台,基于大规模三维点云,提出复合式点云组织与存储结构,不仅能快捷方便地访问点云数据,并且具有极高的检索效率,也非常有利于后期大规模三维点云的可视化;提出大规模三维场景的可视化多层次渲染的优化方法,并且针对点云数据,利用点云的八叉树存储结构实现大规模点云渲染中的视域体裁剪调度和多细节层次表示方法,对大规模三维点云的渲染效率大幅提高;在qt插件架构的基础上,设计实现功能全面丰富的平台插件架构和灵活快捷的点云插件接口,实现不同类型的点云数据的读写,也使三维点云算法的开发更便利;提出基于插件的大规模三维点云可视化平台,验证本发明的点云数据组织结构具有很强的灵活性,利用视域体裁剪调度方法和多细节层次表示方法能高效渲染较大规模的点云数据,文件io插件能加载包括点云数据的多类数据,平台插件架构具有可扩展性,能提高平台开发效率;

第三,本发明的插件式架构的大规模三维点云可视化平台,主要优势在于:一是对不同数据格式的点云提供灵活简洁的读写插件接口,开发者通过实现针对特定数据格式的插件进行点云的读写操作;二是平台支持大数据量的点云数据可视化,具有较高的渲染效率,并提供可视化相关功能作;三是平台提供灵活快捷的算法插件接口和方便的算法插件架构,尽量在减少算法开发者工作量的基础上使算法开发效率提高;四是平台能够尽量多的保存场景数据、算法处理数据;

第四,本发明为使平台内部点云数据具有更好的灵活性,技术人员能最直接简单的进行点云数据的增加、删除、更新基本操作,采用顺序存储作为最基础的三维点云组织与存储结构;而考虑到平台的点云可视化渲染和点云搜索,在顺序存储的基础上采用储存点索引值的八叉树,基于k-d树在点云范围搜索和近邻搜索上的优势,在索引值八叉树的基础上采用k-d树存储八叉树叶结点的点云索引数据,融合顺序存储、八叉树存储和k-d树存储三种方式,便于实现渲染的优化,提高搜索效率;

第五,本发明将算法研发者和开发者从算法成果的可视化任务中解放出来,实现算法研发与点云可视化平台的无缝连接,采用更加灵活开放,具有超强可拓展性的软件架构,插件式平台架构提供一种开放的软件体系架构,用户能自由的扩展软件平台,根据不同的需求添加实现不同的功能,以即插即用的方式为已存在的软件应用添加特定的功能,让第三方开发者拥有扩展应用程序的能力,根据需求为应用程序添加相应功能;能非常简洁的添加新功能,使平台具有很强的架构重用性,有利于软件应用的更新升级;极大的减少软件主程序的体积,用户能根据特定需求选择使用特定插件,减少软件应用的传输与安装时间;统一开源与闭源,解决因软件使用权限不同带来的问题,不仅能大幅缩短大型应用软件平台的开发周期,而且能大幅提高软件开发质量。

附图说明

图1是本发明的点云的顺序存储分块连续内存方法示意图。

图2是本发明可视化平台三维点云组织与存储结构示意图。

图3是基于树形层次场景组织的视域体裁剪调度的视景体示意图。

具体实施方式

下面结合附图,对本发明提供的插件式架构的大规模三维点云可视化平台的技术方案进行进一步的描述,使本领域的技术人员能够更好的理解本发明并能予以实施。

点云是一种快速直观的反映地物三维信息的技术,三维点云一般数据量较大,给点云数据的高效可视化带来较大难度。现有技术的点云可视化平台由于缺少扩展性,造成点云算法的研发和点云的可视化互相独立,技术人员必须先将算法处理结果写入到文件,再使用可视化系统观察结果;并且点云的算法处理也分为几个步骤进行,技术人员对点云数据进行处理的过程中,会产生很多中间数据和中间结果,这些中间数据以独立文件的方式存储,而中间结果得不到完整保存;在技术人员编写算法过程中,为了得到最理想的结果,需要多次修改程序中的参数,比较不同参数下得到的处理结果,由于算法处理与可视化之间互相独立,技术人员需要不断的重新编译运行程序,并将不同参数状态下的算法处理结果写入到不同的文件中,不仅效率极低,也大幅增加了后期将算法集成到现有平台进行生产应用的工作量。

本发明针对点云数据规模大的特征,提出了一种灵活快捷的复合式三维点云组织与存储结构,提出了大规模三维点云的可视化多层次渲染优化方法,基于插件式系统的设计方法,在qt插件架构的基础上提出了灵活快捷的插件接口和功能全面丰富的系统插件架构,在此基础上,开发了基于插件的大规模三维点云可视化平台,本发明的主要包括:

第一,基于大规模三维点云,提出复合式点云组织与存储结构,以顺序存储方式为基础,辅助使用索引八叉树和k-d树存储方式满足特定需求,这种存储方式不仅能快捷方便地访问点云数据,并且具有极高的检索效率,也非常有利于后期大规模三维点云的可视化;

第二,在复合式点云组织与存储结构基础上,提出大规模三维场景的可视化多层次渲染的优化方法,并且针对点云数据,利用点云的八叉树存储结构实现大规模点云渲染中的视域体裁剪调度和多细节层次表示方法,对大规模三维点云的渲染效率大幅提高;

第三,在qt插件架构的基础上,设计实现功能全面丰富的平台插件架构和灵活快捷的点云插件接口,实现不同类型的点云数据的读写,也使三维点云算法的开发更便利;

第四,基于本发明提出的点云数据组织存储结构、场景渲染方法和平台插件架构,提出基于插件的大规模三维点云可视化平台,验证表明,本发明的点云数据组织结构具有很强的灵活性,利用视域体裁剪调度方法和多细节层次表示方法能高效渲染较大规模的点云数据,本发明的文件io插件能加载包括点云数据的多类数据,平台插件架构具有可扩展性,能提高平台开发效率。

一、复合式三维点云组织与存储结构

本发明融合顺序存储、八叉树存储和k-d树存储方式,实现插件式架构的大规模三维点云可视化平台中的点云组织与存储。

为使平台内部点云数据具有更好的灵活性,即技术人员能最直接简单的进行点云数据的增加、删除、更新基本操作,平台采用顺序存储作为最基础的三维点云组织与存储结构;而考虑到平台的点云可视化渲染和点云搜索,在顺序存储的基础上采用储存点索引值的八叉树,基于k-d树在点云范围搜索和近邻搜索上的优势,在索引值八叉树的基础上采用k-d树存储八叉树叶结点的点云索引数据,融合顺序存储、八叉树存储和k-d树存储三种方式,便于实现渲染的优化,提高搜索效率。

点云的顺序存储采用分块连续内存方法,如果使用传统pcl中的顺序存储方法,直接使用std::vector或数组在堆上分配一块连续内存来存储点云数据的话,会导致在数据量很大的情形下连续内存分配失败。因此本发明采用一次申请一小块连续内存,然后模拟操作系统通过记录管理这些连续小内存的地址手动进行这些小块连续内存的管理,如图1所示,lump0到lumpn是申请的独立的小块连续内存,通过将这些小块内存的地址记录在一个数组中的方式进行管理和访问,本发明基于迭代器设计模式实现对分块连续内存的迭代访问器,同时,在分块连续内存的连续存储方式基础上,基于线性八叉树在数据更新上的不便,采用存储索引的一对八式八叉树,即八叉树中不直接存储点云数据,只存储点云的索引,真正的点云数据只存储于分块连续内存中,这样既保留了进行点云基础操作的便利性,又得以利用八叉树的优点进行平台后续的渲染优化工作。在构建八叉树时,本发明不对八叉树的深度进行限制,仅根据叶结点最大点云数目的临界值建立八叉树,虽有可能占用内存较大,但这种方法在点云分布不均匀的情形下仍然能有很好的分割效果,对于八叉树的每个叶结点的点云数据,采用k-d树的存储方式,有效利用k-d树范围搜索和近邻搜索的优点。本发明三维点云组织与存储结构由图2表示。

二、大规模三维点云的可视化多层次渲染优化

大规模三维点云不仅在数据存储管理上难度很大,并且巨大的三维数据在场景可视化过程中,也会由于数据量太大,导致渲染效果不理想,甚至无法满足正常交互。

(一)基于树形层次场景组织的视域体裁剪调度

1.视域体裁剪调度

渲染三维场景最简单直观的做法是在渲染循环中,递归获取三维场景中的所有物体并使用opengl绘制每个物体,opengl在图元装配与光栅化阶段自动进行可视域的裁剪,保证不在视域范围内的物体不会出现。如果场景内物体数量不多,这种做法是可行的,但随着场景内物体数量的增加,渲染效率会变得越来越低,原因是即使存在于当前视域内的物体数量很少,场景内所有的物体的结点信息、法向量信息、纹理信息都依然要被传送到gpu端进行结点计算、光照计算、纹理坐标计算,而不在可视域中的大部分物体都会在图元组装阶段根据模型视图矩阵和投影矩阵被裁剪掉,这些物体前面的计算就等于是让平台做了不必要的工作,浪费了资源,在场景中有大量物体不可见的情形下会严重影响渲染效率。视域体裁剪调度是在应用程序端进行一次手动的裁剪,如果一个物体不在视域内,则直接在应用程序端将它剔除掉,不进行绘制,大幅节省结点计算消耗的资源。

视域在opengl中以视景体定义,视景体即从当前视点观察场景的可见部分,在透视投影情形下,视景体的形状如图3所示。视景体的形状为一个被截去顶端的金字塔,金字塔的顶端是虚拟摄像机的位置,底端是视景体的远裁面,平截金字塔的平面为近裁面,近裁面也是透视投影的投影面,金字塔的近裁面和远裁面中间的部分为视景体,所有处于该区域的物体在当前视点下可见。视域体裁剪调度问题被转换为确定一个物体相对于视景体的包含关系,即物体完全被视景体包含、物体部分被视景体包含、物体处于视景体之外。确定包含问题首先确定视景体空间,视景体空间由六个面决定,分别为上下左右裁面、近裁面和远裁面,确定视景体空间演变为确定这六个面的方程。

首先假设一种更为简单的情形,即模型视图矩阵是单位矩阵,相机处在世界坐标系的原点,相机的upvector指向世界坐标系的y轴正方向,相机看向世界坐标系的z轴负方向。假设一个点u在相机坐标系中的坐标是u=(xyzw=1)t,模型视图矩阵为单位矩阵,该点在世界坐标系和相机坐标系下坐标一致,q=(qij)为4×4的投影矩阵,点u经过投影变换后的坐标为u′=(x′y′z′w′)t,经过投影变换,点u′位于齐次的裁剪空间内,视景体是一个轴对齐的立方体,它的尺寸由图形api预先定义,;opengl中尺寸为-w′<x′<w′,-w′<y′<w′,-w′<z′<w′,如果点u′在变换后的这个立方体里,投影变换之前的点u也应当是在未变换的盒子,即视景体内,由此能推导出以下结论:一是如果-w′<x′,则x′在左裁剪面的内半平面内;二是如果x′<w′,则x′在右裁剪面的内半平面内;三是如果-w′<y′,则y′在下裁剪面的内半平面内;四是如果y′<w′,则y′在上裁剪面的内半平面内;五是如果-w′<z′,则z′在近裁剪面的内半平面内;六是如果z′<w′,则z′在远剪面的内半平面内;

如果平面的方程用f*x+e*y+s*z+g=0表示,得出左裁剪平面的方程:

x(q11+q41)+y(q12+q42)+z(q13+q43)+w(q14+q44)=0

因为w=1,因此方程写成:

x(q11+q41)+y(q12+q42)+z(q13+q43)+(q14+q44)=0

则方程的四个参数分别为:

f=q11+q41

e=q12+q42

s=q13+q43

g=q14+q44

重复上面的步骤得出其它五个裁剪平面的方程,裁剪面对应平面方程参数总结为:

左:f=q11+q41,e=q12+q42,s=q13+q43,g=q14+q44

右:f=q41-q11,b=q42-q12,c=q43-q13,g=q44-q14

上:f=q41-q21,b=q42-q22,c=q43-q23,g=q44-q24

下:f=q21+q41,e=q22+q42,s=q23+q43,g=q24+q44

近:f=q31+q41,e=q32+q42,s=q33+q43,g=q44+q44

远:f=q41-q31,b=q42-q32,c=q43-q33,g=q44-q34

通过视景体,即这六个裁剪平面确定一个物体是否在视景体内,将这个问题转换成确定一个物体的轴对齐包围盒与视景体的包含关系,确定轴对齐包围盒相对于视景体的位置,先确定一个点是否在视景体内,假设点u=(xuyuzu)t,点u位于视景体内等价于该点同时满足处于六个裁剪平面的正半空间内,确定点与平面之间的相对位置关系将点的坐标代入到平面方程中求值,并判断值的正负,即:

g=fxu+eyu+szu+g

若g>0,则表示该点位于平面的正半空间内,若g=0,则表示该点位于平面上,若g<0,则表示该点位于平面的负半空间内,判断轴对齐包围盒与视景体的包含关系的方法:依次判断包围盒的每个顶点,如果全部位于视景体内,则该包围盒被视景体完全包含;如果只有部分顶点在视景体内,则该包围盒与视景体相交;如果所有顶点均处于视景体外,则该包围盒在视景体之外,判断场景中的物体是否在可视范围内,如果不在可视范围,直接将其剔除掉,提高渲染效率。

2.利用树形层次场景组织加速渲染

八叉树存储结构的优点不仅体现在点云搜索上,八叉树作为一种层次树形的场景组织方式,在加速点云的三维渲染方面也极其重要,通过检测一个物体是否在可视域内,如果不在则在应用程序端剔除该物体,加速渲染过程,如果场景中的物体都独立存在,在场景绘制函数内依次检查每个物体,并选择丢弃或绘制该物体,这种方式比普通渲染快,但并不能达到最佳效果,如果一个场景中的物体数量巨大的情形下,要检查每个物体事实上耗费的cpu资源也很大,将场景进行树形层次组织加速应用程序端的裁处理。

基于轴对称包围盒裁剪,当使用八叉树组织场景时,从根结点开始检查根结点的轴对齐包围盒与视景体之间的包含关系,如果轴对齐包围盒不在视景体内,则不绘制任何内容;如果轴对齐包围盒被视景体完全包含,则场景需完全绘制;如果轴对齐包围盒与视景体相交,则继续检查根结点的子结点,对于任意的中间结点,如果轴对齐包围盒完全在视景体内或完全不在视景体内的话,无需再检查其子结点,直接选择完全绘制或丢弃。

(二)多细节层次表示方法

多细节层次表示方法是在三维场景中根据物体距离视点的远近,改变物体绘制的复杂度,本发明实现多细节层次表示采用静态多细节层次表示方法,利用前置处理产生不同细节层次的三维物体模型,并且存储在内存或外存里,在场景渲染过程中根据物体与视点距离的远近选择不同细节等级的模型进行绘制。

对于点云数据来说,场景内都是点数据,不会出现静态多细节层次表示方法的龟裂现象。基于八叉树组织结构,分层的自底向上进行抽稀,将子结点的点云数据抽稀并存储在其父结点中,绘制不同层级结点保存的点云数据,实现多细节层次表示。

(三)改进的视域体裁剪调度和多细节层次表示方法

基于视域体裁剪调度方法和多细节层次表示方法,本发明结合点云数据的特征对其进一步改进,利用点云的八叉树组织结构实现视域体裁剪调度和多细节层次表示方法,提升渲染效率。

视域体裁剪调度过程中,通过计算包围盒的每个结点与视景体六个裁剪面的位置关系得以最终确定包围盒与视景体的包含关系,这样最多需要进行48次点与平面位置关系的计算才能确定,这无疑是很大的计算量。相比之下,计算包围球与视景体的包含关系计算量少很多,只需要简单比较球心与每个裁剪面之间的距离就能得出,基于包围盒比包围球更能准确贴合的描述物体空间,本发明采用将检测包围盒和检测包围球两种方式相结合,对于点云八叉树中的结点,在检测其包围盒之前,先检测其包围球与视景体之间的包含关系,如果包围球在视景体之外,则直接剔除;如果包围球在视景体之内,则完全绘制该结点空间内的点云;如果包围球与视景体相交,则进行轴对齐包围盒的检测,快速过滤掉不在视域范围内的点云,提高视域裁剪效率。当相机位置可能处在某结点的包围盒内部,这种情形下可能包围盒的所有顶点都在六个裁剪面之外,但该结点不应该被丢弃,在检测包围盒之前先检查这种情形。

本发明基于点云数据的特征采用一种简洁的方式实现多细节层次表示方法,构建的点云八叉树中只有叶结点真正存储点云数据,在绘制时最终也是绘制叶结点,在绘制叶结点时,先计算出叶结点包围盒中心到视点的距离,按照这个距离确定绘制叶结点所存储点云绘制的细节程度,本发明使用opengl开发,opengl中指定结点数组的函数为glvertexqointer,该函数的第三个参数stride指定了一个顶点与下一个顶点数据的排列方式,默认为0代表顶点数据之间紧密排列,不为的时则表示顶点数据之间间隔排列,不同的stride值对应不同的细节等级,通过设置不同的stride值绘制点云,得到不同细节呈现的点云绘制效果,本发明的这种实现多细节层次表示方法不需要任何额外的存储空间,不需要前置处理过程。

本发明在点云八叉树组织存储方式的基础上,研发了基于点云数据的视域体裁剪调度方法和多细节层次表示方法,在不影响点云可视化效果的前提下,大幅提高点云的渲染效率。

三、插件式点云可视化平台设计

本发明将算法研发者和开发者从算法成果的可视化任务中解放出来,实现算法研发与点云可视化平台的无缝连接,因此采用一种更加灵活开放,具有超强可拓展性的软件架构,插件式平台架构提供一种开放的软件体系架构,用户能自由的扩展软件平台,根据不同的需求添加实现不同的功能,不仅能大幅缩短大型应用软件平台的开发周期,而且能大幅提高软件开发质量。

插件能以即插即用的方式为已存在的软件应用添加特定的功能,本发明使用插件式架构,主要原因包括:第一,让第三方开发者拥有扩展应用程序的能力,根据需求为应用程序添加相应功能;第二,能非常简洁的添加新功能,使平台具有很强的架构重用性,有利于软件应用的更新升级;第三,极大的减少软件主程序的体积,用户能根据特定需求选择使用特定插件,减少软件应用的传输与安装时间;第四,统一开源与闭源,解决因软件使用权限不同带来的问题。

(一)qt插件架构

本发明在qt插件架构基础上开发自身的插件架构和插件接口,采用低层api的标准规则,构建自身的插件架构,设计插件接口开发插件,低层api插件开发过程中主程序端的开发步骤为:

第一步,定义一系列接口类,这些接口类承担主程序与插件的信息交互;

第二步,使用宏q_declare_interface()使qt的元对象平台明确作为插件的接口类;

第三步,编写插件实现相应的接口,并使用qpluginloader来实例化和加载插件;

第四步,使用qobject_cast()在插件实例和实现的接口之间进行转换,使用接口提供的功能;

插件开发过程中插件组件端的开发步骤为:

第1步,声明一个类继承自qobject和这个接口想要实现的接口类;

第2步,在类中使用q_interfaces()宏让qt的元对象平台明确该类实现的接口;

第3步,编写插件代码并使用q_export_plugin2()宏导出实现接口的该类,成为插件;

qpluginloader实现插件的加载和卸载,检查插件是否链接到与主程序相同版本的qt库,并提供对插件实例的直接访问,qpluginloader通过简洁的load()和unload()函数实现插件的加载和卸载。

(二)插件架构与接口类

1.插件接口设计

插件接口的共同基类cspluginbase为本发明的所有插件提供一个统一的描述接口,本发明插件类继承该类,并提供插件开发者、插件介绍、插件详细介绍及插件的版本号信息。其中插件的版本号让插件开发者进行插件的更新操作,并在搜索到多个该插件的不同版本时,根据版本号决定载入哪个插件,版本号分为三部分,并根据程序代码不同类型的更新重写时进行相应的变更,具体规则为:一是主版本号,当对模块进行大规模的重写,导致无法实现向后兼容时,应进行主版本号的变更;二是子版本号,当对模块进行功能添加和更新,但仍能实现向后兼容,则应进行子版本号变更;三是修正版本号,当只对现有模块进行漏洞修补,不增加更新模块功能,模块仍然能向后兼容,则应进行版本号的修正。

本发明两种插件的接口设计为:

第一种,文件io插件接口:文件io插件实现将点云读取到平台内部数据结构,和将内存中的数据写入到指定文件中,其中最重要的两个纯虚函数是readfile函数和writefile函数,分别负责将指定文件读入一个cshierarchicalobject中和将一个cshierarchicalobject写入到指定文件中,cshierarchicalobject类的对象代表工程树中的每一个对象,filetyqe函数返回值是枚举类型cs_file_types,枚举变量中包括点云文件类型,errormessage函数返回插件内部发生的错误,主程序在插件工作不正常时通过该函数查看插件内部发生的错误。

第二种,算法插件接口:实现算法插件对主程序数据的访问,并将算法处理后的结果反馈到主程序工程中,算法插件接口类为其子类提供添加不同类型的参数的接口和通过参数名获取参数值的接口,inputtype函数定义该接口输入数据的类型,默认输入为点云数据,算法处理的过程在compute函数中进行,子类通过实现该纯虚函数完成对输入数据的处理。

2.平台插件架构

本发明主程序在qt插件架构基础上,实现具有插件注册、插件查找功能的插件架构,插件架构分为二部分,即文件io插件架构和算法插件架构。

文件io插件架构的核心是csfilereaderhelper类,该类完成文件io插件的注册和通过指定文件名或文件类型获取对应文件io插件实例,该类采用singleton模式,文件io插件的注册通过addfilereader函数实现,在插件的注册过程中:一是对于同一个插件的不同版本,优先注册拥有较新版本号的插件;二是对负责同一种文件类型的文件io插件,默认注册最后一个尝试注册的插件。

主程序在读取程序工程文件时,若需要加载某文件到内存中,则使用该类获取对应文件类型的io插件实例,再将文件的读取交给该插件完成;同样在进行工程保存过程中,如果某对象需要保存到文件,则主程序也通过该类获取相应的插件实例,由该插件负责将对象写入文件中。

本发明插件架构的核心是算法自定义窗口,平台根据具体的算法插件,自动为其创建该窗口,该窗口在创建时,自动根据插件要求的输入数据类型加载当前工程中符合条件的数据,算法开发人员无需改变算法插件的代码,也无需重新编译,直接以可视化的方式进行输入数据和输入参数的更改,而算法执行的结果会自动保存到当前工程中以便后期保存,这种方式也使算法开发人员能观察不同参数下的处理结果,选择最合适的结果保存,丢弃不理想的实验结果。

四、插件式三维点云可视化平台的实现

本发明在提出点云数据组织存储结构、插件式平台设计、大规模点云渲染优化方法基础上,分析平台需求,选取合适的开发平台和开发工具,设计平台架构和各功能模块,开发插件式大规模三维点云可视化平台。

(一)开发平台与开发工具

本发明基于qt和opengl开发,使用c++语言,本发明平台能在包括windows、linux和macos的不同平台平台上运行,qt提供多种方便实用的控件,采用qtdesigner设计程序界面,本发明建立具有针对性的插件体系,使平台具有很强的扩展性;qt提供对xml的支持,本发明基于xml设计工程文件和工程树模块,qt采用更灵活且类型安全的信号/槽机制使程序各模块之间耦合性降低,模块化程度高。本发明在开发过程中还使用cmake跨平台代码构建工具,通过cmakelists文件编写,针对不同平台不同集成开发环境的编译器生成指定的工程文件,使平台做到一次编写,到处编译,到处运行。本发明采用git分布式版本控制工具,在平台编写过程中随意根据不同目的创建分支修改代码而不必担心程序变得混乱且难以修复,git也使多个开发者之间的协作变得更为简便。

(二)点云可视化平台界面设计

平台界面主要分为五个部分,分别为菜单栏与工具条、属性窗口、工程窗口、日志窗口、场景可视化窗口,其中菜单栏中包括文件菜单、窗口菜单、场景菜单、工具菜单和算法菜单,文件菜单中包含平台工程的打开、关闭、保存操作选项,并提供一个动态变化的最近打开工程的列表;窗口菜单中包括对多文档窗口中所有子窗口的控制,包括激活子窗口、关闭子窗口、在子窗口中切换操作;场景菜单中提供关于场景可视化的一些选项操作,包括切换显示渲染帧率,切换显示坐标轴,切换显示场景网格线,切换观察角度,切换场景投影类型,显示场景中全部物体,设置场景可视化渲染窗口的背景;工具菜单包括进行平台相关设置和平台操作的一些入口选项,包括插件管理器,界面风格设置,全屏显示操作和场景截图;算法菜单只在平台运行时检测到有算法插件载入时才出现,并且根据载入的插件动态向该菜单添加相应的项目;

界面左侧为工程窗口,显示当前工程的内容信息,通过点击工程窗口中的项目实现选中场景中物体、更改物体名称操作,点击工程窗口中的某一物体,在界面右侧的属性窗口自动显示当前选中物体的属性信息,该属性窗口显示不同类型的属性信息,并允许用户对物体能改变的属性信息进行即时更改;底部的日志窗口根据需要实时监视平台运行期间发生的事件、问题,用户能通过平台日志发现并解决程序运行中的问题。

(三)工程文件设计

基于点云数据处理分多步骤进行,每一步都可能生成中间数据,本发明使用工程文件来统一组织管理针对特定数据或特定目标的点云处理过程信息,包括该过程中的过程数据、设置信息,并提供分组管理。

本发明设计树形的工程文件,并采用xml进行存储,以csproj为文件后缀,平台工程文件中的内容主要分为二部分,第一部分记录该工程中所有的场景数据、算法处理过程信息,作为场景块,场景数据以文件的方式记录,算法处理过程信息以xml的元素以及元素属性存储;第二部分记录该工程退出时场景可视化窗口的设置信息,作为可视化块。

平台在载入工程文件时,将xml场景块中的每个结点解译为cshierachicalobject的某一种子类对象,cshierachicalobject类是工程文件中场景虚基类,该类是对composite设计模式的实现,其子类都具有从xml结点读取信息构建自身和保存为xml中的一个结点,平台递归遍历xml的所有结点完成工程文件的载入保存工作,平台根据可视化块中的内容恢复工程文件关闭时景可视化窗口的设置。

(四)属性查看与更新

属性窗口与工程窗口及场景可视化窗口之间联系紧密,通过qt的信号/槽机制,平台在工程窗口、属性窗口和场景可视化窗口之间实时进行数据的交换与状态更新,属性窗口根据工程窗口中的当前选中项显示对应的属性信息,并为不同数据类型的属性信息提供方便易用的属性编辑方式,属性编辑后的结果最终反馈到工程窗口和场景可视化窗口中,点云属性中有一项是pointsize,代表渲染过程中点的大小,通过属性窗口更改该属性值,实时设置点云渲染过程中点的大小。

(五)插件管理器

平台在启动时根据预设的插件搜索路径自动加载插件,平台启动后通过插件管理器掌握所有的插件,包括成功载入和载入失败的插件,所有的插件接口类都是cspluginbase类的子类,cspluginbase为插件类提供统一的描述信息,插件管理器根据该点显示所有插件的相关信息,对于加载失败的插件,显示其加载失败的原因。插件管理器提供在平台运行时手动加载指定插件或将某路径添加到插件搜索路径中并自动寻找该路径下所有插件进行加载。

(六)场景可视化窗口

平台打开工程时将工程中所有的可绘制物体的数据发送到可视化窗口类中,由该类进行场景的视域体裁剪调度工作并且进行多细节层次表示方法渲染,可视化类中负责绘制的函数的工作为:遍历所有的可绘制物体,判断该物体是否在可视域内,如果不在,则剔除,否则计算当前相机位置与该物体的距离,确定绘制该物体的多细节层次表示方法等级,并且绘制该物体。

(七)日志窗口

平台日志使用户实时了解平台运行信息,出现的问题,算法开发人员也能使用日志窗口进行算法处理结果的输出,本发明的日志支持四种不同级别的日志输出,按级别由高到低分别为error、warning、info、debug,其中debug类型日志是在平台调试时使用,info型日志在平台输出正常信息时使用,warning是平台运行时的警告信息,error是平台运行时出现错误的信息,插件开发者遵循这一规则选取相应的日志等级输出信息,低于设定输入级别的日志被过滤掉不会显示。日志窗口根据不同的日志等级决定日志显示的风格,并控制日志显示的最低级别使得低于该级别的日志被自动丢弃,帮助用户更直接地观察需要的平台日志。

针对点云可视化与点云算法处理的独立进行使得点云算法开发效率很低的问题,本发明研发了使用插件式平台将点云算法处理和可视化平台融合到一起的方法,并开发了基于插件的大规模三维点云可视化平台,主要包括:第一,对于三维点云的存储数据结构,提出基于顺序存储的索引八叉树、k-d树的复合式存储方式,不仅保留顺序存储方式的灵活性,也得益于索引八叉树和k-d树使点云的搜索效率大幅提高,并且八叉树存储结构也为点云的可视化渲染打下良好基础;第二,基于三维点云数据量大的特征,在点云的八叉树存储结构基础上,实现针对点云数据的视域体裁剪调度和多细节层次表示方法,使平台对大数据量点云的渲染效率大幅提高;第三,针对不同类型的点云文件设计灵活的点云读写插件接口,并在平台点云io插件架构的搭配下,根据不同类型的点云数据自动选取相应的读写插件进行点云的读写;基于点云算法设计点云的算法插件接口,并为该接口设计可视化界面,实现开发者可视化的进行算法输入数据及输入参数的调整;第四,开发基于插件的大规模三维点云可视化平台,实现不同类型的点云读写,使用插件的方式对平台进行点云算法处理的扩展,最大程度减少点云算法研发工作量,提高工作效率,并保留算法处理的结果和数据。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1