pcl系列-添加自定义点云类型

        pcl库中附带了各种预定义的点类型,这些数据类型足以支持在pcl中所实现的所有算法和方法,但是在某些情况下,在使用pcl点类型时希望定义新的点类型,比如在LIO-SAM中定义的PointXYZIRPYT(包括点云基本的坐标(x,y,z)和强度I,以及三个旋转角RPY和时间T)。因此,pcl提供了创建自定义点云类型的方法。

1.pcl常用点云类型

        pcl中定义了大量的常用点类型,在定义自己的点类型之前,可以先了解现有定义点类型的创建原因。

        PointXYZ:最常见的数据类型之一,因为仅表示3D xyz信息。例如,可以通过points[i].data[0]或者points[i].x访问第i个点x坐标。

//PointXYZ-Members: float x, y, z
union
{
	float data[4];
	struct
	{
		float x;
		float y;
		float z;
	};
};

        PointXYZI:简单的坐标+强度的点云类型

//PointXYZI-Members: float x, y, z, intensity
union
{
	float data[4];
	struct
	{
		float x;
		float y;
		float z;
	};
};
union
{
	struct
	{
		float intensity;
	};
	float data_c[4];
};

        PointXYZRGBA:与PointXYZI类似,除了可以访问rgba打包成的std::uint32_t rgba,还可以单独访问rgba各个通道信息(红,绿,蓝和透明度)。

//PointXYZRGBA-Members: float x, y, z, std::uint32_t 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;
};

        PointXY:简单的二维结构

struct
{
  float x;
  float y;
};

        InterestPoint:与PointXYZI类似,strength表示关键点强度的测量值。

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

        PointXYZRGB:类似PointXYZRGBA

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

        Normal:由于pcl中对于法线的操作非常常见,所以定义了另一个常用的数据类型,Normal结构体表示给定点所在样本曲面上的法线方向,以及对应曲率的测量值。

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:保存点的XYZ数据,以及其法线和曲率数据。

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:储存XYZ坐标,RGB颜色,以及点的法线和曲率。

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];
};

         以及还有其他类型就不一一介绍,详情可见官网。

2.自定义点类型

1待更

你可能感兴趣的:(c++,自动驾驶,计算机视觉,3d)