0
点赞
收藏
分享

微信扫一扫

Harris角点检测原理-

本文是本人看bilibili教学结合官方文档的观后笔记,链接在下:

(全)基于python的Opencv项目实战_哔哩哔哩_bilibili

如果有什么理解不到位的地方,欢迎指正。

理论:

先放角点定义(百度百科):角点就是极值,即在某方面属性特别突出的。 当然,你可以自己定义角点的属性(设置特定熵值进行角点检测)。 角点可以是两条线的交叉处,也可以是位于相邻的两个主要方向不同的事物上的

opencv中的解释:corners are regions in the image with large variation in intensity in all the directions.

在图像上表现在:在不同的方向像素值有较大变化。

 于是可以利用各个方向移动强度的不同,判断是否为角点,公式如下:

 第一项为权值函数,可以为方形加权,也可以为高斯加权

第二项基于泰勒展开

 其中:泰勒公式:

 \large f(x+u,y+v) = f(x,y)+uf'x(x,y)+vf'y(x,y)+O(x^2)

 可以近似等于:

\large E(u,v) = (uf'x(x,y)+vf'y(x,y))^2

其中两个偏导数可以用梯度函数,例如:sobel()

公式容易看出为二次型,可以写为:

\large E(u,v)\approx \begin{bmatrix} u & v \end{bmatrix}M\begin{bmatrix} u\\ v \end{bmatrix}

其中:

M = \sum_{x y}^{}w(x,y)\begin{bmatrix} f'x(x,y)^2 &f'x(x,y)f'y(x,y) \\ f'x(x,y)f'y(x,y)&f'y(x,y)^2 \end{bmatrix}

根据矩阵加法,将累加符换入矩阵中。

 由数学定理可知:实对称矩阵必可以相似对角化。所以M中的矩阵可以化为对角矩阵:

\large E(U,V) = w(x,y)\begin{bmatrix} U & V \end{bmatrix}\begin{bmatrix} \lambda 1 &0 \\ 0& \lambda 2 \end{bmatrix}\begin{bmatrix} U\\ V \end{bmatrix}

其实是一个椭圆方程:

\begin{bmatrix} U & V \end{bmatrix}\begin{bmatrix} \lambda 1 & 0\\ 0 & \lambda 2 \end{bmatrix}\begin{bmatrix} U\\ V \end{bmatrix}=1

写为方程式:

\frac{U^2}{\frac{1}{\lambda 1}}+\frac{V^2}{\frac{1}{\lambda 2}}=1

 所以:

当λ1与λ2都很大时,表示在U,V方向变化快速,应为角点。

故,可以用一个函数来说明图像特征关系,来自官方文档:

当|R|值很小,意味着:λ1与λ2都很小,检测点为flat

当R<0,意味着λ1>>λ2或者λ2>>λ1,检测点为边界

当R值很大,意味着:λ1与λ2都很大,且近似相等,检测点为角点

函数:

        cornerHarris(img,blocksize,ksize,k)->dst

       •dst -  返回一个单通道数组

       • img - 数据类型为 float32 的输入图像。
  • blockSize - 角点检测中指定区域小。
  • ksize - Sobel 求导中使用的窗口大小
  • k - 取值参数为 [0,04,0.06] 

代码:

 结果:

 

举报

相关推荐

0 条评论