机器学习第四课

来源:互联网 发布:侠客风云传有mac版吗 编辑:程序博客网 时间:2024/06/11 13:02

机器学习第四课主要讲的内容是SIFT、SURF以及距离度量方法

1、SIFT尺度不变特征变换匹配算法

操作流程:原图-->高斯金字塔-->高斯差分金字塔-->空间极值点检测-->关键点定位-->关键点方向分配-->关键点特征描述

高斯金字塔是通过高斯模糊模板与原图卷积(一种线性操作,相当于模板在原图上滑移)得到的,其中,为了原图的边缘无法卷积,会做边缘化处理,在原图两侧加上几排0。根据高斯模糊模板中的sigma(高斯模糊系数)不同,卷积得到图片的效果也不一样,sigma越大,越模糊。如名字所言,高斯金字塔自上而下分布着由小到大的几组卷积后的图片,从下到上分别是第1阶、第2阶……每组图片一般有5或7层,每一层中所使用的高斯模糊系数逐渐增大。


差分高斯金字塔(DOG)是由高斯金字塔每一组中的相邻两层相减得到的。

空间极值点检测是检测DOG中一点和它同尺度的8个相邻点和上下相邻尺度(层)对应的9×2个点共26个点比较,如果比26个点都大或者都小,则该点将作为一个局部极值点,记下它的位置和对应尺度.


关键点定位:如果检测到的极值点是离散空间的极值点,通过拟合三维二次函数来精确确定关键点的位置和尺度,并对关键点做一些简单的处理,如去除低对比度的关键点和不稳定的边缘响应点。

关键点方向匹配:对于在DOG金字塔中检测出的关键点,采集其所在高斯金字塔图像3σ邻域窗口内像素的梯度和方向分布特征。用直方图统计邻域内像素的梯度和方向,与HOG不同的是这里只是在关键点附近统计直方图而不是整幅图像,并且是将方向360°分成了8个区间,得到关键点的主方向(梯度方向分布概率最大的方向)。这样每个关键点就会有三个信息:位置、所处尺度、方向。

关键点特征描述:SIFT描述子是关键点邻域附近的128维(4x4x8)关键点描述子。取关键点附近16x16像素,而种子点是关键点附近8x8像素,因此总共是2x2=4个种子点,而每个种子点分成4个区,每个区进行直方图统计,就有8个方向,所以总共是4x4x8。


为了确保旋转不变性还要进行坐标轴旋转,将坐标轴OX旋转到关键点的主方向上。

SIFT有很多优点,但其缺点也很明显(1)实时性不够高。(2)对边缘光滑的目标无法准确提取特征点,对圆更是无能为力。(3) 对模糊的图像,检测出的特征点过少。针对其缺点,提出了SURF算法

2、SURF算法

Surf(Speeded Up Robust Features)在SIFT的基础上改进了特征的提取和描述方式,用一种更为高效的方式完成特征的提取和描述。

具体实现流程如下:
1. 构建Hessian(黑塞矩阵),生成所有的兴趣点,用于特征的提取;
2. 构建尺度空间
3. 特征点定位
4. 特征点主方向分配
5. 生成特征点描述子
6. 特征点匹配

从中可以看出SURF算法与SIFT实现流程之间的区别是前者通过构建黑塞矩阵得到图像,而后者采用的是DOG图像。Hessian矩阵是SURF算法的核心,构建Hessian矩阵的目的是为了生成图像稳定的边缘点(突变点),为下文的特征提取做好基础。

此外由于我们的特征点需要具备尺度无关性,所以在进行Hessian矩阵构造前,需要对其进行高斯滤波,而为了提高运算速度,SURF使用了盒式滤波器来近似替代高斯滤波器。

还有在构建尺度空间时,同SIFT一样,SURF的尺度空间也是由O组L层组成,不同的是,SIFT中在不同组中通过使得图像的尺寸逐渐变小来形成金字塔的形状,而在SURF中,在不同组中通过使用的盒式滤波器的模板尺寸逐渐增大来形成金字塔的形状,不过两种算法中同一组中的不同层的滤波器的模糊系数逐渐增大。

此外对于特征点主方向分配两者也有不同。SIFT特征点方向分配是采用在特征点邻域内统计其梯度直方图,而在SURF中,采用的是统计特征点圆形邻域内的harr小波特征。在特征点的圆形邻域内,统计60度扇形内所有点的水平、垂直harr小波特征总和,然后扇形以一定间隔进行旋转并再次统计该区域内harr小波特征值之后,最后将值最大的那个扇形的方向作为该特征点的主方向。

对于生成特征点描述子,SIFT统计每小块内8个梯度方向,而SURF是统计水平方向值之和、垂直方向值之和、水平方向绝对值之和以及垂直方向绝对值之和4个方向haar小波特征。把这4个值作为每个子块区域的特征向量,所以一共有4*4*4=64维向量作为SURF特征的描述子,比SIFT特征的描述子减少了一半。

在特征点匹配方面,SURF虽然如SIFT一样通过计算两个特征点间的欧式距离来确定匹配度,不同的是SURF还加入了Hessian矩阵迹的判断。如果两个特征点的矩阵正负号不同,说明这两个特征点的对比度变化方向是相反的,即使欧氏距离为0,也直接予以排除。

3、距离度量方法

在进行特征提取之后,要通过距离度量来确定匹配度。距离度量方法包括欧氏距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、标准化欧氏距离、马氏距离、巴氏距离、汉明距离和夹角余弦等。这些距离度量方法在matlab中可以用pdist()函数直接实现,如pdist(X,'euclidean')表示计算欧氏距离(默认距离度量方法),pdist(X, 'chebychev')表示切比雪夫距离等。这一块的内容比较简单,可以参考

http://blog.csdn.net/hermito/article/details/40989589

这里我就直接将我的笔记贴上来。



原创粉丝点击