HOG算子

了解了SIFT算子之后,來看看HOG算子吧~其實仔細看看,會發現HOG和SIFT特征感覺像是孿生兄弟呢~當然,即便如此,兩者之間仍是有較為明顯的差別,那就來看看吧~

HOG——Histogram Orientated Graphic(方向梯度直方圖)

通過計算和統計圖像局部區域的梯度方向直方圖來構成特征(類似于SIFT中8個方向梯度直方圖統計)。

在這兒參考了一篇寫得比較詳細的博客Hog描述子

先來說說Hog描述子形成的整體流程:

Hog pipline

對整幅圖像用b*b大小的blocks窗口進行滑動,則整幅圖像有s個blocks,其中s=((m-b)/stride+1)*((n-b)/stride+1);另外,對于兩blocks重疊的cells單元,進行對比度歸一化,能有效第去除光照的影響以提高精確度。每個blocks劃分成c個cells,每個cells包含若干個像素點,針對每個cells,計算其中每個像素的梯度方向及幅值,并統計出該cell中的方向梯度直方圖(按一定權重,此處權重的選擇可根據L2,L1范式等確定),確定直方圖所包含的bins的個數b,最后針對每個block進行特征歸一化,以消除因光照,陰影和邊緣變化等的影響,最后整張圖可由一個s*c*b的高維向量組成,至此便完成了HoG描述子的生成。

需要注意的是:在形成描述子的過程中有幾個超參數需要注意,首先是整張圖片劃分成多少個blocks,每個blocks劃分成多少個cells比較合適,另外對cells進行直方圖統計時,選取多少個bins較為適宜,這些均是根據不同需求所需進行設計的參數選擇。若blocks取得太大,則歸一化的效果被削弱使得錯誤率提升,若取得太小,則相鄰blocks間有用的信息可能被過濾掉了。

HoG描述子最初的應用是用于行人檢測,根據研究者大量的實驗得出在針對行人檢測時,選擇的blocks大小為3*3個單元格,cells數為6*6,bins數為將0~180度角度無方向劃分成9個bins。并且因為針對行人檢測,需要有較明顯的邊緣信息,故在預處理時沒有對其進行高斯平滑,但是在處理時,因為需要計算梯度信息,對于噪點的處理經常需要考慮到進行平滑操作,故需針對具體問題進行具體分析。


在這兒想進行說明的是HoG描述子與SIFT描述子之間的區別:

可以看到,HoG與SIFT均進行了梯度方向直方圖的統計操作,但不同的是,其針對的進行統計的對象不同,HoG進行統計歸一化是局部區域的block,而SIFT在進行統計之前需要確定特征點,再取特征點周圍一定范圍進行直方圖統計。

由產生過程可知,HoG不具有尺度和旋轉不變性。


效果展示:

*R-HOG指的是block選用的是矩形,C-HOG指block選用的是圓形。

HoG+SVM進行行人檢測是比較成熟的方法,另外opencv中也有相應的實現函數接口。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。