接上一篇文章。这篇写特征描述符。特征匹配算法在确定角点后,还需要使用描述符来描述这些角点。
本文参考书籍:Computer Vision: Algorithms and Applications, Richard Szeliski
参考文献
[1] Multi-Image Matching using Multi-Scale Oriented Patches
[2] Distinctive Image Features from Scale-Invariant Keypoints
[3] Modeling the Shape of the Scene: A Holistic Representation of the Spatial Envelope
[4] Histograms of Oriented Gradients for Human Detection
[5] SURF: Speeded Up Robust Features
特征描述符
确定了角点之后,需要设计特征描述符。通常来讲一个描述符描述了该角点在一定区域内的特性。与检测特征点的算法类似,一个优秀的特征描述符同样需要独特性(可区分)以及各种图形变换的不变性。
传送门:图形变换与特征不变性
模板
最容易想到的方式就是采用光强直接编码,这一类通常称作模板类(Template)。
将m*n窗口内的灰度值编码成一维向量。
然而这种描述符对灰度的绝对值非常敏感,光强发生变化后,效果不好。
采用梯度编码,克服了光强绝对值变化。但是无法保证旋转,尺度的不变性。
类似的还有在立体视觉里使用的census变换。
传送门:立体匹配代价计算
直方图
采用直方图也可以描述特征点的特征。
显然,颜色直方图有旋转不变性和尺度不变性。然而,单一的直方图在显著性(独特性)方面不是很好。采用空间直方图(spatial histograms)能够提升这种独特性。
然而,采用了多窗口,势必影响到了旋转和尺度不变性。
在讨论更好的算法之前,先列一下上一步特征点检测算法的输出
- 特征点的坐标P(x, y, s)
- 特征点的梯度方向θ 由
确定。
- 特征点的尺度(x, y, s)
以下对几个常用的特征描述符做简单说明。
MOPS(Multiscale Oriented Patches descriptor)
[1]提出了多尺度带方向的块描述符。
MOPS算法过程
- 根据尺度和角度,选取40*40的窗口。
- 缩小到原窗口的1/5。
- 旋转至水平。
- 采样这个8*8的窗口。
- 正则化窗口灰度。(减掉均值,除以标准差)
GIST
[3]提出了GIST描述符。
- 计算Gabor滤波器的响应函数
- 将图像窗口分成4*4个cell
- 对每一个cell, 计算滤波器响应的均值
- GIST描述符大小为4*4*N,N就是filter bank的大小
- GIST在本质上编码了梯度的空间分布。
HOG(Histograms of Oriented Gradients)
[4]提出了HOG描述符。HOG描述符广泛使用于行人检测。
- 将窗口划分成若干8*8的Cell。
- 对每一个cell计算方向梯度直方图。直方图横坐标为梯度方向,纵坐标为梯度值。
- 每四个Cell构成一个Block。形成描述符。
SIFT(Scale Invariant Feature Transfrom)
[2]SIFT给出了一种尺度无关的特征变换。整个算法包含了特征点检测,特征描述符和匹配。这里只简单说一下特征描述符,关于更详细的描述请参考我的另一篇文章。
传送门: SIFT算法详解
- 在角点附近选取16*16窗口
- 根据角点探测得到的梯度方向θ做旋转,并按照尺度s规范化尺度。
- 在4*4的Cell下生成直方图,直方图的横坐标为8个方向,纵坐标为梯度的幅度值。
SURF(Speeded Up Robust Features)
[5]提出了SURF描述符。
- 在PATCH中,计算每一个像素的Haar特征。本质上计算了该PATCH的积分图。
- 每一个Cell由4个值构成。
- 4*4个Cell,总共16*4 = 64维。