在图像处理领域亦或是计算机视觉中,首先我们需要先理解几个名词:
什么是尺度不变?
在实际场景中,同一物体可能出现在不同距离(如远处的山和近处的树),导致其在图像中的尺度不同,也引出了多尺度的概念。算法检测到的特征在图像缩放(放大或缩小)后仍能被正确识别和匹配,即尺度不变性。
什么是旋转不变?
物体在现实中的朝向可能任意(如手机横屏/竖屏拍摄同一物体)。算法检测到的特征在图像旋转后仍能被正确识别和匹配,即旋转不变性。
什么是角点:
角点是图像中具有显著变化的点,通常位于边缘的交汇处。它们在计算机视觉中扮演着重要角色,是许多任务的基础特征。通过角点检测算法(如Harris、FAST等),可以有效地提取和利用这些特征。在数学上通过梯度变化和自相关矩阵进行判断。
什么是斑点:
在图像处理和计算机视觉中,斑点(Blob)是指图像中与周围区域在亮度、颜色或纹理上存在显著差异的连通区域。斑点的检测通常基于二阶导数或高斯滤波响应,核心思想是寻找局部极值区域。
斑点 vs. 角点 vs. 边缘
特征类型 | 定义 | 数学表征 | 示例场景 |
---|---|---|---|
斑点 | 闭合的均匀区域,周围强度突变 | 二阶导数极值(LoG/DoG) | 医学图像中的肿瘤 |
角点 | 多方向强度变化的交点 | 一阶导数的双方向极值 | 棋盘格的交叉点 |
边缘 | 单方向强度突变的线状结构 | 一阶导数的极值 | 物体的轮廓线 |
什么是图像金字塔?
是一种多尺度表示方法,通过对图像进行多次下采样(缩小)或上采样(放大),生成一系列分辨率逐渐降低或升高的图像集合。
SIFT(尺度不变特征变换)是一种用于图像处理的特征检测与描述算法,具有尺度、旋转、光照不变性,广泛应用于图像匹配、物体识别等领域。其核心步骤分为四个阶段:
1. 尺度空间的极值检测:
算法通过构建高斯金字塔并计算高斯差分(DoG)来模拟不同尺度下的图像模糊效果,在DoG空间中检测局部极值点作为候选关键点。
2. 关键点定位:
在不同尺寸空间下可能找出过多的关键点,有些关键点可能相对不易辨识或易受噪声干扰。通过泰勒展开插值修正位置和尺度,并剔除低对比度点与边缘响应点以保留稳定的关键点,借此消除位于边上或是易受噪声干扰的关键点。
3. 方向分配:
为每个关键点分配主方向:在其邻域内计算像素梯度幅值和方向,生成方向直方图,取峰值作为主方向以实现旋转不变性,若存在次峰则分配多个方向以增强鲁棒性。
4. 生成关键点描述子:
围绕关键点生成描述子:将邻域旋转至主方向后划分为4×4子区域,每个子区域统计8个方向的梯度直方图,形成128维向量,并通过归一化和截断抑制光照变化的影响。
具体可以参考这篇博客:https://www.cnblogs.com/liuchaogege/p/5155739.html
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通过算法优化在速度与性能间取得平衡,成为传统特征提取方法中的经典选择,后续算法(如ORB)进一步结合二进制描述子,推动实时性提升。
FAST 是一种高效的关键点检测算法,专注于在实时系统中快速识别图像中的角点(Corner)。其核心思想是通过局部像素强度的快速比对筛选候选点,牺牲部分鲁棒性以换取极高的计算速度。具体流程如下:
首先,以候选像素 p 为中心,在其周围半径为3像素的圆形邻域(共16个像素)中选择一组固定点(通常取12或9个点),通过阈值 T 判断这些点与中心点的强度差异。若邻域中存在连续 N 个点(通常 N=9)的强度均显著高于或低于中心点(即 I邻域点>Ip+T 或 I邻域点 特点与局限性: ORB 是对 FAST 和 BRIEF 算法的融合与改进,通过引入方向性与旋转不变性,解决了 FAST 缺乏描述能力及 BRIEF 对旋转敏感的问题,成为轻量级特征提取的经典方法。其流程分为以下阶段: 特点与应用: 具体可以参考以下博客: 可以看出: BruteForce Matcher特征匹配(BFMatcher总是尝试所有可能的匹配,从而使得它总能够找到最佳匹配,这也是Brute Force(暴力法)的原始含义。) 从输出的结果来看,orb的效果最好。感兴趣的话还可以用其他图片看看效果,pic文件夹还提供其他两组比较的图片。 计算速度: ORB>>SURF>>SIFT(各差一个量级) 旋转鲁棒性:SURF>ORB~SIFT(表示差不多) 模糊鲁棒性:SURF>ORB~SIFT 尺度变换鲁棒性: SURF>SIFT>ORB(ORB并不具备尺度变换性)
ORB(Oriented FAST and Rotated BRIEF)
FAST 与 ORB 的关系
总结
可视化效果
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 size of kp: 59, after filtering: 20
surf size of kp: 197, after filtering: 35
orb size of kp: 390, after filtering: 47
总结:
算法
关键点类型
强度变化形式
典型应用场景
SIFT
边缘/斑点
一阶或二阶导数极值
高精度匹配、三维重建
SURF
斑点
二阶导数极值(Hessian)
实时性要求较高的匹配
FAST
角点
局部强度突变
实时跟踪、SLAM
ORB
角点(带方向)
局部强度突变 + 强度分布统计
嵌入式设备、移动端应用