SIFT、SURF、FAST、ORB 特征提取算法深度解析
前言
在图像处理领域亦或是计算机视觉中,首先我们需要先理解几个名词:
什么是尺度不变?
在实际场景中,同一物体可能出现在不同距离(如远处的山和近处的树),导致其在图像中的尺度不同,也引出了多尺度的概念。算法检测到的特征在图像缩放(放大或缩小)后仍能被正确识别和匹配,即尺度不变性。
什么是旋转不变?
物体在现实中的朝向可能任意(如手机横屏/竖屏拍摄同一物体)。算法检测到的特征在图像旋转后仍能被正确识别和匹配,即旋转不变性。
什么是角点:
角点是图像中具有显著变化的点,通常位于边缘的交汇处。它们在计算机视觉中扮演着重要角色,是许多任务的基础特征。通过角点检测算法(如Harris、FAST等),可以有效地提取和利用这些特征。在数学上通过梯度变化和自相关矩阵进行判断。
什么是斑点:
在图像处理和计算机视觉中,斑点(Blob)是指图像中与周围区域在亮度、颜色或纹理上存在显著差异的连通区域。斑点的检测通常基于二阶导数或高斯滤波响应,核心思想是寻找局部极值区域。
斑点 vs. 角点 vs. 边缘
特征类型 | 定义 | 数学表征 | 示例场景 |
---|---|---|---|
斑点 | 闭合的均匀区域,周围强度突变 | 二阶导数极值(LoG/DoG) | 医学图像中的肿瘤 |
角点 | 多方向强度变化的交点 | 一阶导数的双方向极值 | 棋盘格的交叉点 |
边缘 | 单方向强度突变的线状结构 | 一阶导数的极值 | 物体的轮廓线 |
什么是图像金字塔?
是一种多尺度表示方法,通过对图像进行多次下采样(缩小)或上采样(放大),生成一系列分辨率逐渐降低或升高的图像集合。
SIFT(尺度不变特征变换)
SIFT(尺度不变特征变换)是一种用于图像处理的特征检测与描述算法,具有尺度、旋转、光照不变性,广泛应用于图像匹配、物体识别等领域。其核心步骤分为四个阶段:
1. 尺度空间的极值检测:
算法通过构建高斯金字塔并计算高斯差分(DoG)来模拟不同尺度下的图像模糊效果,在DoG空间中检测局部极值点作为候选关键点。
2. 关键点定位:
在不同尺寸空间下可能找出过多的关键点,有些关键点可能相对不易辨识或易受噪声干扰。通过泰勒展开插值修正位置和尺度,并剔除低对比度点与边缘响应点以保留稳定的关键点,借此消除位于边上或是易受噪声干扰的关键点。
3. 方向分配:
为每个关键点分配主方向:在其邻域内计算像素梯度幅值和方向,生成方向直方图,取峰值作为主方向以实现旋转不变性,若存在次峰则分配多个方向以增强鲁棒性。
4. 生成关键点描述子:
围绕关键点生成描述子:将邻域旋转至主方向后划分为4×4子区域,每个子区域统计8个方向的梯度直方图,形成128维向量,并通过归一化和截断抑制光照变化的影响。
具体可以参考这篇博客:https://www.cnblogs.com/liuchaogege/p/5155739.html
SURF**(加速稳健特征)**
SURF(Speeded-Up Robust Features)是一种高效且鲁棒的特征检测与描述算法,旨在解决SIFT算法计算复杂度高的问题,同时保持对尺度、旋转和光照变化的鲁棒性。以下是SURF的核心思想与流程:
1. 特征点检测: SURF利用积分图像加速计算,通过近似Hessian矩阵检测关键点:在图像的多尺度空间中,采用不同尺寸的盒式滤波器替代传统高斯卷积,直接调整滤波器大小而非降采样图像来构建尺度空间,显著减少计算量。 对于每个像素点,计算其Hessian矩阵的行列式值(近似为det(H)=LxxLyy−(0.9Lxy)2),若该值在三维邻域(空间与尺度)内为极值,则标记为候选关键点。
**2.关键点方向分配:**使用Haar小波响应来确定关键点的主方向:在关键点周围半径为6σ的圆形区域内,计算水平和垂直方向的Haar小波响应,用高斯加权函数对这些响应值进行加权。将360°划分为多个扇形区域,计算各扇区内响应向量的总和,最后选择最长向量的方向作为主方向,从而实现旋转不变性。
3. 特征描述子生成: 算法首先将关键点邻域旋转至主方向对齐,确保坐标系与主方向一致;接着将邻域划分为4×4的子区域,每个子区域内统计水平与垂直Haar小波响应的值及其绝对值之和,形成4维局部特征向量,最终将所有子区域的特征串联为64维或128维描述子(SURF-64或SURF-128)。
**4. 描述子归一化:**对描述子进行归一化处理以消除光照变化影响,并通过阈值截断(如限制最大分量值为0.2)进一步提升鲁棒性。
具体可以参考这篇博客:https://www.cnblogs.com/zyly/p/9531907.html
SURF vs. SIFT 核心差异
- 效率提升:SURF利用积分图像和盒式滤波器,计算速度比SIFT快数倍,适用于实时应用。
- 尺度空间构建:SIFT通过图像降采样生成多Octave,而SURF直接调整滤波器尺寸,减少图像重建开销。
- 方向分配:SURF使用Haar小波响应统计方向,SIFT基于梯度直方图。
- 描述子维度:SURF默认64维(可扩展至128维),低于SIFT的128维,但通过优化统计方式保持区分性。
应用与局限性
- 优势:实时性高,对模糊、旋转和光照变化鲁棒,适用于移动端或实时匹配场景(如SLAM、目标跟踪)。
- 局限性:对视角变换和非刚性形变的适应性弱于SIFT,高纹理重复场景易误匹配。
SURF通过算法优化在速度与性能间取得平衡,成为传统特征提取方法中的经典选择,后续算法(如ORB)进一步结合二进制描述子,推动实时性提升。
FAST(Features from Accelerated Segment Test)
FAST 是一种高效的关键点检测算法,专注于在实时系统中快速识别图像中的角点(Corner)。其核心思想是通过局部像素强度的快速比对筛选候选点,牺牲部分鲁棒性以换取极高的计算速度。具体流程如下:
首先,以候选像素 p 为中心,在其周围半径为3像素的圆形邻域(共16个像素)中选择一组固定点(通常取12或9个点),通过阈值 T 判断这些点与中心点的强度差异。若邻域中存在连续 N 个点(通常 N=9)的强度均显著高于或低于中心点(即 I邻域点>Ip+T 或 I邻域点<Ip-T),则判定 p 为候选角点。为进一步优化结果,FAST 采用非极大值抑制(Non-Maximum Suppression)去除响应较弱的重复点,保留最具显著性的角点。
特点与局限性:
- 优势:计算复杂度极低,适合实时应用(如视频跟踪、移动端SLAM)。
- 缺点:仅检测角点位置,不提供尺度与方向信息,且对噪声敏感,需依赖后续算法(如ORB)补全描述子。
ORB(Oriented FAST and Rotated BRIEF)
ORB 是对 FAST 和 BRIEF 算法的融合与改进,通过引入方向性与旋转不变性,解决了 FAST 缺乏描述能力及 BRIEF 对旋转敏感的问题,成为轻量级特征提取的经典方法。其流程分为以下阶段:
- 关键点检测(oFAST):在 FAST 检测的基础上,通过灰度质心法(Intensity Centroid)为每个关键点分配主方向。具体而言,计算关键点邻域内像素的灰度质心(即加权平均坐标),将质心到关键点的向量方向作为主方向,实现旋转不变性。此外,ORB 通过构建图像金字塔检测多尺度关键点,支持尺度不变性。
- 特征描述(rBRIEF):传统的 BRIEF 描述子通过随机选取关键点邻域内的像素对进行强度比较,生成二进制字符串(如256位),但直接应用会因旋转导致匹配失效。ORB 改进为 旋转鲁棒的BRIEF(rBRIEF):根据关键点的主方向旋转像素对的采样位置,确保描述子与方向对齐。同时,ORB 通过统计学习优化像素对的选择,使得生成的二进制描述子具有高区分度和低相关性。
- 匹配优化:ORB 描述子通过汉明距离(Hamming Distance)进行快速匹配,利用二进制异或操作加速计算,显著提升匹配效率。
特点与应用:
- 效率:全程基于二进制操作,计算速度远超 SIFT/SURF,适用于嵌入式设备或实时场景(如无人机导航、AR)。
- 鲁棒性:通过方向补偿和尺度金字塔,支持旋转与尺度不变性,但对透视形变和光照剧烈变化的适应性较弱。
- 典型应用:ORB-SLAM、移动端图像匹配、低功耗场景下的物体识别。
具体可以参考以下博客:
- FAST特征点检测:https://www.cnblogs.com/ronny/p/4078710.html
- BRIEF特征描述子:https://www.cnblogs.com/ronny/p/4081362.html
FAST 与 ORB 的关系
- FAST 是纯粹的关键点检测器,仅定位角点位置。
- ORB 是完整的特征提取框架,包含检测(oFAST)与描述(rBRIEF)两部分,本质是 FAST + 方向/尺度扩展 + 旋转鲁棒的二进制描述子。
总结
- FAST 以"快"为核心,牺牲描述能力换取毫秒级检测速度,适用于对实时性要求极高的场景。
- ORB 在 FAST 基础上融合方向、尺度与二进制描述,平衡速度与鲁棒性,成为轻量级特征提取的标杆算法,尤其适合资源受限的实时系统。
- 局限性:二者均依赖局部强度分布,对模糊、大视角变化或非刚性形变的处理能力有限,在此类场景中仍需依赖深度学习特征(如SuperPoint、D2-Net)。
可视化效果
sift len of des: 458, size of des: 128
surf len of des: 1785, size of des: 64
orb len of des: 500, size of des: 32
可以看出:
- sift虽然提取的特征点最少,但是效果最好。
- sift提取的特征点维度是128维,surf是64维,orb是32维。
BruteForce Matcher特征匹配(BFMatcher总是尝试所有可能的匹配,从而使得它总能够找到最佳匹配,这也是Brute Force(暴力法)的原始含义。)
sift size of kp: 59, after filtering: 20
surf size of kp: 197, after filtering: 35
orb size of kp: 390, after filtering: 47
从输出的结果来看,orb的效果最好。感兴趣的话还可以用其他图片看看效果,pic文件夹还提供其他两组比较的图片。
总结:
计算速度: ORB>>SURF>>SIFT(各差一个量级)
旋转鲁棒性:SURF>ORB~SIFT(表示差不多)
模糊鲁棒性:SURF>ORB~SIFT
尺度变换鲁棒性: SURF>SIFT>ORB(ORB并不具备尺度变换性)
算法 | 关键点类型 | 强度变化形式 | 典型应用场景 |
---|---|---|---|
SIFT | 边缘/斑点 | 一阶或二阶导数极值 | 高精度匹配、三维重建 |
SURF | 斑点 | 二阶导数极值(Hessian) | 实时性要求较高的匹配 |
FAST | 角点 | 局部强度突变 | 实时跟踪、SLAM |
ORB | 角点(带方向) | 局部强度突变 + 强度分布统计 | 嵌入式设备、移动端应用 |