一、什麼是hog特徵
二、如何提取hog特徵
三、 視窗(win)、塊(block)、細胞(cell)與畫素的關係
四、特徵向量維度數目的計算
五、關於梯度直方圖的計算(重點)
(1)影象卷積
影象梯度一般利用影象與梯度運算元卷積實現,關於這部分內容,可以參考opencv2.4學習::影象卷積
(2)梯度運算元
hog特徵提取所用的梯度運算元為:水平方向 【-1,0,1】 , 垂直方向 【-1,0,1】t
(3)對於畫素i(x,y)的梯度資訊為:
水平梯度:
垂直梯度:
梯度幅值:
梯度方向 :
(4)當我們獲得了乙個cell的所有畫素的梯度資訊之後,如何生成cell的梯度直方圖?
1)劃分區域,對180度劃分9個區域,其中0,20】,20,40】。。。。。類推即可
2)制定落入規則,如果我們知道i(x,y)畫素的梯度方向為15度時,可將他劃分到【0,20】這個區域(或者叫bin),當梯度方向為25度時,可直接將他劃分到【20,40】區域,或者按比例劃分到【0,20】和【20,40】這兩個區域之中。一般這個規則可 根據實際實際情況制定。
3)直方圖bin數值計算: 假如區域為【0,20】為bin[0],當某個畫素的梯度方向恰好落在這個區域時,那麼bin[0]加上該畫素梯度幅值即可,即
4)對所有畫素遍歷,並且將該畫素梯度幅值加到對應的bin上,即生成關於cell的梯度直方圖
六、 生成hog特徵向量
(1)對每個block的直方圖進行歸一化
乙個block有4個cell,這個操作就是將這4個cell的直方圖資訊4*9=36個bins串接起來,形成乙個36維向量,然後進行歸一化。這個歸一化方法一般採用l2歸一化;
(2)直方圖串接形成hog特徵向量
將每個block歸一化完成之後的直方圖串接起來,一共有105*36=3780個bins,那麼,這個hog特徵向量是乙個3780維的向量。
六、**實現
#include #include#include#includeusing namespace std;
#include#include#include#includeusing namespace cv;
#define nbins 9
#define theta 20
#define r 4
#define blocksize 16
#define cellsize 8
#define blockstep 8
//計算積分圖
std::vectorcalculateintegralhog(mat &srcmat)
}//上面得到了0-20,20-40....160-180 9個區間下的圖,
//即srcmat影象上梯度角度為0-20的畫素點的梯度幅值被賦值到bins[0]的對應畫素點上,以此類推
std::vectorintegrals(nbins);
for(int i=0;i&integrals,int cell_id)
//return hist;
}//計算單個block的hog特徵
cv::mat cachoginblock(point block_pt_start,std::vector&integrals)}}
//歸一化到l2
normalize(hist,hist,1,0,norm_l2);
return hist;
}//計算目標區域的hog特徵
cv::mat cachoginwin(rect roi_win,std::vector&integrals)
return 0;
}
執行測試:
Opencv2 4學習 Mat矩陣的建立
類詳細解釋參見 1 mat mat 無引數構造方法 2 mat mat int rows,int cols,int type 建立行數為 rows,列數為 col,型別為 type 的影象 3 mat mat size size,int type 建立大小為 size,型別為 type 的影象 4 ...
HOG特徵學習
hog方向梯度直方圖 histogram of oriented gradient,hog 特徵是一種在計算機視覺和影象處理中用來進行物體檢測的特徵描述子。它通過計算和統計影象區域性區域的梯度方向直方圖來構成特徵。其主要步驟 顏色空間歸一化 梯度計算 梯度方向直方圖 重疊塊直方圖歸一化 hog特徵。...
小白學習 HOG特徵
目標檢測的影象特徵提取之 一 hog特徵 參見 方向梯度直方圖 histogram of oriented gradient,hog 特徵是一種在計算機視覺和影象處理中用來進行物體檢測的特徵描述子。它通過計算和統計影象區域性區域的梯度方向直方圖來構成特徵。hog特徵結合 svm分類器已經被廣泛應用於...