Open3D初探

 

       pcl点云库作为点云算法的入门基础,点云从业者对此都应该比较熟悉了,pcl库的下载以及源码的编译再到具体教程,网上的例子铺天盖地,这也间接说明了该库的受欢迎程度很高,该库的优势在于开源,算法覆盖面也是很广,上手也较为轻松,没有特别复杂的编程语言,也易于移植。但是缺点也很明显,算法概而不精,譬如效率效果都是较大的问题,所以在日常使用中本人也仅仅是对该库的算法理论逻辑部分进行提取,然后再加工优化。当然另外一个缺点可能是很多库的共性,迭代更新慢,很多好的新方法或者工具未能及时进行集成,我们在做商业软件时,很多核心算法几乎也是开发人员一点点去实现,所以这个库似乎也很"鸡肋",虽然pcl库存在诸多问题,但又无可奈何,点云算法作为一个还在发展中的行业,可用的算法库也很少,譬如点云数据常用的主流算法库如pcl、vcg、cgal等,似乎也没有太多的选择。最近在关注一些新技术的时候,open3d出现的频率逐渐高了起来,所以最近对该库也进行了极其简单的入门熟悉。

     该库初步给我的感觉就是知识面不如pcl广,网上的学习资源也不如pcl丰富,编译以及库的配置似乎也没有成熟的方案以及教程,当然一些大神也给了一些相对详尽的教程,OPen3D由于支持python模块(机器学习),估计这也是它难以编译成功的原因之一吧,本人对Open3D尝试进行了编译。

    源码的下载地址:

    https://github.com/isl-org/Open3D/releases/tag/v0.18.0

    由于源码里有Python的部分,如果只想编译c++部分的,剩下的都不选中吧,不然cmake各种报错,又是配置工具又是配置环境的也很麻烦(关键是我不会,open3d有个ml模块,也就是机器学习模块,该部分需要支持Python);

     

 

     构建好了,然后就可以使用vs打开,打开如下:

      

 

     一个库复杂与否我们先来看他的数据结构。

    

 

    继续跳到类里面看看。

     

     给人的感觉不像是一个简单的数据类型; 继续往下看,找到成员变量:

     

     点的信息似乎有点少,记录的是点坐标、法线、颜色信息、协方差矩阵,这种设计模式最大的问题是不支持属性的拓展,例如强度信息、回波信息、gps时间、ID号或者后期计算的其它信息等,当然自己也可以更改进行追加。

     然后在看成员函数:

     

    以上成员函数都是关于点云数据基础信息的一些操作倒是很正常。

    但是再往下看,发现其把点云处理的算法全部在该点类型里进行了实现,下面开始都是处理点云的一些方法了,这种设计似乎有点“另类”;

    其实现的具体的算法如下:
    RemoveNonFinitePoints 去除无效点(激光数据采集解算或者文件存储错误等因素引起的)
    RemoveDuplicatedPoints 去除重复点
    VoxelDownSample 格网采样 VoxelDownSampleAndTrace 大概意思在格网采样的基础上加上范围限制 UniformDownSample 此方法跟格网采样的区别在于该方法的点是重新内插出来的(这些方法pcl都有)
    RandomDownSample 随机采样
    FarthestPointDownSample 通过对源码的阅读,它的意思是查找n个相距最远的点
    Crop 裁剪点云
    RemoveRadiusOutliers 去噪(根据空间范围)
    RemoveStatisticalOutliers 去噪(统计方法)
    EstimateNormals 计算法线
    OrientNormalsToAlignWithDirection 法向一致性处理
    EstimatePerPointCovariances 计算每个点的协方差矩阵(为计算法线服务)
    ComputeMeanAndCovariance 计算每个点在其局部邻域内的重心以及协方差矩阵(为计算法线服务)
    ComputeConvexHull 计算凸包
    ClusterDBSCAN 聚类
    SegmentPlane 分割平面
    DetectPlanarPatches 平面检测

   发现该数据类型并没有大量的使用模板,然后方法也全在数据类型的内部进行实现的,这种设计确实是做到了低耦合,好与不好这里不做评价,大家自行判断。此次只是了解到了Open3D的皮毛,后续有时间会进一步挖掘,期待下一次能有大的更新。

posted @ 2024-08-24 15:09  点小二  阅读(1533)  评论(0编辑  收藏  举报