特征匹配 SIFT原理 单应性匹配
参考:https://blog.csdn.net/jancis/article/details/80824793
https://blog.csdn.net/qq_45769063/article/details/108773998
概念先导
特征匹配
一幅图像中总存在着其独特的像素点,这些点我们可以认为就是这幅图像的特征,称为特征点。而CV中很重要的图像特征匹配就是以特征点为基础而进行的,一般来讲进行特征匹配的步骤如下:
图像预处理
创建特征检测器
获取特征点及特征描述符
创建特征匹配器
选取优良匹配点
绘制相应的匹配线
本文重点介绍检测算法SIFT
和匹配算法单应性检测
尺度空间
高斯金字塔
上述的尺度空间在实现时就是搭建高斯金字塔
构建步骤如下:
对图像做高斯平滑
对图像做降采样
结构图:
从下到上,图像尺度变大,细节变少
σ 是尺度空间因子,值越小表示图像被平滑的越少,相应的尺度也就越小
尺度不变特征
它的理念是, 不仅在任何尺度下拍摄的物体都能检测到一致的关键点,而且每个被检测的特征点都对应一个尺度因子。 理想情况下,对于两幅图像中不同尺度的同一个物体点, 计算得到的两个尺度因子之间的比率应该等于图像尺度的比率。本文介绍的SIFT特征就是其中一种,其对旋转、尺度缩放、亮度变化等保持不变性。
SIFT算法步骤
1. 尺度空间的搭建
前面介绍了高斯金字塔。而在SIFT中使用的是高斯差分金字塔DOG,搭建步骤是先搭建高斯金字塔在此基础上再构建DOG。
高斯差分金字塔的第1组第1层是由高斯金字塔的第1组第2层减第1组第1层得到的,以此类推,逐组逐层生成每一个差分图像,所有差分图像构成差分金字塔,每一组在层数上,高斯差分金字塔比高斯金字塔少一层。
2. 尺度空间极值点检测
SIFT特征点是由高斯差分空间的局部极值点经过筛选组成的,中间的检测点和它同尺度的8个相邻点和上下相邻尺度对应的9×2个点共26个点比较, 一个点如果在DOG尺度空间本层以及上下两层的26个领域中是最大或最小值时,就认为该点是图像在该尺度下一个候选的特征点,DoG图像中的大值和小值出现在图像区域发生较大变化的边缘处,没有变化的区域响应则接近于0
3. 去除低对比度的点和不稳定的边缘响应点
去除低对比度的点
在SIFT中,图像局部块的对比度是用DOG响应的绝对值大小来度量的,因为DOG运算的本质是度量一个像素点和其周围像素的不同,值越大则对比度越高,因此需要去掉值小的点:用二阶泰勒展开式来拟合并估计DOG的响应值,若该特征点的响应值的绝对值>=0.03,则保留该特征点,否则丢弃。
去除不稳定的边缘响应点
边缘的梯度值是朝同一个方向的,于是会呈现明显的梯度主方向,SIFT寻找的局部图像块,期望局部块中的主梯度方向与其他方向的梯度相差不要太大,通过计算DOG的二阶导数(Hessian矩阵),得到主梯度方向和其他方向的比值,保留该比值小于一定数值的局部特征点。
4. 特征点方向匹配
统计上述每个特征点3sitar(圆形区域,以该特征点为中心,半径为3*sigma作一个圆域)邻域的梯度方向,选直方图**最大值为主方向 **保留>80%max的作为辐方向
注意:为了保证不同尺度下的同一特征点都包含相同的信息量,那么窗口的大小必须不一样:同一个原始图像,尺度越大(细节变少),窗口应该越大;反之,如果窗口大小不变,尺度越大的图像包含的信息量越少。
5. 特征点描述—位置+尺度+方向
这组向量称为描述子(建议大小4*4*8)
Lowe建议将关键点邻域划分为4*4个子区域(种子点),每个种子点有8个方向(每个子区域的梯度方向直方图将0度到360度划分为8个方向范围,每个范围为45度,这样每个种子点共有8个方向的梯度强度信息)
当两幅图像的SIFT特征向量生成后,下一步采用特征点向量的欧式距离作为两幅图像中的特征点相似性判定度量,取图像1中的某个特征点,找出图像2中与其欧式距离最近的前两个特征点,在这两个特征点中,如果最近的距离与次近的距离比值小于某个阈值,则接受这一对匹配点,降低这个比例阈值,SIFT匹配点数量会减少,但更加稳定。
单应性变换
- 待更。。。