记录一下目前在点云数据处理中比较头疼的问题。
[TOC]
PCL中ICP算法实现的核心代码注释
给定两个点云\(\mathbf{X}=\{x_1,...,x_n\},\mathbf{Y}=\{y_1,...,y_n\}\),点云配准是为了求解两个点云之间的相对旋转\(\mathbf{R}\)和相对平移\(\mathbf{t}\),他们满足如下的优化方程: \[ E(\mathbf{R},\mathbf{t})=\frac{1}{N_p}\Sigma_{i=1}^{N_p}||x_i-\mathbf{R}q_i-\mathbf{t}||^2 \] 如果知道两个点云中的同名对一点关系,那么就可以直接计算得到上述非线性函数的最优解,因此ICP算法中一个核心的突破点就是如何建立正确的同名点、如何从大量的包含错误对应的同名点中删选出正确的关系。
作为基础库,ICP的代码实现中最核心的一个过程是computeTransformation函数。
最大允许中误差为中误差的2倍。
使用地面布设的外业控制点GCP来检核ALS点云条带平差之后的绝对位置精度。如下图所示,红圈中的是GCP点,紫色和灰色是两个条带的ALS点云。图中显示了在\(z\)方向上的偏差。
通过观察,有一部分控制点是在平面区域采集的,有一些是在边缘比较锋利的区域采集的。
本身ALS点云就比较稀疏,再加上GCP也是离散的布设的,导致很难找到对应同名关系,想要找到对应位置的值就只能通过内插来实现。
内插方法有很多,但是直接在ALS里面内插不是很现实,可以考虑转成格网,mesh的形式,然后基于新的数据表达方式再内插。例如可以用arcgis生成DTM,DEM,内插到高分辨率,然后再采样点和GCP做计算。
最终论证,通过地面控制点应该是无法做到水平精度检核的,只能做到高程方向的检核。