点云特征——法向量估计

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

一般点云的法向量估计

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

\[\mathcal{N}=\{\mathcal{p}_i(x_i, y_i, z_i)|i=1,2,..,n\}\]

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

\begin{align}
Ax+By+Cz+D &= 0 \notag \newline
A^2 + B^2 + C^2 &= 1 \notag
\end{align}

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

\[\min_{A,B,C,D}\sum_{i=1}^n{(Ax_i +By_i+Cz_i+D)}^2 \quad\mathcal{s}.\mathcal{t}.\quad A^2 + B^2 + C^2 = 1 \]

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

\[
M\left[ \begin{array}{c}A\\B\\C\end{array} \right ] =
\left[ \begin{array}{ccc}\bar{x^2}-\bar{x}^2& \bar{xy}-\bar{x}\bar{y} & \bar{xz}-\bar{x}\bar{z} \ \bar{xy}-\bar{x}\bar{y}& \bar{y^2}-\bar{y}^2 & \bar{yz}-\bar{y}\bar{z} \ \bar{xz}-\bar{x}\bar{z}& \bar{yz}-\bar{y}\bar{z} & \bar{z^2}-\bar{z}^2
\end{array} \right ]\left[ \begin{array}{c}A\\B\\C\end{array} \right ] = 0 \quad\mathcal{s}.\mathcal{t}.\quad A^2 + B^2 + C^2 = 1
\]
其中\(M\)是协方差矩阵,\(\bar{x}=\frac{1}{n}\sum_{i=1}^nx_i\), \(\bar{xy}=\frac{1}{n}\sum_(i=1)^nx_iy_i\),依此类推。
这是典型的在单位圆上求解寻找方程组的解。一般情况下,协方差矩阵是非奇异的,因此上述方程没有精确解,只能寻找近似解,令\(n=\left[A,B,C\right]^T\)满足:
\[\min_{n}\Vert{Mn}\Vert \quad\mathcal{s}.\mathcal{t}.\Vert n \Vert = 1 \]
利用拉格朗日乘子法,构造新的优化函数:
\[f(n,\lambda)={(Mn)}^TMn + \lambda(1-n^Tn)\]
从而能够推导出上式的解是协方差矩阵\(M\)的最小特征值所对应的归一化特征向量
从而可以得到点云的法向量是:\[\vec{n}=[n_x,n_y,n_z]^T=\pm[A,B,C]^T\]。

深度图的法向量估计

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

法向量方向的统一

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

原文地址:https://www.cnblogs.com/lijian-tech-blog/p/11623400.html

时间: 2024-11-09 07:38:49

点云特征——法向量估计的相关文章

3D 点云特征

博客参考: https://blog.csdn.net/shaozhenghan/article/details/81346585 和 https://www.cnblogs.com/li-yao7758258/p/6479255.html 一.对点云特征的要求理想情况下相同或相似表面上的点的特征值将非常相似(相对特定度量准则〉,而不同表面上的点的特征描述子将有明显差异 . 下面几个条件,通过能否获得相同的局部表面特征值,可以判定点特征表示方式的优劣: 1) 刚体变换( rigid transf

一种网格点云快速法线估计方法

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 估计法线 int TopographyMesh::normalEstimation( std::vector<PointType>& in_points, std::vector<PCTTM_Triangle

基于点云几何特征匹配的配准概述

在点云数据只有三维坐标时进行配准,这个时候,我们所能提取到的就只有点云的几何特征,常用的特征包括,点云的曲率,点云中平面四边形的仿射不变性等特征. 事实上不管是什么配准方法,都是基于特征匹配的原理.无论是从图像当中获取额外的辅助的信息,或者只是从三维点云当中提取的几何特征,都是为了更好得抽象出点云的特征以及两个点云之间的对应点.毫无疑问,如果我们能够通过遍历点云的各个点基所对应的变换,肯定能够找到最佳的变换,但是这个计算量是一个天文数字,在实际应用当中是不太可能的.所以人们想出了各种方法试图在减

点云的滤波

激光扫描通常会产生密度不均匀的点云数据集.另外,测量中的误差会产生稀疏的离群点,使效果更糟.估计局部点云特征(例如采样点处法向量或曲率变化率)的运算很复杂,这会导致错误的数值,反过来有可能导致点云的配准等后期处理失败. 以下方法可以解决其中部分问题:对每个点的邻域进行一个统计分析,并修剪掉那些不符合一定标准的点.我们的稀疏离群点移除方法基于在输入数据中对点到临近点的距离分布的计算.对每个点,我们计算它到它的所有临近点的平均距离.假设得到的结果是一个高斯分布,其形状由均值和标准差决定,平均距离在标

PCL系列——如何逐渐地配准一对点云

PCL系列 PCL系列--读入PCD格式文件操作 PCL系列--将点云数据写入PCD格式文件 PCL系列--拼接两个点云 PCL系列--从深度图像(RangeImage)中提取NARF关键点 PCL系列--如何可视化深度图像 PCL系列--如何使用迭代最近点法(ICP)配准 PCL系列--如何逐渐地配准一对点云 PCL系列--三维重构之泊松重构 PCL系列--三维重构之贪婪三角投影算法 PCL系列--三维重构之移动立方体算法 说明 通过本教程,我们将会学会: 如何配准多个点云图. 配准的方法是:

点云法线

原文链接 点云法线定义 对于一个三维空间的正则曲面R(u, v), 点(u, v)处的切平面(Ru, Rv)的法向量即为曲面在点(u, v)的法向量.点云是曲面的一个点采样,采样曲面的法向量就是点云的法向量. 我们给每个点一个线段来显示法线,线段的方向为法线方向,如下图所示.这种显示方法虽然简单,但是不方便查看法线的正确性.下面介绍的点云渲染,能更加直观的查看法线的正确性. 点云法线应用 点云渲染:法线信息可用于光照渲染.如下图所示,左边的点云为纯颜色渲染,右图是Phone光照模型的渲染效果,它

机器人学 —— 机器人视觉(估计)

之前说到,机器人视觉的核心是Estimation.求取特征并配准,也是为了Estimation做准备.一旦配准完成,我们就可以从图像中估计机器人的位置,姿态.有了位置,姿态,我们可以把三维重建的东西进行拼接.从视觉信息估计机器人位姿的问题可以分为三个大类:1.场景点在同一平面上.2.场景点在三维空间中.3.两幅点云的配准. 所有问题有一个大前提就是知道相机内部矩阵K. 1.由单应矩阵进行位姿估计 单应矩阵原指从 R2--R2 的映射关系.但在估计问题中,如果我们能获得这种映射关系,就可以恢复从世

点云拼接算法

1.粗配准拼接 #include <pcl/common/transforms.h> #include <pcl/console/parse.h> #include <pcl/console/time.h> #include <pcl/point_types.h> #include <pcl/io/pcd_io.h> #include <pcl/sample_consensus/method_types.h> #include <

SLAM概念学习之特征图Feature Maps

特征图(或者叫地标图,landmark maps)利用参数化特征(如点和线)的全局位置来表示环境.如图1所示,机器人的外部环境被一些列参数化的特征,即二维坐标点表示.这些静态的地标点被观测器(装有传感器的机器人)利用多目标跟踪的方法跟踪,从而估计机器人的运动. Fig.1 Feature maps. 机器人的定位是通过建立传感器观测特征和图map中特征之间的关系来确定的.预测特征的位置和量测特征位置之间的差别被用来计算机器人的位姿.这种方式,类似于多目标跟踪问题,但是不想传统的多目标跟踪问题,这