閱讀121 返回首頁    go 阿裏雲 go 技術社區[雲棲]


(轉載)Histograms of Oriented Gradients (HOG)理解

最近在看人檢測的文章,最經典的就是《Histograms of Oriented Gradients for Human Detection》,但是這篇文章寫的很難懂,不清晰,作者似乎故意不讓你去讀懂,網上有一個文章很好,是對這篇文章的學習筆記,轉來研究:

HOG descriptors 是應用在計算機視覺和圖像處理領域,用於目標檢測的特征描述器。這項技術是用來計算局部圖像梯度的方向信息的統計值。這種方法跟邊緣方向直方圖(edge orientation histograms)、尺度不變特征變換(scale-invariant feature transform descriptors) 以及形狀上下文方法( shape contexts)有很多相似之處,但與它們的不同點是:HOG描述器是在一個網格密集的大小統一的細胞單元(dense grid of uniformly spaced cells)上計算,而且為了提高性能,還采用了重疊的局部對比度歸一化(overlapping local contrast normalization)技術。

這篇文章的作者Navneet Dalal和Bill Triggs是法國國家計算機技術和控製研究所French National Institute for Research in Computer Science and Control (INRIA)的研究員。他們在這篇文章中首次提出了HOG方法。這篇文章被發表在2005年的CVPR上。他們主要是將這種方法應用在靜態圖像中的行人 檢測上,但在後來,他們也將其應用在電影和視頻中的行人檢測,以及靜態圖像中的車輛和常見動物的檢測。

HOG描述器最重要的思想是:在一副 圖像中,局部目標的表象和形狀(appearance and shape)能夠被梯度或邊緣的方向密度分布很好地描述。具體的實現方法是:首先將圖像分成小的連通區域,我們把它叫細胞單元。然後采集細胞單元中各像素 點的梯度的或邊緣的方向直方圖。最後把這些直方圖組合起來就可以構成特征描述器。為了提高性能,我們還可以把這些局部直方圖在圖像的更大的範圍內(我們把 它叫區間或block)進行對比度歸一化(contrast-normalized),所采用的方法是:先計算各直方圖在這個區間(block)中的密 度,然後根據這個密度對區間中的各個細胞單元做歸一化。通過這個歸一化後,能對光照變化和陰影獲得更好的效果。

與其他的特征描述方法相 比,HOG描述器後很多優點。首先,由於HOG方法是在圖像的局部細胞單元上操作,所以它對圖像幾何的(geometric)和光學的 (photometric)形變都能保持很好的不變性,這兩種形變隻會出現在更大的空間領域上。其次,作者通過實驗發現,在粗的空域抽樣(coarse spatial sampling)、精細的方向抽樣(fine orientation sampling)以及較強的局部光學歸一化(strong local photometric normalization)等條件下,隻要行人大體上能夠保持直立的姿勢,就容許行人有一些細微的肢體動作,這些細微的動作可以被忽略而不影響檢測效 果。綜上所述,HOG方法是特別適合於做圖像中的行人檢測的。

上圖是作者做的行人檢測試驗,其中(a)表示所有訓練圖像集 的平均梯度(average gradient across their training images);(b)和(c)分別表示:圖像中每一個區間(block)上的最大最大正、負SVM權值;(d)表示一副測試圖像;(e)計算完R- HOG後的測試圖像;(f)和(g)分別表示被正、負SVM權值加權後的R-HOG圖像。

算法的實現:

色彩和伽馬歸一化 (color and gamma normalization)

作者分別在灰度空間、RGB色彩空間和LAB色彩空間上對圖像進行色彩和 伽馬歸一化,但實驗結果顯示,這個歸一化的預處理工作對最後的結果沒有影響,原因可能是:在後續步驟中也有歸一化的過程,那些過程可以取代這個預處理的歸 一化。所以,在實際應用中,這一步可以省略。

梯度的計算(Gradient computation)

最常用的方法是:簡單 地使用一個一維的離散微分模板(1-D centered point discrete derivative mask)在一個方向上或者同時在水平和垂直兩個方向上對圖像進行處理,更確切地說,這個方法需要使用下麵的濾波器核濾除圖像中的色彩或變化劇烈的數據 (color or intensity data)

作者也嚐試了其他一些更複雜的模板,如3×3 Sobel 模板,或對角線模板(diagonal masks),但是在這個行人檢測的實驗中,這些複雜模板的表現都較差,所以作者的結論是:模板越簡單,效果反而越好。作者也嚐試了在使用微分模板前加入 一個高斯平滑濾波,但是這個高斯平滑濾波的加入使得檢測效果更差,原因是:許多有用的圖像信息是來自變化劇烈的邊緣,而在計算梯度之前加入高斯濾波會把這 些邊緣濾除掉。

構建方向的直方圖(creating the orientation histograms)

第三步就是為 圖像的每個細胞單元構建梯度方向直方圖。細胞單元中的每一個像素點都為某個基於方向的直方圖通道(orientation-based histogram channel)投票。投票是采取加權投票(weighted voting)的方式,即每一票都是帶權值的,這個權值是根據該像素點的梯度幅度計算出來。可以采用幅值本身或者它的函數來表示這個權值,實際測試表明: 使用幅值來表示權值能獲得最佳的效果,當然,也可以選擇幅值的函數來表示,比如幅值的平方根(square root)、幅值的平方(square of the gradient magnitude)、幅值的截斷形式(clipped version of the magnitude)等。細胞單元可以是矩形的(rectangular),也可以是星形的(radial)。直方圖通道是平均分布在0-1800(無 向)或0-3600(有向)範圍內。作者發現,采用無向的梯度和9個直方圖通道,能在行人檢測試驗中取得最佳的效果。

把細胞單元組 合成大的區間(grouping the cells together into larger blocks)

由於局部光照的變化 (variations of illumination)以及前景-背景對比度(foreground-background contrast)的變化,使得梯度強度(gradient strengths)的變化範圍非常大。這就需要對梯度強度做歸一化,作者采取的辦法是:把各個細胞單元組合成大的、空間上連通的區間(blocks)。 這樣以來,HOG描述器就變成了由各區間所有細胞單元的直方圖成分所組成的一個向量。這些區間是互有重疊的,這就意味著:每一個細胞單元的輸出都多次作用 於最終的描述器。區間有兩個主要的幾何形狀——矩形區間(R-HOG)和環形區間(C-HOG)。R-HOG區間大體上是一些方形的格子,它可以有三個參 數來表征:每個區間中細胞單元的數目、每個細胞單元中像素點的數目、每個細胞的直方圖通道數目。作者通過實驗表明,行人檢測的最佳參數設置是:3×3細胞 /區間、6×6像素/細胞、9個直方圖通道。作者還發現,在對直方圖做處理之前,給每個區間(block)加一個高斯空域窗口(Gaussian spatial window)是非常必要的,因為這樣可以降低邊緣的周圍像素點(pixels around the edge)的權重。

R- HOG跟SIFT描述器看起來很相似,但他們的不同之處是:R-HOG是在單一尺度下、密集的網格內、沒有對方向排序的情況下被計算出來(are computed in dense grids at some single scale without orientation alignment);而SIFT描述器是在多尺度下、稀疏的圖像關鍵點上、對方向排序的情況下被計算出來(are computed at sparse scale-invariant key image points and are rotated to align orientation)。補充一點,R-HOG是各區間被組合起來用於對空域信息進行編碼(are used in conjunction to encode spatial form information),而SIFT的各描述器是單獨使用的(are used singly)。

C- HOG區間(blocks)有兩種不同的形式,它們的區別在於:一個的中心細胞是完整的,一個的中心細胞是被分割的。如右圖所示:

作者發現 C-HOG的這兩種形式都能取得相同的效果。C-HOG區間(blocks)可以用四個參數來表征:角度盒子的個數(number of angular bins)、半徑盒子個數(number of radial bins)、中心盒子的半徑(radius of the center bin)、半徑的伸展因子(expansion factor for the radius)。通過實驗,對於行人檢測,最佳的參數設置為:4個角度盒子、2個半徑盒子、中心盒子半徑為4個像素、伸展因子為2。前麵提到過,對於R- HOG,中間加一個高斯空域窗口是非常有必要的,但對於C-HOG,這顯得沒有必要。C-HOG看起來很像基於形狀上下文(Shape Contexts)的方法,但不同之處是:C-HOG的區間中包含的細胞單元有多個方向通道(orientation channels),而基於形狀上下文的方法僅僅隻用到了一個單一的邊緣存在數(edge presence count)。

區間歸一化 (Block normalization)

作者采用了四中不同的方法對區間進行歸一化,並對結果進行了比較。引入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分類器來尋找測試圖像中的行人。

最後更新:2017-04-02 06:51:20

  上一篇:go JavaScript動態的為元素添加事件
  下一篇:go J2ME通過URL訪問XML文件並下載XML到本地