图像特征-harris角点检测

 转自:https://zhuanlan.zhihu.com/p/449970674

 一 角点检测基本原理

角点: 沿着各个方向,图像灰度均发生变化的点,可认为是角点。

图像中三种可能的区域,“flat”、“edge”、“corner”;

  • 平坦区域“flat region”,多个方向移动,平均亮度几乎没变化。
  • 边缘“edge”,某个方向上亮度变化剧烈,而垂直的方向上变化很小。
  • 角点“corner”,任意方向移动,平均亮度变化都很剧烈。

 

 

 

 数学上怎么描述角点?

可以通过以下自相关函数来描述局部窗口的亮度变化,从而定义角点。

 

  •  代表当前待判定的点,其局部窗口为
  • 分别是水平、垂直方向上的偏移量;
  • 代表图像I在点的亮度值;
  • 是局部窗口加权函数,有高斯加权和平均加权等,因为一般窗口的每个像素点贡献度是不一样的,因此需要乘以一个加权函数;

公式右边括号内即为局部窗口的灰度变化。

根据泰勒公式展开一阶近似后,有:

 

 

 其中,

分别代表I在(x, y)点两个方向上的梯度,简化了写法,代入亮度变化方程,得到

 

 将公式展开:

 

 可见,是一个关于的二次函数,

 

对该函数取某个值Q(如1)的横切面,即,其中由局部窗口的两个方向梯度决定,

 

不同局部窗口会得到不同的,也会得到不同的函数横切面,横切面的形状也有所不同。

 

,该函数表示椭圆(回顾椭圆性质,),证明:

 

 因此 [公式] 在值 Q 的横切面,近似是一个椭圆。

 

 

 特殊情况下, 

当椭圆表达式不存在 [公式] 交叉项,此时椭圆的长短轴恰好在 x, y 方向上,[公式] ,

决定了椭圆的形状,

 

此时,局部区域的梯度方向信息都集中在对角线上,表征了 x 方向的梯度信息,表征了 y 方向的梯度信息。很简单得到以下的结论:

  • ,该局部窗口内主要是x方向的梯度信息,y方向没有梯度,所以是边缘;
  • ,该局部窗口内主要是y方向的梯度信息,x方向没有梯度,所以是边缘;
  • ,该局部窗口内,两方面的梯度信息都几乎为0,所以是平坦区域;
  • ,该局部窗口内,x,y方向上都由较剧烈的梯度变化,所以是角点;

但以上的特殊情况,是实际梯度恰好垂直,不垂直的话,就只能看实际梯度信息在x,y方向的分量是多少,占据越多,越接近于0,上述结论越靠谱。

 

通常情况

考虑实际梯度垂直,但是不在x,y方向上,呈现一定的角度,此时可以通过正交变换,消除交叉项,将椭圆旋转到实际的梯度方向上,

M是实对称矩阵,可以作特征值分解,即是M的两个特征值,e1、e2是特征向量。

则亮度变化函数

 

展开,写成椭圆的形式

 

 

 这是一个新的椭圆,长短轴由 [公式] 决定,坐标轴方向由两个特征向量 [公式] 决定。此时的椭圆恰好满足了上面的特殊情况,在垂直的新梯度方向上,实际梯度由 [公式] 决定,依旧是那一套

  • ,该局部窗口内主要是x方向的梯度信息,y方向没有梯度,所以是边缘;
  • ,该局部窗口内主要是y方向的梯度信息,x方向没有梯度,所以是边缘;
  • ,该局部窗口内,两方面的梯度信息都几乎为0,所以是平坦区域;
  • ,该局部窗口内,x,y方向上都由较剧烈的梯度变化,所以是角点;

 

总结:

回顾上面的过程,从 [公式] 是个二次函数,到取 [公式] 这个横切面是个椭圆,到椭圆长短轴在不在 x, y 方向上做了分类讨论——特殊情况,恰好在 x, y 方向上,直接判断 [公式] 的特征值即可;不在 x, y 方向上,特征值分解做正交变换,将椭圆旋转到长短轴与实际梯度方向重合,这时候,是在这个新方向上的特殊情况,也是直接判断 [公式] 的特征值即可。

(默认需要检测的角点两个方向的实际梯度垂直或者近似垂直)

综上,可以根据 [公式] 矩阵的两个特征值 [公式] 大小相对关系,判断角点。

 

实际运算,图像中每个点所在局部窗口都有一个对应的 [公式] 矩阵,如何衡量 [公式] 大小? Harris 的作者提出了一种新方案,

角点响应值:

[公式]

通过判断 [公式] 来检测角点, [公式] 是一个很小的数,通常取值 [公式]

如何看待角点响应值?

假设 [公式] 是同一个大量级的数,设为 [公式] ,则 [公式] ,因为 [公式] 是一个很小的数,此时的 [公式] 也是一个很大的数,可以用来判断角点。

假设 [公式] 是同一个小量级的数,设为 [公式] ,同上 [公式] ,接近于 0,可以用来判断平坦区域。

假设 [公式] 一大一小, [公式] ,则 [公式] ,其中 [公式] 是一个极微小量,甚至如果 [公式] ,该响应值还是负的,可以用来判断边缘。

 

 

 

步骤

1. RGB彩色图片转成灰度图;

2. 使用Sobel等梯度算子计算每一个点x,y两个方向上的梯度[公式],如

3. 计算图像两个方向梯度的乘积[公式] 和 [公式],为构建 [公式] 矩阵做准备;

4. 对 [公式] 和 [公式] 做局部窗口的高斯滤波(或均值滤波),计算中心点为(x, y)的局部窗口W对应的矩阵M;

5. 对图像每一个点,构建 [公式] ,求Harris响应值 [公式] ,参数 [公式] 一般取 0.04 - 0.06;

6.  过滤响应值,响应值大于一定阈值的点保存,保存作为角点。

7. 每个角点,统计局部特征,做后续的图像匹配等。

 

 

 

 

 

posted @ 2022-05-23 09:38  IllidanStormrage  阅读(229)  评论(0编辑  收藏  举报