美文网首页
图像特征提取:(一)Harri角点检测

图像特征提取:(一)Harri角点检测

作者: 神经网络爱好者 | 来源:发表于2019-10-23 14:36 被阅读0次

    目录

    一  Harri角点检测
      1.1 何为角点检测?
      1.2 Harri算子的数学表征
      1.3 Opencv实现Harri角点检测
      1.4 参考资料

    二 背景建模
    三 光流估计

    一 Harri角点检测

    1.1 何为角点检测?

      定义:角点就是轮廓之间的交点。如果从数字图像处理的角度来描述就是:像素点附近区域像素无论是在梯度方向、还是在梯度幅值上都发生较大的变化。
      基本思想:选取一个固定的窗口在图像上以任意方向的滑动,如果灰度都有较大的变化,那么久认为这个窗口内部存在角点。

    1.2 Harri算子的数学表征

      将图像的窗口函数w(x,y),平移[u,v],那么滑动前与滑动后对应的窗口中的像素点灰度变化描述如下:
    E(u, v)=\sum_{x, y}\ w(x, y)\ [I(x+u, y+v-I(x, y)]^2
    其中灰度变化部分:
    \begin{align} \sum\ [I(x+u, y+v-I(x, y)]^2 &\approx \sum\ [I(x, y)+uI_x+vI_y-I(x, y)]^2 \\\\ &= \sum u^2 I_x^2 + 2uvI_xI_y + v^2 I_y^2 \\\\ &= \sum \begin{bmatrix}u & v \end{bmatrix} \begin{bmatrix} I_x^2 & I_xI_y \\\\ I_xI_y & I_y^2 \end{bmatrix} \begin{bmatrix} u \\\\ v \end{bmatrix} \\\\ &=\begin{bmatrix}u & v \end{bmatrix} \left(\sum \begin{bmatrix} I_x^2 & I_xI_y \\\\ I_xI_y & I_y^2 \end{bmatrix}\right) \begin{bmatrix} u \\\\ v \end{bmatrix} \end{align}
    因此得到:
    \begin{gather} 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_x^2 & I_xI_y \\\\ I_xI_y & I_y^2 \end{bmatrix} \end{gather}
    这里窗口函数w(x, y),最简单的取值为1,一般为以中心为原点的二元正态分布。

    因此角点与其他类型区域的不同之处:
      * 平坦区域:梯度方向各异,但是梯度幅值变化不大
      * 线性边缘:梯度幅值改变较大,梯度方向改变不大
      * 角点:梯度方向和梯度幅值变化都较大
    将M对角化,产生两个特征值,判断条件如下:
      * 平坦区域:两个特征值都很小
      * 线性边缘:特征值一个大一个小
      * 角点:两个特征值都较大

    进一步可以用下方的公式评价角点:
    R=det\ M-k(traceM)^2
    其中,
    det\ M = \lambda_1\lambda_2 ,\ \ \ traceM =\lambda_1+\lambda_2

    \begin{align} R=0 &\Longrightarrow 平坦区域 \\\\ R<0 &\Longrightarrow 线性边缘 \\\\ R>0 &\Longrightarrow 角点 \end{align}

    1.3 Opencv实现Harri角点检测

    import cv2
    import numpy as np
    ​
    filename = '****.jpg'
    ​
    img = cv2.imread(filename)
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    gray = np.float32(gray)
    dst = cv2.cornerHarris(gray,blockSize,ksize,k)
    ​
    """
    其中,
    gray为灰度图像,
    blockSize为邻域窗口的大小,
    ksize是用于Soble算子的参数,
    k是一个常量,取值为0.04~0.06
    也可以通过scipy.ndimage.filters的库自己计算
    """
    

    1.4 参考资料

    [1] https://zhuanlan.zhihu.com/p/67770305
    [2] https://blog.csdn.net/lwzkiller/article/details/54633670

    相关文章

      网友评论

          本文标题:图像特征提取:(一)Harri角点检测

          本文链接:https://www.haomeiwen.com/subject/fxvhvctx.html