姓名:王翊越
学号:19021210658
转自:https://www.bilibili.com/video/BV1Qb411W7cK?from=search&seid=2160647936458304350
【嵌牛导读】在图像识别中,目标物体经常会因为拍摄角度不同而产生方向,位置以及大小的变化。那么要使用一种识别方法,可以在目标发生了这些变化后仍然可以鉴别到,就需要提取到目标物体的具体特征。这些特征不受方向大小以及位置的影响。那么如何提取,或者说如何选择特征,就需要用到SIFT算法来处理。
【嵌牛鼻子】SIFT(尺度不变特征变换)
【嵌牛正文】
一、图像预处理
1) 建立高斯金字塔
i. 高斯模糊
高斯模糊,也叫高斯平滑,通常用来减少图像噪声以及降低细节层次。常用于计算机视觉算法中的预先处理阶段,以增强图像在不同比例大小下的图像效果(参见尺度空间表示以及尺度空间实现)。从数学的角度来看,图像的高斯模糊过程就是图像与正态分布做卷积。由于正态分布又叫做高斯分布,所以这项技术就叫做高斯模糊。图像与圆形方框模糊做卷积将会生成更加精确的焦外成像效果。由于高斯函数的傅立叶变换是另外一个高斯函数,所以高斯模糊对于图像来说就是一个低通滤波器。
ii. 高斯核尺度σ
高斯核尺度σ,也叫高斯模糊半径,模糊半径越大,所得到的图像模糊效果就越明显。在图像处理中,可有效去除一部分纹理的干扰。
对原图片进行σ=0.5;σ=1.5;σ=10的高斯模糊处理:
原图片:

当σ=0.5时的图像:

当σ=1.5时的图像:

当σ=10时的图像:

通过对图像进行不同尺度的高斯模糊,可以有效的模拟物体远处模糊,进出清晰的视觉效果,从而更好的在接下来高斯金字塔的构建中具备不受图像尺度变换的识别能力。
同时,依据高斯模糊,二维高斯分布的函数特点可知,卷积核尺度σ具有一下关系:

即通过两次尺度为σ1与σ2的两次高斯模糊,相当于进行一次尺度为σ的高斯模糊。
iii. 对图像进行多尺度高斯模糊

首先通过对原图像进行不同尺度σ的高斯模糊,得到多张模糊程度不同,大小相同的图片。这些图片分为一组,每张图片分别位于这一组的不同层,作为高斯金子塔中的每一组。
iv. 对图像进行下采样
对每一层图片进行相隔一个像素取点,得到大小为原图像一半大小的图像,之一过程,称为降采样。 通过多次降采样,生成高斯模糊金字塔的每一组,不同大小的图片组层层叠加,形成图片的高斯模糊金字塔。
2) 建立差分金字塔

通过对每一组中的相隔两幅图片中的每个像素点做差,得到新图片,新图片通过同样方式叠加,形成高斯差分金字塔。
3)高斯金字塔参数的确定
高斯金字塔主要参数有:高斯核尺度σ,高斯金字塔组数O,每组图像层数:S。
i. 高斯核尺度σ

参考David Lowe论文中的实验值,每一层需要相应的卷积核尺度具有以下关系:
初始卷积核尺度σ0:
σ0=√(〖1.6〗^2-〖0.5〗^2 )≈1.52

其中σ为对图片进行高斯模糊的目标尺度大小,σ为1.6,但考虑到机器对图像采样时由于机械等外界影响,按已经进行了卷积核尺度为0.5的高斯模糊进行处理,为经验值。依照卷积核尺度符合勾股数特点,因此实际需要的高斯核尺度σ0为1.52。
每层卷积核尺度σn:
σn=k^n*σ0
k=2^(1⁄n)
然后取第n+1层的卷积核尺度作为下一组的第一层,其值正好为2σ0,以此类推,可得到之后所有层需要卷积的高斯核尺度大小。
ii. 高斯金字塔组数O和每组图像层数S
高斯金字塔组数O:
O=[〖log〗_2 (min(M,N) )]-3

其中M,N为图片的长于宽,通过以上公式可计算出构建高斯金字塔所需要的组数。
每组图像层数S:
S=n+3
其中n为提取多少张图片中的特征,S为该组应该具有S层,考虑到产生差分图片时层数会减少一副,在取导时顶层与底层的图片不具有导数,因此舍弃两幅,总共舍弃三幅。
二、关键点位置确定
在通过对高斯差分金子塔求导取极值的过程中,需要对所取到的极值点进行过滤等处理,因此需要经过以下处理,得到所需的极值点位置等信息。
1)阈值化
为了去除不平稳点和噪声寻找像素极值点,需要移除取值较小点,依照以下公式:
abs(val)>0.5*T/n,T=0.04

其中T取0.04,依照论文提出该值为实验经验值。
2)寻找极值点位置
寻找特征点,就是寻找那些在图像中比较稳定,且含有的信息量比较充足的点,这些点常常是图像中的极值点。因此,要寻找特征点,首相要确定图像中极值点的位置。极值点,即在上下层图片以及本层图片的26个空间中,若该点值最大,则称该点为一个极大值点,但是在判断极值点之前,要对图像做阈值化处理。
考虑到图像各像素点为离散值,因此实际的极值点可能不位于所求得的极值点位置,因此就需要依据该极值点周围的变化趋势,算出真实极值点位置。使用的方法为在该极值点使用泰勒展开,然后对其求导求出最接近真实极值点的位置。

三元二阶维泰勒展开:


依据该公式的矢量形式:

对其进行求导,得到:

导数取零,求解,算出极值点位置:

将其带入到泰勒展开式,求得极大值:

3)处理极值点
i. 去除边缘效应
依据极值点不同方向的曲率大小,可判断该极值点是否处于图像边缘,若曲率相差过大,即可判断该点位于图像边缘。
使用海斯矩阵处理图像:

依据矩阵的迹与行列式来判断极值点是否处于边缘。


若行列式异号,则说明曲率值异号,舍弃该点。
若不满足:

则说明两曲率间差值过大,则舍弃该点。
经过上述过程,取得真实极值点位置,并与原图像位置进行比例换算,得到最终极值点大小与位置,该极值点也被称为:关键点或特征点。
三、为特征点赋予方向
由于在对高斯差分金字塔每个像素点求梯度的过程中,获得了每个像素点的梯度方向与大小,并取该像素点的最大方向与幅值作为该点方向。要为特征点赋予方向,就需要统计以特征点为圆心,以该特征点所在的高斯图像的尺度的1.5倍为半径的园内的所有的像素的梯度方向以及梯度幅值,并作1.5σ的高斯滤波。

在圈定的区域内,进行每个方向和大小的投票,得到方向大小直方图,由统计得到的直方图可以直观的看出每个方向(8个)上的大小。以最大方向作为该特征点的主方向。一个图像一般只能由一个主方向,但当其他方向上的幅值超过了主方向大小的80%,则认定该方向为辅方向,一个特征点可以拥有多个辅方向。
至此,每个特征点就具有了位置(x,y),σ(尺度),主方向四个特征。
四、构建特征点描述符
获得了特征点与特征点方向,仍需要为特征点构建描述符,在进行图像检索的过程中,不仅需要找到图片中的特征点,而且需要将特征点相匹配,匹配的过程中就需要详细的描述特征点特征,这一过程就是构建特征点描述符。
1)描述符调整

为了保证特征点描述符具有方向不变性,因此在构建特征点描述符前将主方向设置为x轴正方向,即将主方向角设置为0度,从而时描述符不受方向影响。
2)描述符结构
i. 确定特征点描述符区域大小:

其中m取3,为论文经验值,mσ为每个小区域边长大小,d为小区域个数,总共取边长C为:
C=mσ (d+1)/2 √2
ii. 特征点描述符结构

将每个小区域分为16个子区域,将小区域中的16个子区域方向与大小进行高斯加权后进行统计,得到该小区域的8个方向上各个大小的数据。
由d=4可知,总共需要统计16个小区域的方向数据,每个小区域产生8个方向数据,因此总共获得16*8=128枚数据,构成该特征点描述符。由此得到的每个SIFT描述符应具有128维特征。
至此SIFT构建描述符核心算法简述完成。
网友评论