PCL函数库摘要——深度图像

1.Class pcl::RangeImage

RangeImage 类继承于PoinyCloud,主要功能是实现从一个特定视点得到的三维场景的深度图像。

cpp 复制代码
#include <pcl/range_image/range_image.h>
PCL_EXPORTS  RangeImage () 
//  构造函数
virtual PCL_EXPORTS  ~RangeImage () 
//  析构函数
Ptr  makeShared () 
//  获取此副本的Boost共享指针。
PCL_EXPORTS void  reset () 
//  重置所有值,以生成一幅空的深度图像。
template<typename PointCloudType >  
void  createFromPointCloud (const PointCloudType &point_cloud, float angular_resolution=pcl::deg2rad(0.5f), float max_angle_width=pcl::deg2rad(360.0f), float max_angle_height=pcl::deg2rad(180.0f), const Eigen::Affine3f &sensor_pose=Eigen::Affine3f::Identity(), CoordinateFrame coordinate_frame=CAMERA_FRAME, float noise_level=0.0f, float min_range=0.0f, int border_size=0) 
//  从点云创建深度图像, point_cloud为指向创建深度图像所需点云的引用, angular_resolution为模拟的深度传感器的角度分辨率,即深度图像中一个像素对应的角度大小, max_angle_width为模拟的深度传感器的水平最大采样角度, max_angle_height为模拟的深度传感器的垂直方向最大采样角度, sensor_pose 设置模拟的深度传感器的位姿是一个仿射变换矩阵,默认为4×4单位矩阵变换,coordinate_frame定义按照哪种坐标系统习惯,默认为CAMERA_FRAME, noise_level 设置获取深度图像深度时,近邻点对查询点距离值的影响水平, min_range设置最小的获取距离,小于最小获取距离的位置为传感器的盲区, border_size设置获得深度图像边缘的宽度﹐默认为0,该函数中涉及的角度都是以弧度为单位。
template<typename PointCloudType >  
void  createFromPointCloud (const PointCloudType &point_cloud, float angular_resolution_x=pcl::deg2rad(0.5f), float angular_resolution_y=pcl::deg2rad(0.5f), float max_angle_width=pcl::deg2rad(360.0f), float max_angle_height=pcl::deg2rad(180.0f), const Eigen::Affine3f &sensor_pose=Eigen::Affine3f::Identity(), CoordinateFrame coordinate_frame=CAMERA_FRAME, float noise_level=0.0f, float min_range=0.0f, int border_size=0) 
//  从点云创建深度图像, point_cloud为指向创建深度图像所需点云的引用, angular_resolution_x和angular_resolution_y分别为模拟的深度传感器的x、y角度分辨率,即深度图像中一个像素对应的角度大小, max_angle_width为模拟的深度传感器的水平最大采样角度, max_angle_height为模拟的深度传感器的垂直方向最大采样角度, sensor_pose 设置模拟的深度传感器的位姿是一个仿射变换矩阵,默认为4×4单位矩阵变换,coordinate_frame定义按照那种坐标系统习惯,默认为CAMERA_FRAME, noise_level 设置获取深度图像深度时,近邻点对查询点距离值的影响水平, min_range设置最小的获取距离,小于最小获取距离的位置为传感器的盲区, border_size设置获得深度图像边缘的宽度﹐默认为0,该函数中涉及的角度都是以弧度为单位。
template<typename PointCloudType >  
void  createFromPointCloudWithKnownSize (const PointCloudType &point_cloud, float angular_resolution, const Eigen::Vector3f &point_cloud_center, float point_cloud_radius, const Eigen::Affine3f &sensor_pose=Eigen::Affine3f::Identity(), CoordinateFrame coordinate_frame=CAMERA_FRAME, float noise_level=0.0f, float min_range=0.0f, int border_size=0) 
//  从点云创建深度图像,由于参数中有关于场景大小的提示信息,提高了获取深度图像时的计算速度。其中, point_cloud为指向创建深度图像所需点云的引用; angular_resolution为模拟的深度传感器的角度分辨率,以弧度表示; point_cloud_center为点云外接球体的中心﹐默认为(0,0,0 ) ; point_cloud_radius为点云外接球体的半径; sensor_pose设置模拟的深度传感器的位姿,是一个仿射变换矩阵,默认为4×4单位矩阵变换; coordinate_frame为坐标系统,默认为CAMERA_FRAME; noise_level为设置获取深度图像深度时,近邻点对查询点的影响距离,以米为单位表示;min_range为最小可视深度﹐默认为0 ; border_size为点云的边界尺寸大小,默认为0。
template<typename PointCloudType >  
void  createFromPointCloudWithKnownSize (const PointCloudType &point_cloud, float angular_resolution_x, float angular_resolution_y, const Eigen::Vector3f &point_cloud_center, float point_cloud_radius, const Eigen::Affine3f &sensor_pose=Eigen::Affine3f::Identity(), CoordinateFrame coordinate_frame=CAMERA_FRAME, float noise_level=0.0f, float min_range=0.0f, int border_size=0) 
//  从点云创建深度图像,由于参数中有关于场景大小的提示信息,提高了获取深度图像时的计算速度。其中, point_cloud为指向创建深度图像所需点云的引用;  angular_resolution_x和angular_resolution_y分别为模拟的深度传感器的x、y角度分辨率,以弧度表示; point_cloud_center为点云外接球体的中心﹐默认为(0,0,0 ) ; point_cloud_radius为点云外接球体的半径; sensor_pose设置模拟的深度传感器的位姿,是一个仿射变换矩阵,默认为4×4单位矩阵变换; coordinate_frame为坐标系统,默认为CAMERA_FRAME; noise_level为设置获取深度图像深度时,近邻点对查询点的影响距离,以米为单位表示;min_range为最小可视深度﹐默认为0 ; border_size为点云的边界尺寸大小,默认为0。
template<typename PointCloudTypeWithViewpoints >  
void  createFromPointCloudWithViewpoints (const PointCloudTypeWithViewpoints &point_cloud, float angular_resolution, float max_angle_width, float max_angle_height, CoordinateFrame coordinate_frame=CAMERA_FRAME, float noise_level=0.0f, float min_range=0.0f, int border_size=0) 
//  从点云创建深度图像,点云中包含视角的信息。其中, point_cloud为指向创建深度图像所需点云的引用; angular_resolution为图像中各像素之间角度的差值,以弧度表示; max_angle_width是定义传感器水平边界的角度﹐以弧度表示; max_ angle_height是定义传感器垂直边界的角度﹐以弧度表示; coordinate_frame为坐标系统,默认为CAMERA_FRAME;noise_level设置获取深度图像深度时,近邻点对查询点距离的影响水平,如果该值比较小,则采用z-缓冲区中的最小距离作为查询点深度,以米为单位,如果比较大,则常用z-缓冲区中深度平均值作为查询点深度; min_range为最小的可视深度﹐默认值为0 ; border_size为边界尺寸,默认值为0。
template<typename PointCloudTypeWithViewpoints >  
void  createFromPointCloudWithViewpoints (const PointCloudTypeWithViewpoints &point_cloud, float angular_resolution_x, float angular_resolution_y, float max_angle_width, float max_angle_height, CoordinateFrame coordinate_frame=CAMERA_FRAME, float noise_level=0.0f, float min_range=0.0f, int border_size=0) 
//  从点云创建深度图像,点云中包含视角的信息。其中, point_cloud为指向创建深度图像所需点云的引用; angular_resolution_x和angular_resolution_y分别为图像中x方向和y方向各像素之间角度的差值,以弧度表示; max_angle_width是定义传感器水平边界的角度﹐以弧度表示; max_ angle_height是定义传感器垂直边界的角度﹐以弧度表示; coordinate_frame为坐标系统,默认为CAMERA_FRAME;noise_level设置获取深度图像深度时,近邻点对查询点距离的影响水平,如果该值比较小,则采用z-缓冲区中的最小距离作为查询点深度,以米为单位,如果比较大,则常用z-缓冲区中深度平均值作为查询点深度; min_range为最小的可视深度﹐默认值为0 ; border_size为边界尺寸,默认值为0。
void  createEmpty (float angular_resolution, const Eigen::Affine3f &sensor_pose=Eigen::Affine3f::Identity(), RangeImage::CoordinateFrame coordinate_frame=CAMERA_FRAME, float angle_width=pcl::deg2rad(360.0f), float angle_height=pcl::deg2rad(180.0f)) 
//  创建一个空的深度图像,以当前视点不可见点填充。其中,angle_width为模拟的深度传感器的水平采样角度﹐默认为PI*2(360°);angle_height为模拟的深度传感器的垂直方向采样角度﹐默认为PI(180°) ; angular_resolution为深度图像中每个采样之间的角度﹔sensor_pose为定义传感器位置的变换矩阵,默认为单位4×4矩阵;coordinate_frame为坐标系统﹐默认为CAMERA_FRAME。该函数中涉及的角度都是以弧度为单位。
void  createEmpty (float angular_resolution_x, float angular_resolution_y, const Eigen::Affine3f &sensor_pose=Eigen::Affine3f::Identity(), RangeImage::CoordinateFrame coordinate_frame=CAMERA_FRAME, float angle_width=pcl::deg2rad(360.0f), float angle_height=pcl::deg2rad(180.0f)) 
//  创建一个空的深度图像,以当前视点不可见点填充。其中,angle_width为模拟的深度传感器的水平采样角度﹐默认为PI*2(360°);angle_height为模拟的深度传感器的垂直方向采样角度﹐默认为PI(180°) ; angular_resolution_x和angular_resolution_y分别为深度图像中x方向和y方向每个采样之间的角度﹔sensor_pose为定义传感器位置的变换矩阵,默认为单位4×4矩阵;coordinate_frame为坐标系统﹐默认为CAMERA_FRAME。该函数中涉及的角度都是以弧度为单位。
template<typename PointCloudType >  
void  doZBuffer (const PointCloudType &point_cloud, float noise_level, float min_range, int &top, int &right, int &bottom, int &left) 
// 使用z缓冲区将给定的点云集成到当前深度图像中,point_cloud为给定点云的引用,noise_level为设置获取深度图像深度时,近邻点对查询点的影响距离,以米为单位表示; min_range为最小的可视深度﹐默认值为0 ; top、right、bottom、left分别返回图像中添加点的最小y像素位置、最大x像素位置、最大y像素位置、最小x像素位置。
template<typename PointCloudType >  
void  integrateFarRanges (const PointCloudType &far_ranges) 
//  将已有的远距离测量结果融合到深度图像中。
PCL_EXPORTS void  cropImage (int border_size=0, int top=-1, int right=-1, int bottom=-1, int left=-1) 
//  裁剪深度图像到最小尺寸,使这个最小尺寸仍包含所有点云。其中, border_size设置裁剪后深度图像的边界尺寸,即从最小尺寸按照给定的像素数增加后得到最终深度图像尺寸,默认为0 ; top为裁剪框的上边界,如为正数则该值设置裁剪框的上边界,默认为-1 ;right为裁剪框的右边界,如为正数则该值设置裁剪框的右边界,默认为-l ; bottom为裁剪框的下边界,如为正数则该值设置裁剪框的下边界,默认为-1; left为裁剪框的左边界,如为正数则该值设置裁剪框的左边界﹐默认为-1。
PCL_EXPORTS float *  getRangesArray () const 
//  获取一个大小为宽度*高度的浮点数组中的所有深度值。
const Eigen::Affine3f &  getTransformationToRangeImageSystem () const 
//  获得从世界坐标系转换到深度图像坐标系(传感器的坐标系统)的变换矩阵。
void  setTransformationToRangeImageSystem (const Eigen::Affine3f &to_range_image_system) 
//  设置从深度图像坐标系(传感器的坐标系统)转换到世界坐标系的变换矩阵。
const Eigen::Affine3f &  getTransformationToWorldSystem () const 
//  获得从深度图像坐标系(传感器的坐标系统)转换到世界坐标系的变换矩阵。
float  getAngularResolution () const 
//  获取深度图像的角分辨率,以弧度表示。
float  getAngularResolutionX () const 
//  获取深度图像x方向的角分辨率,以弧度表示。
float  getAngularResolutionY () const 
// 获取深度图像y方向的角分辨率,以弧度表示。
void  getAngularResolution (float &angular_resolution_x, float &angular_resolution_y) const 
//  获取深度图像x和y方向的角分辨率,以弧度表示。
void  setAngularResolution (float angular_resolution) 
//  设置深度图像在x方向和y方向上的新的角分辨率angular_resolution,即每个像素所对应的弧度。
void  setAngularResolution (float angular_resolution_x, float angular_resolution_y) 
//  设置深度图像在x方向和y方向上的新的角分辨率angular_resolution_x、angular_resolution_y,即x和y方向每个像素所对应的弧度。
const PointWithRange &  getPoint (int image_x, int image_y) const 
//  获得在给定图像位置的有深度3D点。
PointWithRange &  getPoint (int image_x, int image_y) 
//  获得在给定图像位置的有深度3D点。
const PointWithRange &  getPoint (float image_x, float image_y) const 
//  获得在给定图像位置的有深度3D点。
PointWithRange &  getPoint (float image_x, float image_y) 
//  获得在给定图像位置的有深度3D点。
const PointWithRange &  getPointNoCheck (int image_x, int image_y) const 
//  获得在给定图像位置的有深度3D点。
PointWithRange &  getPointNoCheck (int image_x, int image_y) 
//  获得在给定图像位置的有深度3D点。
void  getPoint (int image_x, int image_y, Eigen::Vector3f &point) const 
//  获得在给定图像位置的有深度3D点。
void  getPoint (int index, Eigen::Vector3f &point) const 
//  获得在给定图像位置的有深度3D点。
const Eigen::Map< const Eigen::Vector3f >  getEigenVector3f (int x, int y) const 
//  获得在给定图像位置的有深度3D点。
const Eigen::Map< const Eigen::Vector3f >  getEigenVector3f (int index) const 
//  返回在给定索引处的有深度3D点(而index=y*width+x)。
const PointWithRange &  getPoint (int index) const 
//  返回在给定索引处的有深度3D点(而index=y*width+x)。
void  calculate3DPoint (float image_x, float image_y, float range, PointWithRange &point) const 
//  根据给定的深度图像点(image_x,image_y)和距离range计算返回场景中的3D点point。
void  calculate3DPoint (float image_x, float image_y, PointWithRange &point) const 
//  根据给定的深度图像点(image_x,image_y)和离该点最近像素上的距离值计算返回场景中的3D点point。
virtual void  calculate3DPoint (float image_x, float image_y, float range, Eigen::Vector3f &point) const 
//  根据给定的深度图像点(image_x,image_y)和距离range计算返回场景中的3D点point。
void  calculate3DPoint (float image_x, float image_y, Eigen::Vector3f &point) const 
//  根据给定的深度图像点(image_x,image_y)和离该点最近像素上的距离值计算返回场景中的3D点point。
PCL_EXPORTS void  recalculate3DPointPositions () 
//  根据像素的位置和深度信息重新计算所有3D点的位置。
virtual void  getImagePoint (const Eigen::Vector3f &point, float &image_x, float &image_y, float &range) const 
//  从世界坐标系的3D点 point中返回深度图像中的点(image _x,image_y,range) 
void  getImagePoint (const Eigen::Vector3f &point, int &image_x, int &image_y, float &range) const 
//  从世界坐标系的3D点 point中返回深度图像中的点(image _x,image_y,range) 
void  getImagePoint (const Eigen::Vector3f &point, float &image_x, float &image_y) const 
//  从世界坐标系的3D点 point中返回深度图像中的点(image _x,image_y) 
void  getImagePoint (const Eigen::Vector3f &point, int &image_x, int &image_y) const 
//  从世界坐标系的3D点 point中返回深度图像中的点(image _x,image_y) 
void  getImagePoint (float x, float y, float z, float &image_x, float &image_y, float &range) const 
//  从世界坐标系的3D点 point中返回深度图像中的点(image _x,image_y,range) 
void  getImagePoint (float x, float y, float z, float &image_x, float &image_y) const 
//  从世界坐标系的3D点 point中返回深度图像中的点(image _x,image_y) 
void  getImagePoint (float x, float y, float z, int &image_x, int &image_y) const 
//  从世界坐标系的3D点 point中返回深度图像中的点(image _x,image_y) 
float  checkPoint (const Eigen::Vector3f &point, PointWithRange &point_in_image) const 
//  给定点point,如果给定点转化为深度图像点在深度图像范围内,则保存转化后的深度图像点在point_in_image 中,否则point_in_image中存储为不可见点,返回给定点的深度值。
float  getRangeDifference (const Eigen::Vector3f &point) const 
//  返回给定点的深度与给定点位置对应于深度图像上该点应该所在位置的深度之间的差值,返回值为point_in_image.range - given_point. range。
void  getImagePointFromAngles (float angle_x, float angle_y, float &image_x, float &image_y) const 
//  获取对应于给定角度(angle_x,angle_y)的深度图像点(image_x,image_y)。
void  getAnglesFromImagePoint (float image_x, float image_y, float &angle_x, float &angle_y) const 
//  获取给定深度图像点(image_x,image_y)所对应的角度(angle_x,angle_y)。
void  real2DToInt2D (float x, float y, int &xInt, int &yInt) const 
//  将浮点型的深度图像点转换为整型。
bool  isInImage (int x, int y) const 
//  判断(x,y)是否属于深度图像范围内,如果是则返回true,否则返回false。
bool  isValid (int x, int y) const 
//  判断(x, y)是否属于深度图像范围内,并且判断其深度值是否不为无穷数,如果两者都符合则返回true,否则返回false。
bool  isValid (int index) const 
//  判断给定索引处的点其深度值是否不为无穷数(而index=y*width+x),如果是则返回true,否则返回false。
bool  isObserved (int x, int y) const 
//  判断(x, y)是否属于深度图像范围内,并且判断其深度值是否在可观测范围内(大于最小值),如果两者都符合则返回true,否则返回false。
bool  isMaxRange (int x, int y) const 
//  判断(x,y)的深度值是否为无穷数。如果是则返回true,否则返回false。
bool  getNormal (int x, int y, int radius, Eigen::Vector3f &normal, int step_size=1) const 
//  获取(x,y)图像点的法线并存储在normal中,在计算时使用以(x,y)为中心点,step_size为步长遍历(x,y)两个方向radius远的所有邻域点,根据这些邻域点采用PCA算法计算法线。
bool  getNormalForClosestNeighbors (int x, int y, int radius, const PointWithRange &point, int no_of_nearest_neighbors, Eigen::Vector3f &normal, int step_size=1) const 
//  功能同上函数,只是在计算时采用的邻域点个数不是用radius控制,而是用no_of_nearest_neighborsof_ nearest_ _neighbors 总的个数进行控制。  
bool  getNormalForClosestNeighbors (int x, int y, int radius, const Eigen::Vector3f &point, int no_of_nearest_neighbors, Eigen::Vector3f &normal, Eigen::Vector3f *point_on_plane=NULL, int step_size=1) const 
//  功能同上函数。
bool  getNormalForClosestNeighbors (int x, int y, Eigen::Vector3f &normal, int radius=2) const 
//  功能同上函数,使用默认值。
bool  getSurfaceInformation (int x, int y, int radius, const Eigen::Vector3f &point, int no_of_closest_neighbors, int step_size, float &max_closest_neighbor_distance_squared, Eigen::Vector3f &normal, Eigen::Vector3f &mean, Eigen::Vector3f &eigen_values, Eigen::Vector3f *normal_all_neighbors=NULL, Eigen::Vector3f *mean_all_neighbors=NULL, Eigen::Vector3f *eigen_values_all_neighbors=NULL) const 
//  获取点x,y周围邻域点的相关信息,x,y为查询点的图像坐标,radius限定邻域的区域大小,point存储返回x,y对应的场景中的三维点,no__of_closest_neighbors限定计算时使用邻域点的总个数,step_size在遍历邻域区域时所用的步长大小,max_closest_neighbor_distance_squared返回近邻点中与查询点距离最大的距离平方,normal返回查询点的法线,mean返回查询点近邻的平均,eigen_values返回利用PCA计算的查询点的特征值,normal_all_neighbors返回所有近邻点的法线,mean_all_nighbors返回所有近邻点的近邻平均,eigen_values_all_neighbors返回所有近邻点的特征值。
float  getSquaredDistanceOfNthNeighbor (int x, int y, int radius, int n, int step_size) const 
//  以(x,y)点为中心、以radius为区域边长、以step_size为步长的邻域内,返回所有邻域点与(x,y)点之间的距离排序后第n个邻域点的距离。
float  getImpactAngle (const PointWithRange &point1, const PointWithRange &point2) const 
//  获取点point1与point2之间的ImpactAngle.
float  getImpactAngle (int x1, int y1, int x2, int y2) const 
//  获取点(x1,y1)与(x1,y1)之间的ImpactAngle.
float  getImpactAngleBasedOnLocalNormal (int x, int y, int radius) const 
//  提取局部法线(使用启发式方法不包括背景点),并在此基础上计算ImpactAngle。
PCL_EXPORTS float *  getImpactAngleImageBasedOnLocalNormals (int radius) const 
//  对图像中的每个点使用上述函数。
float  getNormalBasedAcutenessValue (int x, int y, int radius) const 
//  根据点(x1,y1)及其法线的ImpactAngle获取[0,1]之间的一个分数值AcutenessValue,1对应90° ,如果其中一个点不可见则返回无穷大。
float  getAcutenessValue (const PointWithRange &point1, const PointWithRange &point2) const 
//  根据点pointl与point2之间的ImpactAngle 获取[0,1]之间的一个分数值AcutenessValue,1对应90° ,如果其中一个点不可见则返回无穷大。  
float  getAcutenessValue (int x1, int y1, int x2, int y2) const 
//  根据点(x1,y1)与(x1,y1)之间的ImpactAngle 获取[0,1]之间的一个分数值AcutenessValue,1对应90° ,如果其中一个点不可见则返回无穷大。 
PCL_EXPORTS void  getAcutenessValueImages (int pixel_distance, float *&acuteness_value_image_x, float *&acuteness_value_image_y) const 
//  计算图像每个点的AcutenessValue 值。
PCL_EXPORTS float  getSurfaceChange (int x, int y, int radius) const 
//  计算在以点(x,y)为中心、以radius为边长的矩形区域上表面的变化率,变化为90°时赋值变化率为1,无变化时赋值变化率为0。
PCL_EXPORTS float *  getSurfaceChangeImage (int radius) const 
//  对图像中每个点都进行getSurfaceChange调用计算,以浮点数指针返回。
void  getSurfaceAngleChange (int x, int y, int radius, float &angle_change_x, float &angle_change_y) const 
//  获取以点(x,y)为中心、以radius为半径,在x与y方向上的角度变化[0,PI],分别存储在angle_change_x和angle_change_ y返回。
PCL_EXPORTS void  getSurfaceAngleChangeImages (int radius, float *&angle_change_image_x, float *&angle_change_image_y) const 
//  对图像中的每个点都进行getSurfaceAngleChange调用计算,返回值分别存储在对应浮点数指针angle_change_image_ x和angle_ change_image_y。
float  getCurvature (int x, int y, int radius, int step_size) const 
//  以radius为矩形边长一半、以step_size为步长,利用PCA算法计算(x,y)点对应的曲率。
const Eigen::Vector3f  getSensorPos () const 
//  获取采集图像时的位置。
PCL_EXPORTS void  setUnseenToMaxRange () 
//  设置所有的点的距离值时,将负无穷大的值设为正无穷大。
int  getImageOffsetX () const 
//  获得图像在x方向上的平移。
int  getImageOffsetY () const 
//  设置图像在y方向上的平移。
void  setImageOffsets (int offset_x, int offset_y) 
//  设置图像在x与y方向上的平移。
virtual void  getSubImage (int sub_image_image_offset_x, int sub_image_image_offset_y, int sub_image_width, int sub_image_height, int combine_pixels, RangeImage &sub_image) const 
//  裁剪得到完整图像的一部分,并返回新的深度图像,其中, sub_image_image_offset_x为子图像左上角像素的x坐标,该值一般设置为(0,0)(对应于极坐标系中的(-180°,-90°)),是新图像已存在的坐标系统,所以原图像中所使用的实际像素大小为combine_pixels * (image_offset_x - image_offset_x_) , sub_image_image_offset_y等于image_offset_x的y坐标,sub_image_width为新图像的宽度,sub_image_height为新图像的高度,combine_pixels为缩变因子,这说明新图像的角分辨率是原图像的combine_ pixels倍,sub_ image 为输出图像。
virtual void  getHalfImage (RangeImage &half_image) const 
//  获得比原深度图像分辨率低一半的深度图像。
PCL_EXPORTS void  getMinMaxRanges (float &min_range, float &max_range) const 
//  查找深度图像的最大与最小深度。
PCL_EXPORTS void  change3dPointsToLocalCoordinateFrame () 
//  该函数将传感器的位置设置为原点,并将所有的点位置转换到这个局部坐标系中。
PCL_EXPORTS float *  getInterpolatedSurfaceProjection (const Eigen::Affine3f &pose, int pixel_size, float world_size) const 
//  计算一个深度块作为由姿态给出的坐标框架的z值。
PCL_EXPORTS float *  getInterpolatedSurfaceProjection (const Eigen::Vector3f &point, int pixel_size, float world_size) const 
//  功能同上,但使用由点和观察方向定义的局部坐标框架。
Eigen::Affine3f  getTransformationToViewerCoordinateFrame (const Eigen::Vector3f &point) const 
//  设以点point为中心,以向上、向右、向深度方向为正方向的坐标系统,获取从该坐标系统到获取图像坐标系统的变换矩阵。
void  getTransformationToViewerCoordinateFrame (const Eigen::Vector3f &point, Eigen::Affine3f &transformation) const 
//  功能同上。
void  getRotationToViewerCoordinateFrame (const Eigen::Vector3f &point, Eigen::Affine3f &transformation) const 
//  功能同上,但只获取旋转变换。
PCL_EXPORTS bool  getNormalBasedUprightTransformation (const Eigen::Vector3f &point, float max_dist, Eigen::Affine3f &transformation) const 
//  基于法线在给定点获取局部坐标框架。
PCL_EXPORTS void  getIntegralImage (float *&integral_image, int *&valid_points_num_image) const 
//  获得距离值对应的的积分图像(用于快速模糊操作),返回图像保存在integral_image中,valid_points_num_image为计算当中有效点数目。
PCL_EXPORTS void  getBlurredImageUsingIntegralImage (int blur_radius, float *integral_image, int *valid_points_num_image, RangeImage &range_image) const 
//  基于给定的积分图像integral_image,利用滤波窗口对深度图像range_image进行模糊化操作,blur_radius决定滤波窗口大小。
virtual PCL_EXPORTS void  getBlurredImage (int blur_radius, RangeImage &range_image) const 
//  利用滤波窗口对深度图像range_image进行模糊化操作,blur_radius决定滤波窗口大小。
float  getEuclideanDistanceSquared (int x1, int y1, int x2, int y2) const 
//  获取点(x1,y1)与点(x2,y2)之间的欧氏距离。
float  getAverageEuclideanDistance (int x, int y, int offset_x, int offset_y, int max_steps) const 
//  以点(x,y)为中心分别向x\y方向以offset_x和offset_y为步长,移动max_steps次之后,获取中心与每次移动得到的点之间的平均欧氏距离。
PCL_EXPORTS void  getRangeImageWithSmoothedSurface (int radius, RangeImage &smoothed_range_image) const 
//  获取经过平滑后的深度图像存储在smoothed_range_image返回,radius决定平滑时所使用的窗口大小。
void  get1dPointAverage (int x, int y, int delta_x, int delta_y, int no_of_points, PointWithRange &average_point) const 
// 以(x,y)为起点,在x、y方向上以delta_x和delta_y为步长,遍历no_of_points个点,最终获取所有点的平均值并存储在average_point, 此平均点的坐标为所有遍历点的重心,深度值为所有遍历点的平均值。
PCL_EXPORTS float  getOverlap (const RangeImage &other_range_image, const Eigen::Affine3f &relative_transformation, int search_radius, float max_distance, int pixel_step=1) const 
//  给定相对变换矩阵relative_transformation,求取当前深度图像与给定other_range_image的重叠区域。
bool  getViewingDirection (int x, int y, Eigen::Vector3f &viewing_direction) const 
//  获取已知点(x,y)的视角方向并存储在viewing_direction.
void  getViewingDirection (const Eigen::Vector3f &point, Eigen::Vector3f &viewing_direction) const 
//  获取已知点point的视角方向并存储在viewing_direction.
virtual PCL_EXPORTS RangeImage *  getNew () const 
//  返回新创建的深度图像。
virtual PCL_EXPORTS void  copyTo (RangeImage &other) const 
//  复制本深度图像的一个副本。

2.Class pcl::RangeImagePlanar

RangeImagePlanar类来源于最原始的深度图像,但又区别于原始的深度图像,因为该类不使用球形投影方式,而是通过一个平面投影方式进行投影(照相机一般采用这种投影方式)。因此,对于已有的利用深度传感器获取深度图像来说较为实用,例如现有的立体照相机或者ToF照相机本身提供深度图像,这样就不需要将原始的深度图像转换为点云并再转换为球形投影的深度图像。

cpp 复制代码
#include <pcl/range_image/range_image_planar.h
PCL_EXPORTS  RangeImagePlanar () 
//  构造函数
virtual PCL_EXPORTS  ~RangeImagePlanar () 
//  析构函数
virtual RangeImage *  getNew () const 
//  返回一个新创建的RangeImagePlanar。
virtual PCL_EXPORTS void  copyTo (RangeImage &other) const 
//  复制本深度图像的一个副本。
Ptr  makeShared () 
//  获取此副本的Boost共享指针。
PCL_EXPORTS void  setDisparityImage (const float *disparity_image, int di_width, int di_height, float focal_length, float base_line, float desired_angular_resolution=-1) 
//  从给定的视差图像中创建图像,其中,disparity_image是输入的视差图像,di_width是视差图像的宽度,di_height是视差图像的高度,focal__length是产生视差图像的照相机的焦距,base_line是用于产生视差图像的立体相对的基线长度,desired_angular_resolution是预设的角分辨率,是每个像素对应的弧度,该值不能大于点云密度,如果用户设置该值,系统会忽略一些像素以使角分辨率尽可能地接近用户设定值的同时又不超过该值。
PCL_EXPORTS void  setDepthImage (const float *depth_image, int di_width, int di_height, float di_center_x, float di_center_y, float di_focal_length_x, float di_focal_length_y, float desired_angular_resolution=-1) 
//  从已存在的深度影像中创建图像,其中,depth_image是输入的浮点型的深度图像,di_width是深度图像的宽度,di_height是深度图像的高度,di_center_x是照相机投影中心的x坐标;d _center_y是照相机投影中心的y坐标,di_focal_length_x 是照相机水平方向上的焦距,di_focal_length_y是相机垂直方向上的焦距,desired_angular_resolution是预设的角分辨率,是每个像素对应的弧度,该值不能大于点云密度,如果用户设置该值,系统会忽略一些像素以使角分辨率尽可能地接近用户设定值的同时又不超过该值。
PCL_EXPORTS void  setDepthImage (const unsigned short *depth_image, int di_width, int di_height, float di_center_x, float di_center_y, float di_focal_length_x, float di_focal_length_y, float desired_angular_resolution=-1) 
//  功能同上,但输入的深度图像类型不同。
template<typename PointCloudType >  
void  createFromPointCloudWithFixedSize (const PointCloudType &point_cloud, int di_width, int di_height, float di_center_x, float di_center_y, float di_focal_length_x, float di_focal_length_y, const Eigen::Affine3f &sensor_pose, CoordinateFrame coordinate_frame=CAMERA_FRAME, float noise_level=0.0f, float min_range=0.0f) 
//  从已存在的点云中创建图像,其中,point_cloud为指向创建深度图像所需点云的对象引用,di_width是视差图像的宽度,di_height是视差图像的高度,di_center__x是照相机投影中心的x坐标,di_center_y是照相机投影中心的y坐标,di_ focal_length_x是照相机水平方向上的焦距,di_focal_length_y是照相机垂直方向上的焦距,sensor_pose为模拟深度照相机的位姿,coordinate_frame为点云所使用的坐标系统,noise_ level为传感器的噪声水平,用于z缓冲区求取深度时,如果噪声越大,查询点周围的点深度就会影响查询点的深度,如果无噪声,则直接取查询点z缓冲区中最小的距离为深度,min_range为可见点的最小深度,小于该距离的点视为盲区,即不可见点。
virtual void  calculate3DPoint (float image_x, float image_y, float range, Eigen::Vector3f &point) const 
//  根据给定的图像点和深度创建3D点,其中,image_x和image_y分别为图像x、y方向上的点,range为深度,point为生成的3D点。
virtual void  getImagePoint (const Eigen::Vector3f &point, float &image_x, float &image_y, float &range) const 
//  从给定的3D点point中计算图像点(image_ x,image_y) 和深度值。
virtual PCL_EXPORTS void  getSubImage (int sub_image_image_offset_x, int sub_image_image_offset_y, int sub_image_width, int sub_image_height, int combine_pixels, RangeImage &sub_image) const 
//  裁剪得到完整图像的一部分,并返回新的深度图像,其中, sub_image_image_offset_x为子图像左上角像素的x坐标,该值一般设置为(0,0)(对应于极坐标系中的(-180°,-90°)),是新图像已存在的坐标系统,所以原图像中所使用的实际像素大小为combine_pixels * (image_offset_x - image_offset_x_) , sub_image_image_offset_y等于image_offset_x的y坐标,sub_image_width为新图像的宽度,sub_image_height为新图像的高度,combine_pixels为缩变因子,这说明新图像的角分辨率是原图像的combine_ pixels倍,sub_ image 为输出图像。
virtual PCL_EXPORTS void  getHalfImage (RangeImage &half_image) const 
//  获得比原深度图像分辨率低一半的深度图像。 
PCL_EXPORTS void  reset () 
//  重置所有值,以生成一幅空的深度图像。
PCL_EXPORTS float  getOverlap (const RangeImage &other_range_image, const Eigen::Affine3f &relative_transformation, int search_radius, float max_distance, int pixel_step=1) const 
//  给定相对变换矩阵relative_transformation,求取当前深度图像与给定other_range_image的重叠区域。
bool  getViewingDirection (int x, int y, Eigen::Vector3f &viewing_direction) const 
//  获取已知点(x,y)的视角方向并存储在viewing_direction.
void  getViewingDirection (const Eigen::Vector3f &point, Eigen::Vector3f &viewing_direction) const 
//  获取已知点point的视角方向并存储在viewing_direction.
float  getFocalLengthX () const 
//  返回X方向的焦距
float  getFocalLengthY () const 
//  返回Y方向的焦距
float  getCenterX () const 
//  返回相机主点的x坐标
float  getCenterY () const 
//  返回相机主点的y坐标
相关推荐
码流之上2 小时前
【一看就会一写就废 指间算法】设计电子表格 —— 哈希表、字符串处理
javascript·算法
快手技术3 小时前
快手提出端到端生成式搜索框架 OneSearch,让搜索“一步到位”!
算法
CoovallyAIHub1 天前
中科大DSAI Lab团队多篇论文入选ICCV 2025,推动三维视觉与泛化感知技术突破
深度学习·算法·计算机视觉
NAGNIP1 天前
Serverless 架构下的大模型框架落地实践
算法·架构
moonlifesudo1 天前
半开区间和开区间的两个二分模版
算法
moonlifesudo1 天前
300:最长递增子序列
算法
CoovallyAIHub1 天前
港大&字节重磅发布DanceGRPO:突破视觉生成RLHF瓶颈,多项任务性能提升超180%!
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
英伟达ViPE重磅发布!解决3D感知难题,SLAM+深度学习完美融合(附带数据集下载地址)
深度学习·算法·计算机视觉
聚客AI2 天前
🙋‍♀️Transformer训练与推理全流程:从输入处理到输出生成
人工智能·算法·llm
大怪v2 天前
前端:人工智能?我也会啊!来个花活,😎😎😎“自动驾驶”整起!
前端·javascript·算法