求出点云法向量有啥作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求出点云法向量有啥作用相关的知识,希望对你有一定的参考价值。

参考技术A 两个平面的法向量的夹角与面面夹角相等或互补
点到面的距离=桥接向量与平面法向量的单位向量内积的绝对值。
求两条异面直线所成的角。
求异面直线的距离
求线面的夹角

点云特征——法向量估计

点云法向量是最基本的点云特征,在诸多点云处理算法中起着至关重要的作用。本文记录了两种常用的点云法向量估计方法,分别针对一般点云和深度图两种点云组织形式。

一般点云的法向量估计

估计一般点云法向量的思路是根据邻域内的点拟合一个平面,则平面的法线方向即为点的法向量。记点的邻域为:

\[\mathcalN=\\mathcalp_i(x_i, y_i, z_i)|i=1,2,..,n\\]

需拟合的平面的一般形式是:

\beginalign
Ax+By+Cz+D &= 0 \notag \newline
A^2 + B^2 + C^2 &= 1 \notag
\endalign

采用最小二乘法进行平面的拟合,即求解如下的最小值问题:

\[\min_A,B,C,D\sum_i=1^n(Ax_i +By_i+Cz_i+D)^2 \quad\mathcals.\mathcalt.\quad A^2 + B^2 + C^2 = 1 \]

通过求导并令导数为\(0\),且将方程组中的\(D\)消去,可以得到如下线性方程组:

\[ M\left[ \beginarraycA\\B\\C\endarray \right ] = \left[ \beginarrayccc\barx^2-\barx^2& \barxy-\barx\bary & \barxz-\barx\barz \ \barxy-\barx\bary& \bary^2-\bary^2 & \baryz-\bary\barz \ \barxz-\barx\barz& \baryz-\bary\barz & \barz^2-\barz^2 \endarray \right ]\left[ \beginarraycA\\B\\C\endarray \right ] = 0 \quad\mathcals.\mathcalt.\quad A^2 + B^2 + C^2 = 1 \]
其中\(M\)是协方差矩阵,\(\barx=\frac1n\sum_i=1^nx_i\), \(\barxy=\frac1n\sum_(i=1)^nx_iy_i\),依此类推。
这是典型的在单位圆上求解寻找方程组的解。一般情况下,协方差矩阵是非奇异的,因此上述方程没有精确解,只能寻找近似解,令\(n=\left[A,B,C\right]^T\)满足:
\[\min_n\VertMn\Vert \quad\mathcals.\mathcalt.\Vert n \Vert = 1 \]
利用拉格朗日乘子法,构造新的优化函数:
\[f(n,\lambda)=(Mn)^TMn + \lambda(1-n^Tn)\]
从而能够推导出上式的解是协方差矩阵\(M\)的最小特征值所对应的归一化特征向量
从而可以得到点云的法向量是:\[\vecn=[n_x,n_y,n_z]^T=\pm[A,B,C]^T\]

深度图的法向量估计

对于结构化的点云——深度图而言,可以更加简便的估计点云的法向量。思路是利用深度梯度来近似估计点云法向量。记深度是\(d\),已知深度图,与图像梯度的计算方式相同(梯度方向定义为函数上升的方向),可以直接求出\(x\)\(y\)方向上的深度梯度,分别记作\(\nablad_x\)\(\nablad_y\)
根据针孔相机模型,可以将图像坐标转化为三维空间坐标:
\[(x,y,z)^T=(\fracu-c_xfd, \fracu-c_xfd, d)^T\]
其中\(f,c_x,c_y\)是相机内参,\(u,v\)是像素坐标,以及将深度梯度转化为\(z\)关于\(x,y\)的梯度:
\[(\nablaz_x,\nablaz_y)^T=\fracfd(\nablad_x, \nablad_y)^T\]
则点云的法向量可以近似估计为:
\[\vecn=(n_x,n_y,n_z)^T=\pm\mathcalnormalize(\nablaz_x,\nablaz_y,-1)^T\]

法向量方向的统一

前述方法计算得到的法向量方向具有不确定性,有必要进行统一,通常做法是根据视线方向进行统一,确保法向量方向的一致性。一般将原点作为视点位置,则视线为:\[\vecv=(-x,-y,-z)^T\]
对点云的法向量进行调整,使得:
\[\vecv\cdot\vecn>0\]

以上是关于求出点云法向量有啥作用的主要内容,如果未能解决你的问题,请参考以下文章

PCL点云处理:计算点云法向量并可视化

MATLAB点云处理:点云法向量估计

meshlab的法向量怎么修改

离散点云的法向量如何计算?

点云法线

对同一个平面的点云进行分块拟合,拟合出来的法向量为啥方向会不同?