很长时间都没有好好的总结一下技术,感觉时间不是很够用,白天上班回来之后只想玩手机,有不少人建议租个近一点的房子住,但是我总是不太想,毕竟在自己的房子里还是更加舒服一点,从周一开始就盼望着到周五,然后周末能够在家休息一下,其实最后哪儿都没去,就宅在家玩手机睡觉,应该打扫的卫生也不想打扫,应该练的琴也不想练,应该泡的茶也没有泡,应该写的博客也没有写,好像就处于一个混吃等死的状态,今天天气特别好,借着这个机会也是好好的把前一段时间思考的关于点云的问题以及最近做的一些论文的内容都补充上去。
    这两年关于点云处理的文章也写了快三篇了,从工作之后就开始在自己的时间做一些关于无人机影像处理和点云处理方面的工作,没有特别大的用处,就是一些论文的算法和一些工具而已,感觉在重复的造着轮子,不过我感觉好像用C++编码的人都喜欢自己造轮子。不管怎么样还是造了一些有意义的东西,所以这里我还是总结一下:

点云索引:

    关于点云索引这个部分,实际上还是有很多可以提的地方,当时自己写关于LAS文件处理的代码的时候在这一块实际上做了很多的思考了工作也进行了一些尝试,激光点云的具体概念我们就不多做说明,本文中提到的点云都是指小光斑的激光雷达的点云或者通过影像获取的点云,只考虑点云位置信息,对于点云回波波形就不再考虑了。由于点云是空间离散结构,即点云中任意两个点之间从没有明确的拓扑关系由此对于点云的一些操作就需要通过遍历所有点来实现,为了简化搜索的范围有许多点云索引的算法就构建出来了,其中八叉树和R树是最常见的索引方式,实际上两种方式都是从空间分割的角度对点云进行索引。

八叉树索引:

    其实八叉树索引没有什么好说的,实际上就是类似我们的魔法,在空间上根据一定的空间正6面体对整个点云空间进行分割,分割后每个立方体中的点云数量就减少了,由此减小搜索范围提高效率,索引方法简单有效,能够一定程度上提高点云检索的效率,不过他的缺点也很明显,因为是按照固定的大小分割,所以实际上每一个空间正6面体中包含的点云数量是不一样的,因此实际上提高的检索效率要明显低于理论值,另外对于空间检索不仅需要考虑点云所在的立方体还要考虑其周围一定范围内的立方体,每次计算都需要空间求交集。对于索引方式的问题,目前似乎没有好的方法处理,不过对于点云密度不均匀的问题,采用点云密度约束的算法,允许点云块之间有重叠就可以解决,此类算法有不少学者进行了研究和实践都比较成熟了。

R树索引:

    R树索引实际上也是一种对空间进行分割的索引,对N维空间采用不停的2分的方式进行处理,每一次都能够将空间按某一个值氛围两个部分,这样在检索过程中直接判断点云在哪个部分就可以实现对点云进行检索,构建索引后检索效率极高是一种常用的处理方式,然而采用此种方式构建点云索引的时间稍长,在构建点云索引上还存在优化空间。
     在我以下的论文中实现了结合四叉树和R树的索引方式对点云索引进行优化吴蔚, 刘岚, 黄文诚. 基于渐进三角网的线路巡检点云地面点快速提取方法[J]. 南方能源建设, 2020(S1).算法已经开源实现有兴趣的朋友们可以试试。

点云存储:

    实际上LAS文件存储格式没有什么好说的格式在网上还是很多,开源格式解释得也很明确了,我们这里讨论的点云存储是只点云在处理过程中考虑到内存问题的点云存储,实际上点云文件一般都很大,当然我们可以采用分割或者其他的方式把点云数据文件缩小,但是这种缩小点云文件的方式毕竟存在较多的问题,且需要点云能够划分为满足计算的小单元才行,当然这个问题实际上还可以通过增加内存大小来解决,毕竟xx64的寻址空间,只要硬件能更得上好像也不是什么大问题,不过本着对算法负责的严谨态度我们还是讨论一下,对于那些无法一次全部读入内存的点云的处理方式。主要方式包括点云抽稀和只读索引的方式。抽稀的方式还是比较好理解,而只读索引的方式主要是采用时间换空间的模式,对点云id构建索引,在点云处理的计算过程中直接在从文件中映射点云位置读取对应位置的点云,此种方式不停的对硬盘空间进行寻址和读取效率比较低,好处在于内存中只保存点云索引,空间消耗极小,不过对于大规模点云效率较低,实际上应用性并不是太好,当然此种方式也有改进,这个就留到以后再讨论。

点云处理:

聚类:

    不太想描述这个,不过总的来说如果对点云直接离散的处理就逃不过聚类的方法,聚类的方法有很多,区域生长方法,K均值方法,总的来说就是将点云聚集成很多点云团,然后这些点云团我们认为是具有同一属性和特征,然后对这些点云团进行处理,这样每个点云团就包含了点云的结构特征,可以对点云结构特征进行分析,这其中就可以添加一系列的算法了。

点云体素化:

    实际上这个也算得上是一个比较通用的算法,我们结合八叉树的思想将点云分块,然后计算每一块的密度值作为点云体素的特征,这样点云就在空间上构成了一个连续的点云空间,在此基础上很多针对连续空间使用的算法就可以应用起来了,同时也可以引入很多二维图像的算法进行处理。
     其实点云的处理并不是特别有难度,只要构建好了点云的基础结构,后续主要是针对应用进行研究,针对特定的应用对通用的算法进行改进和优化使得算法能够在特定的应用上发挥比较大的效果,这样整个点云处理都变得更加有意义。