看完Lowe的sift文章,还不是很吃透。于是再补下基础知识,从conner dection 开始看。有些时候conner dection和interest point dection是一个概念。一般认为conner是这样一个点,这个点和周围小区域内的点相比,灰度变化较大。
[见Yung-Yu Chuang 关于Harris conner dection的ppt里]
也可看
http://www.cim.mcgill.ca/~dparks/CornerDetector/mainMoravec.htm
伪代码如下
Input: grayscale image, window size, threshold T
Output: map indicating position of each detected corner
1. For each pixel (x, y) in the image calculate the intensity variation from a shift (u, v) as:
where the shifts (u,v) considered are:
(1,0),(1,1),(0,1),(-1,1),(-1,0),(-1,-1),(0,-1),(1,-1)
2. Construct the cornerness map by calculating the cornerness measure C(x, y) for each pixel (x, y):
3. Threshold the interest map by setting all C(x, y) below a threshold T to zero.
4. Perform non-maximal suppression to find local maxima.
其中第4点非最大抑制算法,可以参见google。
harris 把窗口函数用高斯函数来代替,通过计算hessian矩阵的特征值来检测角点,特征值的计算比较麻烦。因此harris用的是
hessian的行列式和迹(trace).判断公式如下:
C(x,y)=det(M)-k(trace(M))^2.对C(x,y)的过滤和前面moravec类似。
shi and tomasi改进了threshold方式的过滤。
参考Konstantinos G. Derpanis的The Harris Corner Detector pdf文件
推导如下
代码参看
http://www.cim.mcgill.ca/~dparks/CornerDetector/harris.htm
进一步的改进,可以看learning opencv中的实现cvgoodfeaturesTotrack函数
shi and tomasi 改进了harris corner dection。opencv中有实现、