Harris角点检测

角点:最直观的印象就是在一个小窗口中很容易辨识的点,并且在任何方向上移动这个小窗口,像素值都会发生剧烈的变化

Harris角点检测_第1张图片

定义窗口滑动方向为[u, v]时,像素值的变化为:

Harris角点检测_第2张图片

窗口滑动方向很小,可以用一阶倒数近似表示I(x+u, y+v),并化简可以得到:

Harris角点检测_第3张图片

其中,M是

Harris角点检测_第4张图片

这样,E(u,v)就变成了一个二次型了,如果要画出E(u,v)的等值面,它将会是一个椭圆,注意M是个对称矩阵,把它对角化:

这里写图片描述

R可以看作一个旋转矩阵,两个特征值和椭圆长短轴有关:

Harris角点检测_第5张图片

椭圆中心E=0,在短轴方向变化最快,长轴方向变化最慢,如果短轴很长,说明E的值变化很慢,这块区域很平坦;如果短轴很短,长轴很长,说明E的值在短轴方向变化很快,在长轴方向变化很慢,这块区域有边存在,长轴的方向就是边的方向,短轴和边的方向垂直;如果长轴很短,说明E的值在任何方向变化都很剧烈,这块区域是一个角点。
前面提到过特征值和椭圆长短轴有关,所以可以得到如下结论:

  • 特征值都很小,说明区域平坦;
  • 特征值一个大一个小,说明检测到边;
  • 特征值都很大,说明检测到角点。

    Harris角点检测_第6张图片

Harris定义了一个响应函数来表示特征值的大小关系:

这里写图片描述

其中a是个常数,一般取0.04~0.06

Harris角点检测_第7张图片

注意到特征值的乘积就是矩阵的行列式,特征值的和是矩阵的迹,相似变换是不改变矩阵的行列式和迹的,这下就可以不用将矩阵做对角化了

你可能感兴趣的:(计算机视觉,角点检测,计算机视觉)