• PCL —— (2)自带的点云类型PointT


    @


    在这里插入图片描述

    PointXYZ——成员变量: float x, y, z;

    PointXYZ是使用最常见的一个点数据类型,因为它只包含三维xyz坐标信息,这三个浮点数附加一个浮点数来满足存储对齐,用户可利用points[i].data[0],或者points[i].x访问点的x坐标值。

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

    PointXYZI——成员变量: float x, y, z, intensity;

    PointXYZI是一个简单的XYZ坐标加intensity的point类型,理想情况下,这四个变量将新建单独一个结构体,并且满足存储对齐,然而,由于point的大部分操作会把data[4]元素设置成0或1(用于变换),不能让intensity与xyz在同一个结构体中,如果这样的话其内容将会被覆盖。例如,两个点的点积会把他们的第四个元素设置成0,否则该点积没有意义,等等。因此,对于兼容存储对齐,用三个额外的浮点数来填补intensity,这样在存储方面效率较低,但是符合存储对齐要求,运行效率较高。

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

    PointXYZRGBA——成员变量: floatx, y, z; uint32_ t rgba;

    除了rgba信息被包含在一个整型变量中,其它的和PointXYZI类似。

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

    PointXYZRGB——float x, y, z, rgb;

    除了rgb信息被包含在一个浮点型变量中,其它和PointXYZRGB类似。rgb数据被压缩到一个浮点数里的原因在于早期PCL是作为ROS项目的一部分来开发的,那里RGB数据是用浮点数来传送的,PCL设计者希望所有遗留代码会重新更改(在PCL 2.x中很可能这样做),可能取消此数据类型。

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

    PointXY——float x, y;

    简单的二维x-y point结构

    struct
    
    {
    
    float x;
    
    float y;
    
    };
    

    InterestPoint——float x, y, z, strength;

    除了strength表示关键点的强度的测量值,其它的和PointXYZI类似。

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

    Normal——float normal[3],curvature ;

    另一个最常用的数据类型,Normal结构体表示给定点所在样本曲面上的法线方向,以及对应曲率的测量值(通过曲面块特征值之间关系获得——查看NormalEstimation类API以便获得更多信息,后续章节有介绍),由于在PCL中对曲面法线的操作很普遍,还是用第四个元素来占位,这样就兼容SSE和高效计算,例如,用户访问法向量的第一个坐标,可以通过points[i].data_n[0]或者points[i].normal[0]或者points[i].normal_x,再一次强调,曲率不能被存储在同一个结构体中,因为它会被普通的数据操作覆盖掉。

    union
    
    {
    
    float data_n[4];
    
    float normal[3];
    
    struct
    
    {
    
    float normal_x;
    
    float normal_y;
    
    float normal_z;
    
    };
    
    }
    
    union
    
    {
    
    struct
    
    {
    
    float curvature;
    
    };
    
    float data_c[4];
    
    };
    

    PointNormal——float x, y, z; float normal[3], curvature;

    PointNormal是存储XYZ数据的point结构体,并且包括采样点对应法线和曲率。

    union
    
    {
    
    float data[4];
    
    struct
    
    {
    
    float x;
    
    float y;
    
    float z;
    
    };
    
    };
    
    union
    
    {
    
    float data_n[4];
    
    float normal[3];
    
    struct
    
    {
    
    float normal_x;
    
    float normal_y;
    
    float normal_z;
    
    };
    
    };
    
    union
    
    {
    
    struct
    
    {
    
    float curvature;
    
    };
    
    float data_c[4];
    
    };
    

    PointXYZRGBNormal——floatx, y, z, rgb, normal[3], curvature;

    PointXYZRGBNormal存储XYZ数据和RGB颜色的point结构体,并且包括曲面法线和曲率。

    union
    
    {
    
    float data[4];
    
    struct
    
    {
    
    float x;
    
    float y;
    
    float z;
    
    };
    
    };
    
    union
    
    {
    
    float data_n[4];
    
    float normal[3];
    
    struct
    
    {
    
    float normal_x;
    
    float normal_y;
    
    float normal_z;
    
    };
    
    }
    
    union
    
    {
    
    struct
    
    {
    
    float rgb;
    
    float curvature;
    
    };
    
    float data_c[4];
    
    };
    

    PointXYZINormal——floatx, y, z, intensity, normal[3], curvature;

    PointXYZINormal存储XYZ数据和强度值的point结构体,并且包括曲面法线和曲率

    union
    
    {
    
    float data[4];
    
    struct
    
    {
    
    float x;
    
    float y;
    
    float z;
    
    };
    
    };
    
    union
    
    {
    
    float data_n[4];
    
    float normal[3];
    
    struct
    
    {
    
    float normal_x;
    
    float normal_y;
    
    float normal_z;
    
    };
    
    }
    
    union
    
    {
    
    struct
    
    {
    
    float intensity;
    
    float curvature;
    
    };
    
    float data_c[4];
    
    };
    

    PointWithRange - float x, y, z (union with float point[4]), range;

    PointWithRange除了range包含从所获得的视点到采样点的距离测量值之外,其它与PointXYZI类似。

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

    PointWithViewpoint - float x, y, z, vp_x, vp_y, vp_z;

    PointWithViewpoint除了vp_x、vp_y和vp_z以三维点表示所获得的视点之外,其它与PointXYZI一样。

    union
    
    {
    
    float data[4];
    
    struct
    
    {
    
    float x;
    
    float y;
    
    float z;
    
    };
    
    };
    
    union
    
    {
    
    struct
    
    {
    
    float vp_x;
    
    float vp_y;
    
    float vp_z;
    
    };
    
    float data_c[4];
    
    };
    

    MomentInvariants - float j1, j2, j3;

    MomentInvariants是一个包含采样曲面上面片的三个不变矩的point类型,描述面片上质量的分布情况。查看MomentInvariantsEstimation以获得更多信息。

    struct
    
    {
    
    float j1,j2,j3;
    
    };
    

    PrincipalRadiiRSD - float r_min, r_max;

    PrincipalRadiiRSD是一个包含曲面块上两个RSD半径的point类型,查看RSDEstimation以获得更多信息。

    struct
    
    {
    
    float r_min,r_max;
    
    };
    

    Boundary - uint8_t boundary_point;

    Boundary存储一个点是否位于曲面边界上的简单point类型,查看BoundaryEstimation以获得更多信息。

    struct
    
    {
    
    uint8_t boundary_point;
    
    };
    

    PrincipalCurvatures - float principal_curvature[3], pc1, pc2;

    PrincipalCurvatures包含给定点主曲率的简单point类型。查看PrincipalCurvaturesEstimation以获得更多信息。

    struct
    
    {
    
    union
    
    {
    
    float principal_curvature[3];
    
    struct
    
    {
    
    float principal_curvature_x;
    
    float principal_curvature_y;
    
    float principal_curvature_z;
    
    };
    
    };
    
    float pc1;
    
    float pc2;
    
    };
    

    PFHSignature125 - float pfh[125];

    PFHSignature125包含给定点的PFH(点特征直方图)的简单point类型,查看PFHEstimation以获得更多信息。

    struct
    
    {
    
    float histogram[125];
    
    };
    

    FPFHSignature33 - float fpfh[33];

    FPFHSignature33包含给定点的FPFH(快速点特征直方图)的简单point类型,查看FPFHEstimation以获得更多信息。

    struct
    
    {
    
    float histogram[33];
    
    };
    

    VFHSignature308 - float vfh[308];

    VFHSignature308包含给定点VFH(视点特征直方图)的简单point类型,查看VFHEstimation以获得更多信息。

    struct
    
    {
    
    float histogram[308];
    
    };
    

    Narf36 - float x, y, z, roll, pitch, yaw; float descriptor[36];

    Narf36包含给定点NARF(归一化对齐半径特征)的简单point类型,查看NARFEstimation以获得更多信息。

    struct
    
    {
    
    float x,y,z,roll,pitch,yaw;
    
    float descriptor[36];
    
    };
    

    BorderDescription - int x, y; BorderTraits traits;

    BorderDescription包含给定点边界类型的简单point类型,看BorderEstimation以获得更多信息。

    struct
    
    {
    
    int x,y;
    
    BorderTraitstraits;
    
    };
    

    IntensityGradient - float gradient[3];

    IntensityGradient包含给定点强度的梯度point类型,查看IntensityGradientEstimation以获得更多信息。

    struct
    
    {
    
    union
    
    {
    
    float gradient[3];
    
    struct
    
    {
    
    float gradient_x;
    
    float gradient_y;
    
    float gradient_z;
    
    };
    
    };
    
    };
    

    Histogram - float histogram[N];

    Histogram用来存储一般用途的n维直方图。

    template<int N>
    
    struct Histogram
    
    {
    
    float histogram[N];
    
    };
    

    PointWithScale - float x, y, z, scale;

    PointWithScale除了scale表示某点用于几何操作的尺度(例如,计算最近邻所用的球体半径,窗口尺寸等等),其它的和PointXYZI一样。

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

    PointSurfel - float x, y, z, normal[3], rgba, radius, confidence, curvature;

    PointSurfel存储XYZ坐标、曲面法线、RGB信息、半径、可信度和曲面曲率的复杂point类型。

    union
    
    {
    
    float data[4];
    
    struct
    
    {
    
    float x;
    
    float y;
    
    float z;
    
    };
    
    };
    
    union
    
    {
    
    float data_n[4];
    
    float normal[3];
    
    struct
    
    {
    
    float normal_x;
    
    float normal_y;
    
    float normal_z;
    
    };
    
    };
    
    union
    
    {
    
    struct
    
    {
    
    uint32_trgba;
    
    float radius;
    
    float confidence;
    
    float curvature;
    
    };
    
    float data_c[4];
    
    };
    
  • 相关阅读:
    CAN总线学习资料
    VMware虚拟机 硬盘空间不足 磁盘大小调整方案
    郭天祥-S3C2440开发板Linux2.6.31移植教程
    MFC串口编程——使用标准SerialCom类
    Luogu P2602 [ZJOI2010]数字计数 //数位DP
    luogu P1896 [SCOI2005] 互不侵犯 //状压DP
    中北大学ACM 5/12 T6 CSY的幸福
    P2473 || SCOI2008 奖励关 //状压&&期望DP
    请让蝴蝶爬满全身
    【图论】二分图 // 未完成 =、=
  • 原文地址:https://www.cnblogs.com/long5683/p/13256200.html
Copyright © 2020-2023  润新知