图像匹配有三个步骤:检测特征点,特征描述和匹配
1、检测特征点
好的特征点的位置不随图像亮度变换的改变,只与图像的几何变换有关。
1.1 图像变换
1.1.1 几何变换:旋转和伸缩
1.1.2 亮度变换
1.2 Harris角点检测的性质
角点的位置受图像旋转的影响
图像的亮度变化分为两种,一种是亮度偏移( I ->I + b),另一种是亮度缩放(I -> a I)
角点的位置不受亮度偏移的影响,因为常量对梯度无影响
角点的位置受亮度缩放的影响,如下图所示,亮度拉伸后,角点的位置出现的变化(多了一个)。
角点的位置受图像缩放的影响,如下图所示,放大以后,所有的点被检测为边缘。
1.3 解决角点检测受图像缩放影响的问题
Harris角点检测,
对于平面,H的特征值都很小,接近于0
对于边沿,H的特征值一大一小,小的接近于0
对于角,H的特征值都很大。
当放大图像时(窗口保持不变),角点有可能变成边缘点。
在这个变化过程中,H的较小的特征值逐渐变为接近于0.
为了方便计算,Harris 算子 f 是的一种近视表示。
所以使f 取最大值的那个缩放可以找到角点。
下图展示了 f 值随图像缩放的变化。
为了方便计算 f 的变化,使用固定大小的窗口作用于高斯金字塔,如下图所示。
1.4 斑点检测
对于很多图像,没有角,只有类圆形的图片,如下图中的向日葵花芯和蝴蝶的白色斑点,如何检测呢?
“图像与某一个二维函数进行卷积运算实际就是求取图像与这一函数的相似性。同理,图像与高斯拉普拉斯函数的卷积实际就是求取图像与高斯拉普拉斯函数的相似性。当图像中的斑点尺寸与高斯拉普拉斯函数的形状趋近一致时,图像的拉普拉斯响应达到最大。”
所以在用不同的LoG 算子组对斑点进行滤波时,选择响应最大的LoG算子。
那么检测到的时多大半径的斑点呢?
规范化的高斯拉普拉斯函数为:
对其求极值:
得到:
所以在尺度, 高斯拉普拉斯响应值达到最大。
同理,如果图像中的圆形斑点黑白反向,那么高斯拉普拉斯的响应值在达到最小值。
2、特征描述
优秀的描述不会随图像的变化而改变,并且对于每一点描述是唯一的。
2.1 MOPS描述(Multiscale Oriented PatcheS descriptor)
- 以检测点为中心取40*40的窗口
- 缩小到原来的1/5
- 旋转至水平
- 亮度归一化
图像块的主方向由H矩阵的特征向量(较大特征值对应的)确定,
可以根据特征向量来旋转至水平。
亮度归一化是像素点均值为0,标准差为1,这样可以减少亮度差异造成的影响。
2.2 SIFT(Scale Invariant Feature Transform)
- 以特征点为中心,取16*16的窗口
- 计算每一个像素点的梯度(幅值和方向)
- 边缘处理,去掉弱边
- 创建方向的直方图
也可以使用关键点描述
SIFT的特征
- 能够处理不同的角度的图片
- 能够处理不同亮度的图片,甚至是在白天或者晚上
- 高校,可以实时处理
详细内容可参考此博文:SIFT
2.3 其它的描述
- HOG(Histogram of Gradients)
- FREAK(Fast Retina Keypoint)
- LIFT (Learned Invariant Feature Transform)
3、特征匹配
如何定义两个图片的特征的距离?
欧式距离=||f1 - f2 ||
距离的比值= ||f1 - f2 || / || f1 - f2’ ||
如何评价一个匹配的好坏?特征匹配中有正确的匹配,也有错误的匹配。
true positive= 正确匹配的个数
False positives = 错误匹配的个数
画出ROC曲线