第 3 章 特征与匹配¶
对极几何、PnP、视觉里程计都建立在同一个前置能力上:在不同视角下稳定找到同一物点。这需要三件事——检测出有重复性的关键点、给每个点一段可比较的描述、以及在噪声和重复纹理中筛出正确匹配。本章沿 OpenCV 5.0.0 的 API 形态说明每一步的选型与失效边界。
从关键点到可用匹配的五步,最后一步回到时序:
flowchart LR
det["角点检测"] --> desc["描述子"]
desc --> match["匹配"]
match --> robust["比值测试 + RANSAC"]
robust --> out["稳定同名点"]
out --> flow["光流:时序跟踪"]
1. 角点检测¶
角点(corner) 是两个边缘方向的交点,直觉上就是"往哪个方向移动窗口,灰度都剧烈变化"的位置——它比边缘(只有一个方向变化)和平坦区(都不变化)更可定位。Harris 用二阶矩矩阵 \(M=\sum w(\mathbf{x})\,I(\mathbf{x})I(\mathbf{x})^{\top}\) 的两个特征值 \(\lambda_1,\lambda_2\) 度量各方向变化强度,响应 \(R=\det M-k\,\text{tr}^2 M\):角点处两特征值都大。
OpenCV 提供四类常用入口:goodFeaturesToTrack(Shi-Tomasi 判据)、FastFeatureDetector、ORB(检测部分即带方向的 FAST)与 cornerHarris(直接给响应图)。同一个角点在四者中的取舍不同:Shi-Tomasi 稳定但要在全图上做特征值比较;FAST 只比较圆周像素,最快但没有尺度与方向;ORB 为 FAST 补上方向并做金字塔,因此检测开销明显高于裸 FAST;cornerHarris 输出响应图,需另做非极大值抑制与阈值才能取点。
谱系关系:Harris 是响应图(还需非极大值抑制取点),Shi-Tomasi 改用 \(\min(\lambda_1,\lambda_2)\) 作判据更稳、是 goodFeaturesToTrack 的内核;FAST 只看中心像素周围 16 个点的明暗一致性,极快但无尺度方向信息;AGAST(Adaptive and Generic Accelerated Segment Test)把 FAST 的固定阈值判定改成自适应决策树,是同一族里更快的变体。Harris/Shi-Tomasi 对光照线性变化不鲁棒(响应含梯度平方),实际系统常在归一化图或描述子层补偿。
检测器真正影响下游的是点的分布,不是点的数量:阈值放松会把点全挤在纹理最密的一小块区域,白墙与天空上一个点也没有。工程上按网格划分、每格保留上限,把点铺开——后续单应/基础矩阵估计的稳定性取决于点在图像上的空间展开度,聚成一团时几何约束几乎不起作用。尺度方面,SIFT 自带多 octave 金字塔,ORB 只在既定层数里取点,跨尺度匹配能力差别就在此。
2. 描述子与匹配¶
检测给位置,描述子(descriptor) 给"这一小块长什么样"。两族:
- 二进制:ORB 用随机像素强度比较生成 256 bit 串,度量用汉明距离(popcount),快、可 FLANN-LSH 索引。
- 浮点:SIFT(128 维梯度方向直方图,旋转不变)、SURF(Hessian 加速;位于 opencv-contrib 的
xfeatures2d,属 nonfree 模块);SuperPoint 类学习式特征一句名目(第 8 章边界)。
匹配即在各描述子间找最近邻。暴力匹配 BFMatcher 对每对算距离;大规模用近似最近邻 FlannBasedMatcher(浮点用 KD-Tree,二进制用 LSH)。小规模特征集下 BF 往往更快——FLANN 的建树开销在点少时摊不平;规模上千后近似检索才占优。二进制描述子必须用汉明距离,浮点描述子用 L2;匹配器选错距离度量会得到无意义的"最近邻"。
描述子还要做归一化:SIFT 的 4×4 子区 × 8 方向直方图之后要除根号、截断、再归一化,这一步把"光照整体变亮"这类线性变化压掉大半;二进制描述子靠位间比较,没这一步,只能在检测与匹配前对图像做局部对比度归一化。省了归一化,内点率会随曝光明显掉落,而它在调 API 时是默认隐形的。
3. 比值测试与 RANSAC¶
最近邻不等于正确匹配:重复纹理处最优与次优描述子可能同样接近。Lowe 比值测试(ratio test) 保留"最优距离 < 0.75×次优"的匹配,用相对差距过滤歧义。比值测试先把歧义对挡在门外,喂进对极估计的匹配质量更高,几何解更干净(内点比例上升、极线残差下降)。RANSAC 剔外点:随机取 8 对(基础矩阵)假设、统计阈值内内点、迭代取最优——它对高外点比例鲁棒,是特征法几何验证的标配。RANSAC 与比值测试是两道独立关卡:比值管"这段描述像不像",RANSAC 管"这个对应符不符合全局几何"。
比值测试有两个可选补强:互惠检验(互为最近邻才保留)能剔掉"单向吸引"的错配,代价是内点数下降;0.75 只是经验值,纹理重复越严重越该往下压,压太狠又会让大视角变化下的正确匹配一起掉。RANSAC 这边,迭代次数要按最坏内点比例算,最小样本数随模型变:单应 4 对、基础矩阵 8 对(带内点约束时可用 5 点法)、本质矩阵 5 对;内点阈值应与像素噪声同量级,取大了把错配当内点、取小了把正确匹配判外点。
4. 光流¶
光流不做显式匹配,而是假设"相邻帧同一像素亮度不变"(亮度恒定约束),直接解每点的表观运动 \((u,v)\)。稀疏 Lucas-Kanade 在窗口内解 \(2\times2\) 线性系统(即第 1 节的 \(M\) 矩阵),配合图像金字塔跟踪较大位移;Farneback 稠密光流给每像素一个流矢量。
对合成纯平移,两种光流都能恢复出视差方向;LK 稀疏只算给定角点、开销与点数成正比,Farneback 稠密给全图流场、开销按像素计,通常高出后者一个量级。位移越大越考验金字塔层数:超过窗口与金字塔能覆盖的范围时,LK 会锁到相邻的相似纹理上而给出错误位移——窗口和金字塔层数共同决定可跟踪位移上限。深度学习光流(RAFT 类)在大位移与无纹理区更强,但超出传统方法的边界,一句名目归第 8 章。
LK 的三条前提各有失效场景:亮度恒定在自动曝光与镜面反射处破功;小运动靠金字塔缓解,位移超过层数能覆盖的范围就失效;空间一致在物体边缘与遮挡边界处不成立——窗口跨过深度不连续时会解出两者的平均流,物理上无意义。带遮挡掩膜的变体、或用逆组合(inverse compositional)形式把 Hessian 预先算好,是两处常用的工程改进。
5. 特征在跟踪 / 建图 / 重定位中的分工¶
同一个"找对应"的能力,在三种任务里的侧重不同:
- 跟踪(里程计):要快、要连续帧稳定,倾向 FAST/ORB 稀疏 + LK,牺牲绝对精度换实时。
- 建图:要覆盖全场景、几何一致,特征密度与分布均匀比速度重要,匹配质量直接决定三角化结构精度(第 2 章)。
- 重定位:在已建地图里找当前帧位置,需要外观可区分——SIFT/学习式描述子或视觉位置识别(VPR,NetVLAD 类,第 7 章),因为跨时空视角差异远大于相邻帧。
选型的判据落点是"视角与光照变化幅度":相邻帧变化小用快的二进制特征,跨大变化用可区分度高的浮点/学习特征,无论哪种都要过比值测试 + RANSAC 两道几何关。
三种任务的点预算也不同:跟踪只需维持约束的最小点数(几十到几百),建图要上千且分布均匀,重定位看检索召回而不是点数。把同一套提取参数套到三种场景,结果往往不是太慢就是太稀。
点位精度还差一层:整数坐标的角点对 PnP/三角化就是硬误差,工程上用 cornerSubPix 做亚像素精化——在窗口内迭代求解梯度加权的最小二乘,把角点定位到零点几像素量级。它在两个方向上同时受到约束(这正是角点优于边缘的原因),而在接近边缘的弱角点上会沿边缘方向漂移,所以精化窗口不能开太大。
6. 要点¶
- 角点 = 两方向灰度都剧变的点,比边缘更可定位;Harris/Shi-Tomasi 稳但慢,FAST 极快但无尺度信息。
- 描述子分二进制(ORB,汉明)与浮点(SIFT,L2);小规模 BF 更快,上千后 FLANN 近似检索才占优。
- 最近邻≠正确:比值测试按相对差距筛歧义,RANSAC 按全局几何剔外点,两道关卡互补。
- 光流用亮度恒定假设直接解运动,稀疏 LK 快、稠密 Farneback 全;可跟踪位移上限由窗口 × 金字塔层数决定。
- 跟踪要快、建图要准、重定位要可区分——视角与光照变化幅度决定特征选型。
- OpenCV 的
features2d含 ORB、SIFT、AKAZE;SURF 在 opencv-contrib 的xfeatures2d(nonfree),启用前需确认构建包含该模块。
参考文献与延伸阅读¶
- Lowe, D. G. Distinctive Image Features from Scale-Invariant Keypoints. IJCV, 2004. DOI
- Rublee, E., Rabaud, V., Konolige, K., & Bradski, G. ORB: An Efficient Alternative to SIFT or SURF. ICCV, 2011. DOI
- DeTone, D., Malisiewicz, T., & Rabinovich, A. SuperPoint: Self-Supervised Interest Point Detection and Description. CVPR Workshops, 2018. arXiv
- OpenCV. 4.x 文档首页. 文档