开发者学堂课程【高校精品课-华中科技大学 -智能媒体计算:图像特征提取(上)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/811/detail/15706
图像特征提取(上)
今天开始讲基于内容的图像检索,在这里讲四个内容,一个就是图像特征的提取,为了实现基于内容的检索,提取图像特征,对图像的特征进行编码,压缩空间,要建立高维的特征。最后实现基于内容的图像检索的过程,里面会介绍几种经典的图像检索算法。
图像特征的提取:
为了有效的检索的图像,应该使用局部特征还是全局特征,全局特征是整个图像的衣服图像的这个特征,比如它的直方图等等,都属于这种全局。那么全局特征的坏处是什么,如果的图像发生了一些,像大小的修改,角度的变化远近的变化或者图像里面发生一些运动都可能使得的全局图像的特征,两幅本来很像的图像结果在全局特征上具有很大的不同。为了提高图像检索的准确性通常是提取图像的局部特征,局部特征是相对全局特征来讲,它是指从图像的局部提取的特征。因此,它反映的是图像的局部特性,是否进行图像的匹配和检索,有关什么是局部特征,这个网页里面有很详细的介绍,课后如果有些内容不理解,可以看一看这个博客的博文。
局部特征的特点是它来自于图像的局部区域,具有了很强的几何变性,对光照、遮挡以及噪声具有很强的鲁棒性。
按照特征的提取方法不同,可以分为两大类,一个就是浅层特征,也叫做手工特征,包括浮点类的像 HOG / SIFT ,像 SURF/ PCA SIFT 排序, GLOH 等等,这个在的很多的综述的文献里面,后面参考文献都逐一列举了,它们的提取算法,包括原始的一些文献。以及它分别适用于哪些场合。还有一些二值化的特征,像 BRISK , FRIEK 还有个 FAST , ORB等等。
第二大类,对于手工工程它是机器自动提取,比较深度的局部特征:
通过深度学习获取的特征,用了他局部反应局部特性的部分,包括卷积层特征图,那么包括 DELF / D2R 还有ASMK,看看提取局部特征,或者提取特征的算法通常叫做提取器。浅层特征由于它是手工的,因此它需要复杂专业的手工设计,也就是说针对不同的需求,设计符合需求的特征。比如说像 SIFT 它就等于提取算法容易的检测算法,比如说检测子再加上描述子合并成 SIFT,还有每一步精心设计了所提取的内容。参数它的可调性比较差,而深度特征是一个端到端的,通常它是简单一个层的堆积,比如常用的是卷积层和石化层,Pooling 的一个特征。
步骤:
先输入卷积层,然后通过石化层,再有卷积层到石化层。可以根据需要把层数的叠加的层数增加。它的好处是参数可以适应数据的变化,它可以具再学习性,它就可以通过学习抓取到不同数据它本身的特点,比如说通过 BP 算法进行学习。缺点就是这种深层的局部特征,它的可解释性是比较差。
在手工特征里边这个局部特征非常典型的一个也是必须要知道的一个特征叫 SIFT 特征。所以那么它的中文名字叫尺度不变特征变换特征,英文叫 Scale Invariant Feature Transform 。叫尺度不变特征变换,其实这里边就是为了让满足尺度的不变性所进行的特征点的变化。
特征的优点:
它可以满足尺度不变性:大小缩放都没问题
旋转的不变性:同一图像旋转一定角度不影响特征的有效性
平移的不变性以及不易受视角及噪声的干扰,抗干扰能力比较强
SIFT 特征的提取的步骤,那么包括四步,第一步就是尺度空间的极值点的检测,然后从这极值点里面再确定出精确的极值点。比如说最大最小,那么把这些点叫做为叫 pin point ,叫关键点,然后找到关键点以后,再通过梯度的分析找到它的主方向。最后,通过主方向来组合成的描述图,这就是 SIFT 。
如何提取出来:
第一部叫尺度空间的极值检测,首先构建一个高斯差分的金字塔的金字塔(DoG 金字塔)。对图像做不同尺度的高搜模糊就会得到一种尺度空间。然后对图像做降采样,就是隔点采样,来得到多尺度空间的图像,就是这个就是通过降采样得到的不同尺度的 DoG 。有了这个就在从这个高斯差分金字塔里面来检测极值点。这几点从上下左右26个他的临界点去寻找是否存在极值点,中间这点跟上下左右上面一层,下面一层以及同一层的周围的点。这么做就是为了满足描述图的尺度具有普遍性。所以说这个过程是其实很典型的一个数据。 DoG 的生成是非常关键的一步。
前面通过这个这个临界点去寻找的这个极值点通常它未必是最准确的,因此需要关键点,精确的定义。这个不准确有两方面原因,一方面,就是在边缘的时候,这种极致的搜索算法是不稳定,它对细节结构的描述的斑点叫边缘部分,不会被较好地进行抑制,既然边缘点不稳定,就应该想办法把边缘部分提取的特点给它去除。在尺度空间中寻找这个极值点它这个位置信息通常也不够准确,比如说找到了极值点可能不是真实绝对的极值。
以这个图为例:
看这两个点是寻找到的极值点,但是曲线里面真正的极值点上面最大,下面局部来讲最小的点,想怎么样才能把它相邻的真正的极值点找出来,怎么去找这个理论上实际上的极值点。在数学里面其实都可以通过差值来算。
第一步,去除
对 DoG 函数进行泰勒展开,就是泰勒插值。然后再迭代校正极值点,就像已知是这两点,通过插值之后就恢复出来,展开这个泰勒函数。有了这个函数以后,就可以迭代得到这是真正的局部的极值点。
再把不稳定的边缘点利用 Hessian 矩阵再把它去除。
看看效果图,左边这幅图,这是通过函数直接求解到了它的特征点。而中间这个,是通过子像元插值,就像泰勒展开,去除掉不准确的极值点之后,得到了真正的精确的极值点的小点,其实已经少了很多,很多的初始的时候它其实都是不准确的好,再把边缘部分不稳定的点去除,进一步检查,留下的这种关键点具有尺度不变性,最突出或者最稳定的特征点,用它来做进行检索。
有了这个关键点以后按照前面的步骤,到了应该确定关键点的主方向,根据领域特性确定关键点的主方向。通过主方向目的是使描述符具有旋转不变性。
计算关键点邻域点的梯度,然后构建邻域点的梯度方向直方图,下面是直方图,峰值对应的方向为主方向,也就是最高的这个点。
还有其它的峰值,为了尽最大限度的抓住它的主方向,这个峰值虽然不是最高的,但它已经接近最高,因此在把大于80%,大于最高值的这些方向啊,把它叫做关键点,负方向,或者叫做辅助的方向。
最高值可能是一个,但是大于80%的可能不止一个,因此他的辅助方向或者负方向,可能就不止一个。找到了,再使坐标轴行旋转,使关键点的主方向与这个坐标轴的方向一致,这么做满足了旋转不变性,这就叫做坐标系的旋转。
原来的水平是这样的,旋转的角度是其实就是原始的坐标跟主方向的夹角。就是的关键特征点 keypoint 的主方向找到了。
再把这些主方向按照一定的规则描述出来,关键点的描述,梯度的描述,在四乘四的小块儿上计算八个方向的梯度直方图,这是个十六乘十六的分成四乘四的若干四乘四块,这里每一个小块里面是个八个方向的梯度直方图。十六乘以八总共有一百二十八位的这种这个特征向量,再对他进行归一化的处理就可以去除光照的影响。
到此 SIFT 的特征就提取了,存的特征保留的是在每一个小方块,它的梯度直方图,是当中最重要的好,SIFT,自从提出来之后对整个图像检索都是基于这种内容的图像检索,提交一幅图去找类似图像的,推动的意义非常之大,这是一个非常好用的,很多人在跟随着 SIFT ,有很多的改进算法。
比如像 SURF ,它叫做加速的稳定特征,其实就是 SIFT 的一个高效的一个变种,它提的快了,更稳定了,算法的步骤和 SIFT 的提取算法基本相同,不同的地方就是它使用海森矩阵的行列值去做特征点的检测,并且用积分图来加速运算。
描述子,他基于二维离散小波变换相应,并且有效的利用了积分图,这是三种特征它的效果对比,下面是 GLOH , SIFT 还有 SURF ,比它明显的效果对比, SURF 在同样的数据集上,它的效果要好一些。