这几篇文章开始写图像特征和匹配相关的内容。
参考书籍:Computer Vision: Algorithms and Applications, Richard Szeliski
特征点检测和匹配是计算机视觉应用的重要组成部分,以解决寻找一张图像上的点,在另一张图像上的位置的问题。应用于图像拼接,SLAM,3D重建等算法。通常特征点匹配可分为三个过程,特征点检测,定义特征描述符,特征匹配。
参考文献
[1] Obstacle Avoidance and Navigation in the Real World by aSeeing Robot Rover
[2] A COMBINED CORNER AND EDGE DETECTOR
特征点检测要解决的问题就是在图像上寻找有价值的点用于匹配。很容易想到的是,如果从白墙上找一个点,由于他没有什么显著特征,很难在其他图片上找到他的对应点。相反的,如果一个点有独一无二的特征,那么再找到这个点的机会就很大。这些点通常被称作角点(corner)。
文献[1]给出了寻找这些角点的方法——定义一个窗口,任意方向小幅度滑动该窗口,如果亮度的变化大,那么角点就在其中。
上图给出了常见的三种情况。
如上图,通常我们会定义一个窗口,在窗口内计算x方向和y方向的梯度Ix, Iy。
考虑上面所说的三种情况,flat, edge, corner. 下图可以看出Ix, Iy的相应分布。
下面需要定量分析上面梯度的分布情况。
假设窗口W,滑动距离为(u, v),定义一个SSD"误差"E(u, v),我们要寻找的就是能使E(u,v)在各个方向都尽量大的窗口。
I(x, y)为原始窗口的光强,I(x+u, y+v)为移动后的光强。w(x,y)是窗口权重函数。
由于w(x,y)独立于后面的推导,后面的公式方便起见把他省略掉了。
将泰勒展开,
当(u, v)是小运动时,可约等于一阶部分。
代入Error函数E(u,v),
进一步展开,发现E(u,v)是一个二次误差函数,
写成矩阵的形式
用几何图形表示二次型,
flat, edge, corner的二次型图形表示如下,可以看到coner的形状,E(u,v)在各个方向上的值均较大,
只考虑E(u, v)的一个切面,即令,
可以看到该公式的几何表示是一个椭圆。注意到M是对称阵,将M三角化,
,是M的特征值,R由特征向量构成,,分别表示了两个轴方向的变化。
,与flat, edge, corner的关系如下图。
清楚了,与E(u, v)的关系后,需要定义一个响应函数来评估一个点是否是角点。
[2]Harris88的提出的响应函数,
其中α是常量,取0.04到0.06之间的值。 这种情况下,如下图 所示,
由线性代数的"不难证明"可知,特征值的和等于矩阵对角线元素之和(矩阵的迹),特征值的乘积等于矩阵的行列式,上面的响应函数C还可以写成,
这样的话计算C就无需计算矩阵M的特征值了。