1 理论部分
1.1 特征
在数据挖掘、计算机视觉等领域经常会提起“特征”一词,那么究竟什么才是特征?数据挖掘中我们可以称被分析数据集的某一属性(一行为一个样本,一列为一个属性)为特征,因为它反映了该数据集的某一种特性,是该数据集的一种固有标识。在计算机视觉中,一张图像的特征其实也有类似的概念,这种特征也能够描述这张图像的全部(或局部)内容或含义。
图像特征可以是①有意义的图像区域,该区域具有独特的特征和良好的识别性;也可以是②对图像信息的一种数据抽取和表示。
- 针对①可以是图像中的角点、边缘、斑点、直线、曲线及高密度区域等。大多数特征检测算法都会涉及图像的角点、边和斑点的识别,也有一些涉及脊向的概念,可以认为脊向是细长物体的对称轴,例如识别图像中的一条路。角点和边都好理解,那什么是斑点呢?斑点通常是指与周围有着颜色和灰度差别的区域。在实际地图中,往往存在着大量这样的斑点,如一颗树是一个斑点,一块草地是一个斑点,一栋房子也可以是一个斑点。由于斑点代表的是一个区域,相比单纯的角点,它的稳定性要好,抗噪声能力要强,所以它在图像配准上扮演了很重要的角色。
- 对于②,则是采用直方图向量、投影向量等方法提取出新形式的数据特征,使得所提取出来的特征具有一些较好的特性,比如旋转不变性、光照不变性等,使得模型能更好地检测或识别出图像的特征。
图像的特征应用很广泛,我们通过图像特征能过够将实现图像的分类、目标检测、图像拼接等。而特征就需要特征检测来提出,最终达到的目标是:通过特征检测我们实现的就是能够让计算机“读懂”图像,将人类看到的视觉信息转化成计算机能够识别和处理的定量形式。
1.2 角点
角点是常见的点特征,它具有旋转不变形,光照不变性,视角不变性等特性,可以在目标匹配、目标跟踪、三维重建等应用中使用。常见的点特征提取算法主要有Harris角点检测算法、FAST特征检测算法、SIFT特征检测算法、SURF特征检测算法等,本文主要介绍Harris算法。
用一个滑动的窗口在图像内移动,分别会出现以下三种情况(如图1所示):
- 平坦区域(左图):当窗口向任意方向移动时,窗口内的像素值不会发生太大变化;
- 边缘(中图):当窗口沿着平行于边缘的方向移动时,窗口内的像素值不会发生太大变化;
- 角点(右图):不管窗口向着哪个方向移动,窗口内的像素值都会发生很大的改变。
图1. 角点的识别
1.3 图像梯度
图像的梯度,指的是图像灰度值的变化率。由于图像灰度变化并不连续,因此采用差分法来求梯度。如点 ( x , y ) (x,y) (x,y)处在 x x x方向和 y y y方向的梯度按sobel算子计算,具体见Sobel算子简介。
1.4 Harris角点检测算法思想
该算法可以分为三个主要的步骤:
- 建立数学模型描述窗口灰度变化
当窗口在 x x x和 y y y方向分别移动了 u u u和 v v v该窗口的灰度值变化为 I ( x + u , y + v ) − I ( x , y ) I(x+u,y+v)-I(x,y) I(x+u,y+v)−I(x,y)。
设 w ( x , y ) w(x,y) w(x,y)为窗口函数,即窗口内各点之间的权重,表示该点对窗口灰度变化的贡献大小。当各点权重都为1时,此窗口函数也称为一个均值滤波核:
[ 1 1 1 1 1 1 1 1 1 ] \left[ \begin{matrix} 1&1&1\\1&1&1\\1&1&1 \end{matrix} \right] ⎣⎡111111111⎦⎤当窗口函数为以窗口中心为原点并呈高斯分布时,此窗口函数也称为高斯滤波核,如:
1 16 [ 1 2 1 2 4 2 1 2 1 ] \frac 1 {16} \left[ \begin{matrix} 1&2&1\\2&4&2\\1&2&1 \end{matrix} \right] 161⎣⎡121242121⎦⎤高斯滤波实质是一种加权平均滤波,为了实现平均,核还带有一个系数,例如上面的十六分之一,这些系数等于矩阵中所有数值之和的倒数。因为高斯滤波是以空间距离来确定权重大小的,但并没有考虑用颜色距离来确定权重,这样就导致了高斯滤波在去除噪声的同时,也一定程度上模糊了边界。关于高斯滤波可参考图像平滑去噪之高斯滤波器。
图2. 移动窗口导致的灰度变化
将图2中公式进行简化,由泰勒公式得:
I ( x + u , y + v ) = I ( x , y ) + u I x + v I y I(x+u,y+v)=I(x,y)+uI_x+vI_y I(x+u,y+v)=I(x,y)+uIx+vIy I ( x + u , y + v ) − I ( x , y ) = u I x + v I y I(x+u,y+v)-I(x,y)=uI_x+vI_y I(x+u,y+v)−I(x,y)=uIx+vIy
窗口的灰度变化 E ( u , v ) E(u,v) E(u,v):
E ( u , v ) = Σ ( x , y ) w ( x , y ) × ( u 2 I x 2 + v 2 I y 2 + 2 u v I x I y ) E(u,v)=\Sigma_{(x,y)} w(x,y)\times(u^2I_x^2+v^2I_y^2+2uvI_xI_y) E(u,v)=Σ(x,y)w(x,y)×(u2Ix2+v2Iy2+2uvIxIy)
将上式写成矩阵形式:
E ( u , v ) = ∑ ( x , y ) w ( x , y ) × [ u v ] [ I x 2 I x I y I x I y I y 2 ] [ u v ] E(u,v)=\sum_{(x,y)} w(x,y)\times\left[ \begin{matrix} u & v \end{matrix} \right] \left[ \begin{matrix} I_x^2 & I_xI_y \\ I_xI_y & I_y^2 \end{matrix} \right] \left[ \begin{matrix} u \\ v \end{matrix} \right] E(u,v)=(x,y)∑w(x,y)×[