- AI自動化測試:技術原理、平臺搭建與工程實踐
- 騰訊TuringLab團隊
- 1371字
- 2020-08-13 13:47:02
2.2.3 梯度特征匹配算法
除了灰度值、特征點,我們還可以提取圖像的其他特征,如邊緣特征、梯度特征和方向梯度直方圖等。方向梯度直方圖[1](Histogram of Oriented Gradient,HOG)是一種在計算機視覺和圖像處理中用來進行物體檢測的特征描述子。HOG特征通過計算和統計圖像局部區域的梯度方向直方圖來構成。此外,HOG特征結合SVM分類器的技術已經被廣泛應用于圖像識別中,尤其在行人檢測中獲得了極大的成功。HOG特征提取流程如圖2-4所示,主要步驟介紹如下。

圖2-4 HOG提取特征的流程
Step1:歸一化處理。為了減小光照因素的影響,首先需要將整個圖像進行規范化(歸一化)。歸一化處理能夠有效地降低圖像局部的陰影和光照變化。
Step2:計算圖像梯度。計算圖像橫坐標和縱坐標方向的梯度,并據此計算每個像素位置的梯度方向值。求導操作不僅能夠捕獲輪廓、人影和一些紋理信息,還能進一步弱化光照的影響。
最常用的方法是:簡單地使用一個一維的離散微分模板在一個方向或者同時在水平和垂直兩個方向上對圖像進行處理。計算公式如下所示,其中Gx(x,y)表示像素點(x,y)處的水平方向梯度,Gy(x,y)表示像素點(x,y)處的垂直方向梯度,H(x,y)表示像素點(x,y)處的像素值,G(x,y)表示在像素點(x,y)處的梯度幅度值,α(x,y)表示梯度方向。

Step3:構建方向直方圖。細胞單元中的每一個像素點都為基于某個方向的直方圖通道投票。投票采取的是加權投票的方式,即每一票都是帶有權值的,這個權值是根據該像素點的梯度幅值計算出來的。我們可以采用幅值本身或者幅值函數來表示權值。實際測試表明:使用幅值本身來表示權值能獲得更佳的效果。當然,我們也可以選擇幅值函數來表示,比如幅值的平方根、幅值的平方、幅值的截斷形式等。細胞單元可以是矩形的,也可以是星形的。直方圖通道平均分布在0~180°(無向)或0~360°(有向)范圍內。研究發現,采用無向的梯度和9個直方圖通道,能在行人檢測試驗中取得最佳的效果。
Step4:將細胞單元組合成大的區間。由于局部光照的變化以及前景和背景對比度的變化,使得梯度強度的變化范圍非常大。這就需要對梯度強度做歸一化。歸一化能夠進一步對光照、陰影和邊緣進行壓縮。采取的方法是:把各個細胞單元組合成大的、空間上連通的區間。這樣,HOG描述符就變成了由各區間所有細胞單元的直方圖所組成的一個向量。這些區間是互有重疊的,這就意味著每一個細胞單元的輸出會多次作用于最終的描述器。
區間有兩個主要的幾何形狀——矩形區間(R-HOG)和環形區間(C-HOG)。R-HOG區間大體上是一些方形的格子,可以由三個參數來表征:每個區間中細胞單元的數目、每個細胞單元中像素點的數目、每個細胞的直方圖通道數目。
Step5:收集HOG特征。把提取的HOG特征輸入SVM分類器,尋找一個最優超平面作為決策函數。
2.2節主要介紹了傳統的圖像識別算法,如基于像素值的方法、特征點方法、HOG特征的方法等。這些方法一般采用滑動窗口的方法在全圖像內提取窗口內的特征。為了適應不同大小物體的檢測,需要對原圖像進行縮放,在縮放后的圖像上滑動子窗口提取特征。子窗口的方式使得計算量增大。此外,這些方法都需要人工設計和提取特征,所以算法的選取很重要。如HOG特征比較適用于輪廓明顯的物體檢測,如果整張圖像沒有明顯的輪廓特征,那么HOG算法就不是很適用了。有沒有可以自動提取圖像特征且通用性更強的算法呢?下一節中我們將介紹基于深度學習自動提取圖像特征的算法。
[1] Dalal N,Triggs B.Histograms of Oriented Gradients for Human Detection[C].IEEE Computer Society Conference on Computer Vision & Pattern Recognition,2015.
- LaTeX Cookbook
- 精通Nginx(第2版)
- Dynamics 365 Application Development
- Visual FoxPro程序設計教程
- Learning Informatica PowerCenter 10.x(Second Edition)
- C/C++常用算法手冊(第3版)
- 精通API架構:設計、運維與演進
- UML+OOPC嵌入式C語言開發精講
- Modern JavaScript Applications
- Kotlin從基礎到實戰
- C++從入門到精通(第5版)
- SQL Server實用教程(SQL Server 2008版)
- Python語言實用教程
- Deep Learning with R Cookbook
- NGUI for Unity