pcl中common模块函数功能介绍

Posted 非晚非晚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pcl中common模块函数功能介绍相关的知识,希望对你有一定的参考价值。

pcl_common中主要是包含了PCL库常用的公共数据结构和方法,比如PointCloud的类和许多用于表示点,曲面,法向量,特征描述等点的类型,用于计算距离,均值以及协方差,角度转换以及几何变化的函数等。这个模块是不依赖其他模块的,所以是可以单独编译成功,单独编译出来可利用其中的数据结构自行开发。

1. common模块中的头文件

angles.h------------定义了标准的C接口的角度计算函数
centriod.h----------定义了中心点的估算以及协方差矩阵的计算
commo.h-----------标准的C以及C++类,是其他common 函数的父类
distance.h----------定义标准的C接口用于计算距离
file_io.h-------------定义了一些文件帮助写或者读方面的功能。
random.h-----------定义一些随机点云生成的函数
geometry.h---------定义一些基本的几何功能的函数
intersection.h------定义线与线相交的函数
norm.h---------------定义了标准的C方法计算矩阵的正则化
time.h----------------定义了时间计算的函数
Point_types.h------定义了所有PCL实现的点云的数据结构的类型

2. common模块中的基本函数

  • 从弧度到角度
pcl::rad2deg(float alpha) 
  • 从角度到弧度
pcl::deg2rad(float aipha)
  • 正则化角度在(-PI,PI)之间
pcl::normAngle(float alpha)
  • 计算给定一群点的3D质心点,并且返回一个三维向量
pcl::compute3DCentroid (const pcl::PointCloud< PointT > &cloud, Eigen::Matrix< Scalar, 4, 1 > &centroid)
  • 求点云质心
pcl::computeCentroid (const pcl::PointCloud< PointInT > &cloud, PointOutT &centroid)
  • 计算给定三维点云的协方差矩阵
pcl::computeCovarianceMatrix (const pcl::PointCloud< PointT > &cloud, const Eigen::Matrix< Scalar, 4, 1 > &centroid, Eigen::Matrix< Scalar, 3, 3 > &covariance_matrix)
  • 计算标准化(Normalized)的3*3协方差矩阵以及给定点云数据的中心点
pcl::computeMeanAndCovarianceMatrix (const pcl::PointCloud< PointT > &cloud, Eigen::Matrix< Scalar, 3, 3 > &covariance_matrix, Eigen::Matrix< Scalar, 4, 1 > &centroid
  • 利用一组点的指数对其进行一般的、通用的nD中心估计。
pcl::demeanPointCloud (const pcl::PointCloud< PointT > &cloud_in, const Eigen::Matrix< Scalar, 4, 1 > &centroid, pcl::PointCloud< PointT > &cloud_out)
pcl::computeNDCentroid (const pcl::PointCloud< PointT > &cloud, Eigen::Matrix< Scalar, Eigen::Dynamic, 1 > &centroid)
  • 计算两个向量之间的角度
pcl::getAngle3D (const Eigen::Vector4f &v1, const Eigen::Vector4f &v2, const bool in_degree=false)
  • 同时计算给定点云数据的均值和标准差
pcl::getMeanStd (const std::vector< float > &values, double &mean, double &stddev)
  • 在给定边界的情况下,获取一组位于框中的点(要给出最大点与最小点)
pcl::getPointsInBox (const pcl::PointCloud< PointT > &cloud, Eigen::Vector4f &min_pt, Eigen::Vector4f &max_pt, std::vector< int > &indices)
  • 获取指定点到点云最远距离处的点坐标
pcl::getMaxDistance (const pcl::PointCloud< PointT > &cloud, const Eigen::Vector4f &pivot_pt, Eigen::Vector4f &max_pt)
  • 获取给定点云三维坐标的最值
pcl::getMinMax3D (const pcl::PointCloud< PointT > &cloud, PointT &min_pt, PointT &max_pt)
  • 计算由三个点pa、pb和pc构成的三角形的外接圆半径
pcl::getCircumcircleRadius (const PointT &pa, const PointT &pb, const PointT &pc)
  • 获取点云直方图上的最值
pcl::getMinMax (const PointT &histogram, int len, float &min_p, float &max_p)
  • 计算给定多边形点云的面积
pcl::calculatePolygonArea (const pcl::PointCloud< PointT > &polygon)
  • 从Point_in把点云数据拷贝到Point_out
pcl::copyPoint (const PointInT &point_in, PointOutT &point_out)
pcl::copyPointCloud (const pcl::PCLPointCloud2 &cloud_in, const Indices &indices, pcl::PCLPointCloud2 &cloud_out)
  • 获取两条三维直线之间的最短三维线段
pcl::lineToLineSegment (const Eigen::VectorXf &line_a, const Eigen::VectorXf &line_b, Eigen::Vector4f &pt1_seg, Eigen::Vector4f &pt2_seg)
  • 获取点到线的距离(由点和方向表示)

第一个表示点,后两位表示线。

pcl::sqrPointToLineDistance (const Eigen::Vector4f &pt, const Eigen::Vector4f &line_pt, const Eigen::Vector4f &line_dir)
  • 获取给定的一组点中的最大分段,并返回最小和最大点。
pcl::getMaxSegment (const pcl::PointCloud< PointT > &cloud, PointT &pmin, PointT &pmax)
  • 确定最小特征值及其对应的特征向量
pcl::eigen22 (const Matrix &mat, typename Matrix::Scalar &eigenvalue, Vector &eigenvector)
  • 确定对称半正定输入矩阵给定特征值对应的特征向量
pcl::computeCorrespondingEigenVector (const Matrix &mat, const typename Matrix::Scalar &eigenvalue, Vector &eigenvector)
  • 确定对称半正定输入矩阵最小特征值的特征值和特征向量
pcl::eigen33 (const Matrix &mat, typename Matrix::Scalar &eigenvalue, Vector &eigenvector)
  • 计算2阶方阵的逆
pcl::invert2x2 (const Matrix &matrix, Matrix &inverse)
  • 计算3阶对称矩阵的逆
pcl::invert3x3SymMatrix (const Matrix &matrix, Matrix &inverse)
  • 计算3阶方阵的行列式
pcl::determinant3x3Matrix (const Matrix &matrix)
  • 获得唯一的3D旋转,将Z轴旋转成(0,0,1),Y轴旋转成(0,1,0),并且两个轴是正交的。
pcl::getTransFromUnitVectorsZY (const Eigen::Vector3f &z_axis, const Eigen::Vector3f &y_direction, Eigen::Affine3f &transformation)
  • 得到将origin转化为(0,0,0)的变换,并将Z轴旋转成(0,0,1),Y轴旋转成(0,1,0)
pcl::getTransformationFromTwoUnitVectorsAndOrigin (const Eigen::Vector3f &y_direction, const Eigen::Vector3f &z_axis, const Eigen::Vector3f &origin, Eigen::Affine3f &transformation)
  • 提取给定变换矩阵的欧拉角
pcl::getEulerAngles (const Eigen::Transform< Scalar, 3, Eigen::Affine > &t, Scalar &roll, Scalar &pitch, Scalar &yaw)
  • 提取给定转换中的XYZ以及欧拉角
pcl::getTranslationAndEulerAngles (const Eigen::Transform< Scalar, 3, Eigen::Affine > &t, Scalar &x, Scalar &y, Scalar &z, Scalar &roll, Scalar &pitch, Scalar &yaw)
  • 从给定的平移和欧拉角创建转换矩阵
pcl::getTransformation (float x, float y, float z, float roll, float pitch, float yaw)
  • 保存或者写矩阵到一个输出流中
pcl::saveBinary (const Eigen::MatrixBase< Derived > &matrix, std::ostream &file)
  • 从输入流中读取矩阵
pcl::loadBinary (Eigen::MatrixBase< Derived > const &matrix, std::istream &file)
  • 获取空间中两条三维直线作为三维点的交点
pcl::lineWithLineIntersection (const Eigen::VectorXf &line_a, const Eigen::VectorXf &line_b, Eigen::Vector4f &point, double sqr_eps=1e-4)
  • 获取指定字段的索引(即维度/通道)
pcl::getFieldIndex (const pcl::PCLPointCloud2 &cloud, const std::string &field_name)
  • 获取给定点云中所有可用字段的列表
pcl::getFieldsList (const pcl::PointCloud< PointT > &cloud)
  • 获取特定字段数据类型的大小(字节)。
pcl::getFieldSize (const int datatype)
  • 连接 pcl::PCLPointCloud2类型的点云字段
pcl::concatenatePointCloud (const pcl::PCLPointCloud2 &cloud1, const pcl::PCLPointCloud2 &cloud2, pcl::PCLPointCloud2 &cloud_out)
  • Eigen与pcl转换
pcl::getPointCloudAsEigen (const pcl::PCLPointCloud2 &in, Eigen::MatrixXf &out)
pcl::getEigenAsPointCloud (Eigen::MatrixXf &in, pcl::PCLPointCloud2 &out)
  • 各种norm
pcl::L1_Norm (FloatVectorT A, FloatVectorT B, int dim)
pcl::L2_Norm_SQR (FloatVectorT A, FloatVectorT B, int dim)
pcl::Linf_Norm (FloatVectorT A, FloatVectorT B, int dim)
pcl::Sublinear_Norm (FloatVectorT A, FloatVectorT B, int dim)
pcl::PF_Norm (FloatVectorT A, FloatVectorT B, int dim, float P1, float P2)
pcl::HIK_Norm (FloatVectorT A, FloatVectorT B, int dim)
...
  • 点云变换
pcl::transformPointCloud (const pcl::PointCloud< PointT > &cloud_in, pcl::PointCloud< PointT > &cloud_out, const Eigen::Transform< Scalar, 3, Eigen::Affine > &transform, bool copy_all_fields=true)

https://pointclouds.org/documentation/group__common.html

以上是关于pcl中common模块函数功能介绍的主要内容,如果未能解决你的问题,请参考以下文章

pcl总结

PCL点云处理:getAngle3D 计算两个向量的夹角

Numpy库进阶教程

PCL-CMAKELIST书写格式

pytorch p8 tensor补充介绍及hub 模块

matlab unique 的用功能