• PCL的MLS(移动最小二乘)


    一、MLS基础

    mls算法本质上和最小二乘一样,是一种拟合数据的算法。区别在于mls是局部的,即通过系数向量和基函数分别对数据中不同位置的节点区域进行拟合,需要计算出全部节点域的拟合函数的参数。而传统的最小二乘是全局的,采用所有的数据进行最小化平方和,不能过滤掉噪声点。
    对于二维数据点,其拟合公式如下:
    在这里插入图片描述
    其中:
    w为权函数,一般采用三次样条曲线,如果权函数为常量,则为一般的加权最小二乘算法。
    n表示为包含在权函数w支持域中的节点数。
    p(x)表示基函数,对于不同的数据维度和需要拟合的目标可以选择不同阶数的基函数。
    a(x)表示系数向量,我们最后就需要计算出a向量的值。
    u表示在x处的取值。
    J表示在节点x位置的模型函数。
    计算流程可以分为三步:

    1. 对J函数求导,得到一个线性方程组。
    2. 对线性方程组计算,求得a向量的值。
    3. 重建节点x附近的拟合函数,计算出拟合函数。

    示例

    1. 法线计算
      PCL中可以先进行曲面重建,再根据曲面计算法线。
      	pcl::search::KdTree<pcl::PointXYZ>::Ptr kd_tree(new pcl::search::KdTree<pcl::PointXYZ>);
      	//法线
      	pcl::PointCloud<pcl::PointNormal>::Ptr normal(new pcl::PointCloud<pcl::PointNormal>);
      	//实例化移动最小二乘类
      	pcl::MovingLeastSquares<pcl::PointXYZ, pcl::PointNormal> mls;
      	mls.setInputCloud(cloud);
      	mls.setComputeNormals(true);   
      	mls.setPolynomialFit(true); 
      	mls.setPolynomialOrder(2); //设置多项式阶数 
      	mls.setSearchMethod(kd_tree);  
      	mls.setSearchRadius(0.05);  //设置kdtree搜索半径
      	mls.setNumberOfThreads(4); 
      	mls.process(*normal); //使用mls方法计算法线并进行曲面重建
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
    2. 上采样
      PCL中上采样方法是通过计算邻域内拟合MLS局部曲面,然后根据曲面计算法线和点云间的插值坐标,最后将插值坐标映射到输入点云内。
      算法原理部分非常复杂。。想研究的直接去看论文。
      PCL提供了三种采样方式。
      SAMPLE_LOCAL_PLANE:每个输入点的局部平面将使用 upsampling_radius_ (半径)和 upsampling_step_ (移动步长)参数以圆形方式采样。
      pcl::search::KdTree<pcl::PointXYZ>::Ptr tree;
      UpSample.setSearchMethod(tree);
      UpSample.setSearchRadius(0.1);
      //移动最小二乘
      UpSample.setUpsamplingMethod(pcl::MovingLeastSquares<pcl::PointXYZ, pcl::PointXYZ>::SAMPLE_LOCAL_PLANE);
      UpSample.setUpsamplingRadius(0.04);
      UpSample.setUpsamplingStepSize(0.02);
      UpSample.process(*CloudUp);
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
  • 相关阅读:
    禅道:提bug、管理case 7.0
    数字孪生城市,智慧城市可视化技术解决方案案例
    【低代码】云端组态集成与设备管理配置
    IO 与 NIO
    华为OD机试真题-座位调整-2023年OD统一考试(B卷)
    重量级ORM框架--持久化框架Hibernate【JPA注解开发】
    MindSpore社区与北大BIOPIC联合发布蛋白质多序列比对开源数据集
    Opengl ES之矩阵变换(上)
    GBase8a-GDCA-第一次阶段测试
    为了面试大厂,熬夜肝完这份 “测试” 笔记后,我终于“硬”了一回
  • 原文地址:https://blog.csdn.net/u011489887/article/details/126373367