- 芒果树a的圆心拟合
1.1 数据:树木主干数据-芒果树a
图1 芒果树a点云情况
1.2 大致思路:
该点云数据是空间中的离散点,在三维坐标中,构成一个圆柱,由于树干处于垂直树立状态,因此从已知点云坐标入手,圆柱在不同高度的各个圆的圆心可以视为x坐标与y坐标相同,根据各点云坐标求出该圆柱的圆心坐标。
1.3 实现原理:
平均值法:
首先考虑在三维空间中处于立体状态下对于均匀分布在圆柱上的n个点(Xi,Yi),从理论上讲,圆心的X坐标应为Xi的平均值,同样圆心的Y坐标应为Yi的平均值,圆心到圆上任一点的距离即为圆的半径。
在实际情况中,点云各点不可能正好均匀分布在圆上,甚至有些点还不在圆上,但只要各离散点分布较为均匀,仍可将均值作为圆心坐标,圆心到各离散点的距离的平均值可作为圆半径的近似值。
加权平均法:
考虑到一般情况下点云数据点不可能分布很均匀,用求平均值法求得的圆心位置会偏向数据点密集的一边,求出的半径也会偏小。要克服这种方法的不足,在求圆心坐标和半径大小时,可采用加权平均法。其基本思想是:设L为所有相邻两点之间的弧长之和,点(Xi,Yi)与相邻两点之间的弧长之和为li,在计算圆心坐标和半径大小时,该点和该点到圆心距离的权数为li/(2l)。 则 圆 心 坐 标 为(Xili/(2l),Yili/(2*l))。在圆心和半径还没确定的情况下,相邻两点之间的弧长无法确定,但可用相邻两点之间的距离代替相邻两点之间的弧长。
由于数据中点云都是有一定的高度的,采用该方法计算圆心坐标,点云数据在Z方向上的高度有一定限制。
最小二乘法:
最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。基于最小二乘法的原理,实现圆心坐标拟合计算。
1.4 代码实现:
读取点云数据,计算圆心坐标x与y
1.5 计算结果: - 柱体4的圆心拟合
2.1 数据:柱体数据-柱体4
图2 柱体4点云情况
2.2 大致思路:
该点云数据与芒果树a类似,同样是空间中的离散点,在三维坐标中,构成一个圆柱,但是由于路灯杆子有倾斜,并且倾斜圆柱有一定的高度,因此从已知点云坐标入手,将三维点数据导入,存为多行3列的一个数组,所有三维点先按Z坐标的值从小到大排列,通过循环,每隔100个点或更少点提取子数组,也就是根据不同高度将点云划分成多个较小高度的圆柱,再按照上述求解芒果树a的方法求出该圆柱子圆心位置坐标,从而得到一组各自不同高度的圆心坐标。
2.3 实现原理:
以下原理与1.3类似,倾斜圆柱在以上基础上考虑的点多,难度稍大。
由于点云数据是较高的倾斜圆柱,首先根据点云高度将点云划分为多个较小高度的圆柱,以达到圆柱大致呈垂直圆柱状态,然后同样按照以下方法求圆心坐标。
平均值法:
首先考虑在三维空间中处于立体状态下对于均匀分布在圆柱上的n个点(Xi,Yi),从理论上讲,圆心的X坐标应为Xi的平均值,同样圆心的Y坐标应为Yi的平均值,圆心到圆上任一点的距离即为圆的半径。
在实际情况中,点云各点不可能正好均匀分布在圆上,甚至有些点还不在圆上,但只要各离散点分布较为均匀,仍可将均值作为圆心坐标,圆心到各离散点的距离的平均值可作为圆半径的近似值。
最后得到一组高度不同的圆心坐标。
加权平均法:
考虑到一般情况下点云数据点不可能分布很均匀,用求平均值法求得的圆心位置会偏向数据点密集的一边,求出的半径也会偏小。要克服这种方法的不足,在求圆心坐标和半径大小时,可采用加权平均法。其基本思想是:设l为所有相邻两点之间的弧长之和,点(Xi,Yi)与相邻两点之间的弧长之和为li,在计算圆心坐标和半径大小时,该点和该点到圆心距离的权数为li/(2l)。则圆心坐标为(Xili/(2l),Yili/(2*l))。在圆心和半径还没确定的情况下,相邻两点之间的弧长无法确定,但可用相邻两点之间的距离代替相邻两点之间的弧长。
由于数据中点云都是有一定的高度的,采用该方法计算圆心坐标,点云数据在Z方向上的高度有一定限制。因此,对于倾斜圆柱来说,将圆柱分为若干个高度较小的小圆柱,再分别计算出各个圆的圆心。
最小二乘法:
最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。
基于最小二乘法的原理,推算圆上观测若干坐标点拟合圆心坐标的公式,实现圆心坐标拟合计算。
2.4 代码实现:
读取数据代码同1.4一样,只是路径中的文件名字换成柱体4.txt。
以下代码是将点云数据进行排序,计算圆柱高
通过循环,提取子数组,依次计算各圆心三维坐标。
2.5 计算结果:
- 两个相交面求交线方程
3.1 数据:两个面相交4
图3 两个面相交4点云情况
3.2 大致思路:
该点云数据在三维空间中,2个墙面与地面点总体上呈垂直关系,2个墙面均垂直于地面,并且2个墙面之间也呈垂直状态。从三维空间中,沿Z轴俯视2个墙面,查看X,Y坐标的分布,可以看到2个墙面与X,Y轴不平行,如下图所示。
图4 两个面相交4俯视图
在求两个面的交线方程前,先要把两个面的点区分开来,两个面分别计算平面方程,进而计算交线方程。
正如俯视图展示的,可以通过求出Y坐标的最小值时的X坐标的值为阈值来划分两个面的点。两个面的点划分为两个数组,再求平面方程,进而求两个平面法向量,两个面的法向量都与交线垂直,得到交线方向向量,通过交线上的点确定交线方程。
3.3 代码
两个面相交求交线方程的代码只完成了数据导入,Y坐标最值得计算。 - 山区点云提取DEM
4.1 数据:山区点云数据-G01-2
图5 山区点云数据-G01-2情况
4.2 大致思路:
点云数据以树木点居多,树木点数据与地面数据的Z坐标值相差较大,首先可以把Z坐标值较大的点数据舍去,减少数据量,再分区域考虑地面点的地物剔除问题。小片区域内的地面点的Z坐标值相差较小,根据点的近邻点Z值的判断,筛选地面点的数据,最后得到山区的DEM数据。
来源:CSDN
作者:YuanYWRS
链接:https://blog.csdn.net/yuanYW7556/article/details/103635947