开篇文章,先介绍一下背景。老实说不能算完全原创,主要是参考matlab帮助系统,添上一些自己的理解。E文好的可以直接去看帮助文件,这里记录一下一方面逼自己去好好理解一下内容,另外一方面也想提高一下英文阅读能力。不过本人比较懒,也不知道能坚持多久,写一篇是一篇吧。废话不多说,直接上文。在唠叨一句,文中用到的代码都是matlab脚本语言,版本是2016b。
什么是局部特征?
局部特征指在图像中发现的的模式或结构,像点,边或小的图像块。他们通常与和其周围的图像块有不同的纹理,颜色或亮度。特征到底代表什么不重要,只要它和周围像素能区分开来就行。局部特征的例子是斑点、角点和边缘像素。
比如角点检测的例子,下图中绿色点就是角点。
I = imread(\'circuit.tif\');
corners = detectFASTFeatures(I,\'MinContrast\',0.1);
J = insertMarker(I,corners,\'circle\');
imshow(J);
局部特征的作用
局部特征可以让你找到图像特点,不管有没有遮挡,不管观察视角的变化,或者有噪音存在。比如说虽然人脸都是有5官构成,观察的时候可能是正面也可能是侧面,但是我们却能区分出张三李四,就是因为大脑扫描对方的脸后找到了其特有的地方,所以才能识别。局部特征的特性使得他们适用于作图像分类。
局部特征有几个主要运用:
1.定位锚点用来拼接图像或3维重构
2.通过压缩图像的内容来进行检测和分类。
什么才是好的局部特征?
依赖于梯度变化或亮度变化方法能够检测出比较好的局部特征。这些特征包括边缘、斑点和区域。好的局部特性具有以下特性:
1.可重复检测:
给同样场景的两张图像,从两张图像检测出来的特征应该大部分是一致的。在不同的观测条件和有噪音的情况下特征应该具有鲁棒性。
2.可区分的:
特征中心周围的区域变化足够大,以便在特征之间进行可靠的比较。
3.可定位:
特性具有分配给它的唯一位置。观察条件的变化不会影响其位置。
特征检测和特征提取
特征检测选择具有唯一内容的图像区域,例如角点或斑点。使用特征检测查找感兴趣的点,用于进一步处理。这些点并不一定对应于物理结构,例如桌子的角。特征检测的关键是找到保持局部不变的特征,这样即使在旋转或尺度变化的情况下也能检测到它们。
特征提取涉及到一个描述符的计算,该描述符计算通常是以检测到的特征为中心的区域进行的。描述符依靠图像处理将局部像素邻域转换成一个紧凑的向量表示。这种新的代表性允许邻里之间的比较,而不管大小或方向的变化。描述符,比如SIFT或SURF,基于局部梯度的计算。二进制描述符,比如BRISK或FREAK,基于局部亮度差异,通过二进制向量编码。
上面的描述可能不太好理解,总体来说特种提取是基于特征检测的,先通过检测算法,检测到特征,比如角点,但是如果只是记录角点的像素坐标的话意义不大,一只狗在两张图像中仅仅因为稍微移动了一下位置就识别不出来是肯定不行的,所以如何描述这些检测出来的特征很有讲究,主要是要考虑缩放,旋转的无关性。这个就是计算描述符的意义。
选择特征检测方法和描述符
通过考虑应用程序的标准和数据的性质,选择最佳的特征检测器和描述符。第一张表描述了选择时考虑的一些通用准则,后两张具体描述了各检测方法和描述符之间的差别和适用范围。
通用准侧:
检测器区分:
描述符区分:
请发表评论