今天看啥  ›  专栏  ›  用户7013399708647

图像对齐与图像拼接(一)

用户7013399708647  · 掘金  ·  · 2021-04-21 19:16
阅读 13

图像对齐与图像拼接(一)

掌握图像的SIFT特征检测原理

SIFT算法又叫尺度不变特征变换匹配算法SIFT算法分解为如下四步:

  1. 尺度空间极值检测:搜索所有尺度上的图像位置。通过高斯微分函数来识别潜在的对于尺度和旋转不变的兴趣点。
  2. 关键点定位:在每个候选的位置上,通过一个拟合精细的模型来确定位置和尺度。关键点的选择依据于它们的稳定程度。
  3. 方向确定:基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向。所有后面的对图像数据的操作都相对于关键点的方向、尺度和位置进行变换,从而提供对于这些变换的不变性。
  4. 关键点描述:在每个关键点周围的邻域内,在选定的尺度上测量图像局部的梯度。这些梯度被变换成一种表示,这种表示允许比较大的局部形状的变形和光照变化。

检测尺度空间极值

构建尺度空间 这里的尺度可以理解为图像的模糊程度,就是眼睛近视的度数。尺度越大细节越少,SIFT特征希望提取所有尺度上的信息,所以对图像构建尺度空间, 也就是实用不同的平滑核对图像进行平滑。所以,这里的平滑核选用高斯核,空间尺度有高斯核尺度决定

image.png

其中l是原图像,*是卷积符号,对应尺度下的尺度图像。是高斯核。

image.png

尺度空间描述了不同模糊程度上的特征,而并没有刻画图像尺寸大小的情形,所以文中将尺度空间和图像金字塔结合起来。图像的金字塔是通过对图像逐步平滑下采样得到的。 令每一层金字塔(octave)中尺度变化范围为,每层金字塔测量s个尺度,那么第t层金字塔的尺度范围就是,第层金字塔的第一幅图像由上层塔中尺度下的下采样的到,下采样比例为0.5. 每一层金字塔中多层尺度变化因子是,第n层尺度是这样能够保证从金字塔底部到顶部的尺度是连续的

image.png

DoG极值

现在已经将图像变到尺度空间了,希望在这个空间找到比较显著的点,即变化明显的点,也就是说在图像逐渐模糊的过程中引起你注意的点,这个点突不突出可以通过尺度轴上变化趋势来体现,即尺度轴上的梯度极值。 在尺度轴上计算梯度就是图像沿着尺度轴差分

image.png

这里DoG近似等于尺度归一化的高斯拉普拉斯算子,而尺度归一化高斯拉普拉斯算子相较于其他角点检测算子,如梯度,Hessian或Harris焦点特征能够更稳定的图像特征

现在就要找极值点了,在DoG空间中寻找极值,也就是说比周围点都大或者都小的点认为是关键点。既然DoG是差分图像叠在一起的,这里的周围当然是3D的周围,共包括相邻的26个邻点。

那现在就是沿着尺度轴,逐步查找对应尺度上的极值。我们现在在图像的一个像素点沿着尺度轴看过去,就成了一维图像

每层金字塔中有s层尺度图像,就是说有s个尺度,我们希望在s个尺度上都寻找极值点,那么应该有s+2层DoG图像才可以,因为这个过程是三层数据比较嘛。 而DoG图像是两层图像差分得来的,所以s+2层DoG图像应该需要s+3层尺度图像。

所以在每一层金字塔上都应该计算s+3层尺度图像。

这样我们就从DoG空间中粗略的找到了关键点。但为了进一步精化结果,需要对结果进行筛选,去掉噪声点。

去除干扰

无论是LoG还是DoG在做关键点检测时都会受到边缘的影响

去除干扰1: 较小的极值

当然可以直接对找到的极值点的值进行阈值化过滤,但是为了更加精确的定位关键点的位置,对关键点进行3D二次函数的拟合(可以类比最优化里牛顿法的做法),然后对函数求极值。 将每个关键点的一段函数进行泰勒二次展开

image.png

其中x是相对于关键点的距离。和分别表示三元函数在关键点的取值和一阶导数,二阶导数。这个展开就是在关键点周围拟合出的3D二次曲线,找极值就令其导数为零。于是:

image.png

此时的极值为

image.png

文中剔除的点。

去除干扰2:边缘噪声

一维情形下曲线的变化趋势可以通过曲率反应。那么在检测最大值点是不是边缘噪声时可以选择曲面变化最大和最小的两个剖面,判断其剖面曲线在该点的曲率,曲率越大表示越陡峭,曲率越小表示越平缓,而对于blob区域,即山峰而言,理想状态是任意方向的曲率都相同且比较大。而山脊线即边缘则会在沿线方向的变化较缓慢,即曲率较小,在垂直脊线的方向变化较剧烈,曲率较大。可以通过两个曲率的比值判定是山峰还是山脊线。

对于二维曲面,曲面点处的二阶矩矩阵,即Hessian矩阵刻画了该点周围的变化趋势。说白了二阶矩矩阵就是二元函数在该点的协方差矩阵,协方差矩阵的特征值对应着在特征向量方向上的投影,该值越大就反应函数在该方向变化趋势越缓慢,也就是曲率越大。所以说Hessian矩阵的特征值和特征值所在特征向量方向上的曲率成正比。我们希望使用曲率的比值剔除边缘点,就可以使用Hessian的特征值的比值替代曲率的比值。 Hessian矩阵定义如下:

image.png

可以由二阶差分计算得到,那么接下来就可以计算特征值的比值了。 先等一等,假设两个特征值分别为,看下面两个式子:

image.png

这样发现特征值的比值可以通过这两个两计算得到,而不需要特征值分解,这样简单多了。 假设为较大特征值,且,则

image.png

所以我们要将的点剔除就相当于将

image.png 的点剔除。




原文地址:访问原文地址
快照地址: 访问文章快照