表面法线是几何表面的重要属性,并在许多领域(如计算机图形应用)中大量使用,以应用生成阴影和其他视觉效果的正确光源。
给定一个几何曲面,通常很简单的方法是将曲面上某一点的法线方向作为垂直于该曲面的矢量。但是,由于我们获取的点云数据集代表了一组实际表面上的点样本,因此有两种可能性:
1、从获取的点云数据集中获取底层曲面,使用曲面网格划分技术,然后从网格中计算曲面法线;
2、使用近似值直接从点云数据集中推断出曲面法线。
本教程将介绍后者,即给定点云数据集,直接计算云中每个点的表面法线。
#理论引入
虽然存在许多不同的正常估算方法,但我们将专注于本教程的方法是最简单的方法之一,具体如下。确定表面上的点的法线的问题近似于估计与表面相切的平面的法线的问题,这又成为最小平方平面拟合估计问题。
注意:欲了解更多信息,包括最小二乘问题的数学方程,请参阅[RusuDissertation](http://files.rbrusu.com/publications/RusuPhDThesis.pdf)。
因此,用于估计表面法线的解决方案被简化为分析从查询点的最近邻居创建的协方差矩阵的特征向量和特征值(或PCA-主分量分析)。更具体地说,对于每个点\ boldsymbol {P} _i,协方差矩阵\ mathcal {C}如下:
\大数符号{} {} {} {} {} {\大写符号\ \ frac {1} {k} \ sum_ {i = 1} ^ cdot大胆的符号{p} _i- \ overline {\ boldsymbol {p}})^ {T}},?\ mathcal {C} \ cdot \ vec { {\ mathsf v} _j} = \ lambda_j \ cdot \ vec { {\ mathsf v} _j},?j \ in \ {0,1,2 }
?为考虑点邻居的数目在 \ boldsymbol {P} _i附近,\划线{\ boldsymbol {P}} 表示最近邻居的3D质心,\ lambda_j是协方差矩阵的第?特征值,并且\ vec { {\ mathsf v} _j} 表示第?个特征向量。
要从PCL中的一组点中估计协方差矩阵,可以使用:
// Placeholder for the 3x3 covariance matri