5 角点
5.1 动机
本次我们将要介绍图像的一个重要特征——角点。我们首先先介绍图像特征提出的其中两个动机,或者说是图像特征其中的两个应用:
自动化全景图:

图 5-1
全景图拼接:如图5-2,我们有两张图像,我们应该怎么组合它们呢

图 5-2
如图5-3所示,我们可以先提取两张图像的特征,然后把提取的特征在两图像间做匹配,最后完成对两张图像的拼接。

图 5-3
如图5-4所示便是两张图像拼接的结果,可以看到拼接的效果是非常好的。

图 5-4
上面只是图像特征的两个基本的应用,除了这些图像特征还可用于Slam中做轨迹跟踪求解位姿、建立局部地图和定位,以及做图像的匹配、导航等(如下图所示)。所以不难看出,图像特征在计算机视觉中具有很重要的地位,我们这篇文章将重点介绍其中的一种特征——角点。

图5-5

图 5-6

图 5-7
5.2 角点介绍
我们这里所说的特征指的是图像的局部特征,其优点如下:
-
局部性:特征是局部的,因此对遮挡和杂乱场景更具鲁棒性;
-
数量大:一张图中通常有成百上千个特征;
-
判别性:可以区分大量的目标;
-
效率:可以获得实时性的效果。
图像特征应用的过程为:
-
特征检测:即找到他;

-
特征描述:表示它,即围绕每个特征点提取向量特征描述

-
特征匹配:根据特征描述向量,对特征进行匹配;

-
特征具体应用:跟踪、定位、导航......
下面我们首先介绍特征角点的检测:
首先,我们得明确一个问题:什么决定了好的特征或者说我们要检测的特征要满足什么条件。
很显然,特征必须得满足唯一性,即特征得是图像中的独特区域,能够获得与其他图像无歧义的匹配。
那么我们应该怎么定义这种独特的特征,或者怎么找到这种唯一性的特征呢?
为了解释这个问题,我们现在假设我们只考虑像素的一个小窗口(如下图5-8),然后思考什么能定义一个特征是好还是坏呢。

图 5-8
不难看出,如果我们在任意方向适当移动窗口。在第一个图中,窗口中的内容几乎不变化;在第二个图中,窗口沿边缘方向移动内容没有变化;而在第三个图中,无论是哪个方向,窗口内容都会发生显著变化。(如图5-9)所以,我们很容易可以得出,如果第三个图中窗口内的中心点做特征点,那么可以基本上满足我们所说的唯一性,是该图像的独特区域,不容易发生和其他图像的歧义匹配。而该类型的点就是我们本次所要介绍的角点(一般为两边缘的交点),该点附近区域的像素点无论在梯度方向上还是其梯度幅值上有着较大变化。

图 5-9
5.3 Harris角点检测
在明确了什么是好的特征之后,我们将以Harris角点检测器为例,介绍如何检测出角点。
我们假设以(u,v)移动窗口W(即x方向平移u个单位,y方向上平移v个单位),通过平方差之和(SSD)来比较平移前后窗口内像素的变化情况。SSD误差E(u,v)定义如下:
由上面我就可知道我们希望该误差很大。然而由该公式不难看出,对每个像素和每个移动进行精确计算会很慢,因此我们下面借助泰勒展开对该公式进行近似运算,减小计算量。(毕竟角点检测我们更希望是一个快的实时性处理过程)
依据泰勒展开式,我们对进行近似,我们在(x,y)处对该式子进行泰勒张开,因为u,v很小,所以我们可以去除高阶项,采用展开式的一阶近似就可以了。如下:
将上式代入E(u, v)中:
因此, E(u,v) 可以局部近似为一个平方误差函数。
E(u,v) 可以通过一个二次型进行局部近似,如下:
其中,令H=。
由结果可知,推导出来近似误差之后,得到了一个二次型函数,那么这个二次型函数可视化后是什么形状呢,如下:
① 对于水平边缘,,即A=B=0,可视化形状为:

图 5-10
② 对于竖直边缘,,即C=B=0,可视化形状为:

图 5-11
③对于角点,A,B,C均不为0,矩阵H的可视化形状(左图)和二次型函数的可视化形状(右图),如下图5-12。

图 5-12
由上图可以看出
对于标准的二维椭圆:
我们可以直接求出它的特征值和特征向量为(具体求解过程不过多叙述):
不难看出,矩阵特征值是半轴长度的平方倒数,特征向量方向对应长短轴的方向
由椭圆的一般方程:
可知我们可以将E(x, y)误差的二次型可视化为椭圆,即如图(5-12右图),我们只要把E(x, y)看成一个常数,该二次型就是一个椭圆。
所以如下图5-13,根据之前说的我们可以把E(x,y)二次型可视化为椭圆,H的特征值分别为两半轴长度平方的倒数,而两个特征向量分别对应于两个轴的方向,具体点说就是对应函数值变化最快和变化最慢的方向。

图 5-13
下面我们先总结一下H特征值和特征向量的几何意义,理解过后便于我们更好学习下面的Harris角点检测原理和流程。

图 5-14
借助上图,我们可知H的特征值和特征值向量:
-
定义具有最小和最大误差变化的移动方向
-
=误差 E(u, v) 的最大变化方向
-
方向上的变化量
-
= 误差E(u, v) 的最小变化方向
-
方向上的变化量
理解了H特征值和特征向量的几何意义后,我们开始介绍它们和特征检测的相关性。在前面已经说明了什么是好特征,也就是我们希望所有方向上的较小移动都能够让E(u,v) 的值较大。简单来说,就是对于所有的单位向量[u v],E(u,v) 的值都应该大,换句话说就是需要E(u,v) 的最小值足够大,而由前面的特征值和特征向量的几何意义可知,E(u, v)的最小值就是 H 小一些的那个特征值 (),所以我们只要判断
是否足够大,就能判断是否是角点。直观说明可见下图5-15:

图 5-15
由上图5-15,图像中包含了我们不需要的边缘特征,并不全是我们所需要的角点,而
图像中包含的就全是我们所需要的角点。因此,可再一次直观的说明,我们只需要关注
的大小就可判断是否是我们所需要的角点。
综上,我们利用特征值对图像点进行分类:

图 5-16
所以,到目前为止,角点检测的流程可分为以下几步:
-
计算图像中每个点的梯度
-
生成梯度矩阵H
-
计算H特征值.
-
寻找具有较大响应的点(
> 阈值)
-
选择
是局部最大值的点作为特征
我们已经介绍完了Harris角点检测的全部流程,即我们只需要关注的值。但是由线性代数的基本知识我们可知:
可以看到直接计算需要开根,计算量不小。为了减小计算,我们定义了一个近似于
的新变量来检测角点:
该式被称作 “Harris 角点检测器” 或者 “Harris 算子”。
Harris检测示例如下:

图 5-17
计算f值:

图 5-18(红色表示f值大的点,蓝色表示f值小的点)
阈值化(f>value):

图 5-19
非极大值抑制:

图 5-20
角点检测结果:

图 5-21
在实际应用中, 采用简单窗口 W 效果并不好。因为简单的窗口内所有点的导数值权重都为1,而我们判定的是中心点是否是角点,这显然是不合理的,判定结果易受周围的其他点干扰,会产生错误的角点。因此我们可以采用高斯滤波对导数进行加权,使得中心点的导数权重大一些,减小周围点的干扰。即令H为:
H=
5.4 Harris角点检测流程总览
Harris角点检测器的全部流程如下:其中与阈值化在第4步(未标出)

5.5 特征不变性
5.5.1 图像变换
常见的图像变换分为几何变换和光学变换,几何变换包含旋转、平移和缩放等,而光学变换则涉及亮度的变化等,如下图5-22所示。

图5-22
5.5.2 不变性于等变性
我们希望角点位置对于光学变换具有不变性,对于几何变换具有等变性 。
– 不变性: 图像变换但角点位置不变
– 等变性(协变性): 如果我们有同一张图像的两个变换版本,特征应该能在对应的位置上被检测到。
有时候 “不变性” 和 “等变性” 都被称作“不变性”。
5.5.3 Harris角点的不变性
(1)图像平移:

图 5-23
如上图5-23,不难发现,对于平移,角点位置是等变的
(2)图像旋转:

图 5-24
如上图5-24,显然二阶矩椭圆进行了旋转但形状(特征值)保持相同,所以对于旋转,角点位置是等变的。
(3)亮度仿射变化:
对于亮度仿射变换I ——> aI+b,亮度偏移I ——> I+b 对导数是没有影响的。而对于亮度缩放
I ——> aI,如图5-25所示,对我们角点检测的大部分角点是没有影响的,但仍需我们对阈值做进一步调整。

图 5-25
所以对于亮度仿射变化,角点位置是部分不变的。
(4)缩放:

图 5-26
由图5-26可知,一小段弧原本是角点但经过放大可能退化成边缘。另一方面我们可以想象一下,一个角点如果是直角顶点,那么不管如何缩放,该角点都始终不会变成边缘,会一直是角点。
所以对于缩放,大部分角点位置既不是不变的也不是等变的,部分是等变的。