zoukankan      html  css  js  c++  java
  • 3.3PCL已有点类型介绍和增加自定义的点类型

    1、PCL中有哪些可用的PointT类型

    这些point类型都位于point_types.hpp文件中,如果用户需要自己定义类型,需要对已有类型了解。

    1)PointXYZ---成员变量:float x,y,z;

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

    2)、PointXYZI---成员变量:float x,y,z,intensity;

    由于对于该类型的点point大部分操作都会把data[4]元素设置成0或1(用于变换),不能让intensity与XYZ在同一结构体中,如果这样intensity的内容会被覆盖。例如两个点的点积操作,则会把data[4]设置为0。为了兼容存储对齐用3个额外的浮点数来填补intensity,虽然在存储效率上降低,但是运行效率提高了。如下

    3)PointXYZRGBA---成员变量:float x,y,z;uint32_t rgba;

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

    4)PointXYZRGB---float x,y,z,rgb;

    这里的rgb是用一个浮点型来存储的,源于早期PCL属于ROS项目。

    5)PointXY---float x,y;

    简单的二维点,

    6)InterestPoint---float x,y,z,strength;

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

    7)Normal---float normal[3],curvature;

    8)PointNormal---float x,y,z;float normal[3],curvature;

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

    9)PointXYZRGBNormal---float x,y,z,rgb,normal[3],curvature;

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

    10)PointXYZINormal---float x,y,z,intensity,normal[3],curvature;

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

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

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

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

    其中vp_x、vp_y和vp_z以三维点表示所获得的视点,其余与PointXYZI一致

    13、MomentInvariants---float j1,j2,j3;

    14、PrincipalRadiiRSD----float r_min,r_max;

    15、Boundary---uint8_t boundary_point;

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

    17、PFHSignature125---float pfh[125];

    18、FPFHSignature33---float fpfh[33];

    19、VFHSignature308---float vfh[308]

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

    21)BorderDescription---int x,y;BorderTraits traits;

    22)IntensityGradient---float gradient[3];

    23)Histogram---float histogram[N];

    24、PointWithScale---float x,y,z,scale;

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

    2、如何在模板类中使用这些point类型

    为了使包含和链接到PCL库的用户代码编译速度提高,我们使用显示的模板实例化,最终编译链接的库包括了所有可能的模板实例---在这些组合中使PCL中已经定义的point类型所有的模板类都能够直接调用,不需要重新编译,这意味着一旦PCL编译成库,任何用户代码都不需要编译模板化代码,这样就加速了用户编译过程。这个是通过在头文件中首先声明了我们的类和方法,再在模板类实现头文件中进行实现,配置在原文家中进行显示的实例化,最后在编译链接时分别实例化。例如:

    3、如何增加新的PointT类型

  • 相关阅读:
    第三周作业
    面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别在哪里?请根据自己的理解简明扼要的回答。
    移动APP开发使用什么样的原型设计工具比较合适?
    java 从上至下打印二叉树
    Qt applendPlainText()/append() 多添加一个换行解决方法
    tolua 转换 std::shared_ptr
    cmake add_custom_command 使用
    Boost使用笔记(Smart_ptr)
    webpack4 安装
    git安装管理
  • 原文地址:https://www.cnblogs.com/gary-guo/p/6611981.html
Copyright © 2011-2022 走看看