点云处理
张飞飞~
吉林大学智能网联中心VCI实验室
展开
-
pcl opencv ROS_message三者之间点云和图片类型转换总结
1.pcl::PointCloud<PointT>和pcl::PointCloud<PointT>::Ptr之间相互转换pcl中点云常用的指针类型pcl::PointCloud<PointT>::Ptr和非指针类型pcl::PointCloud<PointT> 之间相互转换pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_Ptr(new pcl::PointCloud<pcl::PointXYZ>)原创 2021-11-02 10:17:13 · 2639 阅读 · 0 评论 -
判断点是否位于3D检测框中
给定一个检测框[cx,cy,cz,w,h,l,head],判断点(x,y,z)是否位于该检测框内。原创 2021-10-16 00:14:36 · 1842 阅读 · 0 评论 -
PCL点云库学习笔记(5)——深度图像
1.深度图像简介深度图像 (Depth Images), 也被称为距离影像 (Range Images), 是指将图像采集器到 场景中各点的距离(深度)值作为像素值的图像,它直接反映了景物可见表面的几何形状, 利用它可以很方便地解决 3D 目标描述中的许多问题。深度图像经过坐标转换可以计算为点云数据,有规则及必要信息的点云数据也可以反算为深度图像数据。...原创 2020-12-21 09:51:47 · 1011 阅读 · 5 评论 -
pcl学习 关于c++代码问题记录(二)
1.命令行输入点云文件名std::vector<int> pcd_filename_indices = pcl::console::parse_file_extension_argument (argc, argv, "pcd");//搜索命令行中输入的.pcd类的文件,并将索引存放在pcd_filename_indices中std::string file_name = argv...原创 2020-03-05 20:09:40 · 849 阅读 · 2 评论 -
PCL点云库学习笔记(7)——采样一致性
1.随机采样一致性相关概念及算法RANSAC 随机采样一致性算法简介RANSAC 是一种随机参数估计算法。 RANSAC 从样本中随机抽选出一个样本子集,使用最小方差估计算法对这个子集计算模型参数,然后计算所有样本与该模型的偏差,再使用一 个预先设定好的阈值与偏差比较,当偏差小于阈值时,该样本点属于模型内样本点 (inUers),文中简称局内点或内点,否则为模型外样本点( outliers), 文中简称局外点或外 点,记录下当前的 inliers 的个数,然后重复这一过程。每一次重复,都记录当前最佳的模原创 2020-12-28 10:53:36 · 514 阅读 · 0 评论 -
PCL点云库学习笔记(2)——kd-tree和八叉树
1.kd-tree、八叉树简介1)kd-tree, 或称 k 维树,是计算机科学中使用的一种数据结构,用来组织表示 k 维空间 中的点集合。一般在点云处理中都是应用到三维的kd-tree。PCL 中 k-d tree 库提供了 k-d tree 数据结构,基于 FLANN 进行快速最近邻检索。最近邻检索在匹配、特征描述子计算、邻域特征提取中是非常基础的核心操作。 kd-tree 模块利用 两个类与两个函数实现了利用 k-d tree 数据结构对点云的高效管理和检索,其依赖于 pcl_ common 模块。原创 2020-12-11 20:55:47 · 3068 阅读 · 0 评论 -
NDT点云配准示例
normal_distributions_transform.cpp#include <iostream>#include <pcl/io/pcd_io.h>#include <pcl/point_types.h>#include <pcl/registration/ndt.h>#include <pcl/filters/approximate_voxel_grid.h>#include <pcl/visualization/pc原创 2020-10-14 15:28:37 · 1042 阅读 · 0 评论 -
PCL点云库学习笔记(3)——可视化
1.点云视窗类CloudViewer简单点云可视化点云视窗类 CloudViewer 是简单显示点云的可视化工具类,可以让用户用尽可能少的代码查看点云。注意:点云视窗类不能应用于多线程应用程序中。PCLVisualizer 是 Cloud Viewer 的后端, 但它在自己的线程中运行,若要使用 PCLVisualizer 类,必须使用调用函数,这样可以避免可视化的并发问题。但是,调用时一定要特别注意,以免发生代码混乱的情况,因为调用函数要从可视化线程中进行。#include <pcl/vis原创 2020-12-16 16:00:58 · 954 阅读 · 0 评论 -
批量转换Bin文件为同名pcd文件
#include <boost/program_options.hpp>#include <pcl/point_types.h>#include <pcl/io/pcd_io.h>#include <pcl/common/point_operators.h>#include <pcl/common/io.h>#include <pcl/search/organized.h>#include <pcl/search/oc原创 2021-03-18 17:28:20 · 431 阅读 · 0 评论 -
PCL点云库学习笔记(6)——关键点
1.关键点相关概念及算法关键点也称为兴趣点,它是 2D 图像、3D 点云或曲面模型上,可以通过定义检测标准来获取的具有稳定性、区别性的点集。从技术上来说,关键点的数量相比于原始点云或图像的 数据量小很多,它与局部特征描述子结合在一起,组成关键点描述子,常用来形成原始数据 的紧凑表示,而且不失代表性与描述性,从而可以加快后续识别、追踪等对数据的处理速 度。关键点提取是 2D 与 3D 信息处理中不可或缺的关键技术。...原创 2020-12-27 10:52:21 · 3882 阅读 · 0 评论 -
pcl学习 关于c++代码问题记录(三)
1.for(int a:b) 表示从b中依次取出元素赋值给afor (int index:inliers->indices)planeCloud->points.push_back(cloud->points[index])表示从索引集indices中依次取出索引值赋值给变量index,然后将这些点依次添加到点云集planeCloud中。2.std::pair<cl...原创 2020-04-30 09:26:07 · 1284 阅读 · 0 评论 -
pcl学习 关于c++代码问题记录(一)
1.std::cerr与std::cout作用类似,区别在于ceer一般用于显示错误信息,直接发送到显示屏,不会对显示的信息有缓存。2.int main(int argc,char **argv)if(argc!=2){std::cerr<<“please specify command line arg ‘-f’ or ‘-p’”<<std::endl;exi...原创 2020-02-29 01:52:55 · 920 阅读 · 1 评论 -
PCL点云库学习笔记(1)——输入与输出
一.pcl支持的数据输入设备OpenNI (开放式自然交互)来源于由业界领导的一个非营利性组织,创建于 2010 年 11 月,专注于提高和改善自然交互设备与应用软件的互操作能力。OpenNI 目前已成为 PCL 集成进来的第一个设备相关的第三方库,用来抓取 OpenNI 兼容 设备中的点云数据。前面描述的 OpenNI 应用框架说明,只要底层的硬件传感器设备与 OpenNI 兼容,都可以作为点云数据输入源。二、pcl数据格式• PLY 是一种多边形文件格式,由 Stanford 大学的 Turk原创 2020-12-07 22:25:12 · 1942 阅读 · 1 评论 -
PCL点云库学习笔记(4)——点云滤波
1.PCL滤波算法及相关概念1)需要进行滤波的情况及对应的处理方式:点云数据密度不规则需要平滑处理——按具体给定的规则限制过滤因遮挡造成离群点大量数据——降采样噪声数据2)双边滤波:通过取临近点的加权平均来修正当前采样点的位置,从而达到滤波的效果。同时剔除与当前采样点差异较大的相邻采样点,达到保持原有特征的目的。2.直通滤波器对点云处理指定某一维度实行简单滤波,即去掉用户指定范围内部(或者外部)的点。#include <iostream>#include <ctime&原创 2020-12-19 18:47:32 · 1083 阅读 · 1 评论 -
点云处理---二叉树
numpy相关函数记录:data=np.random.permutation(data_size).tolist()#随机排列一个数组,data_size是一个数字的话就是排列range(data_size)#tolist是将数组转换成列表for value,key in enumerate(data):#enumerate:迭代可迭代的对象:包括列表、字符串、字典等#可以返回键值以及相应的元素内容point_indices_mid=math.ceil()#向上取整...原创 2021-06-01 14:39:09 · 336 阅读 · 1 评论 -
点云处理---kd-tree
kd原创 2021-06-01 14:30:09 · 2169 阅读 · 1 评论 -
点云处理--voxel filter
# 实现voxel滤波,并加载数据集中的文件进行验证# import open3d as o3d import osimport numpy as npfrom pyntcloud import PyntCloud# 功能:对点云进行voxel滤波# 输入:# point_cloud:输入点云# leaf_size: voxel尺寸def voxel_filter(point_cloud, leaf_size, mode): filtered_points =原创 2021-05-30 21:28:13 · 1184 阅读 · 0 评论 -
三维点云处理系列----PCA
一、主成分分析PCA推导的基础数学知识准备1、矩阵和向量相乘矩阵和向量相乘实际是矩阵对向量进行旋转加拉伸作用。可以试试例子:矩阵为[(0,1),(2,1)],向量为(1,0)’,相乘之后向量变成了(0,2)’。进行了旋转和拉伸。但是,如果向量刚好是矩阵的特征向量的时候,矩阵只会对向量有缩放的效果,不会有旋转。2、SVD分解一个矩阵,可以分解成三个矩阵相乘的形式。U和V都是酉矩阵,即Σ是一个对角阵。所以也可以从SVD的角度来理解矩阵和向量乘法的一个物理意义。U,V值会对向量进行旋转变换,而Σ原创 2021-05-30 21:20:52 · 3935 阅读 · 3 评论 -
点云课程学习——点云结构与查找(一)
# 该文件(result_set)定义了在树中查找数据所需要的数据结构,类似一个中间件import copyclass DistIndex: def __init__(self, distance, index):#初始化类DistIndex self.distance = distance self.index = index def ...原创 2020-05-04 16:52:17 · 676 阅读 · 0 评论 -
点云课程学习——点云结构与查找(二)
# octree的具体实现,包括构建和查找import randomimport mathimport numpy as npimport timefrom result_set import KNNResultSet, RadiusNNResultSet# 节点,构成OCtree的基本元素class Octant: def __init__(self, childre...原创 2020-05-01 21:21:47 · 551 阅读 · 1 评论 -
点云课程学习——点云结构与查找(三)
```python# 对数据集中的点云,批量执行构建树和查找,包括kdtree和octree,并评测其运行时间import randomimport mathimport numpy as npimport timeimport osimport structimport octree as octreeimport kdtree as kdtreefrom result...原创 2020-04-24 23:59:40 · 568 阅读 · 0 评论