算法:基于opengl 点云模型不可见点(隐藏点)的移除 最后一步搞不定了 分不是问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法:基于opengl 点云模型不可见点(隐藏点)的移除 最后一步搞不定了 分不是问题相关的知识,希望对你有一定的参考价值。

已知一个三维数组 如pointset[N][3] 这个数组是扫描某个动物表面获得的点坐标 N这个值非常大 至少有5000
运算时间不做要求
请问如何计算这些点组成的表面是凸面体还是凹面体
这是我正在实现的一个论文 论文来自c graph 关于点云模型不可见点的消除 这是整个程序最后也是最麻烦最关键的一步 写到这里我已经没头绪

要往工程链接中加入OpenGL的静态库文件,然后在程序中加入相应的头文件,之后经过与Winows的接口设置,就可以在程序中使用OpenGL的绘图及相关的函数了。具体情况可以参见下面的文献:

(2)至于读入外部的3ds模型,大体思路是根据之种文件的格式,编写相应的文件读取程序,将相关的数据存入自己定义的结构变量中,以便用OpenGL的函数再在程序场景中显示出来。一般是要在3ds文件中找到以下重要的数据:点,点的索引号,面(对应的顶点索引号),纹理坐标,纹理坐标索引号,法向量,法向量索引号等等。下面的文献是针对读取外部产生的obj文件的,相信对读取3ds文件也有一定借鉴意义:

(3)读入外部模型后,用OpenGL的相关函数,就可以对这个模型进行平移,旋转,缩放等的几何变换,还可以对模型进行光照渲染,透明化处理,反走样处理等等,甚至进行碰撞检测等等。

如有兴趣,可以联系百度成员 A_DEM_Software追问

您说的这些我已经完成 :

在这个运行结果中 可见左面的猫的背面已经消除掉一部分点集 离目标更进了一步 但是还不够
希望您能给予一些关于隐藏点消隐的算法或者看法

参考技术A 用z-缓存不行吗?openGL本身有消隐的功能

点云处理基于深度学习模型的不同处理方式

前言

点云数据由无序的数据点构成的一个集合;点与点之间是具有空间关系的;点云数据所代表的目标对某些空间转换应该具有不变性,如旋转和平移。 

点云数据处理方式,通常有:将点云数据投影到二维平面(多视图法)、将点云数据划分到有空间依赖关系的voxel(体素法)、直接在点云数据上应用深度学习模型(点云法)。

目录

一、点云数据特点

1.1 无序

1.2 点与点之间的空间关系

1.3 不变性

二、点云数据处理方式

2.1 将点云数据投影到二维平面(多视图法)

2.2 将点云数据划分到有空间依赖关系的voxel(体素法)

2.3 直接在点云数据上应用深度学习模型(点云法)


一、点云数据特点

点云数据是在欧式空间下的点的一个子集,它具有以下三个特征:无序、点与点之间的空间关系、空间转换不变性。

1.1 无序

点云数据是一个集合,对数据的顺序是不敏感的。这使得处理点云数据的模型需要对数据的不同排列保持不变性。

为什么说点云数据是无序的??先看下图:

 左边有三个点云,右边也有三个点云,虽然每个点的索引值不一样,但是它们的分布、形状等都是一样的;在分类或分割模型,对左、右两幅图应该输出同一个结果(看起像三角形)。

再看看左边和右边的点云索引值不是对应的。

 所以说:点云数据由无序的数据点构成一个集合来表示;分类或分割模型,不应该受点云数据集的顺序影响。

1.2 点与点之间的空间关系

一个物体通常由特定空间内的一定数量的点云构成,也就是说这些点云之间存在空间关系。

1.3 不变性

点云数据所代表的目标对某些空间转换应该具有不变性,如旋转和平移。 如下图所示,同一个物体,在空间经过旋转或平移,还是原来那个物体。

二、点云数据处理方式

2.1 将点云数据投影到二维平面(多视图法)

此种方式不直接处理三维的点云数据,而是先将点云投影到某些特定视角再处理,如前视视角和俯视角,再使用2D-CNN进行分类或分割。

同时,也可以融合使用来自相机的图像信息。通过将这些不同视角的数据相结合,来实现点云数据的认知任务。比较典型的算法有MV3D和AVOD。

MV3D-Net 融合了视觉图像激光雷达点云信息;输入数据有三种,分别是点云俯视图、点云前视图和RGB图像。通过特征提取、特征整合和特征融合,最终得到类别标签、3D边界框。这样的设计既能减少计算量,又保留了主要的特征信息。

AVOD-Net算是MV3D-Net的加强版,它也融合了视觉图像和激光雷达点云信息。但它去掉了激光点云的前视图输入、去掉了俯视图中的强度信息;输入数据有二种,分别是点云俯视图和RGB图像。AVOD-Net使用FPN来提取特征,同时添加边界框的几何约束,整体模型效果有提升。

详细可看看这两篇博客:

【论文解读】MV3D-Net 用于自动驾驶的多视图3D目标检测网络

【论文解读】AVOD-Net 用于自动驾驶的聚合视图3D对象检测网络

2.2 将点云数据划分到有空间依赖关系的voxel(体素法)

基于3D-CNN的体素模型:先将点云映射到体素空间上,再通过3D-CNN进行分类或者分割。

体素化网格是将 3D 对象拟合到网格中的最直观的方法,为了使其看起来像是像素图像,我们在这里将其称为体素voxel。在这种情况下,3D 图像由(x,y,z)坐标描述,它看起来就会像乐高一样。

 此种方式通过分割三维空间,引入空间依赖关系到点云数据中,再使用3D卷积等方式来进行处理。经典的网络有:VoxNet。

缺点1:计算量受限制,目前最好的设备也大致只能处理32×32×32的体素;另外由于体素网格的立方体性质,点云表面很多特征都没有办法被表述出来,因此模型效果差。

缺点2:由于是三维的数据量,时间和空间复杂度都非常高,目前已经不是主流的方法了。

2.3 直接在点云数据上应用深度学习模型(点云法)

直接使用点云数据,比较经典的有PointNet、PointNet++。

F-PointNet 也是直接处理点云数据的方案,但它在进行点云处理之前,先使用图像信息得到一些先验搜索范围,这样既能提高效率,又能增加准确率。

F-PointNet的思路是:

  1. 基于图像2D目标检测。
  2. 基于图像生成锥体区域。
  3. 在锥体内,使用 PointNet/PointNet++ 网络进行点云实例分割。

详细可看看这篇博客:【论文解读】F-PointNet 使用RGB图像和Depth点云深度 数据的3D目标检测

特点:直接将三维点云抛入网络进行训练,数据量小。主要任务有分类、分割以及大场景下语义分割。

参考:https://zhuanlan.zhihu.com/p/44809266

https://club.leiphone.com/page/TextTranslation/737

【论文解读】MV3D-Net 用于自动驾驶的多视图3D目标检测网络

【论文解读】AVOD-Net 用于自动驾驶的聚合视图3D对象检测网络

【论文解读】F-PointNet 使用RGB图像和Depth点云深度 数据的3D目标检测

以上是关于算法:基于opengl 点云模型不可见点(隐藏点)的移除 最后一步搞不定了 分不是问题的主要内容,如果未能解决你的问题,请参考以下文章

28 利用平面对应关系求解RT空间转换矩阵

点云处理基于深度学习模型的不同处理方式

OpenGL/GLFW/GLM - 键盘输入无响应

点云数据处理常用算法 ❤️❤️❤️ 目录

点云处理基于深度学习模型的不同处理方式

基于ICP算法计算点集之间的变换矩阵(旋转平移)