关于SIFT算法原理

SIFT算法原理:

尺度空间极值检测

尺度空间连续变化尺度参数获得多尺度下的尺度空间表示序列,对这些序列进行尺度空间主轮廓的提取,以主轮廓作为一种特征向量,实现边缘、角点检测和不同分辨率上的特征提取等。,相当于一个图片需要获得多少分辨率的量级。如果把一个单尺度图像,对其分辨率不断减少,然后将这些图片摞在一起,更容易获取图像的本质特征。可以看成一个四棱锥的样式,这个东西就叫做图像金字塔。计算机无法分辨一个景物的尺度信息。而人眼不同,除了人大脑里已经对物体有了基本的概念,尺度空间中各尺度图像的模糊程度逐渐变大,能够模拟人在距离目标由近到远时目标在视网膜上的形成过程。人眼在距离物体近时,能够获得物体足够多的特性,在距离物体远时,能够或略细节。

                                                       关于SIFT算法原理_第1张图片

表示:

在SIFT当中,利用了一个叫做高斯核的方程来构建尺度空间,高斯核函数是唯一多尺度空间的核。原理就是利用高斯分布的特性,高斯核函数的参数有三个G(x,y,σ),在以某一个点为中心要进行以某一个窗口大小进行在滤波当中,第三个参数σ在运算中是固定的一个值。所谓的“尺度”,就是这个σ值变化,而x和y表示像素坐标。σ的值越小,图像被平滑(被模糊)的越少,尺度也越小。所以,大尺度图片可以对应成一个图像离远处观看,是个大致轮廓,小尺度图片可以对应成离近处观看,有更多细节。

构建尺度空间的目的是为了检测出在不同的尺度下都存在的特征点,如此可以获得缩放不变性

其中利用图像I(x,y)与G(x,y,σ) 进行卷积运算,得到尺度空间L(x,y,σ)

L(x,y,σ)= G(x,y,σ)* I(x,y) ,*表示卷积运算

 高斯金字塔的构建

建立尺度空间后,需要找到关键点,此时需要实现高斯金字塔的构造来实现关键点的求取。

图像的金字塔模型是指,将原始图像不断降阶采样,得到一系列大小不一的图像,由大到小,从下到上构成的塔状模型。原图像为金子塔的第一层,每次降采样所得到的新图像为金字塔的一层(每层一张图像),每个金字塔共n层。金字塔的层数根据图像的原始大小和塔顶图像的大小共同决定.

关于SIFT算法原理_第2张图片

 

计算公式如下

        M,N为原图像的大小,t为塔顶图像的最小维数的对数值。高斯金字塔在简单降采样的基础上加上了高斯滤波, 让尺度体现其连续性

高斯差分金字塔DOG:

如果求取特征点,可以使用一个叫做拉普拉斯算子进行运算。但是,由于拉普拉斯算子的效率太低,再SIFT算法当中使用差分来代替。每一组相邻当中相邻两层的图像做差,得到的图像再“叠”成一个金字塔就是高斯差分金字塔DOG。可以通过高斯差分图 像看出图像上的像素 值变化情况。(如果没有变化,也就没有特征。特征必须是变化尽可能多的点。) DOG图像描绘的是目标的轮廓

DoG(Difference of Gaussian)函数:

                                     关于SIFT算法原理_第3张图片

DOG局部特征点检测

计算一个某一个点是否是局部最大值,在离散的三维空间当中,以该点为中心,检测它周围的点。类似魔方的中心位置一样,中间的检测点和它同尺度的8个相邻点和上下相邻尺度对应的9×2个点共26个点比较,以确保在尺度空间和二维图像空间都检测到极值点。如下图中的“叉”就是待计算是否是局部极值点。

                                                       关于SIFT算法原理_第4张图片

关键点定位       

找到的关键点要进行处理,去除一些不好的特征点,保存下来的特征点能够满足稳定性等条件。

主要是去掉DOG局部曲率非常不对称的像素。

因为低对比度的特征点和边界点对光照和噪声变化非常敏感,所以要去掉。利用阈值的方法来限制,在opencv中为contrastThreshold。

1.去除低对比度的特征点:

使用泰勒公式对DOG函数空间进行拟合,去掉小于修正阈值的关键点。

2.去除不稳定的边界点:

利用Hessian矩阵(求导数的矩阵),利用边缘梯度的方向上主曲率值比较大,而沿着边缘方向则主曲率值较小的原理,将主曲率限制为某个值。满足该值条件的点留下,反之去除。关键点方向分配

                                  

每个关键点设置方向以后可以获得旋转不变性。使用图像梯度的方法求取局部结构的稳定方向。

完成关键点的梯度计算后,使用直方图统计邻域内像素的梯度和方向。梯度直方图将0~360度的方向范围分为36个柱(bins),其中每柱10度。如图所示,直方图的峰值方向代表了关键点的主方向。

                         关于SIFT算法原理_第5张图片

方向直方图的峰值则代表了该特征点处邻域梯度的方向,以直方图中最大值作为该关键点的主方向。为了增强匹配的鲁棒性,只保留峰值大于主方向峰值80%的方向作为该关键点的辅方向。这样设定对稳定性有很大帮助。至此,将检测出的含有位置、尺度和方向的关键点即是该图像的SIFT特征点。

关键点描述符

经过上面的步骤计算,每个关键点有三个信息,位置、尺度、方向。所以具备平移、缩放、和旋转不变性。

接下来对每个关键点用一组向量将这个关键点描述出来,使其不随着光照、视角等等影响而改变。该描述符不但涉及关键点,而且还涉及到关键点周围的像素,使其有更强的不变特性。

基本原理是选取关键点周围16×16的像素区域,分成4个小块,每个小块创建8个bin的直方图,这总共的128个信息的向量就是关键点描述符的主要内容。此外还要测量,以达到光照、旋转的稳定性。如图

               关于SIFT算法原理_第6张图片

 

关键点匹配:

分别对模板图和实时图建立关键点描述符集合,通过对比关键点描述符来判断两个关键点是否相同。128个信息的向量使用欧氏距离来实现。在关键点的匹配当中,使用的搜索算法为区域搜索算法当中最常用的k-d树实现。。搜索的内容是以目标图像的关 键点为基准,搜索与目标图像的特征点最邻近的原图像特征点和次邻 近的原图像特征点。

比较之后,需要在进行消除错配点才算完成

你可能感兴趣的:(python)