在本章节中,将全面介绍 ORB (Oriented FAST and Rotated BRIEF) 特征点提取算法的核心流程和关键技术细节。ORB 是一种高效且具有旋转不变性的特征提取与描述方法,广泛应用于 SLAM 系统、视觉定位、图像匹配等领域。
2.1 关键点和描述子
关键点的概念
关键点是图像中具有独特性质的点,比如角点、边缘点等,能够在不同视角和光照条件下保持稳定。ORB 中的关键点通常使用 FAST (Features from Accelerated Segment Test) 算法检测。关键点的主要特点包括:
- 局部性:关键点是图像的局部特征。
- 稳定性:在图像平移、旋转、缩放等变化下依然稳定。
- 高分辨性:能够精准定位图像中的独特结构。
描述子的概念
描述子是用于表示关键点周围图像信息的向量,ORB 使用 BRIEF (Binary Robust Independent Elementary Features) 描述子。描述子的主要特点包括:
- 高效性:ORB 的描述子采用二值化编码,比传统 SIFT、SURF 更高效。
- 旋转不变性:ORB 针对 BRIEF 进行旋转改进,增强了描述子的鲁棒性。
2.2 灰度质心法
ORB 中的关键点方向是通过灰度质心法计算的,这是实现旋转不变性的基础。
原理
灰度质心法的基本思想是,根据关键点周围的灰度分布计算出一个方向向量,用于标定关键点的主方向。具体步骤如下:
-
关键点邻域选取:在关键点中心定义一个固定大小的窗口。
-
灰度质心计算:
- 设灰度值为 I ( x , y ) I(x, y) I(x,y) ,计算关键点周围像素的质心 ( C x , C y ) (C_x, C_y) (Cx,Cy) : C_x = \frac{\sum_{x,y} x \cdot I(x, y)}{\sum_{x,y} I(x, y)}, \quad C_y = \frac{\sum_{x,y} y \cdot I(x, y)}
-
方向计算:
- 质心与关键点中心的连线方向即为主方向:
θ = arctan C y − y k C x − x k \theta = \arctan{\frac{C_y - y_k}{C_x - x_k}} θ=arctanCx−xkCy−yk
其中, ( x k , y k ) (x_k, y_k) (xk,yk) 为关键点坐标。
- 质心与关键点中心的连线方向即为主方向:
优点
- 计算简单,效率高。
- 适用于快速检测和特征提取任务。
实现细节
在实际实现中,可以优化计算方式,例如对窗口内的灰度值进行积分,提高计算效率。
2.3 特征点角度计算
特征点角度的计算是实现旋转不变性的核心。ORB 利用灰度质心法为每个关键点分配一个方向角度,具体实现如下:
步骤
-
提取窗口:以关键点为中心,取固定大小的图像窗口。
-
计算灰度梯度:
-
利用 Sobel 算子计算窗口内每个像素的梯度方向和幅值。
-
梯度幅值 G G G 和方向 θ \theta θ 分别为:
G = G x 2 + G y 2 , θ = arctan G y G x G = \sqrt{G_x^2 + G_y^2}, \quad \theta = \arctan{\frac{G_y}{G_x}} G=Gx2+Gy2,θ=arctanGxGy
-
-
统计方向分布:
- 将窗口划分为多个扇形区域,统计每个区域的梯度幅值加权方向。
- 主方向为加权梯度方向的最大值。
细节优化
- 噪声抑制:对梯度方向的噪声进行平滑处理,增强方向计算的鲁棒性。
- 多尺度处理:ORB 支持多尺度关键点检测,确保特征点在不同尺度下保持一致。
2.4 金字塔的计算
ORB 算法通过构建图像金字塔实现多尺度特征提取。
金字塔构建
- 金字塔结构:将原始图像逐步缩小,形成一系列分辨率递减的图像层。
- 每层操作:
- 对每层图像分别提取关键点并计算描述子。
- 不同层次的关键点具有不同的尺度,便于处理图像尺度变化。
细节优化
- 层间缩放因子:ORB 通常设置缩放因子为 1.2 1.2 1.2 ,以平衡计算效率和特征覆盖范围。
- 关键点归一化:将每层关键点的坐标映射到原始图像坐标系中,便于匹配。
2.5 特征点数量的分配计算
为了避免关键点分布不均,ORB 使用网格划分的方法对关键点数量进行分配。
步骤
- 图像网格划分:
- 将图像划分为固定大小的网格。
- 每个网格单独进行关键点检测。
- 数量分配:
- 对每个网格设置关键点数量上限。
- 优先保留响应值最大的关键点。
优点
- 确保特征点均匀分布,避免集中在高响应区域。
- 提高匹配的稳定性和鲁棒性。
2.6 使用四叉树均匀分布特征点
在ORB特征点提取中,确保特征点在图像中均匀分布至关重要。特征点若过于集中在某些区域,会导致视觉信息冗余且影响匹配效果。ORB 算法通过四叉树分割机制来优化特征点的空间分布。
原理分析
四叉树是一种递归的空间划分算法,将图像划分为多个区域,每个区域根据特征点的数量进一步划分。四叉树的基本步骤如下:
- 初始分割:将图像划分为四个区域。
- 递归划分:对于特征点过多的区域,再次划分为更小的子区域。
- 数量限制:对每个子区域的特征点数量进行限制,优先保留响应值高的点。
具体步骤
- 初始特征点检测:使用FAST算法在整个图像上检测初始特征点。
- 四叉树分割:
- 将图像划分为四个等面积的区域。
- 统计每个区域内的特征点数量。
- 递归处理:
- 若某个区域内的特征点数量超过设定阈值,则对该区域进一步分割。
- 递归进行,直到所有区域内的特征点数量小于或等于阈值。
- 保留最优点:
- 对于每个区域,根据特征点的响应值优先保留最优的若干个点。
- 剔除低响应值的特征点。
优点
- 均匀分布:通过递归分割,确保特征点在图像上分布均匀。
- 鲁棒性增强:避免高特征密度区域过度影响特征匹配效果。
实际优化
- 阈值选择:分割阈值需要根据图像分辨率和应用场景调整,确保计算效率与分布均衡之间的平衡。
- 边界处理:在处理靠近图像边界的区域时,需要考虑特征点检测的完整性。
应用效果
- 图像匹配:在特征点均匀分布的条件下,匹配精度和成功率更高。
- 地图构建:对于SLAM场景,均匀分布的特征点有助于生成更稳定的地图。
2.7 高斯处理
在特征点检测和描述过程中,ORB算法引入了高斯滤波和尺度空间处理,以提高特征点的稳定性和准确性。
高斯滤波的作用
-
噪声抑制:
-
高斯滤波通过平滑图像,减少噪声对特征点检测的干扰。
-
公式如下:
G ( x , y ) = 1 2 π σ 2 e − x 2 + y 2 2 σ 2 G(x, y) = \frac{1}{2\pi\sigma^2} e^{-\frac{x^2 + y^2}{2\sigma^2}} G(x,y)=2πσ21e−2σ2x2+y2
其中, σ \sigma σ 为标准差,决定滤波器的平滑程度。
-
-
特征增强:
- 高斯滤波可以突出关键点周围的梯度变化,增强角点检测的效果。
高斯金字塔
- 多尺度特征点检测:
- ORB通过构建高斯金字塔来实现多尺度特征点提取。
- 原始图像通过一系列高斯滤波处理,形成不同分辨率的图像层。
- 层间缩放:
- 每一层之间的分辨率缩放因子通常设置为 1.2 1.2 1.2 。
- 每一层单独检测特征点和计算描述子,确保算法对尺度变化具有鲁棒性。
具体步骤
- 图像金字塔构建:
- 使用高斯滤波器对图像进行多次卷积处理,生成一系列平滑图像。
- 关键点检测:
- 在每一层金字塔图像中检测关键点,并分别计算特征点描述子。
- 归一化处理:
- 将金字塔不同层次的特征点映射到原始图像的坐标系中。
优化细节
- 滤波器核大小:
- 通常选择 3 × 3 3 \times 3 3×3 或 5 × 5 5 \times 5 5×5 的滤波器核,既保证计算效率,又能有效平滑噪声。
- 高斯标准差选择:
- σ \sigma σ 值根据图像分辨率和特征点密度动态调整。
优点
- 提高特征点的稳定性,减少噪声影响。
- 确保特征点在多尺度环境下具有一致性。
2.8 特征点去噪
在ORB特征提取过程中,特征点去噪是关键步骤,用于提高特征点的可靠性与稳定性。噪声特征点可能导致匹配错误、轨迹漂移以及计算资源浪费。因此,特征点去噪是优化算法性能的重要环节。
2.8.1 噪声特征点的来源
-
图像噪声:
- 图像噪声主要来自摄像头的传感器缺陷或外界环境影响(如弱光条件、运动模糊等)。
- 噪声导致某些像素点呈现异常梯度变化,从而被误判为特征点。
-
重复检测:
- 在特征点检测过程中,不同的检测窗口可能会覆盖同一区域,从而导致重复检测。
-
特征点干扰:
- 特征点在平坦区域、光滑表面或阴影区域中可能出现误检测。
2.8.2 去噪方法
1. 特征点筛选
- 计算特征点的响应值(例如Harris角点的角点响应值或FAST角点的强度值)。
- 设定阈值,保留高响应值的特征点,剔除低响应值点。
2. 非极大值抑制
- 在特征点检测完成后,在其邻域范围内,只保留局部响应值最大的特征点,剔除其他点。
- 这可以有效减少重复检测,同时突出最显著的特征点。
3. 动态一致性校验
- 对于视频序列中的特征点,检查特征点在时间维度上的一致性。
- 剔除随时间漂移或不稳定的特征点,提高轨迹连续性。
4. 图像金字塔结合
- 在多尺度环境中,通过高斯金字塔筛选多层特征点,并选出在多层一致性最高的特征点,剔除噪声点。
5. 去掉边界特征点
- 特征点位于图像边界时可能无法提供完整信息,直接剔除边界附近的特征点。
2.8.3 应用效果
-
提高匹配精度:
- 去噪后的特征点更稳定可靠,从而减少特征点匹配的错误率。
-
提升计算效率:
- 减少无效特征点,降低描述子计算和匹配的复杂度。
-
增强鲁棒性:
- 过滤掉不稳定或噪声点,优化特征点在动态环境中的表现。
2.9 近点和远点
特征点根据其所在场景的深度,可以分为近点和远点。两者在特征点提取、描述以及匹配中表现出不同的特性。对近点和远点的分类及处理,是ORB算法在不同场景中取得鲁棒性能的关键。
2.9.1 定义及意义
-
近点:
- 近点是摄像机与场景中距离较近的特征点。
- 这些点通常具有更高的分辨率和更精确的特征描述,适合用于局部特征匹配。
-
远点:
- 远点是摄像机与场景中距离较远的特征点。
- 远点因视差小,适合用于全局场景描述与位姿估计。
2.9.2 处理方法
1. 深度计算
- 使用双目相机或视觉-惯性传感器,通过三角测量计算特征点的深度值。
- 根据深度阈值划分近点和远点。
2. 特征点分组
- 将特征点根据深度分为近点组和远点组。
- 对两组特征点分别计算描述子和匹配对,避免不同深度点的干扰。
3. 加权匹配
- 在匹配过程中,为近点和远点赋予不同的权重。
- 通常对远点赋予更高权重,因其具有更高的稳定性。
4. 特征点跟踪
- 对近点采用局部跟踪方法(如KLT光流),确保局部匹配精度。
- 对远点采用全局优化方法,提升场景的整体定位精度。
2.9.3 挑战及解决方法
-
挑战
- 远点的纹理信息较少,可能难以稳定检测。
- 近点易受遮挡影响,导致跟踪失败。
-
解决方法
- 对于远点,采用尺度不变特征描述(如ORB特征)。
- 对于近点,引入运动模型预测点位,减少遮挡影响。
2.9.4 应用效果
-
多视图几何:
- 通过结合近点和远点,可以提高多视图几何的准确性。
- 近点用于短距离跟踪,远点用于全局定位。
-
SLAM性能提升:
- 在ORB-SLAM等系统中,近点用于特征点初始化,远点用于长期稳定跟踪。
-
鲁棒性增强:
- 近点和远点互为补充,在不同深度范围内优化了系统性能。
2.10 特征点去畸变
特征点去畸变是ORB算法处理图像特征点的重要步骤之一,尤其是在使用广角镜头或鱼眼镜头的情况下,摄像头的镜头畸变可能会导致特征点位置的偏移,进而影响特征匹配和SLAM系统的精度。去畸变过程旨在校正图像特征点的位置,使其能反映真实的空间关系。
2.10.1 畸变的来源与影响
-
畸变的来源
- 径向畸变 (Radial Distortion):由镜头的球面形状引起,导致图像中心的特征点向外或向内偏移,表现为桶形畸变或枕形畸变。
- 切向畸变 (Tangential Distortion):因镜头和图像传感器未完全对齐引起,导致特征点在水平方向和垂直方向上的错位。
-
畸变对特征点的影响
- 位置偏移:特征点的位置与实际场景中对应的点位置不一致,导致特征匹配精度下降。
- 尺度失真:特征点的尺度在畸变区域发生变化,影响描述子计算。
- 跟踪漂移:由于畸变,特征点在连续帧中的运动轨迹不符合真实的运动模型,导致SLAM系统的漂移或误差增加。
2.10.2 去畸变的数学模型
为了校正畸变,常用的模型是基于镜头标定的畸变校正方法。以下是典型的去畸变数学模型:
-
径向畸变校正公式
给定畸变点的归一化坐标 ( x d , y d ) (x_d, y_d) (xd,yd) ,校正后的坐标为 ( x u , y u ) (x_u, y_u) (xu,yu) 。x u = x d ⋅ ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) x_u = x_d \cdot (1 + k_1 r^2 + k_2 r^4 + k_3 r^6) xu=xd⋅(1+k1r2+k2r4+k3r6)
y u = y d ⋅ ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) y_u = y_d \cdot (1 + k_1 r^2 + k_2 r^4 + k_3 r^6) yu=yd⋅(1+k1r2+k2r4+k3r6)
其中:
- r 2 = x d 2 + y d 2 r^2 = x_d^2 + y_d^2 r2=xd2+yd2 是点到图像中心的径向距离平方。
- k 1 , k 2 , k 3 k_1, k_2, k_3 k1,k2,k3 是镜头的径向畸变参数。
-
切向畸变校正公式
x u = x d + [ 2 p 1 x d y d + p 2 ( r 2 + 2 x d 2 ) ] x_u = x_d + [2p_1x_dy_d + p_2(r^2 + 2x_d^2)] xu=xd+[2p1xdyd+p2(r2+2xd2)]
y u = y d + [ p 1 ( r 2 + 2 y d 2 ) + 2 p 2 x d y d ] y_u = y_d + [p_1(r^2 + 2y_d^2) + 2p_2x_dy_d] yu=yd+[p1(r2+2yd2)+2p2xdyd]
其中:
- p 1 , p 2 p_1, p_2 p1,p2 是切向畸变参数。
-
整体校正公式 综合上述径向和切向畸变的影响,将畸变点坐标映射到去畸变后的坐标。
2.10.3 去畸变的实现步骤
1. 摄像机标定
- 使用标定工具(如OpenCV的
cv::calibrateCamera
)获取镜头的畸变参数,包括径向畸变系数 k 1 , k 2 , k 3 k_1, k_2, k_3 k1,k2,k3 和切向畸变系数 p 1 , p 2 p_1, p_2 p1,p2 。 - 标定的输入数据通常是网格化棋盘图像。
2. 畸变点坐标计算
- 获取特征点的像素坐标 ( u , v ) (u, v) (u,v) 。
- 根据摄像机内参矩阵,将像素坐标归一化为图像平面坐标。
3. 应用畸变校正公式
- 将归一化坐标代入径向和切向畸变校正公式,计算校正后的坐标。
4. 映射到像素坐标
- 根据摄像机内参矩阵,将去畸变后的坐标从归一化平面映射回像素坐标。
5. 特征点更新
- 用去畸变后的坐标替换原始特征点坐标,生成校正后的特征点。
2.10.4 去畸变的优化与应用
-
优化过程
- 在SLAM系统中,去畸变过程通常嵌入到特征点提取阶段,以减少后续计算的误差传播。
- 可以在初始化阶段预处理整幅图像,生成无畸变图像,用于特征点提取和匹配。
-
实时性处理
- 对于实时SLAM系统,直接对特征点去畸变比整幅图像校正更加高效。
-
与其他模块的结合
- 去畸变后的特征点可直接用于描述子计算、匹配、三角测量及位姿估计等。
2.10.5 去畸变的效果
-
提高匹配精度
- 去畸变后,特征点的位置与真实点更加一致,特征点匹配的正确率明显提升。
-
增强位姿估计的准确性
- 特征点去畸变后,位姿估计的鲁棒性和精度得到改善,尤其是在动态环境或高视差场景中。
-
减小误差累积
- 校正特征点的畸变可以有效减少误差在优化过程中的累积,提高整个SLAM系统的稳定性。
2.10.6 案例与实践
-
使用OpenCV实现特征点去畸变
- OpenCV 提供了丰富的去畸变函数,如
cv::undistortPoints
,可直接将畸变点校正为去畸变点。
- OpenCV 提供了丰富的去畸变函数,如
-
在ORB-SLAM2中的应用
- 在ORB-SLAM2中,去畸变的逻辑通常集成在初始化阶段,避免畸变对整个系统的影响。
去畸变是特征点提取过程中不可或缺的一环,为特征点的后续处理奠定了坚实基础,确保了整个视觉SLAM系统的精度与鲁棒性。