前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >PCL采样一致性算法

PCL采样一致性算法

作者头像
点云PCL博主
发布于 2019-07-31 03:46:48
发布于 2019-07-31 03:46:48
1.9K00
代码可运行
举报
文章被收录于专栏:点云PCL点云PCL
运行总次数:0
代码可运行

计算机视觉领域广泛的使用各种不同的采样一致性参数估计算法用于排除错误的样本,样本不同对应的应用不同,例如剔除错误的配准点对,分割出处在模型上的点集,PCL中以随机采样一致性算法(RANSAC)为核心,同时实现了五种类似与随机采样一致形算法的随机参数估计算法,例如随机采样一致性算法(RANSAC)最大似然一致性算法(MLESAC),最小中值方差一致性算法(LMEDS)等,所有估计参数算法都符合一致性原则。在PCL中设计的采样一致性算法的应用主要就是对点云进行分割,根据设定的不同的几个模型,估计对应的几何参数模型的参数,在一定容许的范围内分割出在模型上的点云。

(1)RANSAC随机采样一致性算法的介绍

RANSAC是“RANdom SAmple Consensus(随机抽样一致)”的缩写。它可以从一组包含“局外点”的观测数据集中,通过迭代方式估计数学模型的参数。它是一种不确定的算法——它有一定的概率得出一个合理的结果;为了提高概率必须提高迭代次数。

数 据分两种:有效数据(inliers)和无效数据(outliers)。偏差不大的数据称为有效数据,偏差大的数据是无效数据。如果有效数据占大多数,无 效数据只是少量时,我们可以通过最小二乘法或类似的方法来确定模型的参数和误差;如果无效数据很多(比如超过了50%的数据都是无效数据),最小二乘法就 失效了,我们需要新的算法

一个简单的例子是从一组观测数据中找出合适的2维直线。假设观测数据中包含局内点和局外点,其中局内点近似的被直线所通过,而局外点远离于直线。简单的最 小二乘法不能找到适应于局内点的直线,原因是最小二乘法尽量去适应包括局外点在内的所有点。相反,RANSAC能得出一个仅仅用局内点计算出模型,并且概 率还足够高。但是,RANSAC并不能保证结果一定正确,为了保证算法有足够高的合理概率,我们必须小心的选择算法的参数。

包含很多局外点的数据集

RANSAC找到的直线(局外点并不影响结果)

概述 RANSAC算法的输入是一组观测数据,一个可以解释或者适应于观测数据的参数化模型,一些可信的参数。 RANSAC通过反复选择数据中的一组随机子集来达成目标。被选取的子集被假设为局内点,并用下述方法进行验证: 1.有一个模型适应于假设的局内点,即所有的未知参数都能从假设的局内点计算得出。 2.用1中得到的模型去测试所有的其它数据,如果某个点适用于估计的模型,认为它也是局内点。 3.如果有足够多的点被归类为假设的局内点,那么估计的模型就足够合理。 4.然后,用所有假设的局内点去重新估计模型,因为它仅仅被初始的假设局内点估计过。 5.最后,通过估计局内点与模型的错误率来评估模型。

算法 伪码形式的算法如下所示: 输入: data —— 一组观测数据 model —— 适应于数据的模型 n —— 适用于模型的最少数据个数 k —— 算法的迭代次数 t —— 用于决定数据是否适应于模型的阀值 d —— 判定模型是否适用于数据集的数据数目 输出: best_model —— 跟数据最匹配的模型参数(如果没有找到好的模型,返回null) best_consensus_set —— 估计出模型的数据点 best_error —— 跟数据相关的估计出的模型错误 iterations = 0 best_model = null best_consensus_set = null best_error = 无穷大 while ( iterations < k ) maybe_inliers = 从数据集中随机选择n个点 maybe_model = 适合于maybe_inliers的模型参数 consensus_set = maybe_inliers for ( 每个数据集中不属于maybe_inliers的点 ) if ( 如果点适合于maybe_model,且错误小于t ) 将点添加到consensus_set if ( consensus_set中的元素数目大于d ) 已经找到了好的模型,现在测试该模型到底有多好 better_model = 适合于consensus_set中所有点的模型参数 this_error = better_model究竟如何适合这些点的度量 if ( this_error < best_error ) 我们发现了比以前好的模型,保存该模型直到更好的模型出现 best_model = better_model best_consensus_set = consensus_set best_error = this_error 增加迭代次数 返回 best_model, best_consensus_set, best_error

(2)最小中值法(LMedS)


LMedS的做法很简单,就是从样本中随机抽出N个样本子集,使用最大似然(通常是最小二乘)对每个子集计算模型参数和该模型的偏差,记录该模型参 数及子集中所有样本中偏差居中的那个样本的偏差(即Med偏差),最后选取N个样本子集中Med偏差最小的所对应的模型参数作为我们要估计的模型参数。

在PCL中sample_consensus模块支持的几何模型

  • SACMODEL_PLANE - used to determine plane models. The four coefficients of the plane are its Hessian Normal form: [normal_x normal_y normal_z d]
  • SACMODEL_LINE - used to determine line models. The six coefficients of the line are given by a point on the line and the direction of the line as: [point_on_line.x point_on_line.y point_on_line.z line_direction.x line_direction.y line_direction.z]
  • SACMODEL_CIRCLE2D - used to determine 2D circles in a plane. The circle's three coefficients are given by its center and radius as: [center.x center.y radius]
  • SACMODEL_CIRCLE3D - used to determine 3D circles in a plane. The circle's seven coefficients are given by its center, radius and normal as: [center.x, center.y, center.z, radius, normal.x, normal.y, normal.z]
  • SACMODEL_SPHERE - used to determine sphere models. The four coefficients of the sphere are given by its 3D center and radius as: [center.x center.y center.z radius]
  • SACMODEL_CYLINDER - used to determine cylinder models. The seven coefficients of the cylinder are given by a point on its axis, the axis direction, and a radius, as: [point_on_axis.x point_on_axis.y point_on_axis.z axis_direction.x axis_direction.y axis_direction.z radius]
  • SACMODEL_CONE - used to determine cone models. The seven coefficients of the cone are given by a point of its apex, the axis direction and the opening angle, as: [apex.x, apex.y, apex.z, axis_direction.x, axis_direction.y, axis_direction.z, opening_angle]
  • SACMODEL_TORUS - not implemented yet
  • SACMODEL_PARALLEL_LINE - a model for determining a line parallel with a given axis, within a maximum specified angular deviation. The line coefficients are similar to SACMODEL_LINE .
  • SACMODEL_PERPENDICULAR_PLANE - a model for determining a plane perpendicular to an user-specified axis, within a maximum specified angular deviation. The plane coefficients are similar to SACMODEL_PLANE .
  • SACMODEL_PARALLEL_LINES - not implemented yet
  • SACMODEL_NORMAL_PLANE - a model for determining plane models using an additional constraint: the surface normals at each inlier point has to be parallel to the surface normal of the output plane, within a maximum specified angular deviation. The plane coefficients are similar to SACMODEL_PLANE .
  • SACMODEL_PARALLEL_PLANE - a model for determining a plane parallel to an user-specified axis, within a maximum specified angular deviation. SACMODEL_PLANE .
  • SACMODEL_NORMAL_PARALLEL_PLANE defines a model for 3D plane segmentation using additional surface normal constraints. The plane must lie parallel to a user-specified axis. SACMODEL_NORMAL_PARALLEL_PLANE therefore is equivalent to SACMODEL_NORMAL_PLANE + SACMODEL_PARALLEL_PLANE. The plane coefficients are similar to SACMODEL_PLANE .

(2)PCL中Sample_consensus模块及类的介绍

PCL中Sample_consensus库实现了随机采样一致性及其泛化估计算法,例如平面,柱面,等各种常见的几何模型,用不同的估计算法和不同的几何模型自由的结合估算点云中隐含的具体几何模型的系数,实现对点云中所处的几何模型的分割,线,平面,柱面 ,和球面都可以在PCL 库中实现,平面模型经常被用到常见的室内平面的分割提取中, 比如墙,地板,桌面,其他模型常应用到根据几何结构检测识别和分割物体中,一共可以分为两类:一类是针对采样一致性及其泛化函数的实现,一类是几个不同模型的具体实现,例如:平面,直线,圆球等

pcl::SampleConsensusModel< PointT >是随机采样一致性估计算法中不同模型实现的基类,所有的采样一致性估计模型都继承与此类,定义了采样一致性模型的相关的一般接口,具体实现由子类完成,其继承关系:

类成员的介绍

Public Member Functions

SampleConsensusModel (const PointCloudConstPtr &cloud, const std::vector< int > &indices, bool random=false)

SampleConsensusModel类的构造函数,cloud为输入点云对象的指针,indices为算法使用点云索引向量,如果设置random=true则用当前时间初始化随机化函数的种子否则使用12345作为种子

virtual void

getSamples (int &iterations, std::vector< int > &samples)

获取一组随机采样点数据以点云中点的索引方式存储到samples,iterations为迭代次数

virtual bool

computeModelCoefficients (const std::vector< int > &samples, Eigen::VectorXf &model_coefficients)=0

纯虚函数检查给定的点云索引样本samples能否一个有效的模型,

virtual void

optimizeModelCoefficients (const std::vector< int > &inliers, const Eigen::VectorXf &model_coefficients, Eigen::VectorXf &optimized_coefficients)=0

优化初始估计的模型参数,inliers设定的局内点,model_coefficients初始估计的模型的系数,optimized_coefficients优化后的模型系数

virtual void

getDistancesToModel (const Eigen::VectorXf &model_coefficients, std::vector< double > &distances)=0

计算点云中所有点到给定模型中model_coefficients的距离,存储到distances

virtual void

selectWithinDistance (const Eigen::VectorXf &model_coefficients, const double threshold, std::vector< int > &inliers)=0

从点云中选择所有到给定模型model_coefficients的距离小于给定的阀值 threshold 的点为局内点,inliers存储最终输出的局内点

virtual int

countWithinDistance (const Eigen::VectorXf &model_coefficients, const double threshold)=0

统计点云到给定模型model_coefficients距离小于阀值的点的个数

virtual void

projectPoints (const std::vector< int > &inliers, const Eigen::VectorXf &model_coefficients, PointCloud &projected_points, bool copy_data_fields=true)=0

将局内点inliner投影到model_coefficients上创建一组新的点云projected_points,

(太多了 太耽误时间了)**************************

(2)pcl::SampleConsensus< T > 是采样一致性算法的基类

Public Member Functions

SampleConsensus (const SampleConsensusModelPtr &model, double threshold, bool random=false)

其中model设置随机采样性算法使用的模型,threshold 阀值

void

setSampleConsensusModel (const SampleConsensusModelPtr &model)

Set the Sample Consensus model to use.

void

setDistanceThreshold (double threshold)

Set the distance to model threshold.

double

getDistanceThreshold ()

Get the distance to model threshold, as set by the user.

void

setMaxIterations (int max_iterations)

Set the maximum number of iterations.

int

getMaxIterations ()

Get the maximum number of iterations, as set by the user.

void

setProbability (double probability)

Set the desired probability of choosing at least one sample free from outliers.

double

getProbability ()

Obtain the probability of choosing at least one sample free from outliers, as set by the user.

virtual bool

computeModel (int debug_verbosity_level=0)=0

Compute the actual model.

virtual bool

refineModel (const double sigma=3.0, const unsigned int max_iterations=1000)

Refine the model found.

void

getRandomSamples (const boost::shared_ptr< std::vector< int > > &indices, size_t nr_samples, std::set< int > &indices_subset)

Get a set of randomly selected indices.

void

getModel (std::vector< int > &model)

(3)pcl::RandomizedMEstimatorSampleConsensus< PointT > 实现了RANSAC算法,RANSAC算法适用与处理数据点中局内点比例比较大的情况,科快速的进行局外点的剔除。

class pcl::SampleConsensusModelCircle2D< PointT >实现采样一致性 计算二位平面圆周模型

class pcl::SampleConsensusModelCone< PointT, PointNT > 实现采样一致性计算的三维椎体模型

代码实例 random_sample_consensus.cpp

#include <iostream>

#include <pcl/console/parse.h>

#include <pcl/filters/extract_indices.h>

#include <pcl/io/pcd_io.h>

#include <pcl/point_types.h>

#include <pcl/sample_consensus/ransac.h>

#include <pcl/sample_consensus/sac_model_plane.h>

#include <pcl/sample_consensus/sac_model_sphere.h>

#include <pcl/visualization/pcl_visualizer.h>

#include<boost/thread/thread.hpp>

boost::shared_ptr<pcl::visualization::PCLVisualizer>simpleVis (pcl::PointCloud<pcl::PointXYZ>::ConstPtr cloud)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{  //Open 3D viewer and add point cloud-----  // 
  boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));
 viewer->setBackgroundColor (0, 0, 0);
 viewer->addPointCloud<pcl::PointXYZ> (cloud, "sample cloud");
 viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud"); 
 //viewer->addCoordinateSystem (1.0, "global");
 viewer->initCameraParameters ();  return (viewer);
}
 /*对点云进行初始化,并对其中一个点云填充点云数据作为处理前的的原始点云,其中大部分点云数据是基于设定的圆球和平面模型计算而得到的坐标值作为局内点,有1/5的点云数据是被随机放置的组委局外点。*/
intmain(int argc, char** argv)
{  // 初始化点云对象
 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);  //存储源点云
 pcl::PointCloud<pcl::PointXYZ>::Ptr final (new pcl::PointCloud<pcl::PointXYZ>);   //存储提取的局内点  // 填充点云数据
 cloud->width    = 500;                 //填充点云数目
  cloud->height   = 1;                     //无序点云
 cloud->is_dense = false;
 cloud->points.resize (cloud->width * cloud->height);  for (size_t i = 0; i < cloud->points.size (); ++i)
 {    if (pcl::console::find_argument (argc, argv, "-s") >= 0 || pcl::console::find_argument (argc, argv, "-sf") >= 0)
   {//根据命令行参数用x^2+y^2+Z^2=1设置一部分点云数据,此时点云组成1/4个球体作为内点
     cloud->points[i].x = 1024 * rand () / (RAND_MAX + 1.0);
     cloud->points[i].y = 1024 * rand () / (RAND_MAX + 1.0);     
  if (i % 5 == 0)
       cloud->points[i].z = 1024 * rand () / (RAND_MAX + 1.0);   //此处对应的点为局外点
     else if(i % 2 == 0)
       cloud->points[i].z =  sqrt( 1 - (cloud->points[i].x * cloud->points[i].x) - (cloud->points[i].y * cloud->points[i].y));     
      else
       cloud->points[i].z =  - sqrt( 1 - (cloud->points[i].x * cloud->points[i].x) - (cloud->points[i].y * cloud->points[i].y));
   }   
     else
   { //用x+y+z=1设置一部分点云数据,此时地拿云组成的菱形平面作为内点
     cloud->points[i].x = 1024 * rand () / (RAND_MAX + 1.0);
     cloud->points[i].y = 1024 * rand () / (RAND_MAX + 1.0);     
   if( i % 2 == 0)
    cloud->points[i].z = 1024 * rand () / (RAND_MAX + 1.0);   //对应的局外点
  else
    cloud->points[i].z = -1 * (cloud->points[i].x + cloud->points[i].y);
   }
 } std::vector<int> inliers;  //存储局内点集合的点的索引的向量  
  //创建随机采样一致性对象
 pcl::SampleConsensusModelSphere<pcl::PointXYZ>::Ptr
   model_s(new pcl::SampleConsensusModelSphere<pcl::PointXYZ> (cloud));      //针对球模型的对象
 pcl::SampleConsensusModelPlane<pcl::PointXYZ>::Ptr
   model_p (new pcl::SampleConsensusModelPlane<pcl::PointXYZ> (cloud));     //针对平面模型的对象
 if(pcl::console::find_argument (argc, argv, "-f") >= 0)
 {  //根据命令行参数,来随机估算对应平面模型,并存储估计的局内点
   pcl::RandomSampleConsensus<pcl::PointXYZ> ransac (model_p);
   ransac.setDistanceThreshold (.01);//与平面距离小于0.01 的点称为局内点考虑
   ransac.computeModel();                   //执行随机参数估计
   ransac.getInliers(inliers);                 //存储估计所得的局内点  }  else if (pcl::console::find_argument (argc, argv, "-sf") >= 0 )
 {
  //根据命令行参数  来随机估算对应的圆球模型,存储估计的内点
   pcl::RandomSampleConsensus<pcl::PointXYZ> ransac (model_s);
   ransac.setDistanceThreshold (.01);
   ransac.computeModel();
   ransac.getInliers(inliers);
 }  // 复制估算模型的所有的局内点到final中
 pcl::copyPointCloud<pcl::PointXYZ>(*cloud, inliers, *final);  // 创建可视化对象并加入原始点云或者所有的局内点
 boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;  if (pcl::console::find_argument (argc, argv, "-f") >= 0 || pcl::console::find_argument (argc, argv, "-sf") >= 0)
   viewer = simpleVis(final);  else
   viewer = simpleVis(cloud);  while (!viewer->wasStopped ())
 {
   viewer->spinOnce (100);
   boost::this_thread::sleep (boost::posix_time::microseconds (100000));
 }  return 0;
}

运行结果:

在没有任何参数的情况下,三维窗口显示创建的原始点云(含有局内点和局外点),如图所示,很明显这是一个带有噪声的菱形平面,噪声点是立方体,自己要是我们在产生点云是生成的是随机数生在(0,1)范围内。

./random_sample_consensus

./random_sample_consensus -f

./random_sample_consensus -sf

这都是官方网站给我基本的实例,同时我会根据实际提取平面,与球体等稍后会在后期更新。对于程序中有什么不理解的不明白的可以直接与我交流,谢谢

未完待续**********************************************

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 点云PCL 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PCL滤波介绍(2)
使用统计分析技术,从一个点云数据中集中移除测量噪声点(也就是离群点)比如:激光扫描通常会产生密度不均匀的点云数据集,另外测量中的误差也会产生稀疏的离群点,使效果不好,估计局部点云特征(例如采样点处法向量或曲率变化率)的运算复杂,这会导致错误的数值,反过来就会导致点云配准等后期的处理失败。
点云PCL博主
2019/07/30
1.2K0
【PCL】输入输出(I/O)
最重要的参考资料是官网:https://pointclouds.org/,Docs是函数手册,Tutorials是代码示例,两者结合学习(shiyong)。
DevFrank
2024/07/24
1040
【PCL】输入输出(I/O)
【PCL】欧式聚类提取(Segmentation)
首先通过pcl::VoxelGrid (filters)先对点云数据进行下采样滤波; 然后通过pcl::SACSegmentation<pcl::PointXYZ> seg; (segmentation)创建Nodelet样本细分类别; 然后通过 pcl::ExtractIndices<pcl::PointXYZ> extract;(filters)提取索引; 最后通过pcl::EuclideanClusterExtraction<pcl::PointXYZ> ec; 生成欧式聚类对象 (segmentation)。
DevFrank
2024/07/24
2620
【PCL】欧式聚类提取(Segmentation)
PCL点云分割(1)
点云分割是根据空间,几何和纹理等特征对点云进行划分,使得同一划分内的点云拥有相似的特征,点云的有效分割往往是许多应用的前提,例如逆向工作,CAD领域对零件的不同扫描表面进行分割,然后才能更好的进行空洞修复曲面重建,特征描述和提取,进而进行基于3D内容的检索,组合重用等。
点云PCL博主
2019/07/31
4.1K0
PCL点云分割(1)
如何在ROS中使用PCL(2)
记录关于我们运行roslaunch openni_launch openni.launch 命令时生成的话题以及这些话题的数据类型便于后期的处理,只有知道它们的数据结构,才能很好的对数据进行处理,我们观察到使用rostopic list的所有话题的列表,当然其中也有一些不经常使用的话题类型,比如下面这些话题是我们经常使用的 /camera/depth/image /camera/depth/image_raw /camera/depth/points /camera/ir/image_raw /camera/rgb/image_color /camera/rgb/image_raw
点云PCL博主
2019/07/31
2.1K0
如何在ROS中使用PCL(2)
PCL中分割_欧式分割(1)
基于欧式距离的分割和基于区域生长的分割本质上都是用区分邻里关系远近来完成的。由于点云数据提供了更高维度的数据,故有很多信息可以提取获得。欧几里得算法使用邻居之间距离作为判定标准,而区域生长算法则利用了法线,曲率,颜色等信息来判断点云是否应该聚成一类。
点云PCL博主
2019/07/31
1.4K0
PCL中分割_欧式分割(1)
PCL—低层次视觉—关键点检测(Harris)
  除去NARF这种和特征检测联系比较紧密的方法外,一般来说特征检测都会对曲率变化比较剧烈的点更敏感。Harris算法是图像检测识别算法中非常重要的一个算法,其对物体姿态变化鲁棒性好,对旋转不敏感,可以很好的检测出物体的角点。甚至对于标定算法而言,HARRIS角点检测是使之能成功进行的基础。
点云PCL博主
2019/07/31
1.2K0
PCL—低层次视觉—关键点检测(Harris)
PCL点云特征描述与提取(1)
3D点云特征描述与提取是点云信息处理中最基础也是最关键的一部分,点云的识别。分割,重采样,配准曲面重建等处理大部分算法,都严重依赖特征描述与提取的结果。从尺度上来分,一般分为局部特征的描述和全局特征的描述,例如局部的法线等几何形状特征的描述,全局的拓朴特征的描述,都属于3D点云特征描述与提取的范畴,
点云PCL博主
2019/07/31
2.8K0
PCL点云特征描述与提取(1)
PCLVisualizer可视化类
PCLVisualizer可视化类是PCL中功能最全的可视化类,与CloudViewer可视化类相比,PCLVisualizer使用起来更为复杂,但该类具有更全面的功能,如显示法线、绘制多种形状和多个视口。本小节将通过示例代码演示PCLVisualizer可视化类的功能,从显示单个点云开始。大多数示例代码都是用于创建点云并可视化其某些特征
点云PCL博主
2019/07/31
1.9K0
PCLVisualizer可视化类
ROS机器人程序设计(原书第2版)补充资料 (陆) 第六章 点云 PCL
书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用。
zhangrelay
2019/01/23
8280
如何在ROS中使用PCL—数据格式(1)
关于PCL在ros的数据的结构,具体的介绍可查 看 wiki.ros.org/pcl/Overview
点云PCL博主
2019/07/31
3.2K0
如何在ROS中使用PCL—数据格式(1)
pcl_filters模块api代码解析
上周点云公众号开启了学习模式,由博主分配任务,半个月甚至一个月参与学习小伙伴的反馈给群主,并在微信交流群中进行学术交流,加强大家的阅读文献能力,并提高公众号的分享效果。在此期待更多的同学能参与进来!(目前已经有成员反馈,还有需要小伙伴没有发过来哦,下周开始会将分享整理出来,定期分享,并将文档上传至github组群,已经有部分分享上传至github组群中,供大家下载查看,并且有问题可以在github的issues中提问,大家可以相互提问并解答)
点云PCL博主
2019/07/30
2K0
pcl_filters模块api代码解析
PCL滤波介绍(3)
(2)使用ConditionalRemoval 或RadiusOutlinerRemoval移除离群点
点云PCL博主
2019/07/30
9990
PCL点云特征描述与提取(3)
已知点云P中有n个点,那么它的点特征直方图(PFH)的理论计算复杂度是,其中k是点云P中每个点p计算特征向量时考虑的邻域数量。对于实时应用或接近实时应用中,密集点云的点特征直方图(PFH)的计算,是一个主要的性能瓶颈。此处为PFH计算方式的简化形式,称为快速点特征直方图FPFH(Fast Point Feature Histograms)
点云PCL博主
2019/07/31
2K0
PCL点云特征描述与提取(3)
利用基于NVIDIA CUDA的点云库(PCL)加速激光雷达点云技术
在这篇文章将介绍如何使用CUDA-PCL处理点云来获得最佳性能,由于PCL无法充分利用Jetson上的CUDA,NVIDIA开发了一些具有与PCL相同功能的基于CUDA的库。代码地址:https://github.com/NVIDIA-AI-IOT/cuPCL.git(只有动态库和头文件,作者说源码将在未来开源)。
点云PCL博主
2023/10/25
1.4K0
利用基于NVIDIA CUDA的点云库(PCL)加速激光雷达点云技术
PCL从0到1|点云滤波之直通滤波与体素法滤波
我对点云模块了解得也不算深入,此处单纯地想和大家分享一下这几天我所学习到的点云滤波知识,如有不到之处,还请后台留言多多指正。
3D视觉工坊
2020/12/11
2.5K0
PCL从0到1|点云滤波之直通滤波与体素法滤波
【PCL】PCL点云在Qt中可视化
二进制版的vtk第三方库不支持Qt,需要重新下载vtk并用cmake编译,注意要版本对应,这里我用pcl1.8.1,对应vtk8.0,在这里下载。
DevFrank
2024/07/24
5100
【PCL】PCL点云在Qt中可视化
PCL中分割方法的介绍(2)
关于上一篇博文中提到的欧几里德分割法称之为标准的距离分离,当然接下来介绍其他的与之相关的延伸出来的聚类的方法,我称之为条件欧几里德聚类法,(是我的个人理解),这个条件的设置是可以由我们自定义的,因为除了距离检查,聚类的点还需要满足一个特殊的自定义的要求,就是以第一个点为标准作为种子点,候选其周边的点作为它的对比或者比较的对象,如果满足条件就加入到聚类的对象中,至于到底怎么翻译我也蒙了,只能这样理解了
点云PCL博主
2019/07/31
1.2K0
PCL中分割方法的介绍(2)
PCL1.8.1+vs2015配置教程
下载路径:http://unanancyowen.com/en/pcl181 (这个并不是官网,官网是这个:http://pointclouds.org/)
点云PCL博主
2019/09/17
7.8K3
PCL1.8.1+vs2015配置教程
PCL关键点(1)
关键点也称为兴趣点,它是2D图像或是3D点云或者曲面模型上,可以通过定义检测标准来获取的具有稳定性,区别性的点集,从技术上来说,关键点的数量相比于原始点云或图像的数据量减小很多,与局部特征描述子结合在一起,组成关键点描述子常用来形成原始数据的表示,而且不失代表性和描述性,从而加快了后续的识别,追踪等对数据的处理了速度,故而,关键点技术成为在2D和3D 信息处理中非常关键的技术
点云PCL博主
2019/07/31
1.1K0
PCL关键点(1)
相关推荐
PCL滤波介绍(2)
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文