南昌做网站的流程,摄影网站官网大全,王烨华,百度导航最新版本下载安装一、MLS基础
mls算法本质上和最小二乘一样#xff0c;是一种拟合数据的算法。区别在于mls是局部的#xff0c;即通过系数向量和基函数分别对数据中不同位置的节点区域进行拟合#xff0c;需要计算出全部节点域的拟合函数的参数。而传统的最小二乘是全局的#xff0c;采用所…一、MLS基础
mls算法本质上和最小二乘一样是一种拟合数据的算法。区别在于mls是局部的即通过系数向量和基函数分别对数据中不同位置的节点区域进行拟合需要计算出全部节点域的拟合函数的参数。而传统的最小二乘是全局的采用所有的数据进行最小化平方和不能过滤掉噪声点。 对于二维数据点其拟合公式如下 其中 w为权函数一般采用三次样条曲线如果权函数为常量则为一般的加权最小二乘算法。 n表示为包含在权函数w支持域中的节点数。 p(x)表示基函数对于不同的数据维度和需要拟合的目标可以选择不同阶数的基函数。 a(x)表示系数向量我们最后就需要计算出a向量的值。 u表示在x处的取值。 J表示在节点x位置的模型函数。 计算流程可以分为三步 1对J函数求导得到一个线性方程组。 2对线性方程组计算求得a向量的值。 3重建节点x附近的拟合函数计算出拟合函数。
具体原理部分设计的数学计算太多参看链接。 原理部分参考 移动最小二乘法MLSMoving Lest Squares简要介绍 无网格法与Matlab程序设计7——移动最小二乘MLS形函数 对于三维数据点计算步骤相似 1计算局部K邻域范围内的的超平面超平面的法向量即为该处的的法线。 2进行最小二乘拟合最终得到拟合面的点坐标。 二、示例
mls算法目前广泛应用于三维模型的法线计算上采样曲面平滑。
2.1 法线计算
PCL中可以先进行曲面重建再根据曲面计算法线。 pcl::search::KdTreepcl::PointXYZ::Ptr kd_tree(new pcl::search::KdTreepcl::PointXYZ);//法线pcl::PointCloudpcl::PointNormal::Ptr normal(new pcl::PointCloudpcl::PointNormal);//实例化移动最小二乘类pcl::MovingLeastSquarespcl::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方法计算法线并进行曲面重建2.2 上采样
PCL中上采样方法是通过计算邻域内拟合MLS局部曲面然后根据曲面计算法线和点云间的插值坐标最后将插值坐标映射到输入点云内。 算法原理部分非常复杂。。想研究的直接去看论文。 PCL提供了三种采样方式。 SAMPLE_LOCAL_PLANE每个输入点的局部平面将使用 upsampling_radius_ 半径和 upsampling_step_ 移动步长参数以圆形方式采样。
pcl::search::KdTreepcl::PointXYZ::Ptr tree;
UpSample.setSearchMethod(tree);
UpSample.setSearchRadius(0.1);
//移动最小二乘
UpSample.setUpsamplingMethod(pcl::MovingLeastSquarespcl::PointXYZ, pcl::PointXYZ::SAMPLE_LOCAL_PLANE);
UpSample.setUpsamplingRadius(0.04);
UpSample.setUpsamplingStepSize(0.02);
UpSample.process(*CloudUp);