HOG概述
HOG(Histogram of Oriented Gradient)特征在對象檢測與模式匹配中是一種常見的特征提取算法,是基于本地像素塊進行特征直方圖提取的一種算法,對象局部的變形與光照影響有很好的穩(wěn)定性,最初是用HOG特征來來識別人像,通過HOG特征提取+SVM訓練,可以得到很好的效果,OpenCV已經(jīng)有了。HOG特征提取的大致流程如下:
詳細解讀
第一步:灰度化
對HOG特征提取來說第一步是對輸入的彩色圖像轉(zhuǎn)換為灰度圖像,圖像灰度化的方法有很多,不同灰度化方法之間有一些微小的差異,從彩色到灰度的圖像轉(zhuǎn)換可以表示如下:
第二步:計算圖像梯度
計算圖像的X方向梯度dx與Y方向梯度dy,根據(jù)梯度計算mag與角度,計算梯度時候可以先高斯模糊一下(可選步驟),然后使用sobel或者其它一階導數(shù)算子計算梯度值dx、dy、mag、angle:
第三步:Cell分割與Block
對于圖像來說,分成8x8像素塊,每個塊稱為一個Cell,每個2x2大小的Cell稱為一個Block,每個Cell根據(jù)角度與權(quán)重建立直方圖,每20度為一個BIN,每個Cell得到9個值、每個Block得到36個值(4x9), 圖像如下:
每個Block為單位進行L2數(shù)據(jù)歸一化,作用是抵消光照/遷移影響,L2的歸一化的公式如下:
第四步:生成描述子
對于窗口64x128范圍大小的像素塊,可以得到8x16個Cell, 使用Block在窗口移動,得到輸出的向量總數(shù)為7x15x36=3780特征向量,每次Block移動步長是八個像素單位,一個Cell大小。
使用HOG特征數(shù)據(jù)
HOG特征本身是不支持旋轉(zhuǎn)不變性與多尺度檢測的,但是通過構(gòu)建高斯金字塔實現(xiàn)多尺度的開窗檢測就會得到不同分辨率的多尺度檢測支持。OpenCV中HOG多尺度對象檢測API如下:
virtualvoidcv::detectMultiScale( InputArrayimg, std::vector&foundLocations, doublehitThreshold=0, SizewinStride=Size(), Sizepadding=Size(), doublescale=1.05, doublefinalThreshold=2.0, booluseMeanshiftGrouping=false ) Img-表示輸入圖像 foundLocations-表示發(fā)現(xiàn)對象矩形框 hitThreshold-表示SVM距離度量,默認0表示,表示特征與SVM分類超平面之間 winStride-表示窗口步長 padding-表示填充 scale-表示尺度空間 finalThreshold-最終閾值,默認為2.0 useMeanshiftGrouping-不建議使用,速度太慢拉
使用OpenCV預訓練SVM行人HOG特征分類器實現(xiàn)多尺度行人檢測的代碼如下:
importcv2ascv if__name__=='__main__': src=cv.imread("D:/images/pedestrian.png") cv.imshow("input",src) hog=cv.HOGDescriptor() hog.setSVMDetector(cv.HOGDescriptor_getDefaultPeopleDetector()) #Detectpeopleintheimage (rects,weights)=hog.detectMultiScale(src, winStride=(4,4), padding=(8,8), scale=1.25, useMeanshiftGrouping=False) for(x,y,w,h)inrects: cv.rectangle(src,(x,y),(x+w,y+h),(0,255,0),2) cv.imshow("hog-detector",src) cv.waitKey(0) cv.destroyAllWindows()
原文標題:HOG特征詳解與行人檢測
文章出處:【微信公眾號:OpenCV學堂】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
-
分類器
+關注
關注
0文章
152瀏覽量
13162 -
OpenCV
+關注
關注
29文章
624瀏覽量
41214 -
HOG特征
+關注
關注
0文章
2瀏覽量
909
原文標題:HOG特征詳解與行人檢測
文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論