〔此篇介绍Harris角点检测算法〕
作者 | zhangJA来源 | 程序算法实验室
Harris角点检测算法
是一个对图像的角点检测,通常在计算机视觉算法中用于提取角点
并推断图像特征
。它是由Chris Harris和Mike Stephens在1988年对Moravec的转角检测算法进行改进后提出的。
Harris角点检测算法
可以计算角度的变化,实现定位;实现图像匹配;
1:原理
原理概述:
Harris角点检测算法的基本思想:使用一个固定窗口
在图像上进行任意方向
上的滑动,比较滑动前
与滑动后
两种情况,窗口中的像素灰度变化程度
,如果存在任意方向上的滑动,都有着较大灰度变化,那么我们可以认为该窗口中存在角点
。
如下图:part1
为平坦区域-任意方向移动,无灰度变换;part2
为边缘-沿着边缘方向移动,无灰度变化;part3
为角点-沿任意方向移动,明显有灰度变化。
数学描述:
①当窗口发生[u,v]
移动时,那么滑动前
与滑动后
对应的窗口中的像素点灰度变化
描述如下:
$E(u,v)=\sum_{x,y\in W}w(x,y)[I(x+u,y+v)-I(x,y)]^2 \tag{1}$
[u,v]是窗口W的偏移量;
(x,y)是窗口W所对应的像素坐标位置,窗口有多大,就有多少个位置;
I(x,y) 是像素坐标位置(x,y)的图像灰度值;
I(x+u,y+v)是像素坐标位置(x+u,y+v)的图像灰度值;
w(x,y) 是窗口函数,最简单情形就是窗口W内的所有像素所对应的w权重系数均为1;
根据上述表达式,当窗口在平坦区域
上移动,显然灰度不会发生什么变换,E(u,v)=0;如果窗口处在纹理比较丰富的区域
上滑动,那么灰度变化会很大
。算法最终思想就是计算灰度发生较大变化时所对应的位置,此处的变化大小是指任意方向上的滑动
,并非单一个方向。
②由泰勒一阶展开公式对\tag{1}
:
$f(x+u,y+v)\approx f(x,y)+uf_x(x,y)+vf_y(x,y) \tag{2}$
代入①得:
$E(u,v)=\sum_{x,y\in W}w(x,y)[I(x+u,y+v)-I(x,y)]^2\approx\sum_{x,y\in W}w(x,y)[I(x,y)+uI_x+vI_y-I(x,y)]^2$