SIFT特征匹配详细讲解

参考博客
https://blog.csdn.net/sss_369/article/details/84674639
https://blog.csdn.net/qq_37374643/article/details/88606351
https://blog.csdn.net/ds0529/article/details/79617619
https://blog.csdn.net/ds0529/article/details/79617619

SIFT特征匹配:

高斯金字塔–>DoG高斯差分金字塔(求极值点)–>关键点精准定位–>关键点方向方向分配–>关键点特征描述

(1)构建高斯金字塔

图像的金字塔模型是指将原始图像不断降阶采样,得到一系列大小不一的图像,由大到小,从下到上构成的塔状模型。原图像为金子塔的第一层,每次降采样所得到的新图像为金字塔的一层(每层一张图像),每个金字塔共n层。为了让尺度体现其连续性,高斯金字塔在简单降采样的基础上加上了高斯滤波。如下图所示,将图像金字塔每层的一张图像使用不同参数做高斯模糊,Octave表示一幅图像可产生的图像组数,Interval表示一组图像包括的图像层数。另外,降采样时,高斯金字塔上一组图像的初始图像(底层图像)是由前一组图像的倒数第三张图像隔点采样得到的。
SIFT特征匹配详细讲解_第1张图片

(2)DOG空间极值检测

1、DOG函数
SIFT特征匹配详细讲解_第2张图片
2、DoG高斯差分金字塔
(1)对应DOG算子,需构建DOG金字塔。
可以通过高斯差分图像看出图像上的像素值变化情况。(如果没有变化,也就没有特征。特征必须是变化尽可能多的点。)DOG图像描绘的是目标的轮廓。
SIFT特征匹配详细讲解_第3张图片
(2)DOG局部极值检测
特征点是由DOG空间的局部极值点组成的。为了寻找DoG函数的极值点,每一个像素点要和它所有的相邻点比较,看其是否比它的图像域和尺度域的相邻点大或者小。特征点是由DOG空间的局部极值点组成的。为了寻找DoG函数的极值点,每一个像素点要和它所有的相邻点比较,看其是否比它的图像域和尺度域的相邻点大或者小。如下图,中间的检测点和它同尺度的8个相邻点和上下相邻尺度对应的9×2个点共26个点比较,以确保在尺度空间和二维图像空间都检测到极值点。
SIFT特征匹配详细讲解_第4张图片

(3)关键点精准定位

离散空间的极值点并不是真正的极值点,图4.1显示了二维函数离散空间得到的极值点与连续空间极值点的差别。利用已知的离散空间点插值得到的连续空间极值点的方法叫做子像素插值(Sub-pixel Interpolation)。

SIFT特征匹配详细讲解_第5张图片

(4)关键点方向方向分配

1、通过尺度不变性求极值点,需要利用图像的局部特征为给每一个关键点分配一个基准方向,使描述子对图像旋转具有不变性。对于在DOG金字塔中检测出的关键点,采集其所在高斯金字塔图像3σ邻域窗口内像素的梯度和方向分布特征。梯度的模值和方向如下:
在这里插入图片描述
2、本算法采用梯度直方图统计法,统计以关键点为原点,一定区域内的图像像素点确定关键点方向。在完成关键点的梯度计算后,使用直方图统计邻域内像素的梯度和方向。梯度直方图将0~360度的方向范围分为36个柱,其中每柱10度。如下图所示,直方图的峰值方向代表了关键点的主方向,方向直方图的峰值则代表了该特征点处邻域梯度的方向,以直方图中最大值作为该关键点的主方向。为了增强匹配的鲁棒性,只保留峰值大于主方向峰值80%的方向作为该关键点的辅方向。
SIFT特征匹配详细讲解_第6张图片

(5)关键点特征描述

选取主方向后需要得到描述子,为了消除旋转影响,首先将特征点附近需要考虑的邻域根据主方向进行旋转:
SIFT特征匹配详细讲解_第7张图片
然后将这个邻域分为四个子区域(也可以是16个),每个子区域包含4*4区域,每个像素都有梯度方向,利用直方图统计每个子区域在8个方向的梯度值大小的统计值:
SIFT特征匹配详细讲解_第8张图片
这样每个子区域就有8维的向量,连起来就是32维向量,如果是16个子区域就是128维向量,也就是SIFT描述子
SIFT特征匹配详细讲解_第9张图片

SIFT特征点匹配:

1、分别对模板图(参考图,reference image)和实时图(观测图,
observation image)建立关键点描述子集合。目标的识别是通过两点集内关键点描述子的比对来完成。具有128维的关键点描述子的相似性度量采用欧式距离。
3、匹配可采取穷举法完成,但所花费的时间太多。所以一般采用kd树的数据结构来完成搜索。搜索的内容是以目标图像的关键点为基准,搜索与目标图像的特征点最邻近的原图像特征点和次邻近的原图像特征点。
Kd树如下如所示,是个平衡二叉树

你可能感兴趣的:(自然语言处理,深度学习)