精华内容
下载资源
问答
  • 点云分割-PCL点云库欧式聚类分割-基于欧式距离的分割
  • pcl点云库教程

    2018-11-30 11:22:46
    pcl点云库资料pdf文档.
  • pcl点云库1.8.0

    2018-04-10 13:34:50
    pcl点云库1.8.0版本,处理点云数据,数据分析使用,采样滤波
  • 学习PCL点云库

    2015-05-14 00:08:16
    这是国内少有的PCL点云库资料,比较经典。 点云库还是比较难的
  • PCl点云库资料集合

    2018-12-11 21:02:13
    PCl点云库的一些文档,还有一些相应的代码,共10个单元。
  • pcl点云库1.8离线帮助文档
  • PCL点云库学习笔记

    2019-06-14 20:11:39
  • PCL点云库学习教程,低分,完整版!PCL点云库学习教程,低分,完整版!
  • PCL 点云库编程测试点云数据 PCD格式 包括圆柱 长方体 菱形 人体形状 PLC文字点云
  • PCL点云库中的坐标系(CoordinateSystem) 讲一下我所理解的PCL点云库中的坐标系统。 PCL点云库中的坐标系(CoordinateSystem) 引言 正文 代码 参考 引言 世上本没有坐标系,用的人多了,便定义...

    讲一下我所理解的PCL点云库中的坐标系统。


    引言

    世上本没有坐标系,用的人多了,便定义了坐标系统用来定位。地理坐标系统用于定位地球上的位置,PCL点云库可视化窗口中的坐标系统用于定位其三维世界中的位置。

    本人刚开始接触学习PCL点云库,计算机图形学基础为零,以下内容基于自己的理解,如有错误,欢迎指出。

    正文

    首先介绍一下PCL点云库visualization模块中的PCLVisualizer类,它是PCL可视化3D点云的主要类,该类具有更全面的功能,如显示法线、绘制多种形状和多个视口等,其内部实现了添加各种3D对象以及交互实现等。

    其中addCoordinateSystem()函数可以在可视化窗口中的坐标原点(0,0,0)处添加一个红绿蓝三色的三维指示坐标轴,红色是X轴,绿色是Y轴,蓝色是Z,也就是说PCL点云库中使用的是右手三维坐标系。

    三维坐标系

    PCL中的坐标系

    代码

    #include <iostream>
    #include <pcl/point_types.h>
    #include <pcl/point_cloud.h>
    #include <pcl/visualization/pcl_visualizer.h>
    
    int main(int argc, char** argv)
    {
        //显示类
        pcl::visualization::PCLVisualizer viewer("Cloud Viewer");
    
        //添加坐标系
        viewer.addCoordinateSystem();   
    
        //让可视化视窗停住,否则一闪而过。
        while (!viewer.wasStopped())
        {   
            viewer.spinOnce();
        }
    
        return (0);
    }
    

    参考

    【1】[朱德海、郭浩、苏伟.点云库PCL学习教程(ISBN 978-7-5124-0954-5)北京航空航天出版]
    【2】关于三维坐标系基本概念的一些另类理解

    展开全文
  • PCL点云库学习&VS2010(X64)》Part 25 PCL点云操作函数汇集 一、pcl::copyPointCloud()函数的用法: 1、将索引中的点云复制到pcl::PointXYZ中存储起来。 注:一般滤波算法、RANSAC算法、Cluster算法中都会有索引...

    《PCL点云库学习&VS2010(X64)》Part 25 PCL点云操作函数汇集


    一、pcl::copyPointCloud()函数的用法:

    1、将索引中的点云复制到pcl::PointXYZ中存储起来。

    注:一般滤波算法、RANSAC算法、Cluster算法中都会有索引提取,当然在Cluster提取时要注意,有的Cluster里面是很多聚类后的点云,要分别转存,用迭代器和循环解决。
    #include <pcl/common/impl/io.hpp>
    ...
    std::vector<int> inliers_line
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
    ...
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_line(new pcl::PointCloud<pcl::PointXYZ>);
    pcl::copyPointCloud(*cloud,inliers_line,*cloud_line);


    2、PCL 不同类型的点云之间进行类型转换,也可以使用函数pcl::copyPointCloud():

    如将PointXYZ转换为PointXYZRGBA
    #include <pcl/common/impl/io.h>
    
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_xyz (new pcl::PointCloud<pcl::PointXYZ> ()); 
    pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud_xyzrgba (new pcl::PointCloud<pcl::PointXYZRGBA> ());
    pcl::copyPointCloud(*cloud_xyz, *cloud_xyzrgba);
    
    

    该函数也可以用循环替代:
    cloud_xyzrgba->points.resize(cloud_xyz->size());
    for (size_t i = 0; i < cloud_xyz->points.size(); i++) {
    cloud_xyzrgb->points[i].x = cloud_xyz->points[i].x;
    cloud_xyzrgb->points[i].y = cloud_xyz->points[i].y;
    cloud_xyzrgb->points[i].z = cloud_xyz->points[i].z;
    }


    二、将某些点转存为中间点云或者创建一个新的点云:

    pcl::PointCloud<pcl::PointXYZ>::Ptr point_cloud(new pcl::PointCloud<pcl::PointXYZ>());
    pcl::pointXYZ point;
    point.x = 70.00;
    point.y = -20.00;
    point.z = 13.67;
    point_cloud->points.push_back(point);


    如果想将某些点从堆栈中弹出,可以利用pop_up()函数。


    三、计算点云质心(重心)、曲率、法线、转换(仿射)矩阵

    三维点云的质心、曲率、法线、转换(仿射)矩阵:

    先定义三个点云,pcl1_ptrA, pcl1_ptrB and pcl1_ptrC:

    pcl::PointCloud<pcl::PointXYZRGB>::Ptr pcl1_ptrA(new pcl::PointCloud<pcl::PointXYZRGB>); //pointer for color version of pointcloud
    pcl::PointCloud<pcl::PointXYZRGB>::Ptr pcl1_ptrB(new pcl::PointCloud<pcl::PointXYZRGB>); //ptr to hold filtered Kinect image
    pcl::PointCloud<pcl::PointXYZRGB>::Ptr pcl1_ptrC(new pcl::PointCloud<pcl::PointXYZRGB>); //ptr to hold filtered Kinect image
    ......
    pcl::VoxelGrid<pcl::PointXYZRGB> vox;
    
    vox.setInputCloud(pcl1_ptrA); 
    
    vox.setLeafSize(0.02f, 0.02f, 0.02f);
    
    vox.filter(*pcl1_ptrB); 
    
    cout<<"done voxel filtering"<<endl;
    
    cout<<"num bytes in original cloud data = "<<pcl1_ptrA->points.size()<<endl;
    
    cout<<"num bytes in filtered cloud data = "<<pcl1_ptrB->points.size()<<endl; // ->data.size()<<endl; 
    
    Eigen::Vector4f xyz_centroid; 
    
    pcl::compute3DCentroid (*pcl1_ptrB, xyz_centroid);
    
    float curvature;
    
    Eigen::Vector4f plane_parameters;  
    
    pcl::computePointNormal(*pcl1_ptrB, plane_parameters, curvature); //pcl fnc to compute plane fit to point cloud
    
    Eigen::Affine3f A(Eigen::Affine3f::Identity());
    
    pcl::transformPointCloud(*pcl1_ptrB, *pcl1_ptrC, A);    

    The actual compute call from the NormalEstimation class does nothing internally but:
    for each point p in cloud P

    1. get the nearest neighbors of p
    2. compute the surface normal n of p
    3. check if n is consistently oriented towards the viewpoint and flip otherwise
    The viewpoint is by default (0,0,0) and can be changed with:
    setViewPoint (float vpx, float vpy, float vpz);
    To compute a single point normal, use:
    computePointNormal (const pcl::PointCloud<PointInT> &cloud, const std::vector<int> &indices, Eigen::Vector4f &plane
    _parameters, float &curvature);

    Where cloud is the input point cloud that contains the points, indices represents the set of k-nearest neighbors from cloud, and plane_parameters and curvature represent the output of the normal estimation, with plane_parameters holding the normal (nx, ny, nz) on the first 3 coordinates, and the fourth coordinate is D = nc . p_plane (centroid here) + p. The output surface curvature is estimated as a relationship between the eigenvalues of the covariance matrix (as presented above), as:

    四、将三维点云(pcl::PointXYZ)转换为二维向量(Eigen::Vector2d)

    上一篇文章中的拟合二维曲线有提及该转换函数。

    void
    PointCloud2Vector2d (pcl::PointCloud<pcl::PointXYZ>::Ptr cloud, pcl::on_nurbs::vector_vec2d &data)
    {
      for (unsigned i = 0; i < cloud->size (); i++)
      {
        pcl::PointXYZ &p = cloud->at (i);
        if (!pcl_isnan (p.x) && !pcl_isnan (p.y))
          data.push_back (Eigen::Vector2d (p.x, p.y));
      }
    }

    也可以用循环解决,但是矩阵的效率可能高点。


    五、点云可视化属性函数使用

    PointCloudColorHandlerRGBField
    PointCloudColorHandlerCustom
    setPointCloudRenderingProperties
    addPointCloudNormals

    1、PointCloudColorHandlerRGBField使用方法:

    ...
    int v1(0);
    viewer->createViewPort (0.0, 0.0, 0.5, 1.0, v1);
    viewer->setBackgroundColor (0, 0, 0, v1);
    viewer->addText ("Radius: 0.01", 10, 10, "v1 text", v1);
    pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rgb (cloud);
    viewer->addPointCloud<pcl::PointXYZRGB> (cloud, rgb, "sample cloud1", v1);
    ...

    2、PointCloudColorHandlerCustom使用方法:

    ...
    int v2(0);
    viewer->createViewPort (0.5, 0.0, 1.0, 1.0, v2);
    viewer->setBackgroundColor (0.3, 0.3, 0.3, v2);
    viewer->addText ("Radius: 0.1", 10, 10, "v2 text", v2);
    pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZRGB> single_color (cloud, 0, 255, 0);
    viewer->addPointCloud<pcl::PointXYZRGB> (cloud, single_color, "sample cloud2", v2);
    ...

    3、setPointCloudRenderingProperties使用方法:

    ...
    viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud1");
    viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud2");
    viewer->addCoordinateSystem (1.0);

    4、addPointCloudNormals使用方法:

    ...
    viewer->addPointCloudNormals<pcl::PointXYZRGB, pcl::Normal> (cloud, normals1, 10, 0.05, "normals1", v1);
    viewer->addPointCloudNormals<pcl::PointXYZRGB, pcl::Normal> (cloud, normals2, 10, 0.05, "normals2", v2);
    ...


    六、法向量估计——计算协方差矩阵

    1、计算协方差矩阵


      // Placeholder for the 3x3 covariance matrix at each surface patch
      Eigen::Matrix3f covariance_matrix;
      // 16-bytes aligned placeholder for the XYZ centroid of a surface patch
      Eigen::Vector4f xyz_centroid;
    
      // Estimate the XYZ centroid
      compute3DCentroid (cloud, xyz_centroid);
    
      // Compute the 3x3 covariance matrix
      computeCovarianceMatrix (cloud, xyz_centroid, covariance_matrix);


    2、**计算单个点法线**

    法线估计类 NormalEstimation 的实际计算调用程序内部执行以下操作:

    对点云P中的每个点p

      1.得到p点的最近邻元素

      2.计算p点的表面法线n

      3.检查n的方向是否一致指向视点,如果不是则翻转


    视点坐标默认为( 0,0,0 ),可以使用以下代码进行更换:

    setViewPoint (float vpx, float vpy, float vpz);


    计算单个点的法线,使用:


    computePointNormal (const pcl::PointCloud<PointInT>&cloud, const std::vector<int>&indices, Eigen::Vector4f &plane_parameters, float&curvature);


    此处,cloud是包含点的输入点云,indices是点的k-最近邻元素集索引,plane_parameters和curvature是法线估计的输出,plane_parameters前三个坐标中,以(nx, ny, nz)来表示法线,第四个坐标D = nc . p_plane (centroid here) + p。输出表面曲率curvature通过协方差矩阵的特征值之间的运算估计得到,如:



    七、提取点云的索引pcl::ExtractIndices

    该函数的作用是从点云中提取索引。
    pcl::ExtractIndices<PointType> eifilter (true); // Initializing with true will allow us to extract the removed indices
    eifilter.setInputCloud (cloud_in);
    eifilter.setIndices (indices_in);
    eifilter.filter (*cloud_out);
    // The resulting cloud_out contains all points of cloud_in that are indexed by indices_in
    indices_rem = eifilter.getRemovedIndices ();
    // The indices_rem array indexes all points of cloud_in that are not indexed by indices_in
    eifilter.setNegative (true);
    eifilter.filter (*indices_out);
    // Alternatively: the indices_out array is identical to indices_rem
    eifilter.setNegative (false);
    eifilter.setUserFilterValue (1337.0);
    eifilter.filterDirectly (cloud_in);
    // This will directly modify cloud_in instead of creating a copy of the cloud
    // It will overwrite all fields of the filtered points by the user value: 1337



    展开全文
  • 初识PCL点云库

    2020-05-20 17:06:16
    初识PCL点云库什么是PCLPCL可以做什么模块使用 什么是PCL 前人种树后人乘凉,还是站在巨人的肩膀上乘凉,还可以摘果实,做上一道美味的水果沙拉,或者你喜欢雕花,又或者说你喜欢当种子再种下去,这,一切都是命运的...

    什么是PCL

    前人种树后人乘凉,还是站在巨人的肩膀上乘凉,还可以摘果实,做上一道美味的水果沙拉,或者你喜欢雕花,又或者说你喜欢当种子再种下去,这,一切都是命运的安排

    Point Cloud Library ,点云库,就是基于大家对pcl的研究建立的跨平台C++库,实现了大量点云相关的通用算法和高效数据结构,涉及到点云获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。支持多种操作系统平台,可在Windows、Linux、Android、Mac OS X、部分嵌入式实时系统上运
    行,等等等等

    总结就一句话,好用,就完事了

    PCL可以做什么

    官方通道,带你大致浏览PCL到底包括什么

    首先PCL被分成一系列模块(通常有单独输入与输出就可以当做模块处理),以便能够单独编译使用提高可配置性,对模块的了解与深入学习就是接下来要做的事情。

    • Filters:降采样、去除离群点、特征提取、等数据实现过滤器;

    • Features:特征库包含从点云数据进行三维特征估计的数据结构和机制。三维特征是空间中某些三维点或位置上的表示,它们基于点周围可用的信息来描述几何图形。在查询点周围选择的数据空间通常称为k邻域。三维特征,如曲面法线、曲率、边界点估计、矩不变量、主曲率,PFH和FPFH特征,旋转图像、积分图像,NARF描述子,RIFT,相对标准偏差,数据强度的筛选等等

    • Keypoints:keypoints库包含两个点云keypoint检测算法的实现。关键点(也称为兴趣点)是图像或点云中稳定、独特的点,可以使用定义良好的检测标准进行识别。通常,点云中的兴趣点数量将远远小于点云中的总数量,并且当与每个关键点上的本地特征描述符结合使用时,可以使用这些关键点和描述符来形成原始数据的紧凑但具有描述性的表示,其中包含多种不同的提取方式,可以作为预处理的步骤,选取适合的特征描述符

    • Registration:点云配准,其核心思想是识别数据集之间的对应点,并找到一种使对应点之间的距离(对齐误差)最小化的变换,例如NDT、ICP等

    • KDtree:一种空间分割数据结构,它将一组k维点存储在树结构中,从而实现有效的范围搜索和最近邻搜索。最近邻搜索是处理点云数据时的核心操作,可用于查找点组或特征描述符之间的对应关系或定义点周围的局部邻域(使用FLANN)

    • Octree:八叉树库提供了从点云数据创建层次树数据结构的有效方法。这样就可以对点数据集执行空间分区、降采样和搜索操作。每个八叉树节点要么有八个子节点要么没有子节点。根节点描述了一个封装所有点的立方体边界框。在树的每一级,该空间被两个因子细分,从而提高体素分辨率。
      同时提供了高效的近邻搜索例程,如“体素内近邻搜索”、“K近邻搜索”和“半径内近邻搜索”,它会根据点数据集自动调整其尺寸。

    • Segmentation:提供将点云分割为不同簇的算法,这些算法最适合处理由许多空间隔离区域组成的点云,更多时候称之为聚类提取,如通过采样一致性方法对一系列参数模型(如平面、柱面、球面、直线等)进行模型拟合点云分割提取,提取多边形棱镜内部点云等等

    • Sample Consensus:提供sample consensus(SAC)方法,如RANSAC;以及模型,直线、平面、圆柱体和球体,可以自由组合以检测点云中的特定模型及其参数

    • I/O:用于读取和写入点云数据(PCD)文件以及从各种传感设备捕获点云的类和函数

    • Surface:实现表面重建技术,如网格重建、凸包重建、移动最小二乘法平滑等

    • Image range:包含两个类,用于表示和处理range图像。范围图像是其像素值表示到传感器原点的距离或深度的图像。距离图像是一种常见的三维表示,通常由时差测距摄像机生成。通过了解摄像机的内在校准参数,可以将距离图像转换为点云

    • Visulization:可视化库的建立是为了能够快速原型化和可视化算法在三维点云数据上的运行结果

    • Common library:公共库包含大多数PCL库使用的公共数据结构和方法。核心数据结构包括PointCloud类和许多用于表示点、曲面法线、RGB颜色值、特征描述符等的点类型。它还包含许多用于计算距离/规范、均值和协方差、角度转换、几何变换等的函数

    • Search library:搜索库提供了使用不同数据结构搜索最近邻居的方法

    • Binaries:为PCL中的一些常用工具提供了快速参考

    模块使用

    在PCL中应用一个模块接口程序就几步:

    • 创建处理对象:(过滤、分割等等)

    • 使用setInputCloud通过输入点云数据,处理模块(点云输入的多种数据类型也是很有特色)

    • 设置算法相关参数

    • 调用计算得到输出

    展开全文
  • ubuntu pcl 点云库使用

    2021-03-04 21:34:09
    pcl 点云库使用(cmakeList.xtx) cmake_minimum_required(VERSION 2.6) project(pcl_test) find_package(PCL 1.2 REQUIRED) include_directories(${PCL_INCLUDE_DIRS}) link_directories(${PCL_LIBRARY_DIRS}) add...
  • 请问vscode可以配置pcl点云库吗?感觉网上找到的都是VS的教程
  • 由于课题研究的需要,尝试在课题中引入PCL点云库处理三维点云数据。本文将介绍如何在在VS中配置PCL点云库的编译环境。 PCL点云库在VS2010下的配置流程如下所示: 1.下载PCL点云库。 官方网址:...
  • PCL点云库的基本数据类型

    千次阅读 2018-10-10 11:34:18
    PCL点云库的基本数据类型 初学PCL点云库,对于点云处理很好奇,但入门门槛比较难,由于之前有过三维几何处理算法的基础(网格变形、特征分割、曲面上的最短路径、网格曲面的各种参数化、特征重用等相关算法基础),...
  • PCL点云库的安装

    千次阅读 2018-03-02 15:38:58
    PCL点云库的安装 PCL库是点云库(Point Cloud Library)[4]。PCL库的安装比较容易,输入以下命令即可(也可以使用源代码安装):sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pcl sudo apt-get ...
  • PCL点云库安装

    千次阅读 2018-12-04 12:54:53
    PCL点云库安装 sudo apt install libpcl-dev 注意:如果在Ubuntu14.04下安装的是libpcl-all,一般情况下在Ubuntu的软件仓库里首选带dev后缀的和什么后缀都不带的库版本。这里安装的是PCL1.7版本 最终安装到的路径为...
  • PCL 点云库学习指南

    2019-10-04 16:16:49
    PCL 点云库学习指南 资源链接: http://note.youdao.com/noteshare?id=eeaa7cc2553a44d31f971e2f5c6f7012 用有道云笔记就可以打开,是markdown 格式的文件。
  • PCL点云库学习教程

    2018-08-25 20:07:31
    目前国内比较好的点云库PCL学习教程中文版,适用于目前很热门的深度学习,SLAM,OpenCV等方向学习。
  • ubuntu18安装PCL点云库

    2021-02-23 15:14:05
    项目需要,安装PCL点云库,开始安装吧。 安装依赖库 sudo apt-get update sudo apt-get install git build-essential linux-libc-dev sudo apt-get install cmake cmake-gui sudo apt-get install libusb-1.0-0-...
  • PCL点云库学习笔记(九)
  • pcl点云库源代码.zip

    2021-03-20 15:13:27
    点云库PCL学习教程源码
  • pcl点云库实时显示点云变化

    千次阅读 2018-12-02 16:22:39
    最近有需要用到pcl点云库来显示点云,并且还要根据时间来实时显示它的变化,实时显示主要是要用到CloudViewer这个类,它创建一个显示器用来显示点云,一般来讲动态显示点云就在这个显示器中不断地添加或者删除一些点...
  • PCL点云库学习 2021.7.131、PCL简介2、PCL环境配置3、PCL代码实战 1、PCL简介         PCL是一个点云库,PCL帮助文档,PCL论文下载,PCL的Github地址 2、PCL环境配置 3、...
  • Ubuntu16.04安装编译pcl点云库

    千次阅读 2018-12-11 10:42:48
    在ubuntu下安装pcl点云库时,网上给出的教程,大多是分了几个步骤,安装pcl和其依赖库,未免过于麻烦,其实有很简单的方法,一行就可以搞定。 sudo apt-get install libpcl-dev 这样,对应的依赖项和pcl库都被...
  • 使用PCL点云库实现可视化 废话不多说,直接进入正题 先看一下效果 直接上代码 #include <pcl/point_types.h> #include <pcl/io/pcd_io.h> #include <pcl/io/io.h> #include <pcl/...
  • 在VS2015+PCL1.80下编译成功,通过使用PCL库的grabber类生成Kinect采集的实时PCD点云文件。
  • PCL点云库的一些误区

    2021-04-01 16:31:55
    PCL点云库的一些误区 1、配准融合:很多人理解为是点云拼接(我也这样认为),网上一搜 点云拼接,就出来配准,精配准(ICP)粗配准之类的,或许你想要的就是将两个点云数据拼接起来。比如:a.pcd 有50个点云数据,b...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,927
精华内容 2,370
关键字:

pcl点云库