在图像拼接过程中,图像的匹配是重要的一步,其中最常用的算法是Harris角点标注算法。 在Harris之前常用的是Moravec 角点提取算法,Moravec角点检测是一种基于灰度值的检测算法,主要是通过滑动二值矩形窗口寻找灰度变化的局部最大值。主要先通过事先设定一个经验阈值,通过对窗口(如取3*3的窗口)进行相邻八个方向(上,下,左,右,左上,左下,右上,右下)进行滑动,计算原窗口和滑动后窗口的灰度变化值的平方和,取这8个方向的差平方和的最小值与事先设定的阈值进行比较,如果大与事先的阈值就将该值作为该点的兴趣值,接着取如3*3,5*5的区域进行局部比较取局部的最大值,防止在一个区域内重复取角点。 取点情况如图: 算法公式: vk=∑9i=1(Ai−Bi)2V=minvk,k=1,2......8T(x,y)={10V≥thresholdV<threshold 其中k代表窗口滑动的方向,vk代表在k方向上灰度变化的平方和,V代表8个方向中vk的最小值,T(x,y)=1表示改点为角点,T(x,y)=0表示改点不为角点,再进行局部的检测防止重复取角点。 Moravec角点检测的缺点是: 1.不具备旋转不变性; 2.对图像的边界,顶点反应比较强烈。 Harris角点算法是在1988年ChriS Harris 和 Mike Stephens 提出 ,主要解决了Moravec角点检测不具备旋转不变性; 算法公式: E(u,v)=∑x,yw(x,y){I(x+u,y+v)−I(x,y)}2 将公式进行泰勒展开: E(u,v)=∑x,yw(x,y){I(x,y)+u∗I(x,y)+v∗I(x,y)−I(x,y)}2 其中 [Ixu+Iyv]2=[u,v][I2xIxIyIxIyI2y][uv] 可以得到 E(u,v)=[u,v]M[uv] 神奇地这边变成了2*2地矩阵~~~ M=∑x,yw(x,y)[I2xIxIyIxIyI2y] 再求出M的特征值A,B R=det(M)−k(trace(M))2det(M)=AB traceM=A+B 再将R与设定的阈值进行比较,然后进行局部的比较防止角点重复取值
相关资源:Harris角点检测原理与流程