<学习>了解MatchNet前需要了解的<1>

供个人学习使用

引用:
一只努力翻身的咸鱼《SIFT》
zddhub《SIFT算法详解》
[1]吴伟交,王敏,黄心汉,毛尚勤.基于向量夹角的SIFT特征点匹配算法[J].模式识别与人工智能,2013,26(01):123-127.
一瓶可乐zc

SIFT(Scale Invariant Feature Transform)尺度不变特征变换匹配算法
两张照片之所以能匹配得上,是因为其特征点的相似程度较高。
而寻找图像特征点,就需要知道什么是“图像尺度空间
1、图像尺度空间

人眼看图片时,会随着距离的变大而变得模糊,计算机看图也会从不同的尺度去看,尺度越大越模糊。
这里的尺度就是二维高斯函数当中的σ值,一张图片与二维高斯函数卷积后得到很多张不同σ值的高斯图像。所有不同尺度下的图像,构成单个原始图像的尺度空间。图像尺度空间表达就是图像在所有尺度下的描述。

尺度是客观存在的,高斯卷积只是表现尺度空间的一种形式。

2、
尺度空间表达——高斯卷积

核函数:
在假设训练样本是线性可分的,即存在一个划分超平面能将训练样本正确分类。然而现实任务中,原始样本空间内也许并不存在一个能正确划分两类样本的超平面。
对这样的问题,可将样本从原始空间映射到一个更高维的特征空间,使每一个样本在这个特征空间内线性可分。幸运的是,如果原始空间是有限维,即属性数有限,那么一定存在一个高维特征空间使样本可分。

令Φ(x)表示将x映射后的特征向量,于是,在特征空间中划分超平面所对应的模型可以表示为:

f(x)=ωT Φ(x)+b

其中ω和b是模型参数,有

在这里插入图片描述
在这里插入图片描述
其对偶问题是:
在这里插入图片描述
在这里插入图片描述

求解涉及到计算 Φ(xi)T Φ(xj),这是样本xi与xj映射到特征空间之后的内积,由于特征空间维数可能很高,甚至可能是无穷维,因此直接计算通常是困难的,为了避开这个障碍,可以设想这样一个函数:
在这里插入图片描述
即xi与xj在特征空间的内积等于它们在原始样本空间中通过函数κ(.,.)计算的结果,这称为“核技巧”。有了这样的函数,我们就不必直接去计算高维甚至无穷维特征空间中的内积。于是可以重写上式,求解后即可得到:
在这里插入图片描述
这里的函数κ(.,.)就是“核函数”(kernel function),上式显示出模型最优解可通过训练样本的核函数展开,这一展式也称为“支持向量展式”

显然,若已知合适映射φ(.)的具体形式,则可写出核函数κ(.,.),但在现实任务中我们通常不知道φ(.)的形式,那么合适的核函数是否一定存在呢?什么样的函数能做核函数呢?有下面的定理:

核函数:令χ为输入空间,κ(.,.)是定义在χxχ上的对称函数,则κ是核函数当且仅当对于任意数据D={x1,x2,…,xm},“核矩阵”K总是半正定的

————只要一个对称函数所对应的核矩阵半正定,它就能作为核函数使用。但是在不知道特征映射的形式时,我们并不知道什么样的核函数是合适的,而核函数也仅是隐式地定义了这个特征空间,于是,核函数选择称为SVM的最大变数,这方面有一个基本的经验:例如对文本数据通常采用线性核,情况不明时可现场时高斯核。若核函数选择不合适,则意味着将样本映射到了一个不合适的特征空间,很可能导致性能不佳。

常用核函数:
高斯核
在这里插入图片描述
其中σ>0,为高斯核的带宽。

高斯核:
高斯核是唯一可以产生多尺度空间的核。在低通滤波中,高斯平滑滤波无论是时域还是频域都十分有效。
高斯函数具有以下五个性质:
(1)二维高斯具有旋转对称性;

(2)高斯函数是单值函数;

(3)高斯函数的傅立叶变换频谱是单瓣的;

(4)高斯滤波器宽度(决定着平滑程度)是由参数σ表征的,而且σ和平滑程度的关系是非常简单的;

(5)二维高斯滤波的计算量随滤波模板宽度成线性增长而不是成平方增长。

一个图像的尺度空间记为L(x,y,σ),定义为原始图像l(x,y)与一个可变尺度的二维高斯函数G(x,y,σ)卷积运算。

在这里插入图片描述
二维高斯函数在数学坐标系下的图像
上图是二维高斯函数在数学坐标系下的图像

在这里插入图片描述
上图为高斯函数对应的高斯核。
高斯核是圆对称的,在图片像素中展示出来的是一个正方形,其大小由高斯模板确定。卷积的结果使原始像素值有最大的权重,距离中心越远的相邻像素权重值也越小。

**

那么为什么会提到图像尺度空间与高斯核(高斯模糊)呢?

**
尺度空间表达指的是不同高斯核所平滑后的图片的不同表达。意思就是:原始照片的分辨率,和经过不同高斯核平滑后的照片的分辨率是一样的。但是对于计算机来说,不同模糊程度,照片看上去的模糊程度就不一样了,高斯核越大,图片看上去越“模糊“”。

那么,图片的模糊与特征点有关系吗?

计算机没有主观意识去分辨哪里是特征点,它能做到的,只是分辨出变化率最大的点。彩色图是三通道的,不好检测突变点。需要将RGB转化为灰度图,此时为灰度图,灰度值在0~255之间。

无论人眼观测照片的距离有多远,只要能辨认出物体关键的轮廓特征,就可以大致知道图像表达的信息。计算机也一样,高斯卷积之后,图像虽然变模糊了,但是整体像素没有变,依然可以找到灰度值突变的点。

而这些点,就可以作为候选特征点了。后期再进一步减少点的数量,提高准确率。

金字塔分辨率表达——降采样

若对一张图片降采样,其像素点就会减少,图片尺寸就会随之减少。那么给人的感觉就好比一个金字塔。

在这里插入图片描述
所谓图像金字塔化就是:先进行图像平滑,再进行降采样。根据降采样率不同,得到一系列尺寸逐渐减小的图片。

两种表达的不同之处在于:
尺度空间表达在所有尺度上具有相同分辨率。而“图像金字塔化”在每层的图像都会降低分辨率。
图像金字塔化处理速度快,占用储存空间小,而尺度空间表达刚好相反。
那么将两者融合起来的话,就得到了

LoG(Laplassian of Gaussian)高斯拉普拉斯变换

其步骤是:
1.先将图像降采样。得到不同分辨率下的图像金字塔。
2.再对每层图像进行高斯卷积,这样一来,原本的图像金字塔每层从一张图像增加到了多张不同模糊程度的照片。
在这里插入图片描述
在这里插入图片描述
然而为了得到更好的效果,DoG就出现了。
DOG(Difference of Gaussian)高斯差分
在完成了LoG后,用其相邻图像进行相减,得到所有图像重新构建的金字塔就是DoG金字塔(下图右侧)。
在这里插入图片描述
DOG局部极值点
1.初步寻找极值点
每个像素点与其相邻点比较,比周围点值都大的就为DoG极值点。
2.极值点精确定位
而我们找到的点是经过差分后的极值点,是离散空间上的点,并不是真正的极值点。我们需要一条曲线来拟合。
在这里插入图片描述
离散转化为连续,可以使用泰勒展开。
在这里插入图片描述

则极值点为:
在这里插入图片描述
去除边缘影响:
因为物体的边缘轮廓在灰度图中,存在着灰度值的突变,这样的点就在计算中被误以为是特征点。
仔细分析,边缘在纵向上灰度值突变很大,而横向上就变化很小了。好比你用黑笔在白纸上画一段线,垂直看,黑色区域与白色区域突变很大,但水平方向看,黑色线上某邻接点还是黑色,突变程度很小。

由于这一特殊性质,可以使用Hessian矩阵。

Hessian矩阵:

Hessian矩阵在图像处理中有广泛应用,比如边缘检测,特征点检测等。其本身也包含泰勒展开,多元函数求导,矩阵,特征值等内容。以下从原理和实现讲一讲Hessian Matrix。

泰勒展开及海森矩阵
将一个一元函数f(x)在x0处展开可以得到:
f ( x 0 + δ x ) = f ( x 0 ) + δ x ∗ f ′ ( x 0 ) + 1 2 ! δ x 2 ∗ f ′ ′ ( x 0 ) + o ∥ δ x 2 ∥ \text{f}({{x}_{0}}+\delta x)=f({{x}_{0}})+\delta x*{{f}^{'}}({{x}_{0}})+\frac{1}{2!}\delta {{x}^{2}}*{{f}^{''}}({{x}_{0}})+o\left\| \delta {{x}^{2}} \right\| f(x0+δx)=f(x0)+δxf(x0)+2!1δx2f(x0)+oδx2
其中二阶导数的部分映射到二维空间就是Hessian Matrix。在二维图像中,假设图片像素值(x,y)关于坐标系的函数是f(x,y),那么将f(x+dx,y+dy)在(x0,y0)处展开可以得到:
在这里插入图片描述
若将其舍去余项,改写为矩阵形式可得:
在这里插入图片描述
上式等号右边第三项的第二个矩阵就是Hessian矩阵了。从而有了结论,海森矩阵就是空间中一点的二阶倒数。进而可以推广到多维空间。
在这里插入图片描述
海森矩阵的意义
以二维图像为例,一阶导数是灰度变化程度,及灰度梯度。二阶导数是灰度梯度变化程度,二阶导数越大灰度变化越不具有线性性。

在二维图像中,海森矩阵是二维正定矩阵。有两个特征值和对应的两个特征向量。两个特征值表现出了曲线在两个特征向量所指方向上的各向异性。如果利用特征值和特征向量构成一个椭圆,那么这个椭圆就标注出了图像变化在各个方向上的各向异性。

海森矩阵的应用
上文提到的各向异性在图像处理方面得到了很广泛的应用。以二维图像为例,图像中的点性结构具有各向同性,而线性结构具有各向异性。因此可以用海森矩阵对图像中的线性结构进行增强,过滤掉点状结构和噪声点。同样。也可以用于找出图中的点状结构,过滤掉其他点。

当然,在使用海森矩阵时,不需要对图像进行泰勒展开,只需要直接求取矩阵中的元素即可。

一般对数字图像进行二阶求导使用的是以下方法:
f x x ( x , y ) = f ( x , y ) − f ( x + δ x , y ) − ( f ( x + δ x , y ) − f ( x + 2 δ x , y ) ) {{\text{f}}_{xx}}(x,y)=\text{f}(x,y)-f(x+\delta x,y)-(f(x+\delta x,y)-f(x+2\delta x,y)) fxx(x,y)=f(x,y)f(x+δx,y)(f(x+δx,y)f(x+2δx,y))
但是这种方法鲁棒性很差,容易受到图像中局部信号的干扰,甚至可以说,这种方法是存在争议的。因为这一点的二阶导数也可以用下面这种方法来描述:
f x x ( x , y ) = f ( x , y ) − f ( x − δ x , y ) − ( f ( x − δ x , y ) − f ( x − 2 δ x , y ) ) {{\text{f}}_{xx}}(x,y)=\text{f}(x,y)-f(x-\delta x,y)-(f(x-\delta x,y)-f(x-2\delta x,y)) fxx(x,y)=f(x,y)f(xδx,y)(f(xδx,y)f(x2δx,y))
也可以采用其他方法表述。而且得到的值往往不同。因为这种方法只把包含其自身在内的三个点,信息量不足。因此提倡使用LoG(线性空间尺度理论)进行求导。对一个点求导,等于使用高斯函数的导数与函数卷积。
∂ f ( x , y ) ∂ x = f ( x , y ) ∗ ∂ G ( x , y ) ∂ x \frac{\partial \text{f}(x,y)}{\partial x}=f(x,y)*\frac{\partial G(x,y)}{\partial x} xf(x,y)=f(x,y)xG(x,y)

由于高斯模板可以将点周围一矩形的范围都包含进来,这样就不会有偏差。所以利用图像求取hessian矩阵中的元素时,将图像与高斯函数的二阶导数做卷积即可。在此提供高斯函数的二阶偏导。
在这里插入图片描述

方向赋值

经过harris角点检测算法之后,基本就得到了想要的精确特征点了。接下来要求他的方向。在DOG金字塔中,有好几层高斯模糊后的图像。在此,我们对其中一张图像进行说明。当我们精确定位到关键点后,需要找到该特征点对应的尺度之σ,根据这一尺度值,将对应的高斯图像关键点进行有限差分。以3X1.5σ为半径的区域内图像梯度的幅角和幅值,得到:
在这里插入图片描述
然后利用直方图统计领域内像素对应的梯度和幅值:梯度方向角为横轴刻度,每45°为一个单位,那么横轴内就有八个刻度,纵轴是对应梯度的幅值累加值。
在这里插入图片描述
幅值取最高的方向为主方向,有的时候会出现个第二峰值,因为有较多的关键点是多方向的。如果直接把他忽略掉对最后匹配精度的影响还是蛮大的。
所以,为了匹配的稳定性,我们将超过峰值%80的能量的方向,称为辅方向。

关键点描述

确定描述子采样区域
到了这里,我们就已经得到了赋值后的SIFT特征点了,其包含了位置、尺度,方向等信息。
接下来要做的是:关键点的描述:即用一组向量将关键点描述出来。
SIFT描述子h(x,y,θ)是对特征点附近邻域内高斯图像梯度统计结果的一种描述。它是一个三维的阵列,但通常将它表示成矢量。矢量是通过对三维阵列按一定规律进行排列得到的。特征描述子与特征点所在的尺度有关,因此,对梯度的求取应在特征点对应的高斯图像上进行。
在这里插入图片描述
添加方向的目的是为了即使图像旋转了也能识别出来,因为这一步将同一个图像的方向全部统一了。
为了进一步提高SIFT特征点的稳定性,将特征向量进行归一化处理以消除线性光照变化对特征向量的影响。由于非线性光照变化,对像素点的梯度幅值影响大,对梯度方向影响小,因此考虑先对梯度的幅值进行限幅(如0.2),再对限幅后的特征向量进行归一化。经过修正后的特征向量对图像的光照变化具有相当高的不变性。

生成描述子
为了保证特征矢量具有旋转不变形,需要以特征点为中心,将特征点附近邻域内(mσ(Bp+ 1)√2 x mσ(Bp+ 1)√2)图像梯度的位置和方向旋转一个角度θ,即将原图像x轴转到与主方向相同的位置。

旋转公式如下:
( x ′ y ′ ) = ( cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ) ( x y ) \left( \begin{matrix} {{\text{x}}^{'}} \\ {{y}^{'}} \\ \end{matrix} \right)=\left( \begin{matrix} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \\ \end{matrix} \right)\left( \begin{matrix} \text{x} \\ y \\ \end{matrix} \right) (xy)=(cosθsinθsinθcosθ)(xy)
在特征点附近邻域图像梯度的位置和方向旋转后,再以特征点为中心,在旋转后的图像取一个mσBp x mσBp大小的图像区域,并将它等间隔划分成Bp X Bp个子区域,每个间隔为mσ像元。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值