SIFT(Scale-Invariant Feature Transform)是图像特征检测算法,在尺度、旋转、光照变化下保持稳定,适用于目标检测、图像拼接、物体识别。
算法步骤
SIFT 包含关键点检测、定位、方向分配、描述符生成四个步骤。
关键点检测(尺度空间极值检测)
目标:在不同尺度下寻找稳定的关键点。
- 使用高斯金字塔构造尺度空间
- 计算差分高斯(DoG)找到不同尺度上的关键点
- 在空间(x, y)和尺度(σ)方向寻找局部极值点(26邻域)
步骤:
- 构造高斯金字塔:不同 σ 高斯模糊 + 下采样
- 计算 DoG:相邻尺度之差,突出边缘和特征点
- 寻找极值点:在 26 邻域中找出局部最大/最小值
关键点精确定位
目标:消除不稳定特征点(边缘点、噪声点)。
- 去除低对比度点:泰勒展开近似求解精确位置,剔除 |DoG| 低于阈值的点
- 去除边缘响应:Hessian 矩阵特征值分析,剔除边缘响应点
方向分配
目标:确保特征点在旋转变化下仍能正确匹配。
- 计算关键点邻域的梯度方向和幅值
- 计算梯度方向直方图(36 个方向)
- 峰值方向赋予该关键点,实现旋转不变性
生成特征描述符
目标:构造 128 维特征向量,对光照、尺度、旋转具有鲁棒性。
- 取 16×16 邻域窗口,分成 4×4=16 个子区域
- 计算每个子区域的 8 方向梯度直方图(8×16=128 维)
- 归一化,确保对光照变化不敏感
特征匹配
| 方法 | 说明 |
|---|---|
| BFMatcher | 计算欧式距离,找最近邻匹配 |
| FLANN | 快速近似最近邻搜索,适合大规模匹配 |
| KNN + Lowe’s 比值测试 | 最佳匹配距离 < 0.75 × 次佳匹配距离则接受 |
特点
| 优点 | 缺点 |
|---|---|
| 尺度不变性 | 计算量大,不适用实时处理 |
| 旋转不变性 | 仿射变换鲁棒性一般 |
| 光照鲁棒性 | 曾受专利保护(2020 年解禁) |
| 特征稳定 |
适用场景
- 图像拼接(全景图)
- 目标检测
- 机器人导航
- 医学影像配准
实时性要求高时可用 ORB 代替,计算更快但精度略低。
总结
| 步骤 | 关键操作 | 作用 |
|---|---|---|
| 关键点检测 | DoG + 高斯金字塔 | 选择尺度空间中的显著点 |
| 关键点定位 | 去除低对比度和边缘点 | 只保留稳定的关键点 |
| 方向分配 | 梯度直方图 | 实现旋转不变性 |
| 特征描述符 | 128 维梯度直方图 | 用于特征匹配 |
张芷铭的个人博客
Comments