Image Matching & Motion Estimation¶
约 1146 个字 预计阅读时间 4 分钟
图像匹配的任务有两个:
- 判定两张图片的相似度
- 找到两张图片的对应点
应用:图像拼接、对象识别、三维重建等
Image Matching¶
Note
图像匹配的三个步骤:
- Detection: 找到图像中的特征点
- Description: 对特征点的邻域进行编码,得到 descriptors
- Matching: 匹配两张图像中的 descriptors
Detection¶
我们希望可以从图像中选择一些特征点(Feature Points / Interest Points),这些特征点需要具有唯一性。
Corner Detection¶
“唯一性” 指的是与周边的点不一致,我们可以用梯度来描述这种不一致性。具体地,假设当前处理的点为 \(P\),我们计算其邻域 \(U(P)\) 中各个点的梯度
然后我们求 \(I_x, I_y\) 的协方差矩阵 \(\operatorname{Cov}(I_x, I_y)\),并找到它的两个特征值和对应的特征向量,这个方法被称为主成分分析(Principal Component Analysis,PCA)。实际上,我们用的协方差矩阵是
其中 \(w(u, v)\) 是权重函数,可以是高斯函数。
根据特征值的大小,我们可以判断 \(P\) 的类型:
- 如果 \(\lambda_1\) 和 \(\lambda_2\) 都很小,说明 \(P\) 位于区域内,因而不是特征点
- 如果 \(\lambda_1 \gg \lambda_2\) 或 \(\lambda_1 \ll \lambda_2\),说明 \(P\) 位于边缘
- 如果 \(\lambda_1\) 和 \(\lambda_2\) 都很大,说明 \(P\) 是角点(Corner Point),即图像的重要特征点
我们可以用 Harris detector 来检测角点:
\(|f|\) 接近 0 说明 \(P\) 不是角点,否则说明 \(P\) 是角点,因而 \(f\) 也被称为角点响应器(corner response)。
综上,检测特征点的过程可以分为以下步骤:
- 对于图像中的每个点,计算该点邻域内的梯度分布 \(\left\{\nabla f(x,y) \right\}_{(x,y) \in U(P)}\)
- 计算梯度分布的协方差矩阵 \(H\)
- 计算 Corner Response \(f\)
- 采用极大值抑制(Nonmaximum Suppression)的策略,获取区域中 \(f\) 的局部最大值对应的像素点作为特征点
Harris detector 的缺点是可重复性较低。可重复性(Repeatability)指的是检测器在相对应的像素点上的取值与图像的变换(Transformation)无关。
图像的变换包括拍摄条件的变换(如曝光强度)、几何变换(如平移、旋转、缩放)等。
- 亮度变换:假设对图像的整体亮度进行线性变换 \(I \to aI + b\),则 \(b\) 不会影响 \(f\) 的值(因为对梯度没有影响),而 \(a\) 会影响 \(f\) 的值。
- 平移变换:平移不会改变对应点的梯度分布,因而不会影响 \(f\) 的值。
- 旋转变换:平面内的旋转不会改变协方差矩阵的特征值,只会改变特征向量的方向,因而不会影响 \(f\) 的值。
- 缩放变换:相当于改变了邻域的大小,图像的整体和局部性质不一定相同,因而会改变 \(f\) 的值。
我们需要解决缩放变换引起的低可重复性问题,这实际上只需要寻找合适的邻域大小即可。具体地,对于某个点 \(P\),我们对不同大小的邻域 \(U_r(P)\) 计算 \(f_r\),选择 \(r = \underset{r}{\operatorname{argmax}} f_r\) 作为角点的尺度。(Image Pyramids)
Blob Detection¶
我们也可以通过计算二阶导的方式来寻找特征点。对于图像中与周围像素点差异较大的点,其通常是一个局部最值点,我们可以通过拉普拉斯算子来描述图像的局部二阶导的大小,从而发现局部最值点。
由于拉普拉斯算子对噪声敏感,我们一般会选择对原始图像进行高斯滤波后再求二阶导,而
故我们可以直接使用 \(\nabla^2 \operatorname{Gaussian}\)(LoG)作为卷积核,与原始图像进行卷积。LoG 的大小同样可以用图像金字塔来解决。
LoG 的简化实现为 DoG,即我们可以用两个高斯核的差去近似替代 LoG,i.e.
Description¶
我们需要通过一个被称为 descriptor 的特征向量来描述特征点的邻域,即一个图像块(Raw Patch)的信息。