OpenCV+Python特征提取算法与图像描述符之SIFTSURFORB

OpenCV+Python特征提取算法与图像描述符之SIFTSURFORB,第1张

算法效果比较博文

用于表示和量化图像的数字列表,简单理解成将图片转化为一个数字列表世灶表示。特征向量中用来描述图片的各种属性的向量称为特征矢量。

参考

是一种算法和方法,输入1个图像,返回多个特征向量(主要用来处理图像的局部,往往会把多个特征向量组成一个一维的向量)。主要用于图像匹配(视觉检测),匹配图像中的物品。

SIFT论文

原理

opencv官网解释

实质是在不同的尺度空间上查找关键点(特征点),并计算出关键点的方向。SIFT所查找到的关键点是一些十分突出,不会因光照,仿射变换和噪音等因素而变化的点,如角点、边缘点、暗区的亮点及亮区的暗点等。

尺度不变特征转换(Scale-invariant feature transform或SIFT)是一种电脑视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量。

其应用范围包含物体辨识、机器人地图感知与导航、影像缝合、3D模型建立、手势辨识、影像追踪和动作比对。

对现实中物体的描述一定要在一个十分重要的前提下进行,这个前提就是对自然界建模时的尺度。当用一个机器视觉系统分析未知场景时,计算机没有办法预先知道图像中物体的尺度,因此我们需要同时考虑图像在多尺度下的描述,获知感兴趣物体的最佳尺度。图像的尺度空间表达指的是图像的所有尺度下的描述。

KeyPoint数据结构解析

SURF论文

原理

opencv官网解释

SURF是SIFT的加速版,它善于处理具有模糊和旋转的图像,但是不善于处理视角变化和光照变化。在SIFT中使用DoG对LoG进行近似,而在SURF中使用盒子滤波器对LoG进行近似,这样就可以使用积分图像了(计算图像中某个窗口内所有像素和时,计算量的大小与窗口大小无关)。总之,SURF最大的特点在于采用了Haar特征以及积分图改团像的概念,大大加快了程序的运行效率。

因为专利原因,OpenCV3.3开核返橘始不再免费开放SIFT\SURF,需要免费的请使用ORB算法

ORB算法综合了FAST角点检测算法和BRIEFF描述符。

算法原理

opencv官方文档

FAST只是一种特征点检测算法,并不涉及特征点的特征描述。

论文

opencv官方文档

中文版

Brief是Binary Robust Independent Elementary Features的缩写。这个特征描述子是由EPFL的Calonder在ECCV2010上提出的。主要思路就是在特征点附近随机选取若干点对,将这些点对的灰度值的大小,组合成一个二进制串,并将这个二进制串作为该特征点的特征描述子。文章同样提到,在此之前,需要选取合适的gaussian kernel对图像做平滑处理。

1:不具备旋转不变性。

2:对噪声敏感

3:不具备尺度不变性。

ORB论文

OpenCV官方文档

ORB采用了FAST作为特征点检测算子,特征点的主方向是通过矩(moment)计算而来解决了BRIEF不具备旋转不变性的问题。

ORB还做了这样的改进,不再使用pixel-pair,而是使用9×9的patch-pair,也就是说,对比patch的像素值之和,解决了BRIEF对噪声敏感的问题。

关于计算速度:

ORB是sift的100倍,是surf的10倍。

对图片数据、特征分布的一种统计

对数据空间(bin)进行量化

Kmeans

边缘:尺度问题->不同的标准差 捕捉到不同尺度的边缘

斑点 Blob:二阶高斯导数滤波LoG

关键点(keypoint):不同视角图片之间的映射,图片配准、拼接、运动跟踪、物体识别、机器人导航、3D重建

SIFT\SURF

(1)  尺度不变特征变换(SIFT算法)概要

是一种计算机视觉指橡蚂的算法,用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量。

此算法由 David Lowe 在1999年所发表唯埋,2004年完善总结。其应用范围包含物体辨识、机器人地图感知与导航、影像缝合、3D模型建立、手势辨识、影像追踪和动作比对。此算法有其专利,专利拥有者为 英属哥伦比亚大学。

局部影像特征的描述与侦测可以帮助辨识物体,SIFT 特征是基于物体上的一些局部外观的兴趣点而与影像的大小和旋转无关。 对于光线、噪声、些微视角改变的容忍度也相当高。基于这些特性,它们是高度显著而且相对容易撷取,在母数庞大的特征数据库中,很容易辨识物体而且鲜有误认。如滚使用 SIFT特征描述对于部分物体遮蔽的侦测率也相当高,甚至只需要3个以上的SIFT物体特征就足以计算出位置与方位。在现今的电脑硬件速度下和小型的特征数据库条件下,辨识速度可接近即时运算。SIFT特征的信息量大,适合在海量数据库中快速准确匹配。

(2 )  Matlab代码主要功能函数如下:    match.m:测试程序

功能:该函数读入两幅(灰度)图像,找出各自的 SIFT 特征, 并显示两连接两幅图像中被匹配的特征点(关键特征点(the matched keypoints)直线(将对应特征点进行连接)。判断匹配的准则是匹配距离小于distRatio倍于下一个最近匹配的距离( A match is accepted only if its distance is less than distRatio times the distance to the second closest match. 该程序返回显示的匹配对的数量。( It returns the number of matches displayed.)     调用实例: match('desk.jpg','book.jpg')

( 假如,想测试一个含有一本书的桌面的图像 和一本书的图像之间特征匹配)     调用方法和参数描述:略。     注意:(1)图像为灰度图像,如果是彩色图像,应该在调用前利用rgb2gray转换为灰度图像。

(2)参数distRatio 为控制匹配点数量的系数,这里取 0.6,该参数决定了匹配点的数量,在Match.m文件中调整该参数,获得最合适的匹配点数量。    sift.m :尺度不变特征变换(SIFT算法)的核心算法程序

功能:该函数读入灰度图像,返回SIFT 特征关键点( SIFT keypoints.)      调用方法和参数描述:

调用方式:[image, descriptors, locs] = sift(imageFile)   输入参数( Input parameters):

imageFile: 图像文件名.

输出或返回参数( Returned):

image: 是具有double format格式的图像矩阵

descriptors: 一个 K-by-128 的矩阵x, 其中每行是针对找到的K个关键特征点(the K keypoints)的不变量描述子. 这个描述子(descriptor)是一个拥有128个数值并归一化为单位长度向量.

locs: 是K-by-4 矩阵, 其中的每一行具有四个数值,表示关键点位置信息 (在图像中的行坐标,列坐标(row, column) ,注意,一般图像的左上角为坐标原点), 尺度scale,高斯尺度空间的参数,其中该参数也决定了frame(结构)确定的图像disk的大小, 最后一个参数是方向orientation). 方向参数的范围是[-PI, PI] 单位为弧度.

appendimages.m: 该函数创建一个新的图像分别包含两个匹配的图像和他们之间

的匹配对的连接直线. (3)  实际案例执行结果:

程序代码使用matlab和c混合编程。用matlab打开文件中的sift_match.m文件,并执行。如下图所示:

从上图可以看出,共有17个匹配点。

VLFeat implements a fast dense version of SIFT , called vl_dsift

. The function is roughly equivalent to running SIFT on a dense gird of locations at a fixed scale and orientation. This type of feature descriptors is often uses for object categorization.

The main advantage of using vl_dsift

over vl_sift

is speed. To see this, load a test image

I = vl_impattern('roofs1') I = single(vl_imdown(rgb2gray(I)))

To check the equivalence of vl_disft

and vl_sift

it is necessary to understand in detail how the parameters of the two descriptors are related.

Bin size vs keypoint scale . DSIFT specifies the descriptor size by a single parameter, size

, which controls the size of a SIFT spatial bin in pixels. In the standard SIFT descriptor, the bin size is related to the SIFT keypoint scale by a multiplier, denoted magnif

below, which defaults to 3

. As a consequence, a DSIFT descriptor with bin size equal to 5 corresponds to a SIFT keypoint of scale 5/3=1.66.

Smoothing. The SIFT descriptor smoothes the image according to the scale of the keypoints (Gaussian scale space). By default, the smoothing is equivalent to a convolution by a Gaussian of variance s^2 - .25

, where s

is the scale of the keypoint and .25

is a nominal adjustment that accounts for the smoothing induced by the camera CCD.

Thus the following code produces equivalent descriptors using either DSIFT or SIFT:

binSize = 8 magnif = 3 Is = vl_imsmooth(I, sqrt((binSize/magnif)^2 - .25)) [f, d] = vl_dsift(Is, 'size', binSize) f(3,:) = binSize/magnif f(4,:) = 0 [f_, d_] = vl_sift(I, 'frames', f)

The difference, of course, is that DSIFT is much faster.

PHOW descriptors

The PHOW features [1] are a variant of dense SIFT descriptors, extracted at multiple scales. A color version, named PHOW-color, extracts descriptors on the three HSV image channels and stacks them up. A combination of vl_dsift

and vl_imsmooth

can be used to easily and efficiently compute such features.

VLFeat includes a simple wrapper, vl_phow

, that does exactly this:

im = vl_impattern('roofs1') [frames, descrs]=vl_phow(im2single(im))

Note that this typically generate a very large number of features. In this example, there are 162,574 features.

References

[1] A. Bosch, A. Zisserman, and X. Munoz. Image classifcation using random forests and ferns. In Proc. ICCV, 2007.

from VLFeat .


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12490473.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存