HOG特徵詳解-----梯度方向直方圖


HOG全稱histogram of oriented gradients.如翻譯成中文就是方向梯度直方圖

步驟一:瞭解圖像的梯度

在講HOG(方向梯度直方圖)之前,我們先要知道圖像的梯度是什麼。

這裏我們先用一個最簡單的黑白圖來演示一下:
在這裏插入圖片描述

首先我們先計算x方向上的梯度(也就是水平方向),我們要做的是從圖像的 左邊到右邊進行掃描,黑色的像素爲0,白色像素值爲255,當我們從黑色掃描到白色時,像素值突然從0變到了255,這就產生了一個梯度差,如下圖的梯度圖像所示:

在這裏插入圖片描述

可以看到,梯度圖像中,因爲像素值從0到了255升高了,是個正的梯度,所以白色的部分表示這裏是一個正的梯度(圓形的左側),再繼續掃描,從白色突然變到黑色,從255突然變到了0,像素值下降了,是個負梯度,用黑色部分表示負梯度(圓形右側)

同理,我們可以得出垂直方向上的梯度圖像,如下圖:

在這裏插入圖片描述

步驟二:計算每個點的梯度強度和梯度方向

現在知道了什麼是梯度之後,我們要如何計算梯度呢?

這裏假設一個像素點A,他的上下左右四個方向上的相鄰像素值爲:
在這裏插入圖片描述

對於像素點A,要計算水平梯度和豎直梯度,如上圖,水平梯度gx\boldsymbol{g}_{\boldsymbol{x}}=30-20=10,豎直梯度 gx\boldsymbol{g}_{\boldsymbol{x}} =64-32=32.

那麼總的梯度強度值g和梯度方向θ\boldsymbol{\theta }將按照以下公式計算:
g=gx2+gy2 \boldsymbol{g}=\sqrt{\boldsymbol{g}_{\boldsymbol{x}}^{2}+\boldsymbol{g}_{\boldsymbol{y}}^{2}}

θ=arctangxgy \boldsymbol{\theta }=\arctan \frac{\boldsymbol{g}_{\boldsymbol{x}}}{\boldsymbol{g}_{\boldsymbol{y}}}

梯度方向將會取絕對值,因此梯度方向的範圍是0-180度。取絕對值的原因是這樣效果更好。

步驟三:計算梯度直方圖

按照上一步的計算,每一個像素點都會有兩個值:梯度強度/梯度方向。

現在就計算梯度直方圖,這也是HOG的關鍵步驟。

梯度直方圖是在一個8x8的cell裏面計算的(這裏的cell就是將一幅圖像分成好多個小塊,每個小塊裏有8x8=64的像素值),如下圖所示:
在這裏插入圖片描述

那麼在8x8的cell裏面就會有8x8x2=128個值(注意這裏不是像素值,只是一個數值),這裏的2是包括了梯度強度和梯度方向。通過統計形成梯度直方圖,128個值將會變成9個值,大大降低了計算量,同時又對光照等環境變化更加地魯棒

那是怎麼把128個值將會變成9個值呢?

首先,我將0-180度分成9個bins,分別是0,20,40…160。然後統計每一個像素點所在的bin。

在這裏插入圖片描述

左上圖是8x8的梯度方向值,右上圖是8x8的梯度強度值,下圖是9個bins。

先看兩個藍色圈圈。因爲藍圈的方向是80度,大小是2,所以該點就投給80這個bin;

再看兩個紅色圈圈。因爲紅色圈圈的方向是10,大小是4,因爲10距離0點爲10,距離20點爲也爲10,那麼有一半的大小是投給0這個bin,還有一半的大小(即是2)投給20這個bin。

那麼統計完64個點的投票數以後,每個bin就會得到一個數值,可以得到一個直方圖,在計算機裏面就是一個大小爲9的數組。
在這裏插入圖片描述

從上圖可以看到,更多的點的梯度方向是傾向於0度和160度,也就是說這些點的梯度方向是向上或者向下,表明圖像這個位置存在比較明顯的橫向邊緣。因此HOG是對邊角敏感的,由於這樣的統計方法,也是對部分像素值變化不敏感的,所以能夠適應不同的環境。

步驟四:對16*16大小的block歸一化

歸一化的目的是降低光照的影響。因爲在前面的步驟中,我們根據圖像的梯度創建了一個直方圖。圖像的梯度對整體亮度是敏感的。如果通過將所有像素值除以2來使圖像變暗,則漸變幅度將改變一半,因此直方圖值將改變一半。理想情況下,我們希望描述符不受光照變化的影響。換句話說,我們希望使直方圖正常化(歸一化),這樣它們不會受到光照變化的影響。

歸一化的方法是向量的每一個值除以向量的模長。

比如對於一個(128,64,32)的三維向量來說,模長是1282+642+322=146.642\sqrt{128^2+64^2+32^2}=146.642

那麼歸一化後的向量變成了(0.87,0.43,0.22)

那麼16x16大小的block是怎麼來的?如下圖:
在這裏插入圖片描述
綠色方塊是8x8大小的cell,藍色方塊就是由4個cell組成的block。作者提出要對block進行normalize。那麼由於一個cell就會有大小爲9的vector,四個cell就有36大小的vector。對block進行normalize就是對這大小爲36的vector進行歸一化。

而每一個block將按照從左到右,從上到下的移動方式進行迭代截取。

步驟五:計算HOG特徵向量

每一個16x16大小的block將會得到36大小的vector。那麼對於一個64x128大小的圖像,按照上圖的方式提取block,將會有7個水平位置和15個豎直位可以取得,所以一共有7x15=105個block,所以我們整合所有block的vector,形成一個大的一維vector的大小將會是36x105=3780。

得到HOG特徵向量,就可以用來可視化和分類了。

定向梯度直方圖的可視化

在這裏插入圖片描述

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