聲明:出處:http://blog.csdn.net/songzitea/article/details/17025149
最近在處理圖像手勢動作,看到兩篇關于梯度直方圖(HOG)特征的博文,轉載分享一下。
背景引言
方向梯度直方圖(Histogram of Oriented Gradient,HOG)是用于在計算機視覺和圖像處理領域,目标檢測的特征描述子。該項技術是用來計算圖像局部出現的方向梯度次數或資訊進行計數。此種方法跟邊緣方向直方圖、尺度不變特征變換以及形狀上下文方法有很多相似。但與它們的不同點是:HOG的計算基于一緻空間的密度矩陣來提高準确率。即:在一個網格密集的大小統一的細胞單元上計算,而且為了提高性能,還采用了重疊的局部對比度歸一化技術。HoG特征與SVM分類器結合,已經被廣泛應用于圖像識别中,尤其在行人檢測。本節内容根據論文[1]了解,介紹HOG相關知識。
基本介紹
提出HOG是由Navneet Dalal & Bill Triggs在2005年發表在CVPR中論文[1]。作者給了特征提取的流程圖,如下圖1所示:

HOG的核心思想是所檢測的局部物體外形能夠被光強梯度或邊緣方向的分布所描述。通過将整幅圖像分割成小的連接配接區域稱為cells,每個cell生成一個方向梯度直方圖或者cell中pixel的邊緣方向,這些直方圖的組合可表示出所檢測目标的目标)描述子。為改善準确率,局部直方圖可以通過計算圖像中一個較大區域稱為block的光強作為measure被對比标準化,然後用這個measure歸一化這個block中的所有cells.這個歸一化過程完成了更好的照射/陰影不變性。與其他描述子相比,HOG得到的描述子保持了幾何和光學轉化不變性除非物體方向改變。而Block與Cells關系如下圖所示:
而現在,我們給出作者做的行人檢測試驗,如下圖6所示:
其中,圖中(a)表示所有訓練圖像集的平均梯度;(b)和(c)分别表示:圖像中每一個區間上的最大最大正、負SVM權值;(d)表示一副測試圖像;(e)計算完R-HOG後的測試圖像;(f)和(g)分别表示被正、負SVM權值權重後的R-HOG圖像。
算法描述
HOG特征提取方法:首先将圖像分成小的連通區域,我們把它叫細胞單元。然後采集細胞單元中各像素點的梯度的或邊緣的方向直方圖。最後把這些直方圖組合起來就可以構成特征描述器。如下圖所示。
即:将一個圖像:第一步,灰階化即:将圖像看做一個x,y,z(灰階)的三維圖像;第二步:劃分成小cells(2*2);第三步,計算每個cell中每個pixel的gradient(即orientation);最後, 統計每個cell的梯度直方圖(不同梯度的個數),即可形成每個cell的descriptor。整個算法具體過程由以下幾個部分組成:
色彩和伽馬歸一化(Gamma/Color normalization)
在實際在實際應用中,這一步可以省略,因為作者分别在灰階空間、RGB色彩空間和LAB色彩空間上對圖像進行色彩和伽馬歸一化。而實驗結果顯示,這個歸一化的預處理工作對最後的結果沒有影響,在後續步驟中也有歸一化的過程,那些過程可以取代這個預處理的歸 一化。詳細請見參考資料[1].
梯度的計算(Gradient computation)
簡單地使用一個一維的離散微分模闆在一個方向上或者同時在水準和垂直兩個方向上對圖像進行處理,更确切地說,這個方法需要使用下面的濾波器核濾除圖像中的色彩或變化劇烈的資料作者也嘗試了其他一些更複雜的模闆,如3×3 Sobel 模闆,或diagonal masks,但是在這個行人檢測的實驗中,這些複雜模闆的表現都較差,是以作者的結論是:模闆越簡單,效果反而越好。作者也嘗試了在使用微分模闆前加入 一個高斯平滑濾波,但是這個高斯平滑濾波的加入使得檢測效果更差,原因是:許多有用的圖像資訊是來自變化劇烈的邊緣,而在計算梯度之前加入高斯濾波會把這 些邊緣濾除掉。
建構方向的直方圖(creating the orientation histograms)
此步就是為圖像的每個細胞單元建構梯度方向直方圖。細胞單元中的每一個像素點都為某個基于方向的直方圖通道投票。投票是采取權重投票(weighted voting)的方式,即每一票都是帶權值的,這個權值是根據該像素點的梯度幅度計算出來。可以采用幅值本身或者它的函數來表示這個權值,實際測試表明: 使用幅值來表示權值能獲得最佳的效果,當然,也可以選擇幅值的函數來表示,比如幅值的平方根、幅值的平方、幅值的截斷形式等。細胞單元可以是矩形的,也可以是星形的。直方圖通道是平均分布在無向(0~180度)或有向(0~360度)範圍内。
作者發現,采用無向的梯度和9個直方圖通道,能在行人檢測試驗中取得最佳的效果。把細胞單元組合成大的區間由于局部光照的變化以及前景-背景對比度的變化,使得梯度強度的變化範圍非常大。這就需要對梯度強度做歸一化,作者采取的辦法是:把各個細胞單元組合成大的、空間上連通的區間(blocks)。 這樣以來,HOG描述器就變成了由各區間所有細胞單元的直方圖成分所組成的一個向量。這些區間是互有重疊的,這就意味着:每一個細胞單元的輸出都多次作用 于最終的描述器。區間有兩個主要的幾何形狀:矩形區間(R-HOG)和環形區間(C-HOG)。
R-HOG: R-HOG區間大體上是一些方形的格子,它可以有三個參數來表征:每個區間中細胞單元的數目、每個細胞單元中像素點的數目、每個細胞的直方圖通道數目。作者通過實驗表明,行人檢測的最佳參數設定是:3×3細胞 /區間、6×6像素/細胞、9個直方圖通道。作者還發現,在對直方圖做處理之前,給每個block加一個高斯空域視窗(Gaussian spatial window)是非常必要的,因為這樣可以降低邊緣的周圍像素點的權重。R- HOG跟SIFT描述器看起來很相似,但他們的不同之處是:R-HOG是在單一尺度下、密集的網格内、沒有對方向排序的情況下被計算出來;而SIFT描述器是在多尺度下、稀疏的圖像關鍵點上、對方向排序的情況下被計算出來。補充一點,R-HOG是各區間被組合起來用于對空域資訊進行編碼,而SIFT的各描述器是單獨使用的。
C-HOG: C- HOG區間有兩種不同的形式,它們的差別在于:一個的中心細胞是完整的,一個的中心細胞是被分割的。如上圖所示:作者發現 C-HOG的這兩種形式都能取得相同的效果。C-HOG區間可以用四個參數來表征:角度盒子的個數、半徑盒子個數、中心盒子的半徑、半徑的伸展因子。通過實驗,對于行人檢測,最佳的參數設定為:4個角度盒子、2個半徑盒子、中心盒子半徑為4個像素、伸展因子為2。前面提到過,對于R- HOG,中間加一個高斯空域視窗是非常有必要的,但對于C-HOG,這顯得沒有必要。C-HOG看起來很像基于形狀Shape Contexts的方法,但不同之處是:C-HOG的區間中包含的細胞單元有多個orientation channels,而基于形狀上下文的方法僅僅隻用到了一個單一的edge presence count。
區間歸一化(Block normalization Schemes)作者采用了四中不同的方法對區間進行歸一化,并對結果進行了比較。引入v表示一個還沒有被歸一 化的向量它包含了給定區間(block)的所有直方圖資訊。| | vk | |表示v的k階範數,這裡的k去1、2。用e表示一個很小的常數。這時,歸一化因子可以表示如下:
L2-norm:L1-norm:L1-sqrt:還 有第四種歸一化方式:L2-Hys,它可以通過先進行L2-norm,對結果進行clipping,然後再重新歸一化得到。作者發現:采用L2- Hys L2-norm 和 L1-sqrt方式所取得的效果是一樣的,L1-norm稍微表現出一點點不可靠性。但是對于沒有被歸一化的資料來說,這四種方法都表現出來顯着的改進。SVM 分類器(SVM classifier)最後一步就是把提取的HOG特征輸入到SVM分類器中,尋找一個最優超平面作為決策函數。作者采用 的方法是:使用免費的SVMLight軟體包加上HOG分類器來尋找測試圖像中的行人。
綜上所述,HoG沒有旋轉和尺度不變性,是以計算量小;而SIFT中每個特征需要用128維的向量來描述,是以計算量相對很大。而行人檢測中,對于解決Scale-invariant 的問題:将圖檔進行不同尺度的縮放,就相當于對模闆進行不同尺度scale的縮放.對于解決Rotation-invariant 的問題:建立不同方向的模版(一般取15*7的)進行比對.總的來說,就是在不同尺度上的圖像進行不同方向的模闆(15*7)比對,每個點形成一個8方向的梯度描述。SIFT由于其龐大計算量不用與行人檢測,而PCA-SIFT的方法過濾掉很多元度的資訊,隻保留20個主分量,是以隻适用于行為變化不大的物體檢測。
與其它的特征描述方法(如:SIFT, PCA-SIFT, SURF)相比,HOG有優點是:首先,由于HOG是在圖像的局部方格單元上操作,是以它對圖像幾何的和光學的形變都能保持很好的不變性,這兩種形變隻會出現在更大的空間領域上。其次,在粗的空域抽樣、精細的方向抽樣以及較強的局部光學歸一化等條件下,隻要行人大體上能夠保持直立的姿勢,可以容許行人有一些細微的肢體動作,這些細微的動作可以被忽略而不影響檢測效果。是以HOG特征是特别适合于做圖像中的人體檢測。
而關于HOG如何實作,請參考[5]和[6]。後續将對其源代碼進行解析(期待您,歡臨哦~~~)。
參考資料
[1] Dalal, N. and B. Triggs. "Histograms of Oriented Gradients for Human Detection", IEEE Computer Society Conference on Computer Vision and Pattern Recognition,Vol. 1 (June 2005), pp. 886–893.
[2] Histogram of Oriented Gradients(HOG),From Wikipedia, the free encyclopedia.
[3] INRIA Human Image Dataset,collected as part of research work on detection of upright people in images and video.
[4] GitHub TrainHoG Tutorial https://github.com/DaHoC/trainHOG/wiki/trainHOG-Tutorial.
[5] Example program showing how to train your custom HOG detector using OpenCV.
[6] OpneCV Example Samples HoG.cpp Source Codehttps://code.ros.org/trac/opencv/browser/trunk/opencv/samples/gpu/hog.cpp?rev=4307.
=====================================================================
轉載請注明出處:http://blog.csdn.net/songzitea/article/details/17025149
=====================================================================