特征描述提取圖像區域上有用信息而忽略無用信息,不同目標下有用信息與無用信息定義不同。這里提取的有用信息用於分類器輸入並期望產生正確的分類。
HOG(Histogram of Oriented Gradient) 對圖像塊生成描述信息 vector,然后將每個圖像塊指定一個分類(-1, 1),通過大量訓練得到一個線性分類器(SVM);針對新圖像塊首先生成描述 vector,在使用訓練分類器對新的描述 vector 分類,實現圖像分類。
HOG 首先應用在行人檢測,opencv 中 HOGDescriptor 類已經給出了一個默認的分類器(HOGDescriptor::getDefaultPeopleDetector()),通過該分類器可實現圖像中行人檢測。
當需要對其他物體進行檢測時,則需要自定義一個描述信息 vector, 訓練分類器,最終實現特定圖像分類。
這里首先學習默認描述信息 vector 的生成及分類:
1)行人檢測默認圖像塊為 64 * 128,當需要檢測其他尺寸下是否存在行人時,需要將其縮放到默認尺寸,如尺寸 100 * 200, 128 * 256... ,但檢測長寬比總為 1:2 的區域;
2)計算圖像梯度與梯度方向,形成梯度圖與梯度方向圖;
3)在 8 * 8 鄰域內計算梯度方向直方圖,計算方法如下圖:
首先將梯度方向取值范圍修改為 [0° ,180°),然后划分為 9 個 bins,使用加權方式填充梯度方向直方圖;
4)將 16 * 16 鄰域內的4個梯度直方圖連接成 1 * 36 vector,並將其歸一化處理;
以 8 * 8 的步長在 64 * 128 圖像塊上掃描圖像,每次掃描形成一個 1 * 36 vector 並歸一化,最終得到 7 * 15 * 36 = 3780 個元素的特征向量;
5)以 1 * 3780 vector 作為圖像特征訓練 SVM 分類器, SVM 分類器基本原理如下
尋找一個超平面 ,對於任意特征向量 X 可正確分類,W 可通過訓練得到;
當訓練完成后,針對新的特征向量,滿足 為正類,滿足
為負類;
在實際檢測中,為了提升正類的可信度,可能使用 進行分類,
。
opencv 提供 HOGDescriptor 類已經訓練好行人分類器(HOGDescriptor::getDefaultPeopleDetector()),下面對 HOGDescriptor 給出一些解釋:
1) HOGDescriptor() : winSize(64,128), blockSize(16,16), blockStride(8,8),
cellSize(8,8), nbins(9), derivAperture(1), winSigma(-1),
histogramNormType(HOGDescriptor::L2Hys), L2HysThreshold(0.2), gammaCorrection(true),
nlevels(HOGDescriptor::DEFAULT_NLEVELS)
以上代碼構造 HOGDescriptor 對象,主要參數意義如下:
winSize:行人區域尺寸,在該尺寸上生成特征向量;對於大於該尺寸的行人,使用縮小到 winSize 尺寸以實現多尺度;應該注意的是,當行人尺寸較小時,無法通過放大到 winSize 尺寸實現檢測;
cellSize:在 cellSize 區域上構造梯度方向直方圖;
nbins:一個 cellSize 區域上形成梯度直方圖的 bins;
blockSize: 梯度方向直方圖歸一化尺寸,對 2 * 2 cells 進行歸一化;



參考資料 https://www.learnopencv.com/histogram-of-oriented-gradients/