【计算机视觉】Harris角点检测

2023-12-13 05:57:28

角点指的是窗口延任意方向移动,都有很大变化量的点。

用数学公式表示为:

E(u,v) = \sum _{x,y} w(x,y)[I(x+u,y+v)-I(x,y)]^2

这个公式表示移动后的窗口,与移动前的窗口对应元素相减的平方,w(x,y)为每个像素点的权重

E(u,v)反映了如何移动窗口,以及移动窗口后的响应值

为了让E(u,v)u,v 直接建立关系,不用借助I(x,y),将E(u,v)进行泰勒展开

\displaystyle E(u,v)\approx E(0,0)+\begin{bmatrix} u & v \end{bmatrix}\begin{bmatrix} E_u(0,0)\\E_v(0,0) \end{bmatrix} \\ \\ \\ +\frac{1}2{}\begin{bmatrix} u & v \end{bmatrix}\begin{bmatrix} E_{uu}(0,0) & E_{uv}(0,0) \\E_{vu}(0,0)&E_{vv}(0,0) \end{bmatrix}\begin{bmatrix} u \\ v \end{bmatrix}\displaystyle

E(0,0) = 0

E_u(u,v) = \sum _{x,y}2w(x,y)[I(x+u,y+v)-I(x,y)]I_x(x+u,y+v)

E_v(u,v) = \sum _{x,y}2w(x,y)[I(x+u,y+v)-I(x,y)]I_y(x+u,y+v)

E_u(0,0) = E_v(0,0) = 0

E_{uu}(u,v) = \sum _{x,y}2w(x,y)[I_x^2(x+u,y+v) \\\\ +[I(x+u,y+v)-I(x,y)]I_{xx}(x+u,y+v)

E_{vv}(u,v) = \sum _{x,y}2w(x,y)[I_y^2(x+u,y+v) \\\\ +[I(x+u,y+v)-I(x,y)]I_{yy}(x+u,y+v)

E_{uu}(0,0) = \sum _{x,y}2w(x,y)I_x^2(x,y)

E_{vv}(0,0) = \sum _{x,y}2w(x,y)I_y^2(x,y)

E_{uv} (u,v)=E_{vu}(u,v)\\\\=\sum _{x,y}2w(x,y)[I_xI_y +[I(x+u,y+v)-I(x,y)]I_{xy}]

E_{uv} (0,0)=E_{vu}(0,0)=\sum _{x,y)}2w(x,y)I_x(x,y)I_y(x,y)

最终:

?E(u,v) = \begin{bmatrix} u &v \end{bmatrix}M \begin{bmatrix} u\\v \end{bmatrix} \ \ \ \ \ \ \ M=\sum _{x,y}w(x,y)\begin{bmatrix} I^2_x & I_xI_y \\ I_xI_y & I^2_y \end{bmatrix}

假设I_x,I_y 是互不影响的:

M=\begin{bmatrix} \lambda _1 & 0\\0 & \lambda_2 \end{bmatrix}

E(u,v) = \begin{bmatrix} u & v \end{bmatrix}\begin{bmatrix} \lambda_1 &0 \\ 0&\lambda_2 \end{bmatrix}\begin{bmatrix} u\\v \end{bmatrix}

只有当 \lambda_1,\lambda_2都不为0时 (x,y) 才是角点

I_x,I_y 相关可以通过正交化变成前面的形式

M = \begin{bmatrix} a &c \\c & d \end{bmatrix}= R^{-1}\begin{bmatrix} \lambda_1 &0 \\ 0&\lambda_2 \end{bmatrix}R= R^{T}\begin{bmatrix} \lambda_1 &0 \\ 0&\lambda_2 \end{bmatrix}R

\lambda_1,\lambda_2就反映了点在某个方向上的变化率,之后当\lambda_1,\lambda_2都很大时,该点才是角点

为了减少计算可以用R来判定是否为角点

文章来源:https://blog.csdn.net/holle_world_ldx/article/details/134943036
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。