Contents — find the section you need
要判断图像中的两个位置是否显示相同的内容,比较一些易于重复找到的小线索比比较整幅图像更有效。选择这些线索的过程就是特征检测。它是任何需要图像间对应关系的过程的入口点,例如相机运动估计、全景拼接、3D重建、图像检索和视觉检查。本文将“在哪里选择”和“如何匹配选定的点”分开,并从公式和实现两个角度梳理了经典算法背后的思路。
Intel RealSense D435图片:Intel RealSense 深度摄像头 D435 (Marc Auledas, CC BY-SA 4.0), Wikimedia Commons。此为代表性摄像头,并非仅用于特征检测的设备。
30 秒总结
-
特征点不应放置在平坦的墙面上,而应放置在多个方向上强度变化较大的拐角处,或放置在亮度与周围环境不同的斑点上。在图像发生微小变化后,特征点仍能在同一位置被重新检测到(可重复性)才是关键。
-
角点检测捕捉局部梯度的双向性;斑点检测捕捉特定尺度下局部亮度不同的区域。DoG算法通过比较多幅模糊图像的差异,快速搜索斑点候选区域。
-
FAST算法仅比较圆周上的像素即可快速判断角点。ORB算法结合了FAST算法、图像金字塔、方向估计和旋转的BRIEF二值描述符,适用于实时应用。
-
SIFT算法通过DoG算法选择尺度,使用梯度方向直方图对方向进行归一化,并构建一个128维描述符。虽然计算和内存成本较高,但它对尺度和旋转变化具有鲁棒性。
-
仅靠检测无法确定对应关系。描述符距离、比率测试和基于RANSAC的几何验证必须作为一个整体流程进行评估。近年来,基于学习的检测和匹配方法,例如SuperPoint、ALIKED和LightGlue,也已变得实用。
什么是特征点——并非“显眼的点”,而是“可以再次找到的点”
设像素坐标为 \mathbf{x}=(x,y)^\mathsf{T},图像为 I(\mathbf{x})。特征点是指即使经过轻微的平移、旋转或缩放,其相邻区域仍能稳定地被检测为同一物理位置,并且可以通过周围图案与其他点区分开来的位置。前者称为检测器,而将后者转换为数值向量或比特串的任何机制称为描述符。
这两者是不同的。FAST 本质上是一个检测器;BRIEF 是一个描述符;ORB 是一种结合了两者的机制。SIFT 是 DoG 检测器和梯度直方图描述符的组合。仅比较名称容易造成混淆,因此从现在开始,我们始终将其视为三个阶段:“选择点”、“表示周围环境”和“匹配点”。
图:由 Duskcoil 创建。系统质量并非取决于检测数量,而是取决于几何一致性匹配的数量。
角点:选择双向变化的位置
最直观的特征是角点。将图像块 W 移动微小位移 \mathbf{u}=(u,v)^\mathsf{T} 时产生的明显变化记为 SSD(平方差和):
在一阶泰勒近似下,局部结构(二阶矩)矩阵 \mathbf{M} 变为:
其中 I_x,I_y 是图像梯度,w 是权重,例如高斯窗。令 \mathbf{M} 的特征值由 \lambda_1,\lambda_2 表示;一个点是指即使较小的特征值也较大的角点。在边缘处,梯度仅在一个方向上较大,因此只有一个特征值保持较小。在平坦区域,两个特征值都保持较小。Harris 检测器并非在每个像素上显式求解特征值;而是选择以下响应值的局部最大值:
k 通常在 0.04–0.06 左右。Harris 对旋转具有较强的鲁棒性,但由于它通过固定大小的窗口进行观察,因此当目标显著放大或缩小时,它没有机制选择相同的点。Shi-Tomasi 的 \min(\lambda_1,\lambda_2) 也被广泛用作选择适合跟踪的角点的实用标准。
斑点:即使没有角点,“斑点”也是一个有用的线索
仅凭角点不足以充分判断。拾取圆形标志、斑点、暗洞或明亮反射的中心。因此,斑点检测器在一定尺度上寻找相对于周围环境的局部亮度不同的区域。用高斯函数G(\mathbf{x};\sigma)平滑后的尺度空间可表示为:
其中*表示卷积,\sigma表示“我们正在观察的大小”。高斯拉普拉斯算子(LoG)的尺度归一化响应,
对明亮背景上的暗圆圈或暗背景上的亮圆圈有强烈的响应。不仅在位置上,而且在包含\sigma方向的三维(x,y,\sigma)空间中寻找极值,可以同时确定斑点的中心和特征大小。您也可以将其解释为对应于半径约为\sigma的圆形斑点的尺度。 \sqrt{2}\sigma
LoG 是一个很好的想法,但计算每个尺度上的精确二阶导数成本很高。这种近似和加速方法催生了 DoG,并由此发展出了 SIFT。
DoG:从模糊差分中寻找尺度不变的候选像素
高斯差分 (DoG) 是两个相邻模糊图像之间的差分:
其中 k>1 是相邻尺度之间的比率。在相差一个常数因子的情况下,DoG 近似于尺度归一化的 LoG,因此只需额外进行一次卷积即可搜索斑点候选像素。在实现中,通过逐步模糊图像构建高斯金字塔,并将每个 DoG 像素与其相同尺度上的 8 个邻域像素以及上下两个尺度上的各 9 个邻域像素进行比较——总共 26 个像素。最大值或最小值即为候选像素。
候选像素不能直接使用。极值点被视为噪声,会被剔除,沿着细长边缘的极值点也会被剔除。围绕高斯分布极值点插值三维二次函数可以得到亚像素位置和尺度。对于 Hessian 矩阵:
较大的 \mathrm{Tr}(\mathbf{H})^2/\det(\mathbf{H}) 值表示边缘响应中只有一个主曲率较强,这样的点会被排除。这解决了与角点检测相同的问题:边缘上的点即使沿着边缘移动,看起来也很相似,因此无法唯一确定其对应关系。
FAST:仅通过观察圆快速判断角点
加速分割测试特征 (FAST) 使用以像素 p 为中心、半径为 3 的 Bresenham 圆上的 16 个像素。给定阈值 t,如果 n 个连续像素(通常为 9 或 12 个)的亮度均高于该阈值,则I_p+t,或所有比 I_p-t 更暗的像素,p 被判定为角点。
由于它不计算梯度或矩阵——仅进行少量像素比较并进行早期剔除——因此速度极快。其速度的关键在于,首先检查圆上 1 点、5 点、9 点和 13 点钟位置的像素,如果无法形成连续的明暗像素,则立即停止。另一方面,普通的 FAST 既不提供尺度也不提供方向信息,并且往往会对边缘上的许多点做出响应。只有在计算与周围环境的强度差异、应用非极大值抑制 (NMS) 并与图像金字塔结合之后,它才能成为一个实用的多尺度检测器。
ORB:不再将 FAST 视为“速度快但难以使用”
ORB(定向 FAST 和旋转 FAST) BRIEF) 是一种增强 FAST 和 BRIEF 功能的构造,旨在实现实时图像匹配。首先,它以每个缩减比例 s 对图像金字塔运行 FAST,并保留每一层的顶部点。这赋予了图像对尺度变化一定的鲁棒性(即使并非完全精确)。
接下来,它计算点 p 周围图像块的强度质心。从以下时刻开始:
从中心 p 到质心 \mathbf{c} 的角度 \theta=\operatorname{atan2}(m_{01},m_{10}) 成为主导方向。BRIEF 描述符是一个位串,用于比较图像块内的像素对 (\mathbf{a}_i,\mathbf{b}_i):
大约重复 256 次。在 ORB 中,点对坐标在比较之前会旋转 \theta,因此相同的即使旋转后,位模式也往往保持不变。rBRIEF 学习选择低相关性的比较对,是另一种保留位信息内容的方法。二进制字符串之间的距离可以快速计算为汉明距离——即异或运算后置位的位数。
ORB 的优势在于其在 CPU 和嵌入式设备上的速度和内存效率,因此被广泛应用于视觉 SLAM。然而,在尺度差异较大、图像严重模糊或视角发生显著变化的情况下,SIFT 或具有更丰富梯度描述的基于学习的特征可能更具优势。
SIFT:一致归一化尺度、方向和描述
尺度不变特征变换 (SIFT) 通过高斯分布 (DoG) 检测 (x,y,\sigma) 的极值,并去除低对比度点和边缘响应。在每个点的邻域内,它计算梯度幅值和方向,并构建高斯加权方向直方图。最大的峰值成为用于归一化的主导方向。图像块的旋转以及超过最大值 80% 的次级峰值也被赋予了各自的方向。这是其对旋转具有鲁棒性的核心所在。
对于描述符,一个大小约为 16\times16 的归一化窗口被分割成 4\times4 个单元格,每个单元格都获得一个 8 方向梯度直方图。因此,其维度为 4\times4\times8=128。向量 \mathbf{d} 经过 L2 归一化,大于 0.2 的元素被裁剪并重新归一化,从而抑制了对局部光照变化的敏感性。
换句话说,SIFT 的“不变性”并非魔法。它是一种显式设计,能够分别处理每种变化来源:通过图像金字塔选择尺度,根据主导方向旋转坐标系,并通过归一化吸收对比度。它并不能完全抵抗仿射形变或较大的视角差异,这些情况仍然需要后续的 RANSAC 算法。或多视图几何。
最小实现伪代码
特征点处理不应止步于提取——它应该实现到对应关系验证。以下是一个适用于 ORB 或 SIFT 的框架。
function match_images(imageA, imageB, method):
grayA, grayB = to_gray(imageA), to_gray(imageB)
detector = create(method) # ORB: FAST+pyramid+rBRIEF / SIFT: DoG+gradient
keyA, descA = detector.detect_and_compute(grayA)
keyB, descB = detector.detect_and_compute(grayB)
metric = HAMMING if method == ORB else L2
tentative = []
for each descriptor a in descA:
b1, b2 = two_nearest(a, descB, metric)
if distance(a, b1) < 0.75 * distance(a, b2):
tentative.append((a.keypoint, b1.keypoint))
H, inlier_mask = RANSAC_HOMOGRAPHY(tentative, reproj_threshold=3px)
return tentative[inlier_mask], H
仅取单个最近邻会导致结果中出现模糊点,例如窗框、网格和重复图案。Lowe 比率检验使用最佳距离 d_1 与次佳距离 d_2 的比率,并舍弃与次佳距离差距不够大的候选点。然后,RANSAC 从对应关系的小随机子集中估计单应性矩阵 \mathbf{H} 或基本矩阵作为假设,并选择能够解释最多对应关系(内点)且重投影误差最小的假设。如果物体是平面的,或者相机只是原地旋转,则可以使用单应性矩阵检查一致性。
对于一般的 3D 场景,则使用基本/本质矩阵。此时保留下来的内点数量和比例即为实际可用的特征量。
对光照、尺度和旋转的鲁棒性及其程度
对于光照变化,简单的亮度偏移 I'(x,y)=I(x,y)+b 会破坏像素差异,但对梯度或二值比较中的相对关系影响甚微。均匀对比度变化 I'=aI+b 也能被 SIFT 的描述符归一化处理得相当好。但当局部结构本身发生变化时——例如曝光饱和度、阴影边界、反射、昼夜交替——仅靠传统方法无法保证效果。在拍摄过程中,应固定或严格控制曝光,并在必要时对两幅图像应用局部对比度校正,例如 CLAHE,在相同条件下。过度校正可能会将噪声转化为虚假特征,因此务必谨慎。
单分辨率 Harris 或FAST算法本身对尺度变化的适应性较差。ORB算法在图像金字塔中搜索候选区域,具有一定的容差,但其归一化方式与SIFT算法不同,SIFT算法通过高斯分布(DoG)选择连续尺度的极值。如果纹理在缩小尺度后消失,则任何方法都无法找到对应点。输入分辨率、金字塔深度和最小图像块大小应根据预期的捕获距离变化范围来确定。
对于旋转,Harris响应本身相对稳定,但匹配需要同时旋转描述符的坐标系。ORB算法通过强度质心确定方向,SIFT算法则通过梯度方向直方图确定方向。这种连续角度归一化比仅处理90度旋转步长的描述符更有效。同时,强烈的倾斜视图并非简单的旋转和缩放,而是仿射/投影形变,因此需要使用多视图数据、仿射协变特征或结合几何验证的基于学习的特征。
评估指标:衡量可用对应点,而非点计数
对于已知单应性矩阵为 H 的图像对,将图像 A 中的点 \mathbf{x}_i 投影到图像 B 中,如果在检测到的点集 K_B 中存在距离在 \epsilon 以内的点,则将其计为一次成功的重检。可重复性在概念上是
但是,如果描述符无法区分,找到相同的位置毫无意义。因此,您还需要报告匹配精度(正确对应点的比例)、正确对应点计数、RANSAC 后内点比率、估计姿态的旋转/平移误差、处理时间和内存占用。HPatches 是一个具有代表性的基准测试,它将光照变化与视角变化分开,以评估图像块匹配、检测器和单应性矩阵估计。除非您使用与应用程序几何形状(平面或宽基线 3D)相匹配的数据进行测量,否则不应采用单一分数的排名。现状。
|方法|检测核心|描述符|缩放/旋转|匹配距离|优势|主要缺点| |---|---|---|---|---|---|---|---| |Harris + 补丁|结构矩阵|原始补丁等|缩放 ✕,旋转分开|SSD/NCC|清晰原理|对光照/缩放敏感| |LoG / DoG|尺度空间斑点极值|需要单独的描述符|缩放 ◎,旋转分开|依赖于描述符|获取斑点和尺度|需要金字塔计算| |FAST + BRIEF|圆形上的连续亮度|二元比较|两者不可单独使用|汉明|非常快|对视角/缩放敏感| |ORB|金字塔 FAST|旋转 rBRIEF|缩放 ○,旋转 ○|汉明|轻量级实时友好|大形变下性能有限| |SIFT|DoG极值|128维梯度直方图|尺度◎,旋转◎|L2|可靠,经过充分验证|CPU/内存密集型| |基于学习|通过网络学习|学习向量|数据强化|L2/学习|在严苛条件下具有高对应率|需要模型、GPU和可复现性管理|
表格中的○和◎并非绝对评分,而是针对典型实现和预期范围的相对基准。即使是SIFT,当相同的网格图案填充整个帧时也会出现歧义,即使是ORB,在中等条件下也能获得足够的内点。
当前库和实际产品中的应用
对于第一个原型,OpenCV的cv::ORB::create()、cv::SIFT::create()和cv::FastFeatureDetector::create()易于使用。ORB可与……配对使用。 BFMatcher(NORM_HAMMING);SIFT 算法结合 L2 距离 BFMatcher 或基于 FLANN 的匹配器。即使您希望将检测器和描述符分离,OpenCV 的 Feature2D API 也能让您保持流程一致。对于基于学习的实验和 GPU 处理,PyTorch 上的 Kornia 提供了 SIFT、ORB、DISK、KeyNet/HardNet、LightGlue 等构建模块。
在摄影测量和 3D 重建实践中,COLMAP 是代表性工具;其当前官方文档支持启用 ONNX 构建时的标准 SIFT 和 ALIKED。由于 SIFT 和 ALIKED 都可以连接到暴力匹配或 LightGlue 匹配,因此在重建入口点上很容易比较传统方法和基于学习的方法。在选择产品或库时,最好先确定它是否必须仅运行在 CPU 上、延迟预算、是否可以接受大量的离线匹配以及是否需要可复现的版本锁定。比起模型名称是否新颖,更重要的是模型本身的可靠性。
最新研究:联合优化检测、描述和匹配
SuperPoint 是基于学习的方法的一个转折点。它使用全卷积网络同时输出兴趣点概率图和描述符图,并通过单应性自适应进行自监督学习,从而在几何变换下重现点。其核心思想是从数据中学习对应关系有用的位置,而不是仅仅依赖于人为设计的“角点”概念。
DISK 解决了选择稀疏点和匹配它们离散且难以区分的问题,它通过策略梯度对检测和描述进行端到端的优化,该策略梯度奖励正确的对应点数量。ALIKED 使用稀疏可变形描述符头,学习每个关键点周围的可变形支持位置,旨在通过在稀疏点处提取描述符而不是从整个密集特征图中提取描述符来平衡表达能力和效率。
匹配器也在逐渐摆脱独立的最近邻匹配。搜索。LightGlue 使用注意力机制估计两组局部特征之间的对应关系,并采用自适应计算,当图像对匹配简单时会提前停止。它本身并非特征检测器,但它提醒我们,仅凭与检测器的良好描述符距离并不能保证最终对应关系的良好性。目前,在目标数据上,使用相同的 RANSAC 设置,比较使用经典特征和轻量级匹配器的设置与使用 LightGlue 匹配学习到的特征(例如 SuperPoint/ALIKED)的设置是可行的。
选择和调优检查清单
-
首先,记录真实图像对的检测计数、比率测试通过计数、RANSAC 内点计数、内点比率和处理时间。如果误匹配数量也随之增加,则单独增加检测计数可能会适得其反。
-
对于固定相机附近的短时跟踪,首先使用 FAST/ORB 算法,然后调整
nfeatures、FAST 阈值和金字塔层级。在纹理较薄的情况下,在降低阈值之前,请检查模糊、曝光和对焦情况。阈值。 -
对于拍摄距离或旋转角度变化较大的静态图像匹配,请使用 SIFT 作为基准。更快的算法是否优于 SIFT,必须始终在相同的数据集上进行相同的几何验证。
-
在夜间、强逆光、季节变化或视角差异较大的情况下,也应考虑基于学习的特征。但性能评估中应考虑训练数据与目标环境之间的差距、模型更新以及 GPU 的可用性。
-
重复图案、镜面反射表面、运动物体和极端运动模糊与其说是特征检测问题,不如说是观察模糊问题。可通过掩蔽、时间跟踪、传感器融合和拍摄规划进行补偿。
特征检测并非理解图像的万能分类器。但它仍然是一种有效的基础技术,能够以较少的计算量选择哪些像素可以支持几何形状。理解角点、斑点、尺度空间和方向归一化等概念,可以帮助您追踪数值背后的失败原因,无论您是在调整经典的 ORB/SIFT 算法还是在评估基于学习的特征。
强边缘上的每个点都容易追踪吗?
沿单条边缘的运动是模糊的。角点在不同方向上提供强度变化,使得二维运动更容易识别。
评论
请先登录。
暂无数据。