截面面积求取为模型体积求取的核心,截面面积的精度将直接影响最终体积的误差程度。现有的普遍不规则图形面积求取方法为微分法,即设一个宽度Δ,在不规则图形的x轴上以Δ为范围分别求取近似的方形面积,累加求和得截面面积。该方法会使所求截面面积显著偏大,从而导致实验结果不具有准确性。本文针对这一缺陷,创新性提出两种改进型算法。
在传统微分算法的基础上,本文实验采用二倍Δ进行截面面积求取,以下简称二倍宽算法。该方法核心是将微分法中Δ范围内的方形面积,进行反向延拓,在另一范围取得最高点和最低点,与原方形的点进行曲线拟合形成近似梯形图形进行面积求取。与方形微分法相比,二倍宽微分法形成的近似梯形会在一定程度上对面积求取形成差异性互补,从而大幅减小误差。该方法还需借助PCL库中的一些点云运用方法,包括一些常用滤波器以及库函数等。本文选用直通滤波器对平面点云进行x轴上的分割【14】【15】。直通滤波器的作用是过滤掉在指定维度方向上取值不在给定值域内的点,简单高效,适用于消除背景等操作。通过pcl中的函数pcl::getMinMax3D获取所分割的点云模型在y轴上的最大与最小值,求其差。该函数形式为:void pcl::getMinMax3D(const pcl::PointCloud<PointT>& cloud, PointT & min_pt, PointT & max_pt),cloud为输入点云,min_pt为放最小值的容器,max_pt为放最大值的容器。