接上一篇文章。这篇写特征描述符。特征匹配算法在确定角点后,还需要使用描述符来描述这些角点。

本文参考书籍: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)
  • 特征点的梯度方向θ 由 (\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y})确定
  • 特征点的尺度(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维。

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐