计算机视觉的算法SIFT算法详细介绍

教育行业A股IPO第一股(股票代码003032)

全国咨询/投诉热线:400-618-4000

前面我们介绍了Harris和Shi-Tomasi角点检测算法,这两种算法具有旋转不变性,但不具有尺度不变性,以下图为例,在左侧小图中可以检测到角点,但是图像被放大后,在使用同样的窗口,就检测不到角点了。

所以,下面我们来介绍一种计算机视觉的算法,尺度不变特征转换即SIFT(Scale-invariantfeaturetransform)。它用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量,此算法由DavidLowe在1999年所发表,2004年完善总结。应用范围包含物体辨识、机器人地图感知与导航、影像缝合、3D模型建立、手势辨识、影像追踪和动作比对等领域。

Lowe将SIFT算法分解为如下四步:

我们就沿着Lowe的步骤,对SIFT算法的实现过程进行介绍:

在不同的尺度空间是不能使用相同的窗口检测极值点,对小的关键点使用小的窗口,对大的关键点使用大的窗口,为了达到上述目的,我们使用尺度空间滤波器。

高斯核是唯一可以产生多尺度空间的核函数。-《Scale-spacetheory:Abasictoolforanalysingstructuresatdifferentscales》。

L(x,y,σ)=G(x,y,σ)?I(x,y)L(x,y,\sigma)=G(x,y,\sigma)*I(x,y)L(x,y,σ)=G(x,y,σ)?I(x,y)其中:G(x,y,σ)=12πσ2e?x2+y22σ2G(x,y,\sigma)=\frac{1}{2\pi\sigma^2}e^{-\frac{x^2+y^2}{2\sigma^2}}G(x,y,σ)=2πσ21e?2σ2x2+y2σ\sigmaσ是尺度空间因子,它决定了图像的模糊的程度。在大尺度下(σ\sigmaσ值大)表现的是图像的概貌信息,在小尺度下(σ\sigmaσ值小)表现的是图像的细节信息。

搜索过程从每组的第二层开始,以第二层为当前层,对第二层的DoG图像中的每个点取一个3×3的立方体,立方体上下层为第一层与第三层。这样,搜索得到的极值点既有位置坐标(DoG的图像坐标),又有空间尺度坐标(层坐标)。当第二层搜索完成后,再以第三层作为当前层,其过程与第二层的搜索类似。当S=3时,每组里面要搜索3层,所以在DOG中就有S+2层,在初使构建的金字塔中每组有S+3层。

由于DoG对噪声和边缘比较敏感,因此在上面高斯差分金字塔中检测到的局部极值点需经过进一步的检验才能精确定位为特征点。

使用尺度空间的泰勒级数展开来获得极值的准确位置,如果极值点的灰度值小于阈值(一般为0.03或0.04)就会被忽略掉。在OpenCV中这种阈值被称为contrastThreshold。

DoG算法对边界非常敏感,所以我们必须要把边界去除。Harris算法除了可以用于角点检测之外还可以用于检测边界。从Harris角点检测的算法中,当一个特征值远远大于另外一个特征值时检测到的是边界。那在DoG算法中欠佳的关键点在平行边缘的方向有较大的主曲率,而在垂直于边缘的方向有较小的曲率,两者的比值如果高于某个阈值(在OpenCV中叫做边界阈值),就认为该关键点为边界,将被忽略,一般将该阈值设置为10。

将低对比度和边界的关键点去除,得到的就是我们感兴趣的关键点。

经过上述两个步骤,图像的关键点就完全找到了,这些关键点具有尺度不变性。为了实现旋转不变性,还需要为每个关键点分配一个方向角度,也就是根据检测到的关键点所在高斯尺度图像的邻域结构中求得一个方向基准。

对于任一关键点,我们采集其所在高斯金字塔图像以r为半径的区域内所有像素的梯度特征(幅值和幅角),半径r为:r=3×1.5σr=3\times1.5\sigmar=3×1.5σ其中σ是关键点所在octave的图像的尺度,可以得到对应的尺度图像。

梯度的幅值和方向的计算公式为:m(x,y)=(L(x+1,y)?L(x?1,y)2+(L(x,y+1)?L(x,y?1))2m(x,y)=\sqrt{(L(x+1,y)-L(x-1,y)^2+(L(x,y+1)-L(x,y-1))^2}m(x,y)=√(L(x+1,y)?L(x?1,y)2+(L(x,y+1)?L(x,y?1))2

θ(x,y)=arctan(L(x,y+1)?L(x,y?1)L(x+1,y)?L(x?1),y)\theta(x,y)=arctan(\frac{L(x,y+1)-L(x,y-1)}{L(x+1,y)-L(x-1),y})θ(x,y)=arctan(L(x+1,y)?L(x?1),yL(x,y+1)?L(x,y?1))

获得图像关键点主方向后,每个关键点有三个信息(x,y,σ,θ):位置、尺度、方向。由此我们可以确定一个SIFT特征区域。通常使用一个带箭头的圆或直接使用箭头表示SIFT区域的三个值:中心表示特征点位置,半径表示关键点尺度,箭头表示方向。如下图所示:

通过以上步骤,每个关键点就被分配了位置,尺度和方向信息。接下来我们为每个关键点建立一个描述符,该描述符既具有可区分性,又具有对某些变量的不变性,如光照,视角等。而且描述符不仅仅包含关键点,也包括关键点周围对其有贡献的的像素点。主要思路就是通过将关键点周围图像区域分块,计算块内的梯度直方图,生成具有特征向量,对图像信息进行抽象。

描述符与特征点所在的尺度有关,所以我们在关键点所在的高斯尺度图像上生成对应的描述符。以特征点为中心,将其附近邻域划分为d?dd*dd?d个子区域(一般取d=4),每个子区域都是一个正方形,边长为3σ,考虑到实际计算时,需进行三次线性插值,所以特征点邻域的为3σ(d+1)?3σ(d+1)3\sigma(d+1)*3\sigma(d+1)3σ(d+1)?3σ(d+1)的范围,如下图所示:

为了保证特征点的旋转不变性,以特征点为中心,将坐标轴旋转为关键点的主方向,如下图所示:

计算子区域内的像素的梯度,并按照σ=0.5d进行高斯加权,然后插值计算得到每个种子点的八个方向的梯度,插值方法如下图所示:

每个种子点的梯度都是由覆盖其的4个子区域插值而得的。如图中的红色点,落在第0行和第1行之间,对这两行都有贡献。对第0行第3列种子点的贡献因子为dr,对第1行第3列的贡献因子为1-dr,同理,对邻近两列的贡献因子为dc和1-dc,对邻近两个方向的贡献因子为do和1-do。则最终累加在每个方向上的梯度大小为:weight=w?drk(1?dr)(1?k)dcm(1?dc)1?mdon(1?do)1?nweight=w*dr^k(1-dr)^{(1-k)}dc^m(1-dc)^{1-m}do^n(1-do)^{1-n}weight=w?drk(1?dr)(1?k)dcm(1?dc)1?mdon(1?do)1?n其中k,m,n为0或为1。如上统计4?4?8=1284*4*8=1284?4?8=128个梯度信息即为该关键点的特征向量,按照特征点的对每个关键点的特征向量进行排序,就得到了SIFT特征描述向量。

SIFT在图像的不变特征提取方面拥有无与伦比的优势,但并不完美,仍然存在实时性不高,有时特征点较少,对边缘光滑的目标无法准确提取特征点等缺陷,自SIFT算法问世以来,人们就一直对其进行优化和改进,其中最著名的就是SURF算法。

THE END
1.推荐算法介绍推荐算法介绍 随着计算机领域技术的高速发展,电子商务时代的普及,个性化的推荐系统深入生活应用的各个方面。个性化推荐算法是推荐系统中最核心的技术,在很大程度上决定了电子商务推荐系统性能的优劣。而协同过滤推荐是个性化推荐系统应用最为广泛的技术,协同过滤推荐主要分为基于用户的协同过滤推荐、基于项目的协同过滤推荐和https://blog.csdn.net/u012050154/article/details/52267712
2.常用的几种推荐算法介绍常用的几种推荐算法介绍 个性化推荐(推荐系统)经历了多年的发展,已经成为互联网产品的标配,也是 AI 成功落地的分支之一,在电商(淘宝/京东)、资讯(今日头条/微博)、音乐(网易云音乐/QQ音乐)、短视频(抖音/快手)等热门应用中,推荐系统都是核心组件之一。https://www.51cto.com/article/778534.html
3.KNN算法介绍一、算法介绍 邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。 kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这https://www.jianshu.com/p/80dc05f52ed8
4.2.评测算法详细介绍—AI语音识别模型评测算法 2.1.BA算法 算法介绍 BA的全称是 Boundary Attack。该算法使用目标类中的一个样本初始化为非目标攻击,并用一个混合了均匀噪声的样本初始化为目标攻击。算法的每次迭代有三个部分。首先,通过二进制搜索将上次迭代的迭代结果推向边界。 https://numbda.cs.tsinghua.edu.cn/AI-Testing/vision/methods.html
5.什么是哈希算法?常见的哈希算法有哪些?区块链技术区块链哈希算法是一种数学函数或者算法,它可以将任意长度的数据(称为“消息”)转换为固定长度的字符串(称为“哈希值”或者简称“哈希”)。哈希算法的作用是将数据进行一次性的加密,从而生成一个唯一且不可逆的标识。哈希算法在数据安全、数据压缩、数据检索等领域有着广泛的应用。本文将介绍哈希算法的原理、特点、用途和常https://www.jb51.net/blockchain/891421.html
6.十大排序算法之冒泡排序快速排序的介绍十大排序算法之冒泡排序、快速排序的介绍 江海入海,知识涌动,这是我参与江海计划的第4篇。 一、插入排序 在我们的日常生活最常见的一个场景就是斗地主,我们在斗地主摸牌的过程中其实就是利用插入排序来整理我们摸到的牌,按照从大到小或者从小到大的进行比较,大的放左边或者小的放左边。斗地主摸牌流程是这样的:https://open.alipay.com/portal/forum/post/129601176
7.王者荣耀英雄战力值怎么计算英雄战力值算法详细介绍王者荣耀英雄战力值怎么计算?很多小伙伴对于战力值的计算方法不太清楚,那么小编就给大家介绍一下,下面小编给大家带来《王者荣耀》英雄战力值算法详细介绍,还不清楚的小伙伴赶紧来看看吧。 《王者荣耀》英雄战力值算法详细介绍 英雄战力的组成由五个部分,分别是胜场战力、排位表现分、巅峰表现战力、巅峰系数、活跃系数。https://shouyou.3dmgame.com/gl/278850.html
8.机器人算法专题介绍腾讯云开发者社区机器人算法专题介绍 算法 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同https://cloud.tencent.com/developer/article/1081643
9.算法图解(豆瓣)本书示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量。书中的前三章将帮助你打下基础,带你学习二分查找、大O表示法、两种基本的数据结构以及递归等。余下的篇幅将主要介绍应用广泛的算法,具体内容包括:面对具体问题时的解决技巧,比如,何时采用贪婪算法或动态规划https://www.douban.com/doubanapp/dispatch?uri=/book/26979890/