PCL:点云中的超体素数据

news/2024/9/19 10:33:50

-----------------------体素数据---------------------体素化网格

体素(Voxel)是体积元素(Volume pixel)的简称,是数据位于三维空间内规则网格上的最小单位,体素,其物理意义类似于二维图像像素在三维空间上的推广,是一组均匀分布、位于正交网格中心的立方体的集合。体素不能表示三维空间中的位置信息,即不具有三维坐标。可以通过体素数据在立体空间内的相对位置关系表示场景或物体的三维信息。

场景的体素数据表示

1.首先将点云数据进行体素化

体素化(Voxelization)是利用体素来近似表示场景或物体的空间结构和几何形状的过程。体素化的基本原理是:在输入的点云数据上创建一个三维立体的网格,立体网格是一种微小的三维立方体的集合。然后,在每个三维立方体内,利用立方体内所有点云数据的重心点来近似表示网格内的所有点,网格处理后得到相应的体素云数据。体素云数据可以表示模型的表面几何特征和内部属性信息,并且利用体素数据的相对位置关系还可以表示三维信息。

点云数据是杂乱、无组织结构的,但是通过体素化处理后,在体素空间内存在三
种拓扑结构:6 邻接、18 邻接以及 26 邻接。其中 6 邻接的两个体素具有 6 个公共面,
18 邻接的体素具有 12 条公共边和 6 个公共面,26 邻接体素在此基础上还具有 8 个
公共点。如图 3.3 所示,从左到右依次为 6 邻接、18 邻接以及 26 邻接。


 

2.体素化后获得体素云数据

体素化处理首先需要建立体素空间,体素空间类似于二维图像模型的像素空间。体素空间的范围可以根据点云数据坐标分别在 X,Y,Z 轴的最大、最小值来确定,然后设定固定的体素分辨率 R,以体素分辨率为基本单位对体素空间下的最大包围盒进行划分,得到体积为 R^3的微小的立方体集合。每个立方体内的中心点或者质心点可以用来表示相应的体素立方体,所有中心点或者质心点形成的数据集即为体素云数据。

--------------------超体素数据------------------------

超体素(Supervoxel)是一种由体素数据组成的集合,是在三维空间内具有一定语义感知信息的原子体积的三维网格的子集,类似于二维图像上的超像素。超体素是根据位置关系或者其他属性的相似性来生成不规则形状的簇,与体素的本质类似,是三维空间内的由体素构成的不规则的几何体。超体素内携带丰富的属性信息,例如具有空间一致性,并且相对于体素数据更加易于理。一个性质良好的超体素应该具有较为规则的几何形状与均匀的体素密度,并且可以很好的依附于边界信息。

场景的超体素数据表示

超体素的获取过程即体素数据的聚类过程,其基本原理是对局部范围内满足相似性约束的体素数据的融合,根据纹理、颜色、法线等相似属性将体素云数据划分为相应的超体素,用于研究体素簇之间的关系,有利于后续的分类和识别工作。这类似于在图像分割处理中,将像素聚类得到超像素,利用超像素的关系来分割、理解图像。目前,超体素已普遍应用于三维数据处理和视频分析等研究领域,如点云分割,目标识别,运动分析和场景重构等。

--------------------

应用在体素滤波、超体聚类等。

1.体素滤波

在使用PCL的处理点云时,很多时候我们不需要有太过高的分辨率,因为点云过多会造成计算变慢,并且更加消耗计算资源,所以我们需要把点云变稀,voxel就是一个很好的方法。

voxel就是三维的pixel,也就是把点云画出网格,然后每个网格内保留一个点就可以了。网格的大小可以自己定义,这就相当于一个downsample(下采样)

我显示出了所有的点,如果某一个格子内没有点就可以不显示了,你也可以把格子调的很密,颜色也可以保留。

#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/voxel_grid.h>//Pcl自带的voxel功能pcl::VoxelGrid<pcl::PCLPointCloud2> sor;//pcl的一贯规则,你要使用voxel功能,首先需要创建一个voxel类的一个对象,也就是sor sor.setInputCloud (cloud);//然后输入需要过滤的点云,也就是cloudsor.setLeafSize (0.01f, 0.01f, 0.01f);//然后设置一下叶子大小,也就是resolution(分辨率),也就是这个格子的最小间距,设置的越小则越密集,保留的点越多。三个参数分别是xyzsor.filter (*cloud_filtered);//然后给一个输出的点云用来接收过滤的结果,即cloud_filtered就是变稀疏后的cloud

点云数量很有可能点数减少了十倍,但是形状还保留,基本上没什么太大的影响,不过如果你要做精确的体积估计的话这个肯定是不可以的,因为边缘肯定会变短,但是不那么精确,知道大致形状,知道中心就可以的需求就可以放心大胆的使用这个功能

左右是过滤前后的对比,右边的图然能够看出来是一张桌子上面放了个杯子,但是点明显变稀疏了,能够满足你的要求且不会破坏你的结果那么就可以尝试读入点云就用这个过滤一遍,点云少了后续的处理速度会快的很多。

-----------------------

后续可以基于体素做超体聚类,LCCP等算法。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pgtn.cn/news/18636.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

和12岁小同志搞创客开发:如何选择合适的传感器?

目录 1、信号采集 2、信号输出 3、物美价廉 4、如何选型采购 机缘巧合在网上认识一位12岁小同志&#xff0c;从零开始系统辅导其创客开发思维和技巧。 项目专栏&#xff1a;https://blog.csdn.net/m0_38106923/category_11097422.html 人类有五觉&#xff1a;视觉、听觉、…

差分金字塔

1、原理 DOG金字塔的每1组第i层是由高斯金字塔的每1组第i1层减每1组第i层得到的。以此类推&#xff0c;逐组逐层生成每一个差分图像&#xff0c;所有差分图像构成差分金字塔&#xff1b;每一组在层数上&#xff0c;DOG金字塔比高斯金字塔少一层。 DOG金字塔的构建可以用下图描…

毕业设计So Easy:珠穆朗玛FM音频电台APP

目录 1、项目背景 2、系统介绍 2.1、系统概述 2.2、关键技术 2.3、环境配置 3、系统结构设计 3.1、播放器状态结构图 3.2、登录流程结构图 4、系统模块设计 5、系统总体架构 6、接口描述 很多计算机专业大学生经常和我交流&#xff1a;毕业设计没思路、不会做、论文…

机器学习中的数学基础:(1)实际应用中矩阵特征值与特征向量的几何意义

关于特征值、特征向量的讲解有很多的教程&#xff0c;对于这些枯燥的数学基础怎么运用到自己的实际计算机视觉实验中&#xff0c;是一项很重要的任务。算法的底层其实就是数学公式的各种结合与推导&#xff0c;有时间不是我们不能很好的去理解这些算法基础&#xff0c;而是没有…

JAVA电影购票系统

一、功能描述 电影购票系统简介、项目功能演示 日志框架搭建、系统角色分析 首页设计、登录、商家界面、用户界面实现 商家-详情页设计、影片上架、退出 商家-影片下架、影片修改 用户-展示全部影片 用户-购票功能 用户-评分功能 用户-评分降序展示 用户-根据片名查询全部影片信…

和12岁小同志搞创客开发:如何驱动各类型传感器?

目录 1、数字量输出类型传感器 2、数字量输入类型传感器 3、模拟量电压类型传感器 4、模拟量电流类型传感器 5、协议类型传感器 机缘巧合在网上认识一位12岁小同志&#xff0c;从零开始系统辅导其创客开发思维和技巧。 项目专栏&#xff1a;https://blog.csdn.net/m0_3810…

机器学习中的数学基础:(3)主成分分析(PCA)及其应用

主成分分析主要用于数据的降维&#xff1f;什么是降维&#xff1f; 比如说有如下的房价数据&#xff1a; 这种一维数据可以直接放在实数轴上&#xff1a; 房价样本数据用X表示&#xff0c;则以上数据的均值为&#xff1a; 以均值为原点&#xff1a; 将上述表格以均值&#xf…

opencv特征匹配中match与KnnMatch返回数据类型

1、match # 初始化 BFMatcherbf cv.BFMatcher()# 对描述子进行匹配# des1/des2分别是两幅图片特征点的特征向量matches bf.match(des1, des2)# 打印match返回数据的类型print(type(matches[0])) match匹配的返回结果是DMatch类型。 DMatch数据结构包含三个非常重要的数据分别…