角点检测

 看完Lowe的sift文章,还不是很吃透。于是再补下基础知识,从conner dection 开始看。有些时候conner dection和interest point dection是一个概念。一般认为conner是这样一个点,这个点和周围小区域内的点相比,灰度变化较大。

Shifting a window in any direction should give a large change in intensity

[见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文件

推导如下

 

角点检测_第1张图片

代码参看

http://www.cim.mcgill.ca/~dparks/CornerDetector/harris.htm

角点检测_第2张图片

进一步的改进,可以看learning opencv中的实现cvgoodfeaturesTotrack函数

shi and tomasi 改进了harris corner dection。opencv中有实现、

你可能感兴趣的:(c,算法,image,Google,input,each)