Harris 特征点
原理
提出思想
找到一个小区域,该区域无论上下左右如何轻微变化均将导致区域内的图像发生明显的变化。
例如:
- 角点,不论怎么移动均会导致图像发生较大变化
- 图像中间点,局部运动时区域内图像内容不变
- 图像边缘,横向运动时区域内图像内容不变
因此,采用类似的思想提出了Harris角点,具体步骤如下:
- 计算像素值对区域左右移动的导数矩阵,变化剧烈等价于导数大
- 分析矩阵性质,仅当变化最剧烈的两个方向同时具有较大的数值时才表明该区域为角点
区域像素变化速度
设当前窗口中心位置为(x,y)(x,y)(x,y),此时的像素灰度值为I(x,y)I(x,y)I(x,y)。若该窗口分别向xxx方法和yyy方向移动一个微小的距离u,vu,vu,v,到一个新的位置(x+u,y+v)(x+u,y+v)(x+u,y+v)。
那么窗口移动导致的像素变化为:
I(x+u,y+v)−I(x,y)
I(x+u,y+v) - I(x,y)
I(x+u,y+v)−I(x,y)
窗口的各个点权重不一,中间点希望权重大一些,边缘点要小一些,因此定义二元高斯分布w(x,y)w(x,y)w(x,y)。最终得到灰度值变化的表达式:
E(u,v)=∑(x,y)w(x,y)×[I(x+u,y+v)−I(x,y)]2
E(u,v) = \sum_{(x,y)}w(x,y) \times [I(x+u,y+v) - I(x,y)]^2
E(u,v)=(x,y)∑w(x,y)×[I(x+u,y+v)−I(x,y)]2
对I(x+u,y+v)I(x+u,y+v)I(x+u,y+v)进行泰勒展开,为I(x+u,y+v)≈I(x,y)+uIx+vIyI(x+u,y+v) \approx I(x,y) + uI_x + v I_yI(x+u,y+v)≈I(x,y)+uIx+vIy。其中IxI_xIx与IyI_yIy为III的偏微分,具体定义如下,可通过soble算子等计算得到。
Ix=∂I(x,y)∂xIy=∂I(x,y)∂y
I_x = \frac{\partial I(x,y)}{\partial x} \qquad I_y = \frac{\partial I(x,y)}{\partial y}
Ix=∂x∂I(x,y)Iy=∂y∂I(x,y)
将像素变化表达式进行化简
E(u,v)=∑(x,y)w(x,y)×[I(x+u,y+v)−I(x,y)]2=∑(x,y)w(x,y)×[I(x,y)+uIx+vIy−I(x,y)]2=∑(x,y)w(x,y)×(uIx+vIy)2=∑(x,y)w(x,y)×(u2Ix2+v2Iy2+2uvIxIy)
\begin{aligned}
E(u,v) &= \sum_{(x,y)}w(x,y) \times [I(x+u,y+v) - I(x,y)]^2 \\
&= \sum_{(x,y)}w(x,y) \times [I(x,y) + uI_x + v I_y - I(x,y)]^2 \\
&= \sum_{(x,y)}w(x,y) \times (uI_x + v I_y)^2\\
&= \sum_{(x,y)}w(x,y) \times (u^2 I_x^2 + v^2 I_y^2 + 2 uv I_x I_y)
\end{aligned}
E(u,v)=(x,y)∑w(x,y)×[I(x+u,y+v)−I(x,y)]2=(x,y)∑w(x,y)×[I(x,y)+uIx+vIy−I(x,y)]2=(x,y)∑w(x,y)×(uIx+vIy)2=(x,y)∑w(x,y)×(u2Ix2+v2Iy2+2uvIxIy)
用矩阵的形式表达为:
E(u,v)=[u,v]∑(x,y)w(x,y)[Ix2IxIyIxIyIy2][uv]
E(u,v) = [u,v] \sum_{(x,y)} w(x,y) \left[\begin{matrix}
I_x^2 & I_x I_y \\
I_x I_y & I_y^2
\end{matrix}\right] \left[\begin{matrix}
u\\
v
\end{matrix}\right]
E(u,v)=[u,v](x,y)∑w(x,y)[Ix2IxIyIxIyIy2][uv]
因此,定义矩阵M表达像素变化的速度
M=∑(x,y)w(x,y)[Ix2IxIyIxIyIy2]
M = \sum_{(x,y)} w(x,y) \left[\begin{matrix}
I_x^2 & I_x I_y \\
I_x I_y & I_y^2
\end{matrix}\right]
M=(x,y)∑w(x,y)[Ix2IxIyIxIyIy2]
分析矩阵性质
计算矩阵特征值
M=R−1[λ100λ2]R
M = R^{-1}\left[\begin{matrix}
\lambda_1 & 0 \\
0 & \lambda_2
\end{matrix}\right] R
M=R−1[λ100λ2]R
其中两个特征值λ1,λ2\lambda_1,\lambda_2λ1,λ2分别代表着导数变化最快的两个方向,当两个方向均很大时则说明该点是角点。为了简化计算,避免特征值的求解定义角点响应函数
R=detM−k(trace(M))2
R = \det M - k (trace(M))^2
R=detM−k(trace(M))2
其中detM=λ1λ2\det M = \lambda_1 \lambda_2detM=λ1λ2为矩阵行列式,而trace(M)=λ1+λ2trace(M) = \lambda_1 + \lambda_2trace(M)=λ1+λ2为矩阵的迹
仅当二者都很大时能够取得较大的R数值。
- λ1,λ2\lambda_1,\lambda_2λ1,λ2都很小,则R很小
- λ1,λ2\lambda_1,\lambda_2λ1,λ2一个很大一个很小,则R为负数
- λ1,λ2\lambda_1,\lambda_2λ1,λ2都很大,则R很大
Shi-Tomasi 改进
由于表达式R=detM−k(trace(M))2R = \det M - k (trace(M))^2R=detM−k(trace(M))2中的系数kkk难以确定,因此Shi-Tomasi提出采用如下的评价标准:
R=min(λ1,λ2)
R = \min(\lambda_1, \lambda_2)
R=min(λ1,λ2)
此外对于非极大值抑制采用了如下的方法。
- 对所有特征点的角点系数进行排序
- 取最大值,并删除最大值周围的特征点
- 重复取设定的特征点个数
最终提取得到特征点如图
总结
从像素变化的角度定义了角点,具有较为优良的特性。
- 旋转不变性
- 光照不变性
缺少:
- 尺度不变性