一、MLS上采样
MLS算法基于最小二乘法,通过拟合每个点的局部领域曲面来重构点云,对于每个点,MLS算法会选择一个局部邻域,并再改邻域内生成一个曲面拟合模型。然后,根据拟合模型算法会计算出在该点的新位置,从而实现点云的增采样。
增采样的特点是可极大的增加点云数据,但由于内插点的不确定性会导致最后输出的结果不一定准确。测试得出增采样,只能增加点的密度,但对于空洞的填补无能为力。
二、代码部分
注:测试代码均使用PclSharp1.12.0库
/// <summary>
/// 增采样
/// </summary>
/// <param name="inCloud">原点云</param>
/// <param name="radiusSearch">搜索半径</param>
/// <param name="upsamplingRadius">采样半径</param>
/// <param name="upsamplingStepSize">采样步数</param>
/// <returns></returns>
public static PointCloudOfXYZ UpSampling(PointCloudOfXYZ inCloud, double radiusSearch = 1,double upsamplingRadius = 1, double upsamplingStepSize = 1)
{
try
{
PointCloudOfXYZ cloudFiltered = new PointCloudOfXYZ();//滤波后的点云
using (var kdtree = new KdTreeOfXYZ())
using (var filter = new MovingLeastSquaresOfPointXYZAndPointXYZ())
{
filter.SetInputCloud(inCloud);
filter.SetSearchMethod(kdtree);
//设置搜索域的半径
filter.SearchRadius = radiusSearch;
//采样方法
filter.SetUpsamplingMethod(UpsamplingMethod.SAMPLE_LOCAL_PLANE);
//采样半径
filter.UpsamplingRadius = upsamplingRadius;
//采样的步数大小
filter.UpsamplingStepSize = upsamplingStepSize;
filter.Process(cloudFiltered);
}
return cloudFiltered;//返回滤波后的点云
}
catch (Exception)
{
return inCloud;//返回滤波前的点云
}
}
三、结果显示