OpenCV 4.12.0
開源計算機視覺
載入中...
搜尋中...
無匹配項
Harris 角點檢測器

下一教程: Shi-Tomasi 角點檢測器

原始作者Ana Huamán
相容性OpenCV >= 3.0

目標

在本教程中,您將學習

  • 什麼是特徵以及它們為何重要
  • 使用函式 cv::cornerHarris 使用 Harris-Stephens 方法檢測角點。

理論

什麼是特徵?

  • 在計算機視覺中,通常我們需要找到環境中不同幀之間的匹配點。為什麼?如果我們知道兩幅影像如何相互關聯,我們就可以使用*這兩幅*影像來提取它們的資訊。
  • 當我們說 匹配點 時,通常是指場景中我們容易識別的 特性。我們稱這些特性為 特徵
  • 那麼,特徵應該具備哪些特性呢?
    • 它必須是 *唯一可識別的*

影像特徵的型別

列舉如下

  • 邊緣
  • 角點 (也稱為興趣點)
  • 斑點 (也稱為興趣區域)

在本教程中,我們將專門研究 角點 特徵。

為什麼角點如此特殊?

  • 因為角點是兩條邊緣的交點,它代表一個方向 改變 的點。因此,影像的梯度(在兩個方向上)具有很大的變化,這可以用於檢測它。

它是如何工作的?

  • 讓我們尋找角點。由於角點代表影像中梯度的變化,我們將尋找這種“變化”。
  • 考慮一幅灰度影像 \(I\)。我們將用一個視窗 \(w(x,y)\) (在 x 方向有 \(u\) 位移,在 y 方向有 \(v\) 位移)掃過 \(I\),並計算強度變化。

    \[E(u,v) = \sum _{x,y} w(x,y)[ I(x+u,y+v) - I(x,y)]^{2}\]

    其中

    • \(w(x,y)\) 是在位置 \((x,y)\) 的視窗
    • \(I(x,y)\) 是在 \((x,y)\) 的強度
    • \(I(x+u,y+v)\) 是在移動後的視窗 \((x+u,y+v)\) 的強度
  • 由於我們尋找帶有角點的視窗,因此我們尋找強度變化大的視窗。因此,我們必須使上述方程最大化,特別是以下項:

    \[\sum _{x,y}[ I(x+u,y+v) - I(x,y)]^{2}\]

  • 使用 泰勒展開

    \[E(u,v) \approx \sum _{x,y}[ I(x,y) + u I_{x} + vI_{y} - I(x,y)]^{2}\]

  • 展開方程並適當消去項

    \[E(u,v) \approx \sum _{x,y} u^{2}I_{x}^{2} + 2uvI_{x}I_{y} + v^{2}I_{y}^{2}\]

  • 可以矩陣形式表示為

    \[E(u,v) \approx \begin{bmatrix} u & v \end{bmatrix} \left ( \displaystyle \sum_{x,y} w(x,y) \begin{bmatrix} I_x^{2} & I_{x}I_{y} \\ I_xI_{y} & I_{y}^{2} \end{bmatrix} \right ) \begin{bmatrix} u \\ v \end{bmatrix}\]

  • 我們記為

    \[M = \displaystyle \sum_{x,y} w(x,y) \begin{bmatrix} I_x^{2} & I_{x}I_{y} \\ I_xI_{y} & I_{y}^{2} \end{bmatrix}\]

  • 因此,我們的方程現在是

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

  • 為每個視窗計算一個分數,以確定它是否可能包含一個角點

    \[R = det(M) - k(trace(M))^{2}\]

    其中

    • det(M) = \(\lambda_{1}\lambda_{2}\)
    • trace(M) = \(\lambda_{1}+\lambda_{2}\)

    一個得分 \(R\) 大於某個特定值的視窗被視為“角點”

程式碼

解釋

結果

原始影像

檢測到的角點被小黑圈包圍