opencv角点检测原理详解
侧边栏壁纸
  • 累计撰写 192,421 篇文章
  • 累计收到 3 条评论

opencv角点检测原理详解

admin
2022-12-16 / 0 评论 / 3 阅读 / 正在检测是否收录...

角点:最直观的印象就是在水平、竖直两个方向上变化均较大的点,即Ix、Iy都较大

边缘:仅在水平、或者仅在竖直方向有较大的变化量,即Ix和Iy只有其一较大 平坦地区:在水平、竖直方向的变化量均较小,即Ix、Iy都较小

Harris角点检测算子是于1988年由CHris Harris & Mike Stephens提出来的。在具体展开之前,不得不提一下Moravec早在1981就提出来的Moravec角点检测算子。

1.Moravec角点检测算子

Moravec角点检测算子的思想其实特别简单,在图像上取一个W*W的“滑动窗口”,不断的移动这个窗口并检测窗口中的像素变化情况E。像素变化情况E可简单分为以下三种:A 如果在窗口中的图像是什么平坦的,那么E的变化不大。B 如果在窗口中的图像是一条边,那么在沿这条边滑动时E变化不大,而在沿垂直于这条边的方向滑动窗口时,E的变化会很大。 C 如果在窗口中的图像是一个角点时,窗口沿任何方向移动E的值都会发生很大变化。

 

上图就是对Moravec算子的形象描述。用数学语言来表示的话就是:

其中(x,y)就表示四个移动方向(1,0)(1,1)(0,1)(-1,1),E就是像素的变化值。Moravec算子对四个方向进行加权求和来确定变化的大小,然和设定阈值,来确定到底是边还是角点。

2.Harris角点检测算子

Harris角点检测算子实质上就是对Moravec算子的改良和优化。在原文中,作者提出了三点Moravec算子的缺陷并且给出了改良方法:

1. Moravec算子对方向的依赖性太强,在上文中我们可以看到,Moravec算子实际上只是移动了四个45度角的离散方向,真正优秀的检测算子应该能考虑到各个现象的移动变化情况。为此,作者采用微分的思想(这里不清楚的话可以复习下高数中的全微分):

其中:

所以E就可以表示为:

2.由于Moravec算子采用的是方形的windows,因此的E的响应比较容易受到干扰,Harris采用了一个较为平滑的窗口——高斯函数:

3.Moravec算子对边缘响应过于灵敏。为此,Harris提出了对E进行变形:

对,没错,变成了二次型,果然是大牛,更牛的还在后面!其中,

用α,β表示矩阵M的特征值,这样会产生三种情况:A 如果α,β都很小,说明高斯windows中的图像接近平坦。 B 如果一个大一个小,则表示检测到边。 C 如果α,β都很大,那么表示检测到了角点。

α,β表示矩阵M的特征值,这样会产生三种情况:

A.α,β都很小,说明高斯Windows中的图像接近平坦

B.如果一个大一个小,则表示检测到边

C.α,β都很大,那么表示检测到角点。

 

角点响应

R=det(M)-k*(trace(M)^2) (附录资料给出k=0.04~0.06,opencv指出是0.05-0.5,浮动较大)

det(M)=λ1*λ2 trace(M)=λ1+λ2

R取决于M的特征值,对于角点|R|很大,平坦的区域|R|很小,边缘的R为负值。

算法步骤

 

其中,局部极大值可用先膨胀后与原图比较的方法求得,具体见二中源码。

0

评论 (0)

取消