几何匹配:局部特征、卷积与 RANSAC

info
阅读路线

先理解局部特征如何产生候选对应,再看卷积如何形成可比较的特征表示,最后用 RANSAC 和 ROI 先验筛掉不可信几何。第 4 节是尚未验证的候选构想,不应当当作正式方法。

1. 关键点、描述子与几何变换

info
这篇解决什么问题

从“图像里找到对应点”出发,串起关键点、描述子、比值检验、RANSAC 与仿射变换。它适合当作传统局部特征方法的入门和配准流程速查,不代表所有深度匹配网络都采用相同的前端。

1. 输入、输出与完整流程

输入:两幅待对齐的图像,例如可见光(VIS)和热红外(IR)。

输出:由可靠匹配点估计得到的几何变换矩阵,以及按该矩阵 Warp 后的图像。

两幅图像
  → 检测关键点
  → 计算局部描述子
  → 建立候选匹配
  → Lowe ratio 筛选
  → RANSAC 排除错误点
  → 估计几何变换
  → Warp 对齐整幅图像

局部特征法寻找空间位置稳定、局部结构显著的点,用描述子表示关键点邻域,再根据匹配点估计变换矩阵。关键点和描述子负责“找对应”,几何估计负责“让对应关系服从同一个变换”。

2. 三种常见局部特征

方法 关键点与描述子思路 是否使用 DoG 适合记忆的关键词
SIFT 高斯尺度空间中寻找稳定极值,再生成梯度方向描述子 是 尺度、方向、稳定性
SURF Hessian 响应与盒式滤波近似 否 快速近似
ORB FAST 关键点 + 旋转方向 BRIEF 描述子 否 二值描述子、速度

不能把所有局部特征都概括为“高斯尺度空间 + DoG”;这只是 SIFT 的路线。

3. SIFT 的尺度空间与卷积

高斯平滑写成:

L(x, σ) = G(x, σ) * I(x)

其中 I 是原图,G(x, σ) 是尺度为 σ 的二维高斯核,* 是卷积,L 是平滑结果。

  • σ 小:模糊较轻,保留更多细节;
  • σ 大:模糊较强,只保留更大尺度的结构。

SIFT 不只在 (x, y) 平面找点,还在 (x, y, σ) 的尺度空间寻找稳定结构。因此目标远近变化或尺寸变化时,仍有机会得到对应关键点。

高斯差分(DoG)为:

D(x, σ) = L(x, kσ) − L(x, σ)

它比较相邻模糊尺度的变化,再从 DoG 空间寻找局部极值。

卷积的直观含义

卷积不是“把图像叠起来”,而是让一个小核在图像上滑动,在每个位置对邻域像素做加权求和。高斯卷积按距离加权平均,所以会产生平滑和模糊;边缘卷积则利用正负权重比较两侧灰度差。

4. Lowe 最近邻距离比

设一个 IR 描述子与所有 VIS 描述子的距离中,最近和次近的分别为 d1、d2:

d1 = 最近邻距离
d2 = 次近邻距离

保留条件:

d1 / d2 < τr

这个比值判断第一名是否明显优于第二名:

情况 比值 判断
d1=0.3, d2=0.8 0.375 第一名明显胜出,较可信
d1=0.70, d2=0.75 0.933 两者接近,存在歧义,应舍弃

因此 ratio test 比单独设置“距离小于某阈值”更能排除重复纹理和相似背景。

5. 从匹配点到仿射变换

以 IR → VIS 为例,使用齐次坐标:

[u_vis, v_vis, 1]^T = A × [u_ir, v_ir, 1]^T

A = [[a11, a12, tx],
     [a21, a22, ty],
     [  0,   0,  1]]

展开为:

u_vis = a11 × u_ir + a12 × v_ir + tx
v_vis = a21 × u_ir + a22 × v_ir + ty

2×2 线性部分共同表示旋转、尺度和剪切,tx、ty 表示平移。因此仿射变换可以理解为:

旋转 + 缩放 + 剪切 + 平移。

仿射矩阵有 6 个未知量,每组二维匹配点提供两个方程,理论上至少需要 3 组不共线点。实际存在噪声和错配,必须使用更多点并结合 RANSAC。

6. 齐次坐标不等于三维

(u, v) → (u, v, 1)

这里的 1 是数学上的齐次坐标,用于把平移统一写进矩阵乘法,不代表把二维图像恢复成真实三维空间。

真正的 2D → 3D 属于双目视觉、三角测量、SfM、SLAM、深度估计和点云重建等问题,会进一步涉及空间坐标 (X, Y, Z)、相机内参和外参。

7. 统一理解:传统与深度方法

传统:手工特征 → 描述子匹配 → RANSAC → 几何矩阵
深度:网络学习特征 → 深度匹配 → RANSAC/几何估计 → 几何矩阵

两者都可以归纳为:

图像 → 特征表示 → 对应关系 → 几何映射

深度学习改变的是“如何找到可靠对应”,并没有取消后面的几何约束。

8. 实操检查清单

  • 明确矩阵方向(例如 IR → VIS),并在代码和文档中保持一致;
  • 检测点数量足够,且不集中在一条直线或单一纹理上;
  • ratio 阈值、RANSAC 重投影阈值与图像分辨率匹配;
  • 用未参与拟合的点或图像检查重投影误差;
  • Warp 后检查边界、黑边和有效区域 Mask;
  • 记录关键点数、候选匹配数、内点数和矩阵成功状态。

结论

局部特征法先找对应点,再用鲁棒几何估计求矩阵;卷积和描述子只是把局部结构变成可比较的表示。

即使前端换成深度网络,RANSAC、坐标方向和独立几何验证仍然是配准结果可信的关键。

2. 卷积与可学习特征表示

info
阅读路线

先理解“滑动窗口 + 加权求和”,再看人工核如何提取边缘或平滑,最后连接到 CNN 学习卷积核以及配准中的特征表示。本文中的核是示意值,用于解释机制,不等于某个模型的完整实现。

1. 卷积到底在做什么

卷积本身可以理解为:

卷积核在图像上滑动
→ 取当前位置附近的像素
→ 按卷积核权重加权求和
→ 得到输出图像的一个像素

不同卷积的主要区别,不是“滑动方式”完全不同,而是卷积核中的权重不同。

同样是 3×3 卷积核,换一组数字,就可能从模糊变成边缘检测或锐化。

2. 人工设计的典型卷积核

这些卷积核的共同输入是局部像素邻域,输出是当前位置的一个响应值。核的正负号和权重分布决定它更关注平均亮度、变化边缘还是高频细节。

2.1 均值卷积:模糊

1/9 × [[1, 1, 1],
       [1, 1, 1],
       [1, 1, 1]]

周围 9 个像素权重相同,相当于求平均,所以会使图像变模糊。

2.2 高斯卷积:更自然的模糊

1/16 × [[1, 2, 1],
        [2, 4, 2],
        [1, 2, 1]]

中心像素权重大,距离中心越远权重越小。因此它也是平滑,但通常比均值滤波更自然。

2.3 Sobel 卷积:检测边缘

检测竖直边缘的一个 Sobel 核:

[[-1,  0,  1],
 [-2,  0,  2],
 [-1,  0,  1]]

左边是负权重,右边是正权重,本质上是在比较右侧和左侧的灰度差:

暗 暗 暗 | 亮 亮 亮

当左右差异很大时,卷积响应就很大。因此:

Sobel 卷积 ≈ 检测灰度变化 ≈ 检测边缘。

检测水平边缘的一个核:

[[-1, -2, -1],
 [ 0,  0,  0],
 [ 1,  2,  1]]

2.4 Laplacian 卷积:比较中心与周围

[[ 0, -1,  0],
 [-1,  4, -1],
 [ 0, -1,  0]]

它比较中心像素与上下左右邻域的差异。

平坦区域:

4×100 − 100 − 100 − 100 − 100 = 0

没有明显边缘;如果中心像素突然变大,响应就会变大。因此 Laplacian 也是边缘检测卷积。

2.5 锐化卷积

[[ 0, -1,  0],
 [-1,  5, -1],
 [ 0, -1,  0]]

它可以看成“保留原图 + 强调边缘”,因此图像会更锐。

2.6 其他人工卷积核

卷积核 主要作用
Mean 均值模糊
Gaussian 高斯平滑
Sobel 一阶边缘检测
Prewitt 一阶边缘检测
Laplacian 二阶边缘检测
Sharpen 锐化
Motion Blur 运动模糊
Emboss 浮雕效果

运动模糊也可以用沿某一方向取平均的卷积核实现,本质是保留方向上的拖影。

3. 从人工卷积过渡到 CNN

传统图像处理中,卷积核由人根据任务设计:

高斯核       → 模糊
Sobel 核     → 找边缘
Laplacian 核 → 找边缘
Sharpen 核   → 锐化

CNN 的关键思想是:

不必提前规定每个卷积核的用途,让网络从数据中学习卷积核。

训练开始时,卷积核可能只是随机数:

[[ 0.13, -0.27,  0.08],
 [ 0.41,  0.02, -0.31],
 [ 0.17,  0.22, -0.15]]

训练过程中,反向传播不断调整这些权重,使最终任务损失下降。某些卷积核可能逐渐学会响应:

竖直线、水平线、斜线、纹理、颜色变化或更复杂的局部结构

它们不一定会呈现出像 Sobel 或高斯核那样容易解释的漂亮形式,但只要能帮助完成分类、检测或匹配任务,就是有效的特征提取器。

4. 为什么 CNN 一个卷积层有很多卷积核

一个卷积核通常只擅长响应某一类模式。如果一个卷积层只有一个卷积核,输出只能反映一种特征。

因此一个卷积层通常包含 32、64、128 等多个卷积核:

输入图像
  → 卷积核 1:检测某种边缘
  → 卷积核 2:检测另一种方向
  → 卷积核 3:检测纹理
  → ……
  → 多张 feature map

每个卷积核产生一张 feature map,整层输出的是一组特征图。浅层通常更接近边缘和纹理,深层逐渐组合成更复杂的结构。

5. 与配准的联系

在局部特征匹配和深度匹配中,卷积或其他网络模块的作用都是把原始像素转换成更容易比较的特征表示:

VIS/IR 原图
  → 卷积或深度网络提取特征
  → 得到局部描述子或 feature map
  → 建立跨模态对应关系
  → 估计几何变换

所以从人工 Sobel 核到 CNN 学习卷积核,是“特征表示由人工设计转向数据学习”的过程;后面的对应关系和几何映射仍然是配准的核心。

最终记忆

卷积的本质是滑动加权求和;传统方法由人设计权重,CNN 由数据学习权重。

不同卷积核提取不同模式,一个卷积层用多个卷积核产生多张 feature map。

3. RANSAC:从候选点到可信矩阵

info
这一步解决什么问题

特征匹配得到的点对中通常混有错配。RANSAC 先寻找能够解释最多点对的几何模型,再用这些内点重新估计矩阵,因此常被称为“鲁棒版的几何拟合”。

1. 输入、输出与位置

输入:候选匹配点对,例如可见光点 x_i^V 与热红外点 x̃_i^T。

输出:内点集合 J、估计的几何矩阵 A、内点率和重投影误差。

它位于配准流程的后半段:

特征提取
  → 候选匹配点
  → RANSAC 筛选内点
  → 用内点重估计变换
  → Warp 图像

假设 100 对匹配点中有 80 对真实、20 对错误。如果直接对全部点做最小二乘,错配可能把矩阵严重拉歪;RANSAC 的目标就是降低这种影响。

2. 以仿射模型为例的抽样

二维仿射矩阵有 6 个未知量,每组二维点提供两个方程,因此理论上至少需要 3 组不共线匹配点:

[u_vis, v_vis, 1]^T = A × [u_ir, v_ir, 1]^T

A = [[a11, a12, tx],
     [a21, a22, ty],
     [  0,   0,  1]]

一次迭代的逻辑是:

  1. 随机抽取 3 组不共线点;
  2. 用这 3 组点计算候选仿射矩阵 A;
  3. 用 A 预测全部 IR 点在 VIS 中的位置;
  4. 计算每个点的重投影误差;
  5. 误差小于阈值的点记为内点,否则记为外点;
  6. 重复抽样,保留支持者最多且误差较小的模型;
  7. 用最终内点集合重新拟合 A。

因此 RANSAC 的核心可以记成:

不断随机试模型,寻找能解释最多数据的模型。

实际实现还应设置最大迭代次数、置信度和退化样本检查;随机抽到共线点时,不能用于估计完整仿射模型。

3. 重投影误差与最终重估计

对第 i 个匹配点,重投影误差为:

e_i = || x_i^V − A × x̃_i^T ||₂

其中:

  • x_i^V:可见光中的匹配点;
  • x̃_i^T:热红外点的齐次坐标;
  • A × x̃_i^T:由矩阵预测的 VIS 位置;
  • e_i:预测位置与实际匹配位置之间的欧氏距离。

RANSAC 选出内点集合 J 后,再做一次参数优化:

A* = arg min_A Σ(i∈J) || x_i^V − A × x̃_i^T ||₂²

要区分两件事:

  • RANSAC:通过随机采样和误差阈值找到内点集合 J;
  • 最小二乘重估计:在 J 已确定后,用所有内点得到更稳定的最终矩阵 A*。

因此论文中更严谨的写法是:

为降低错误匹配对变换估计的影响,采用随机抽样一致性(RANSAC)进行几何一致性检验并筛选内点,随后在内点集合 J 上最小化重投影误差,获得最终仿射变换参数。

4. 为什么深度匹配仍要用 RANSAC

SIFT、ORB、LoFTR 或 XoFTR 的前端不同,但只要输出中仍可能有错配,就需要一个几何一致性步骤:

SIFT/ORB:手工特征 → 描述子匹配 → RANSAC → 矩阵
LoFTR/XoFTR:深度特征 → 对应关系 → RANSAC → 矩阵

RANSAC 不负责判断哪个描述子“语义上正确”,只检查点对能否由同一个几何模型同时解释。跨模态、烟雾、重复纹理和低纹理场景中尤其需要这层约束。

5. 常见失败边界

情况 可能结果 排查方向
内点数量过少 矩阵不稳定或估计失败 提高匹配质量,降低模型自由度
内点集中在一条直线 仿射参数退化 检查空间分布,要求不共线
重投影阈值过宽 错配被误当内点 按分辨率和噪声重新标定阈值
重投影阈值过窄 真匹配被丢弃 检查定位误差和插值误差
场景存在多个运动物体 多个模型互相竞争 使用静态区域或分区估计
初始匹配数量不足 无法形成最小样本 调整特征/匹配器参数

6. 实操检查清单

  • 明确矩阵方向(例如 IR → VIS)和坐标约定;
  • 最小样本满足模型要求,且不共线;
  • 记录候选点数、内点数、内点率和迭代参数;
  • 检查内点是否覆盖多个象限,而不是集中在局部;
  • 在内点重估计后,用独立点验证重投影误差;
  • 对矩阵行列式、尺度、平移范围做工程有效性检查;
  • 记录失败原因,避免把“无矩阵”静默当作成功。

结论

普通最小二乘是“所有点我都信”;RANSAC 是“先判断哪些点值得信,再用可信点拟合”。

前端网络不断升级,但只要对应关系仍可能错误,RANSAC 和后续几何验证就仍然是可靠配准的基础。

4. ROI 引导的空间先验(候选构想)

info
记录性质

这是方法构想记录,不是已经验证的配准算法。后续如果要写进正式方法,必须补充数学定义、实现细节和独立实验。

1. 共同想法:围绕 ROI 建立空间权重

两个巧思都以 ROI 或目标区域为中心:先把目标区域附近的信息集中起来,再让影响随着距离逐渐减弱。这样做的目的,是让目标区域对定位或匹配更重要,同时保留周围环境作为几何参考。

2. 巧思一:把 ROI 中心展开为球面/径向表示

以 ROI 中心为参考,把目标区域向四周展开,形成一种“球体”或径向坐标表示;完成定位后,再将结果映射回原图坐标。

这里的“球体”是概念性比喻,具体实现需要明确:

  • ROI 中心和半径如何定义;
  • 展开使用极坐标、球面投影还是其他变换;
  • 展开前后的尺度与角度是否保持;
  • 结果如何反变换回原坐标;
  • 边界和空缺如何处理。

3. 巧思二:中心强、外围弱的连续权重

以 ROI 中心为基准,中心位置权重最高,向四周扩散时权重逐渐下降。可以先用一个连续径向权重表达:

w(r) = f(r), 其中 r 是像素到 ROI 中心的距离
w(0) 较大,r 增大时 w(r) 逐渐减小

候选函数可以是高斯、线性衰减或分段函数,但函数形式和参数不能凭直觉固定,应通过验证集比较定位误差、匹配稳定性和对 ROI 外结构的敏感性。

4. 与现有配准流程的关系

一个可验证的实验顺序是:

自动检测 ROI
  → 生成中心-外围权重图
  → 将权重用于候选匹配排序或损失加权
  → 估计几何矩阵
  → 在独立点和全局区域上验证

需要特别区分:权重只影响候选选择,还是直接改变最终几何矩阵。若它参与矩阵估计,就必须报告与无权重基线的成对比较,不能只展示视觉效果。

5. 当前结论

这两个想法可以作为“ROI 引导的连续空间先验”方向保存,但目前没有足够信息证明球面展开或径向衰减一定优于现有 Structural Cue。下一步优先实现最简单的径向权重作为消融,再决定是否值得引入更复杂的空间变换。

5. 统一实操检查清单

  • 明确输入输出坐标(例如 IR → VIS),并在每个矩阵公式中保持一致;
  • 关键点/描述子或深度特征的候选数量、空间分布均已记录;
  • 卷积或特征表示的输入尺寸、尺度和归一化方式已固定;
  • RANSAC 内点率、重投影误差、矩阵尺度与平移范围均已检查;
  • ROI 先验只在明确的候选选择阶段使用,并通过独立点验证;
  • Warp 后检查有效区域 Mask、黑边和插值空洞;
  • 任何候选构想都通过成对基线和独立数据验证后再进入正式方法。

结论

局部特征和卷积负责形成可比较的表示,匹配器负责产生候选对应,RANSAC 负责让对应关系服从一个可信的几何模型。

候选的 ROI 空间先验可以单独做消融,但不能替代坐标一致性、鲁棒估计和独立几何验证。