[发明专利]基于内存预分配和多点并写技术的大规模点云数据快速读取方法在审
申请号: | 201410503690.2 | 申请日: | 2014-09-26 |
公开(公告)号: | CN104268096A | 公开(公告)日: | 2015-01-07 |
发明(设计)人: | 张建生 | 申请(专利权)人: | 西南科技大学 |
主分类号: | G06F12/02 | 分类号: | G06F12/02;G06F9/38 |
代理公司: | 哈尔滨市松花江专利商标事务所 23109 | 代理人: | 杨立超 |
地址: | 621000 四*** | 国省代码: | 四川;51 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 内存 分配 多点 技术 大规模 数据 快速 读取 方法 | ||
技术领域
本发明涉及一种大规模点云数据快速读取方法,属于点云数据文件读取技术领域。
背景技术
随着反求工程技术的发展,三维扫描设备在扫描规模和性能上都有很大提高,一方面可以非常容易地采集表达物体表面形状的三维点云数据,另一方面需要处理的点云数据规模则呈几何级方式增长。根据不同的应用场合,点云数据的处理规模可从几百个点到上千万个点,甚至可以达到数亿点的级别。
狭义的大规模点云数据的概念是宏观上点的数量规模非常大,如数千万,甚至数亿;而广义的大规模点云数据的概念则与处理点云数据的系统内存有关,相比于具有数TB甚至更大内存的超级计算机系统,处理数亿的点云数据并不会显得十分困难,而相比于仅有数十MB甚至更小内存的计算机系统,处理数万甚至更少的点云数据都很费力。
应用程序在真正地处理点云数据之前首先要将点云数据从外部硬盘文件加载到内存中。当读取的点云数据文件规模比较小(几百个点到数十万个点)时,用户一般感觉不到明显的时间延迟,不会影响用户对应用程序的体验。但是,当点云数据文件的规模达到数百万,特别是数千万甚至数亿级别时,读取文件的时间延迟将会明显甚至严重影响用户体验。目前,通过调研相关文献发现,现有的点云数据文件读取方法存在以下问题:
1)每一个所读取的点数据的保存导致内存的动态分配。由于点云文件中所包含的点数量巨大,频繁的内存动态分配将严重影响应用程序的性能。C++标准库中的vector类是此种应用的典型代表。
2)读取点云数据文件的操作顺序化。由于传统的文件操作均以文件句柄为基础,这限制了点云数据文件的读取方式必须以顺序化的形式完成,无法充分发挥CPU的多核并行能力。
以上两个方面的问题严重影响了以点云数据特别是大规模点云数据处理为目的的软件性能。
发明内容
本发明的目的是提供一种基于内存预分配和多点并写技术的大规模点云数据快速读取方法,以解决现有的高大规模点云数据文件读取时间延迟、读取速度(加载速度慢)的问题。
本发明为解决上述技术问题采取的技术方案是:
步骤A、内存预分配过程:首先确定点云数据文件中点的数目,从而确定点云数据文件中所有点需要占用的内存大小,然后预先为点云数据分配对应大小的内存;
步骤B、多点并写过程:通过内存映射文件机制,将点云数据文件映射到映射内存后创建含有指定数量线程的线程池,每个线程负责解析映射内存中的部分点数据信息,并将解析结果写入到之前预先分配的内存中,实现多点并写。
步骤A是基于内存预分配技术原理
内存预分配技术要解决的问题就是在读取大规模点云数据文件过程中,避免保存点数据所产生的频繁的内存分配操作。点的三个坐标值具有相同的数据类型,因此每个点占用内存的大小一定。在这种前提下,只要确定了点云数据文件中点的数目,即可以准确的确定点云数据文件中所有点需要占用的内存大小,因而可以提前为点云数据分配好内存,避免了动态内存分配导致的性能问题,达到了内存预分配技术的目的。经过测试,本发明方法采用数据分块方式确定点云数据文件中的点数目,与其它方法相比较的结果如图1所示。
步骤B是基于多点并写技术原理
多点并写技术的核心思想是借助于内存映射文件机制,将对文件进行的IO操作由传统的顺序化方式改为由并行化方式完成。基本过程是将点云数据文件映射到内存后创建含有指定数量线程的线程池,每个线程负责解析映射内存中的部分点数据信息,并将解析结果写入到之前预先分配的内存中。如果不同地址处的内存读写具有并行性,因此多个线程同时解析并写入的操作并不会发生冲突,这将显著提高点云数据文件的加载速度,如图2所示。
本发明的有益效果是:
本发明提出并实现了windows平台下基于线程池和内存映射文件的内存预分配技术和多点并写技术,显著提高了大规模点云数据文件的读取速度。本发明方法采用数据分块方式确定点云数据文件中的点数目与现有其它方法相比较,读取时间远远小于现有方法,如图1所示。对不同的点云数据文件读取方法进行了测试和比较,结果如图4所示。测试结果表明,基于内存预分配和多点并写技术的读取方法,可使点云数据文件特别是大规模点云数据文件的读取速度提高220%~300%,而且随着点云数据文件规模的增长,本发明所述读取方法所用的读取时间增长较其它方法最低。从图4看出,本发明方法相对现有的高大规模点云数据文件读取速度有显著的提高,相对于现有技术有了质的变化,极大提高了用户体验。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西南科技大学,未经西南科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410503690.2/2.html,转载请声明来源钻瓜专利网。