本帖最后由 王三国 于 2018-5-14 18:49 编辑
pcl 里仅有函数 // returns the length of the control polygon double ControlPolygonLength() const; 用于计算所求拟合曲线的控制多边形长度,即控制点之间的长度之和。 但是如下图所示
黑色线条为控制多边形长度,红色为所拟合曲线,可以看出拟合曲线的长度和利用ControlPolygonLength()函数求得的控制多边形长度差异较大。 因此我们需要其他相关函数,手动编写代码实现曲线真实长度的计算,具体方法如下: 1利用pcl::on_nurbs::Triangulation::convertCurve2PointCloud(fit.m_nurbs, cloud_curve, n_resolution)将曲线转化为采样点,该函数可以设置不同的分辨率,分辨率越大,越接近曲线的真实形状,下图中,黑色曲线为控制点曲线,红色或者绿色曲线为曲线采样点连线获得的曲线,可以看出不同分辨率曲线转化为的采样点差异较大。
2 然后计算各个采样点之间的距离近似曲线的长度,注意,上面得到的采样点是有序点云,且第一个点与最后一点相同,因此,很容易实现这些采样点的距离和。
另外第一步的采样密度会影响后续的距离精度,以上图的点云为例,观察采样密度对曲线近似距离的影响,如下表和下图所示。、
采样密度 | 曲线近似距离(单位:cm) | 1 | 83.0134 | 5 | 88.7401 | 10 | 88.9739 | 20 | 89.0186 | 30 | 89.0259 | 40 | 89.0284 | 50 | 89.0295 | 60 | 89.0301 | 70 | 89.0305 | 80 | 89.0307 | 90 | 89.0309 | 100 | 89.0311 |
从上述图表可以看出,对于本数据,当采样密度为10或者10以上时,距离变化已经很小了。
|