HOG特徵描述子的解釋【DataWhale學習記錄】

參考文獻:
第十八節、基於傳統圖像處理的目標檢測與識別(HOG+SVM附代碼)

HOG特徵

圖像特徵工程:HOG特徵描述子介紹

HOG特徵

推薦的一個pdf學習文件是:HOG特徵描述算子-行人檢測

1 HOG特徵描述子的簡介

Histogram of Oriented Gridients(HOG) 方向梯度直方圖。 HOG特徵是一種在計算機視覺和圖像處理中用來進行物體檢測的特徵描述子,是與SIFT、SURF、ORB屬於同一類型的描述符。

HOG不是基於顏色值而是基於梯度來計算直方圖的,它通過計算和統計圖像局部區域的梯度方向直方圖來構建特徵。HOG特徵結合SVM分類器已經被廣泛應用到圖像識別中,尤其在行人檢測中獲得了極大的成功。

目標檢測和目標識別的概念區別,目標檢測是用來確定圖像上某個區域是否有我們要識別的對象目標識別是用來判斷圖片上這個對象是什麼。識別通常只處理已經檢測到對象的區域,例如,人們總是會在已有的人臉圖像的區域去識別人臉。

1.1 主要思想

此方法的基本觀點是:局部目標的外表和形狀可以被局部梯度或邊緣方向的分佈很好的描述,即使我們不知道對應的梯度和邊緣的位置。(本質:梯度的統計信息,梯度主要存在於邊緣的地方)

1.2 實施方法

首先,將圖像分成很多小的連通區域,稱爲細胞單元

然後,採集細胞單元中各像素點的梯度和邊緣方向

然後,在每個細胞單元中累加出一個一維的梯度方向直方圖

再者,通過把這些直方圖在圖像的更大的範圍內(我們把它叫做區間或者block)進行對比度歸一化;而經過歸一化的塊描述叫作HOG描述子

2 算法的具體實現

預先假設場景:64×128的圖像,劃分爲8×16個 8×8 的cell單元.

需要解釋爲什麼需要分爲多個cell

  • 這是因爲如果對一整張梯度圖逐像素計算,其中的有效特徵是非常稀疏的,不但運算量大,而且會受到一些噪聲干擾。於是我們就使用局部特徵描述符來表示一個更緊湊的特徵,計算這種局部cell上的梯度直方圖更具魯棒性。

2.1 圖像預處理

1 灰度化處理(可選)

彩色圖片也可以直接處理。不過是分別對三通道的顏色值進行梯度計算,最後選擇梯度最大的那個。

2 Gamma校正法(可選)

爲了減少光照因素的影響,降低圖像局部的陰影和光照變化所造成的影響,我們首先採用Gamma校正法對輸入圖像的顏色空間進行標準化(或者說是歸一化)

所謂的Gamma校正可以理解爲提高圖像中偏暗或者偏亮部分的圖像對比效果,能夠有效地降低圖像局部的陰影和光照變化。

Gamma校正公式爲:
f(I)=Iγf(I) = I^\gamma

在這裏插入圖片描述
γ<1在低灰度值區域內,動態範圍變大,圖像對比度增加強;在高灰度值區域,動態範圍變小,圖像對比度降低,同時,圖像的整體灰度值變大

γ>1在低灰度值區域內,動態範圍變小,圖像對比度降低;在高灰度值區域,動態範圍變大,圖像對比度提高,同時,圖像的整體灰度值變小;

相關論文裏有提到,對於涉及大量的類內顏色變化,如貓,狗和馬等動物,沒標準化的RGB圖效果更好,而牛,羊的圖做gamma顏色校正後效果更好。

3 圖像平滑(可選)
對於灰度圖像,一般爲了去除噪點,所以會先利用高斯函數進行平滑:高斯函數在不同的平滑尺度下對灰度圖像進行平滑操作。

但是在實驗中發現,不做高斯平滑人體檢測效果最佳,使得漏檢率縮小了約一倍,而這種現象可能的原因是:HOG特徵是基於邊緣的,平滑會降低邊緣信息的對比度,從而減少圖像中的有用信息。

2.2 梯度計算

梯度計算(以每個像素點爲基本單位)。

計算圖像每個像素點的梯度、包括方向和大小:
Gx(x,y)=I(x+1,y)I(x1,y)G_x(x,y)=I(x+1,y)−I(x−1,y)
Gy(x,y)=I(x,y+1)I(x,y1)G_y(x,y)=I(x,y+1)−I(x,y−1)

上式中Gx(x,y)Gy(x,y)Gx(x,y)、Gy(x,y)分別表示輸入圖像在像素點(x,y)處的水平方向梯度和垂直方向梯度,像素點在(x,y)的梯度幅值和梯度方向分別爲:
G(x,y)=Gx(x,y)2+Gy(x,y)2G(x,y)= \sqrt{G_x(x,y)2+G_y(x,y)2}
α=arctanGy(x,y)Gx(x,y)α=arctan{\frac {G_y(x,y)} {G_x(x,y)}}

至此,計算得到8×16×8×8×2個梯度值.而其中的2代表每個梯度包含大小和方向兩個值。

2.3 直方圖

直方圖計算(以每個cell爲基本單位)

統計一個細胞單元的梯度直方圖時,我們一般考慮採用9個bin的直方圖來統計這8×8個像素的梯度信息,即將cell的梯度方向0-180°(或0~360°,即考慮了正負)分成9個方向塊,如果分成18個方向塊,就是考慮到0-360,即考慮了正負。

除此之外,還有其他的創建直方圖的方式:

方式1

從生成直方圖的最簡單方法開始。我們將取每個像素值,找到像素的方向並更新頻率表。
假設場景是高亮像素(85)的處理過程。由於該像素的角度爲36°,我們將對角度值36添加一個數字,表示頻率:
在這裏插入圖片描述
對所有像素值重複相同的過程,最後得到一個頻率表,表示角度以及這些角度在圖像中的出現情況。這個頻率表可用於生成在x軸上有角度值的直方圖和在y軸上有頻率值的直方圖。

注意,這裏直方圖的bin值(角度的間隔)爲1。因此我們得到大約180個不同的桶,每個桶代表一個角度值。另一種方法是爲更大的角度值間隔創建直方圖特徵。

方式2

這個方法與前面的方法類似,不同之處在於我們的bin值爲20。因此,我們在這裏得到的桶數是9。

同樣,對於每個像素,我們將檢查角度,並以9 x 1矩陣的形式存儲角度值的頻率。繪製這個將給我們直方圖:

在這裏插入圖片描述

方式3

上述兩種方法僅使用角度值來生成直方圖並且不考慮梯度值。這是我們可以生成直方圖的另一種方式 - 我們可以使用梯度幅值(magnitude)來填充矩陣中的值而不是使用頻率。以下是示例:
在這裏插入圖片描述

方式4

讓我們對上面的方法做一個小修改。在這裏,我們將像素梯度的貢獻添加到像素梯度兩側的區間。請記住,更接近角度的bin值有更高的貢獻。

在這裏插入圖片描述

這正是在HOG特徵描述子中創建直方圖的方式。

至此,對於每個cell都會產生一個9維的HOG特徵向量,產生了8×16個cell的梯度直方圖或者說是HOG特徵向量。

2.4 block歸一化

HOG特徵將8×8的一個局部區域作爲一個cell,再以2×2個cell作爲一組,稱爲一個block,也就是說一個block表示16x16的區域。

但是爲什麼又需要分block呢?

  • 這是因爲,雖然我們已經爲圖像的8×8單元創建了HOG特徵,但是圖像的梯度對整體光照很敏感。這意味着對於特定的圖像,圖像的某些部分與其他部分相比會非常明亮。

  • 我們不能從圖像中完全消除這個。但是我們可以通過使用16×16個塊來對梯度進行歸一化來減少這種光照變化。

  • 由於每個cell有9個值,一個block(2×2個cell)則有36個值,HOG是通過滑動窗口的方式來得到block的,如下圖所示:
    在這裏插入圖片描述
    歸一化的目的是爲了降低光照的影響,因爲梯度對整體光照非常敏感,比如通過將所有像素值除以2來使圖像變暗,那麼梯度幅值將減小一半,因此直方圖中的值也將減小一半,我們就需要將直方圖“歸一化”。

歸一化的方法有很多:L1-norm、L2-norm、max/min等等,一般選擇L2-norm。

例如對於一個[128,64,32]的三維向量來說,模長是1282+642+322=146.64\sqrt{128^2+64^2+32^2}=146.64,這叫做向量的L2範數。將這個向量的每個元素除以146.64就得到了歸一化向量 [0.87, 0.43, 0.22]。

採用同樣的方法,一個cell有一個梯度方向直方圖,包含9個數值,一個block有4個cell,那麼一個block就有4個梯度方向直方圖,將這4個直方圖拼接成長度爲36的向量,然後對這個向量進行歸一化。

而每一個block將按照上圖滑動的方式進行重複計算,直到整個圖像的block都計算完成。

2.5 獲得HOG描述子

每一個16 * 16大小的block將會得到一個長度爲36的特徵向量,並進行歸一化。 那會得到多少個特徵向量呢?

  • 例如,對於上圖被劃分8 * 16個cell ,每個block有2x2個cell的話,那麼cell的個數爲:(16-1)x(8-1)=105。即有7個水平block和15個豎直block。

  • 每個block有36個值,整合所有block的特徵值,最終獲得由36 * 105=3780個特徵值組成的特徵描述符,而這個特徵描述符是一個一維的向量,長度爲3780。

其中,需要指出的是,
這裏的block由2×2個cell構成,它在圖像上覆蓋計算的方式是overlap的圖像分割策略。 overlap指的是分割出的區塊(patch)互相交疊,有重合的區域。

HOG的圖像分割策略,一般來說有overlap和non-overlap兩種。
在這裏插入圖片描述
在這裏插入圖片描述

  • overlap,這種分割方式可以防止對一些物體的切割,還是以眼睛爲例,如果分割的時候正好把眼睛從中間切割並且分到了兩個patch中,提取完HOG特徵之後,這會影響接下來的分類效果,但是如果兩個patch之間overlap,那麼至少在一個patch會有完整的眼睛。overlap的缺點是計算量大,因爲重疊區域的像素需要重複計算。

  • non-overlap,缺點就是上面提到的,有時會將一個連續的物體切割開,得到不太“好”的HOG特徵,優點是計算量小,尤其是與Pyramid(金字塔)結合時,這個優點更爲明顯。

所以,因爲是overlap的圖像分割策略,最後的block數目其實是105個。

至此,得到7×15個2×2×9維的HOG特徵向量,經過串聯,就得到了一共有15∗7∗2∗2∗9=3780個維度的特徵向量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章