本周主要完成的工作有两项,分别是:
一、将机载LIDAR点云数据中所应用的一维双向扫描滤波算法成功应用至地面三维点云数据,该算法用来区分地面点和非地面点。具体来说:
1、地面三维扫描仪获取的点云在输出文件中以散乱形式存储(即无序点云),不能直接进行数学运算。考虑到地面三维扫描仪在测量时的工作方式为:先垂直扫描,而后水平转动一定角度继续垂直扫描。可以找到各三维点在水平面内与X轴的夹角α(水平角),并将点云以α大小作为排序编码依据进行排序编码,实现对无序点云的有序化。
图1 地面三维扫描仪工作方式
2、一维双向扫描滤波算法的工作原理为设定坡度阈值Limt_Slope和高程差阈值Limt_Dz,按正向和反向计算各点与相邻点的坡度和高程差,如果二者均小于阈值,则认为是地面点,否则认为是非地面点。该算法中正向和反向的意思是扫描线的正向和反向,因为机载LIDAR是按“之”字形进行扫描存储的,输出文件中的相邻点在空间中也是相邻点。经过第一步地面点云按水平角α排序编码处理,数据已经按照扫描线进行排序,文件中的相邻点在空间中也是相邻点,因此可以应用一维双向扫描滤波算法进行处理。从处理结果来看,效果也比较突出。
二、实现离散点云的空间旋转。具体来说:
受扫描仪内部坐标系影响,在处理感兴趣部分点云数据时,其整体可能与坐标系之间存在夹角。如果想建立点云最小包围,应先将点云整体进行旋转,使其与坐标轴不再存在夹角。实现这一目的,主要步骤分为:
图2 点云在内部坐标系示意图 图3 坐标旋转示意图
1、获取点云中最左侧1、最右侧3、最上方4、最下方2的坐标,计算1、2和2、3的距离,选择距离较大的作为参考线,图中所示为2、3距离较大,以2、3连线为参考线。计算出参考线与横轴的夹角为θ。
2、图3表示坐标旋转的示意图。根据圆的参数方程,点M在X-Y坐标系中为x=r*cosα,y=r*sinα,点M在X'-Y'坐标系中为x'=r*cos(α-θ),y'=r*sin(α-θ)。化简为x'=xcosθ+ysinθ,y'=ycosθ-xsinθ。代入原坐标和第一步所求夹角θ,即可进行坐标转换。
3、在实际应用过程中,点2在原坐标系中并不是原点,因此可首先将点2经过平移变换至原点,再利用步骤2中的公式进行运算。因为计算机在求解过程中可能存在舍入误差,所以可以进行两次旋转变化,得到的效果比较满意。
静以修身,俭以养德,非淡泊无以明志,非宁静无以致远。——诸葛亮