pcl

PCL根据空间点云拟合圆

大憨熊 提交于 2020-01-10 22:24:07
参考文档: //http://docs.pointclouds.org/1.9.1/classpcl_1_1_sample_consensus_model_circle3_d.html //使用PCL绘制空间圆 //https://blog.csdn.net/zyj8691/article/details/79416733 //http://www.pcl-users.org/RANSAC-Model-Coefficients-td4041435.html //http://www.pcl-users.org/SOLVED-Terrible-circle-fitting-results-with-SampleConsensusModelCircle3D-td4043214.html //http://docs.pointclouds.org/1.9.1/group__sample__consensus.html //[center.x, center.y, center.z, radius, normal.x, normal.y, normal.z] //http://pointclouds.org/documentation/tutorials/random_sample_consensus.php#random-sample-consensus pcl::PointCloud

PCL点云的GPU和CPU时间对比

纵饮孤独 提交于 2020-01-08 20:37:30
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 随机产生2000万个点的点云数据,将该数据进行进行加操作,比对CPU和GPU时间上的差异。 代码如下,文件名为main.cu。 #include <iostream> #include <cuda.h> #include <boost/version.hpp> #include <boost/numeric/conversion/cast.hpp> #include <boost/thread/mutex.hpp> #include <boost/thread/condition.hpp> #include <boost/thread.hpp> #include <boost/thread/thread.hpp> #include <boost/filesystem.hpp> #include <boost/bind.hpp> #include <boost/cstdint.hpp> #include <boost/function.hpp> #include <boost/tuple/tuple.hpp> #include <boost/shared_ptr.hpp> #include <boost/weak_ptr.hpp> #include <boost/mpl/fold.hpp> #include

如何从深度图像中提取边界

百般思念 提交于 2019-12-29 04:43:52
博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=206 本小节中一起学习如何从深度图像中提取边界(从前景跨越到背景的位置定义为边界)。我们对三种类型的点集感兴趣: 物体边界 ,这是物体最外层和阴影边界的可见点集; 阴影边界 ,毗连于遮挡的背景上的点集; Veil点集 ,在被遮挡物边界和阴影边界之间的内插点,它们是由激光雷达获取的 3D距离数据中的典型数据类型。这三类数据及深度图像的边界如图 1所示。 代码 首先,在PCL(Point Cloud Learning)中国协助发行的书提供光盘的第9章例2文件夹中,打开名为range_image_border_extraction.cpp的代码文件,同文件夹下有测试点云文件。 解释说明 首先,我们进行命令行解析,然后,从磁盘中读取点云(或者如果没有提供,则创建一个点云),最后,创建深度图像并使其可视化。提取边界信息时很重要的一点是区分深度图像中的当前视点不可见点集合和应该可见但处于传感器获取距离范围外的点集,后者可以标记为典型边界,然而当前视点不可见点则不能成为边界。因此,如果后者的测量值存在,则提供那些超出传感器距离获取范围外的数据对于边界提取是非常有用的,我们希望找到另外的包含这些值的pcd文件,这里代码中用far_range.pcd作为这类数据的实例。 std:

怎样可视化深度图像

流过昼夜 提交于 2019-12-29 04:43:39
博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=155 本小节讲解如何可视化深度图像的两种方法,在 3D 视窗中以点云形式进行可视化(深度图像来源于点云),另一种是,将深度值映射为颜色,从而以彩色图像方式可视化深度图像。 代码 首先,在 PCL ( Point Cloud Learning )中国协助发行的书提供光盘的第 7 章例 2 文件夹中,打开名为 range_image_visualization.cpp 的代码文件,同文件夹下可以找到相关的测试点云文件 room_scan1.pcd 。 解释说明 首先,解析命令行并从磁盘上读取点云(如果没有点云文件,自行创建一个),并构造深度图像。 pcl::visualization::PCLVisualizer viewer ("3D Viewer"); //定义初始化可视化对象 viewer.setBackgroundColor (1, 1, 1); //设置背景为白色 pcl::visualization::PointCloudColorHandlerCustom<pcl::PointWithRange> range_image_color_handler (range_image_ptr, 0, 0, 0); //设置自定义颜色 viewer

RGBD-SLAM_v2 超详细安装加运行

妖精的绣舞 提交于 2019-12-27 15:23:19
RGBD-SLAM_v2超详细安装与运行 主要参考链接 注意 1.建立工作空间 2.下载RGBD-SLAM 3.卸载g2o 4.安装g2o依赖项 5.下载并提取eigen 3.2.10头文件 6.下载g2o 7.配置g2o头文件 8.编译g2o 9.下载PCL 10.用C++ 2011支持配置PCL编译 11.编译并安装PCL 12.配置RGBD-SLAM 13.构建siftgpu库(与rgbdslam绑定) 14.建构rgbdslam 15.完成构建rgbdslam包并将启动文件复制 16.添加rgbdslam_ws工作空间到.bashrc文件下 17.测试数据集 主要参考链接 RGBD-SLAM_v2 github地址 环境配置英文教程(很详细) CSDN其他教程 注意 需要环境ubuntu16.04 ROS Kinetic ROS Kinetic安装教程 安装的ros版本若是“full”,则是自带opencv,无需自己重新安装,但是在系统中找不到这个opencv 建议在安装之前下载好数据集,PCL1.8,这两个下载非常慢 PCL下载地址 RGBDSLAM数据集下载(bag版本) 1.建立工作空间 这种操作类似于深度学习经常会做的建立虚拟环境,使得多个环境之间不互相影响 mkdir -p ~/catkin_ws/src cd ~/catkin_ws catkin_make

PCL—低层次视觉—点云分割(RanSaC)

南笙酒味 提交于 2019-12-25 01:59:57
点云分割   点云分割可谓点云处理的精髓,也是三维图像相对二维图像最大优势的体现。不过多插一句,自Niloy J Mitra教授的 Global contrast based salient region detection 出现,最优分割到底鹿死谁手还不好说。暂且不论他开挂的图像处理算法,先安心做一个PCL吹~   点云分割的目的提取点云中的不同物体,从而实现分而治之,突出重点,单独处理的目的。而在现实点云数据中,往往对场景中的物体有一定先验知识。比如:桌面墙面多半是大平面,桌上的罐子应该是圆柱体,长方体的盒子可能是牛奶盒......对于复杂场景中的物体,其几何外形可以归结于简单的几何形状。这为分割带来了巨大的便利,因为简单几何形状是可以用方程来描述的,或者说,可以用有限的参数来描述复杂的物体。而方程则代表的物体的拓扑抽象。于是,RanSaC算法可以很好的将此类物体分割出来。 RanSaC算法   RanSaC算法(随机采样一致)原本是用于数据处理的一种经典算法,其作用是在大量噪声情况下,提取物体中特定的成分。下图是对RanSaC算法效果的说明。图中有一些点显然是满足某条直线的,另外有一团点是纯噪声。目的是在大量噪声的情况下找到直线方程,此时噪声数据量是直线的3倍。   如果用最小二乘法是无法得到这样的效果的,直线大约会在图中直线偏上一点。关于随机采样一致性算法的原理

PCL—低层次视觉—点云分割(基于凹凸性)

感情迁移 提交于 2019-12-25 01:59:17
1.图像分割的两条思路   场景分割时机器视觉中的重要任务,尤其对家庭机器人而言,优秀的场景分割算法是实现复杂功能的基础。但是大家搞了几十年也还没搞定——不是我说的,是接下来要介绍的这篇论文说的。图像分割的搞法大概有两种:剑宗——自低向上:先将图像聚类成小的像素团再慢慢合并,气宗——自顶向下:用多尺度模板分割图像,再进一步将图像优化分割成不同物体。当然,还有将二者合而为一的方法:training with data set. 这第三种方法也不好,太依赖于已知的物体而失去了灵活性。家庭机器人面对家里越来越多的东西需要一种非训练且效果很好的分割法。 Object Partitioning using Local Convexity 一文的作者从古籍中(也不老,1960s左右吧),找到了一种基于凹凸性的分割方法。实际上基于凹凸的图像理解在之前是被研究过的,但是随着神经网络的出现,渐渐这种从明确物理意义入手的图像"理解"方法就被淹没了。对于二维图像而言,其凹凸性较难描述,但对于三维图像而言,凹凸几乎是与生俱来的性质。 2.LCCP方法    LCCP是Locally Convex Connected Patches的缩写,翻译成中文叫做 ”局部凸连接打包一波带走“~~~算法大致可以分成两个部分:1.基于超体聚类的过分割。2.在超体聚类的基础上再聚类。超体聚类作为一种过分割方法

PCL—低层次视觉—点云分割(超体聚类)

心不动则不痛 提交于 2019-12-25 01:58:13
1.超体聚类——一种来自图像的分割方法   超体(supervoxel)是一种集合,集合的元素是“体”。与体素滤波器中的体类似,其本质是一个个的小方块。与之前提到的所有分割手段不同,超体聚类的目的并不是分割出某种特定物体,其对点云实施过分割(over segmentation),将场景点云化成很多小块,并研究每个小块之间的关系。这种将更小单元合并的分割思路已经出现了有些年份了,在图像分割中,像素聚类形成超像素,以超像素关系来理解图像已经广为研究。本质上这种方法是对局部的一种总结,纹理,材质,颜色类似的部分会被自动的分割成一块,有利于后续识别工作。比如对人的识别,如果能将头发,面部,四肢,躯干分开,则能更好的对各种姿态,性别的人进行识别。   点云和图像不一样,其不存在像素邻接关系。所以,超体聚类之前,必须以八叉树对点云进行划分,获得不同点团之间的邻接关系。与图像相似点云的邻接关系也有很多,如面邻接,线邻接,点邻接。其具体解释如下图:   基于超体聚类的点云分割,使用点邻接(蓝色)作为相邻判据。 2.超体聚类的实现步骤  举个简单的例子来体会下超体聚类,其过程和结晶类似。但不是水结晶成冰,而是盐溶液过饱和状态下的多晶核结晶。所有的晶核(seed)同时开始生长,最终填满整个空间,使物质具有晶体结构。  超体聚类实际上是一种特殊的区域生长算法,和无限制的生长不同

点云滤波简介

谁都会走 提交于 2019-12-25 01:55:24
 点云滤波是点云处理的基本步骤,也是进行 high level 三维图像处理之前必须要进行的预处理。其作用类似于信号处理中的滤波,但实现手段却和信号处理不一样。我认为原因有以下几个方面: 点云不是函数,对于复杂三维外形其x,y,z之间并非以某种规律或某种数值关系定义。所以点云无法建立横纵坐标之间的联系。 点云在空间中是离散的。和图像,信号不一样,并不定义在某个区域上,无法以某种模板的形式对其进行滤波。换言之,点云没有图像与信号那么明显的定义域。 点云在空间中分布很广泛。历整个点云中的每个点,并建立点与点之间相互位置关系成了最大难点。不像图像与信号,可以有迹可循。 点云滤波依赖于几何信息,而不是数值关系。   综上所述,点云滤波只在抽象意义上与信号,图像滤波类似。因为滤波的功能都是突出需要的信息。 点云滤波的方法   PCL常规滤波手段均进行了很好的封装。对点云的滤波通过调用各个滤波器对象来完成。主要的滤波器有 直通滤波器,体素格滤波器,统计滤波器,半径滤波器 等。不同特性的滤波器构成了较为完整的点云前处理族,并组合使用完成任务。实际上,滤波手段的选择和采集方式是密不可分的。 如果使用线结构光扫描的方式采集点云,必然物体沿z向分布较广,但x,y向的分布处于有限范围内。此时可使用直通滤波器,确定点云在x或y方向上的范围,可较快剪除离群点,达到第一步粗处理的目的。

PCL点云配准(1)

梦想的初衷 提交于 2019-12-25 01:53:11
在逆向工程,计算机视觉,文物数字化等领域中,由于点云的不完整,旋转错位,平移错位等,使得要得到的完整的点云就需要对局部点云进行配准,为了得到被测物体的完整数据模型,需要确定一个合适的坐标系,将从各个视角得到的点集合并到统一的坐标系下形成一个完整的点云,然后就可以方便进行可视化的操作,这就是点云数据的配准。点云的配准有手动配准依赖仪器的配准,和自动配准,点云的自动配准技术是通过一定的算法或者统计学规律利用计算机计算两块点云之间错位,从而达到两块点云自动配准的效果,其实质就是把不同的坐标系中测得到的数据点云进行坐标系的变换,以得到整体的数据模型,问题的关键是如何让得到坐标变换的参数R(旋转矩阵)和T(平移向量),使得两视角下测得的三维数据经坐标变换后的距离最小,,目前配准算法按照过程可以分为整体配准和局部配准,。PCL中有单独的配准模块,实现了配准相关的基础数据结构,和经典的配准算法如ICP。 PCL中实现配准算法以及相关的概念 两两配准的简介:一对点云数据集的配准问题是两两配准(pairwise registration 或 pair-wise registration).通常通过应用一个估计得到的表示平移和选装的4*4缸体变换矩阵来使得一个点云的数据集精确的与另一个点云数据集(目标数据集)进行完美的配准 具体的实现步骤: (1)首先从两个数据集中按照同样的关键点选取的标准