SIFT特征提取

1. 介绍&应用


 简介

SIFT(Scale-invariant feature transform)是一种检测局部特征的算法,该算法通过求一幅图中的特征点(interest points,or corner points)及其有关scale 和 orientation 的描述子得到特征并进行图像特征点匹配,获得了良好效果,详细解析如下:

算法描述:SIFT特征不只具有尺度不变性,即使改变旋转角度,图像亮度或拍摄视角,仍然能够得到好的检测效果。


 应用

一个比较经典的例子就是对于同一个事物,假设是熟悉的小明同学:对于人而言,小明无论是站着、趴着,或者是面对面、距离50米,都能够将小明认出来(不会因为距离远就认成小红)。而相同的辨别能力对于电脑而言是比较具有挑战性的,但是SIFT特征提取就能够做到这一点:对于一张图像,SIFT的做法在于提前为这个图像构建了尺度空间,这里不妨先将尺度空间简单地理解成为同一个事物的图像在不同大小(假设有O种尺寸)以及分辨率下(假设有L种分辨率)的若干组图像(其实是O组,每组有L张),我们可以用(O,L)来标记这个尺度空间,并用(o,l)来唯一标识尺度空间中对应尺度为o、分辨率为l的图像,(o,l)说成是该尺度空间的坐标倒也并不过分。

个人:对于尺度空间中的所有图片,SIFT都提供了统一的特征提取算法,这样,电脑就提前了解同一个事物在不同距离(尺寸、分辨率模拟)下的样子,由此,电脑就也可以具有上述能力了。


总之

一个叫Lowe的人提出了SIFT特征提取算法,opencv中也由此提供了相应的函数,如果原理看不懂,那就记下:根据SIFT提取算法可以实现图像特征点匹配时的尺度不变性,即可以从一堆对象中根据特征点找到想要匹配的图像,如下图

蓝色的线就是相同事物特征点的匹配结果(连线)

自然,实现电脑识别出一个距离很远的物体也是水到渠成了。

2. 图像金字塔

上述不同尺寸、分辨率专业来讲就是图像金字塔了,图像金字塔有三种:高斯金字塔、差分金字塔(DOG)和拉普拉斯金字塔(Laplacian Pyramid)。可以说高斯金字塔就是为差分金字塔而设计的;而拉普拉斯金字塔则以高斯金字塔为基础创建,用于保存图像在向不同尺寸、分辨率下转换时丢失的一些信息(图像变大自然不会是无损的,而这些损失可以用拉普拉斯金字塔来记录一部分)。


步骤

获得图像金字塔一般包括两个步骤:

  • 1. 利用低通滤波器平滑图像
  • 2. 对平滑图像进行抽样(采样)

1)低通滤波: 

滤波,实际上是信号处理里的一个概念,而图像本身也可以看成是一个二维的信号,其中像素点灰度值的高低代表信号的强弱。对应的高低频的意义:

高频:图像中灰度变化剧烈的点,一般是图像轮廓或者是噪声。

低频:图像中平坦的,灰度变化不大的点,图像中的大部分区域。

图中白点就是噪声了,能够明显看出白点处灰度变化剧烈的点。 

根据图像的高频与低频的特征,我们可以设计相应的高通与低通滤波器,高通滤波可以检测图像中尖锐、变化明显的地方;低通滤波可以让图像变得光滑,滤除图像中的噪声。OpenCV中提供的低通滤波有:线性的均值滤波器、高斯滤波器,非线性的双边滤波器、中值滤波器;高通滤波有基于Canny,Sobel等各种边缘滤波。这里大家可以看到低通滤波和高通滤波其实是相互矛盾的,但很多时候在做边缘检测前我们又需要进行低通滤波来降噪,这里就需要调节参数在保证高频的边缘不丢失的前提下尽可能的多去除图片的噪点。

 2)采样

简单来看:下采样就是图片缩小,上采样就是图片放大。

  • 向下采样

过程:和某个大小的高斯核卷积后去除偶数行和列得到

高斯函数:高斯分布又称正态分布,左边的表达式和正太分别相似度很高,其中σ决定了对图像的平滑程度(σ在高斯分布中也就是标准差)

常见的 3*3 和 5*5 高斯核如下:

高斯核卷积让临近中心的像素点具有更高的重要度,对周围像素计算加权平均值,如下图所示,其中心位置权重最高为 0.4:

 如此将得到的图像偶数行、列删除就生成了原大小1/4的向下采样后的图像:

无论结果还是理论上都能发现:采样后的图片更模糊

有一个十分形象的视频:原来图片是这样压缩的_哔哩哔哩_bilibili

  • 向上采样

它将图像在每个方向上扩大为原图像的2倍,新增的行和列均使用0来填充,并使用于“向下取样”相同的卷积核乘以4(刚好四倍),再与放大后的图像进行卷积运算,以获得“新增像素”的新值

 


在高斯金字塔中一共生成O组L层不同尺度的图像,这两个量合起来(O,L)就构成了高斯金字塔的尺度空间,也就是说以高斯金字塔的组O作为二维坐标系的一个坐标,不同层L作为另一个坐标,则给定的一组坐标(O,L)就可以唯一确定高斯金字塔中的一幅图像。

3. 高斯金字塔生成

高斯金字塔是在sift算子中提出来的概念,首先高斯金字塔并不是一个金字塔,而是由很多组(Octave)金字塔构成,并且每组金字塔都包含若干层(Interval)。

每组图像的大小相同,只是对应的平滑系数不同。不同系数的高斯模糊:

而对原图(或者resize两倍后的图像)进行L-1个不同系数(σ,kσ,k^2σ,k^3σ……k^(L-2)σ,k为常数,σ一般取1.6)的高斯模糊后就构成了其中的第一组图像。

取第一组图像的倒数第3张下采样作为第二组的第一层(1/4尺寸),然后同样做L-1次共生成L层图像(第二层σ=2σ)……

 

 

4. 差分金字塔 Difference of Gaussian (DOG)

顾名思义,其实就是高斯金字塔中每一组的最顶层-次顶层,以此类推,如果一组有L层,那么差分金字塔就有L-1层

5. 关键点检测

根据关键点就可以决定两张图片是否匹配了。

实际上就是找极值:由差分金字塔得到的每组图像中每三层就可以决定一层的极值——关键点:

然后找到的关键点常常会有各种干扰因素,需要将干扰因素剔除:略

最后给特征点赋值一个128维方向参数,由此具备旋转不变性:略

具体过程看这个,现在实在是理解不了:(49条消息) SIFT特征提取分析_Rachel Zhang的专栏-CSDN博客_sift特征提取

6. 参考链接 

 (49条消息) 图像处理之低通滤波_约翰先生的博客-CSDN博客_低通滤波

(49条消息) 拉普拉斯金字塔分解及图像融合_啧啧啧biubiu的博客-CSDN博客_金字塔分解

OpenCV计算机视觉学习(7)——图像金字塔(高斯金字塔,拉普拉斯金字塔,图像缩放resize函数) - 战争热诚 - 博客园 (cnblogs.com)

(49条消息) SIFT特征提取分析_Rachel Zhang的专栏-CSDN博客_sift特征提取

(49条消息) SIFT特征点提取_007的博客-CSDN博客_sift特征提取

posted @ 2022-01-21 16:52  YIYUYI  阅读(96)  评论(0编辑  收藏  举报