• PCL学习笔记(三):PCL的点类型


    数据类型

    基础类

        pcl::PointCloud
            pcl::PointCloud::width:点云宽度
            pcl::PointCloud::height:点云高度
            pcl::PointCloud::points:点云中包含的点
            pcl:`PointCloud<pcl::PointCloud::isOrganized:点云有无组织

    //有组织点
    cloud.width = 640; // Image-like organized structure, with 480 rows and 640 columns,
    cloud.height = 480; // thus 640*480=307200 points total in the dataset
    
    //无组织点
    cloud.width = 307200;
    cloud.height = 1; // unorganized point cloud dataset with 307200 points
    
    //点云数组向量
    pcl::PointCloud<pcl::PointXYZ> cloud;
    std::vector<pcl::PointXYZ> data = cloud.points;
    
    判断组织
    if (!cloud.isOrganized ())
      ...

    模板类型

    对于模板类型,只需要熟悉大概有什么类型可用,使用时翻阅文档就可以了。

    使用中会发现类型中通常包含一个用于SSE对齐的数据,感兴趣可以简单了解一下,Sreaming SIMD Extensions, 它是一组CPU指令,用于像信号处理、科学计算或者3D图形计算一样的应用,但是SSE对于数据是有很多种格式要求的,其中就有对齐这一点,所以就有了这一部分的操作

        PointXYZ - Members: float x, y, z
        最常用的数据类型之一,只表示3D xyz信息。这3个浮点数用一个附加浮点数进行填充,以进行SSE对齐。用户可以访问点[i].data[0]或点[i].x

        union
        {
         float data[4];
          struct
          {
           float x;
           float y;
           float z;
          };
        };



        PointXYZI - Members: float x, y, z, intensity
        XYZ+强度类型。在理想情况下,这4部分将创建一个单一的结构,SSE对齐。但是,由于大多数点操作会将data[4]数组的第四部分设置为0或1(用于转换),因此不能将intensity设置为同一结构的成员,因为它的内容将被覆盖。例如,两点之间的点积将其第四个分量设置为0,否则点积就没有意义,等等。
        因此,对于SSE对齐,我们使用3个额外的浮动来填充强度。在存储方面效率低,但在内存对齐方面很好。

        union
        {
          float data[4];
          struct
          {
           float x;
           float y;
           float z;
          };
        };
        union
        {
         struct
          {
            float intensity;
          };
          float data_c[4];
        };


        PointXYZRGBA - Members: float x, y, z; std::uint32_t rgba
        与PointXYZI类似,除了rgba包含打包成无符号32位整数的rgba信息外。由于联合声明,还可以按名称单独访问颜色通道。

        union
        {
         float data[4];
         struct
          {
           float x;
           float y;
           float z;
          };
        };
        union
        {
          union
          {
            struct
            {
              std::uint8_t b;
              std::uint8_t g;
              std::uint8_t r;
             std::uint8_t a;
            };
            float rgb;
          };
        std::uint32_t rgba;
        };


        PointXYZRGB - float x, y, z; std::uint32_t rgba    与PointXYZRGBA相同

        PointXY - *float x, y

        InterestPoint - float x, y, z, strength
        与PointXYZI类似,除了强度包含关键点强度的度量

        Normal - float normal[3], curvature
        最常用之一,表示给定点处的曲面法向,以及曲率的度量

        PointNormal - float x, y, z; float normal[3], curvature
        保存XYZ数据、曲面法线和曲率的点结构。

        PointXYZRGBNormal - float x, y, z, normal[3], curvature; std::uint32_t rgba
        保存XYZ数据、RGBA颜色以及曲面法线和曲率的点结构。

        PointXYZINormal - float x, y, z, intensity, normal[3], curvature
        保存XYZ数据和强度值以及曲面法线和曲率的点结构。

        PointWithRange - float x, y, z (union with float point[4]), range
        与PointXYZI类似,除了range包含从获取视点到世界上的点的距离的度量。

        PointWithViewpoint - float x, y, z, vp_x, vp_y, vp_z
        与点xyzi类似,除了vp_x、vp_y和vp_z包含作为3D点的采集视点

        MomentInvariants - float j1, j2, j3
        在曲面片上保持3个不变矩的简单点类型。

        PrincipalRadiiRSD - float r_min, r_max
        在曲面片上保持2 RSD半径的简单点类型

        Boundary - std::uint8_t boundary_point
        简单点类型,用于保存点是否位于曲面边界上

        PrincipalCurvatures -* float principal_curvature[3], pc1, pc2*
        保持给定点的主曲率的简单点类型。

        PFHSignature125 - float pfh[125]
        包含给定点的PFH(点特征直方图)的简单点类型。

        FPFHSignature33 - float fpfh[33]
        包含给定点的FPFH(快速点特征直方图)的简单点类型

        VFHSignature308 - float vfh[308]
        包含给定点的VFH(视点特征直方图)的简单点类型

        Narf36 - float x, y, z, roll, pitch, yaw; float descriptor[36]
        保持给定点的NARF(通常对齐的半径特征)的简单点类型

        BorderDescription - int x, y; BorderTraits traits
        保存给定点的边界类型的简单点类型

        IntensityGradient -* float gradient[3]*
        保持给定点的强度梯度的简单点类型

        Histogram - float histogram[N]
        通用n-D直方图占位符

        PointWithScale - float x, y, z, scale
        与PointXYZI类似,除了scale包含考虑某个点进行几何操作的比例

        PointSurfel - float x, y, z, normal[3], rgba, radius, confidence, curvature
        包含XYZ数据、曲面法线、RGB信息、比例、置信度和曲面曲率的复杂点类型

    自定义类型

    struct MyPointType
    {
      float test;
    };



    ————————————————
    版权声明:本文为CSDN博主「CallMe航仔」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/tobebest_lah/article/details/106241406

  • 相关阅读:
    查看版本号以及如何升级
    http协商缓存VS强缓存
    「JOISC 2012」星座(凸包)
    「科技」求欧拉数单项
    「科技」在线 O(1) 逆元
    「JOISC 2017 Day 3」自然公园(交互)
    「IOI 2021」分糖果(线段树)
    「EOJ 317A」击鼓传花(类欧)
    「CF 1483E」Vabank(交互,构造)
    「NOIP 2020」微信步数(计数)
  • 原文地址:https://www.cnblogs.com/zhongllmm/p/15965856.html
Copyright © 2020-2023  润新知