Harris 特征点原理介绍

本文深入探讨了Harris角点检测算法,包括其原理、步骤和矩阵分析。通过计算像素值的导数矩阵并分析特征值,确定角点响应函数,以识别图像中的角点。Shi-Tomasi的改进简化了评估标准,增强了算法的实用性。该算法具有旋转和光照不变性,但缺乏尺度不变性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Harris 特征点

原理

提出思想

找到一个小区域,该区域无论上下左右如何轻微变化均将导致区域内的图像发生明显的变化。

例如:
在这里插入图片描述

  1. 角点,不论怎么移动均会导致图像发生较大变化
  2. 图像中间点,局部运动时区域内图像内容不变
  3. 图像边缘,横向运动时区域内图像内容不变

因此,采用类似的思想提出了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_xIxIyI_yIyIII的偏微分,具体定义如下,可通过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=xI(x,y)Iy=yI(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+vIyI(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=R1[λ100λ2]R

其中两个特征值λ1,λ2\lambda_1,\lambda_2λ1,λ2分别代表着导数变化最快的两个方向,当两个方向均很大时则说明该点是角点。为了简化计算,避免特征值的求解定义角点响应函数
R=det⁡M−k(trace(M))2 R = \det M - k (trace(M))^2 R=detMk(trace(M))2
其中det⁡M=λ1λ2\det M = \lambda_1 \lambda_2detM=λ1λ2为矩阵行列式,而trace(M)=λ1+λ2trace(M) = \lambda_1 + \lambda_2trace(M)=λ1+λ2为矩阵的迹
仅当二者都很大时能够取得较大的R数值。

  1. λ1,λ2\lambda_1,\lambda_2λ1,λ2都很小,则R很小
  2. λ1,λ2\lambda_1,\lambda_2λ1,λ2一个很大一个很小,则R为负数
  3. λ1,λ2\lambda_1,\lambda_2λ1,λ2都很大,则R很大

Shi-Tomasi 改进

由于表达式R=det⁡M−k(trace(M))2R = \det M - k (trace(M))^2R=detMk(trace(M))2中的系数kkk难以确定,因此Shi-Tomasi提出采用如下的评价标准:
R=min⁡(λ1,λ2) R = \min(\lambda_1, \lambda_2) R=min(λ1,λ2)

此外对于非极大值抑制采用了如下的方法。

  1. 对所有特征点的角点系数进行排序
  2. 取最大值,并删除最大值周围的特征点
  3. 重复取设定的特征点个数

最终提取得到特征点如图
在这里插入图片描述

总结

从像素变化的角度定义了角点,具有较为优良的特性。

  • 旋转不变性
  • 光照不变性

缺少:

  • 尺度不变性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值