1. 程式人生 > >OpenCV 學習筆記07 目標檢測與識別

OpenCV 學習筆記07 目標檢測與識別

數據 屬於 不能 說明 其余 目標識別 通過 窗口 htm

目標檢測與識別是計算機視覺中最常見的挑戰之一。屬於高級主題。

本章節將擴展目標檢測的概念,首先探討人臉識別技術,然後將該技術應用到顯示生活中的各種目標檢測。

1 目標檢測與識別技術

為了與OpenCV 學習筆記 05 人臉檢測和識別進行區分;需重新說明一下什麽是目標檢測。

目標檢測是一個程序,它用來確定圖像的某個區域是否有要識別的對象,對象識別是程序識別對象的能力。識別通常只處理已檢測到對象的區域。若人們總是會在有人臉圖像的區域去識別人臉。

在計算機視覺中有很多目標檢測和識別的技術,本章會用到:

  • 梯度直方圖(Histogram of Oriented Gradient, HOG)
  • 圖像金字塔(image pyramid)
  • 滑動窗口(sliding window)

與特征檢測算法不同,這些算法是互補的。如在梯度直方圖(HOG)中會使用滑動窗口技術。

1.1 HOG 描述符

HOG 是一個特征描述符,因此 HOG 與 SIFT、SURF 和 ORB 屬於同一類型的描述符。

在圖像和視覺處理中常常會進行目標檢測,其實目標檢測的內部機制都差不多,如人臉識別的 LBPH 描述符:

  • 第一步:將圖像劃分成多個部分
  • 第二步:計算各個部分的梯度

HOG 不是基於顏色值而是基於梯度來計算直方圖。

HOG 所得到的特征描述符能夠為特征匹配目標檢測(或目標識別)提供非常重要的信息。

HOG 提取特征的過程:先將目標圖像分成小單元,每個小單元是 16*16 的像素塊;每個單元都包含了視覺表示,該視覺表示按按八個方向(N、NW、W、SW、S、SE、E、NE)所計算的顏色梯度。

每個單元的八個值就為直方圖,因此,每個單元都會有唯一的標識(signature)。將直方圖外推(extrapolation)成描述符是相當復雜的過程:計算每個單元的局部直方圖,這些單元會合成較大的區域,也稱為塊(block);塊可由任意多個單元組成,但 Dalal 和 Triggs ( HOG 的發明人)發現當進行人檢測時,一個塊包含 2 * 2 的單元時可得到最好的效果。按塊構成特征向量是為了便於歸一化,同時也考慮到了光照和陰影(shadowing)的變化(一個單元的區域太小,不能檢測到這樣的變化)。這樣做減少了圖像與塊之間光照和陰影的差異,從而提高了檢測精度。

僅僅比較兩幅圖的單元是行不通的,除非這兩幅圖像相同(從大小和數據兩方面而言)還有兩個主要的問題需要解決:位置和尺度。

1.1.1 尺度問題

對於這個問題,可以通過兩個例子來說明:若要檢測的目標(比如自行車)是較大圖像中的一部分,要對兩幅圖像進行比較。如果在比較過程中找不到一組相同的梯度,則檢測就會失敗(即使兩幅圖像都有自行車)。

1.1.2 位置問題

在解決了尺度問題後,還有另外一個問題,要檢測的目標可能位於圖像的任何位置,所以需要掃描圖像的各個部分,以確保能找到感興趣的區域,且在這些區域中去嘗試檢測目標。即使待檢測圖像中的目標和訓練圖像中的目標一樣大,也需要通過某種方式讓 OpenCV 定位該目標。因此,只對有可能存在目標的區域進行比較,而該圖像的其余部分會被丟棄。

為了解決上述問題,需要熟悉圖像金字塔和滑動窗口的概念。

1.1.2.1 圖像金字塔

OpenCV 學習筆記07 目標檢測與識別