1. 程式人生 > >影象的全域性特徵--HOG特徵、DPM特徵

影象的全域性特徵--HOG特徵、DPM特徵

       HOG特徵:方向梯度直方圖(Histogram of Oriented Gradient,)特徵是一種全域性影象特徵描述子。

       它通過計算和統計影象區域性區域的梯度方向直方圖來構成特徵。Hog特徵結合SVM分類器已經被廣泛應用於影象識別中,尤其在行人檢測中獲得了極大的成功。需要提醒的是,HOG+SVM進行行人檢測的方法是法國研究人員Dalal在2005的CVPR上提出的,而如今雖然有很多行人檢測演算法不斷提出,但基本都是以HOG+SVM的思路為主。

      RGB的DPM檢測特徵和其級聯方法是最後一個有效的傳統的目標檢測方法,翻譯見DPM原理詳解,此後,如有疑義,請拜訪原文,作者的主頁面:

http://www.rossgirshick.info/

       See also, CACM Research Highlight:       Visual Object Detection with Deformable Part Models
       P. Felzenszwalb, R. Girshick, D. McAllester, D. Ramanan   Communications of the ACM, no. 9 (2013): 97-105

一、HOG+SVM模型

1、HOG描述子的計算過程

              

輸入影象image:

1)灰度化( 將影象看做一個x,y,z(灰度)的三維影象);

2)採用Gamma校正法對輸入影象進行顏色空間的標準化(歸一化);目的是調節影象的對比度,降低影象區域性的陰影和光照變化所造成的影響,同時可以抑制噪音的干擾;

3)計算影象每個畫素的梯度(包括大小和方向);主要是為了捕獲輪廓資訊,同時進一步弱化光照的干擾。

4)將影象劃分成小cells(例如6*6畫素/cell);

5)統計每個cell的梯度直方圖(不同梯度的個數),即可形成每個cell的descriptor; 原始HOG特徵劃分為9個直方圖區間。

      意義:計算梯度直方圖,可以降低光線明暗變化帶來的影響,保持良好的光照不變性和特定的旋轉不變性。

6)將每幾個cell組成一個block(例如3*3個cell/block),一個block內所有cell的特徵descriptor串聯起來便得到該block的HOG特徵descriptor。(此處cell和block,每個block可以多個cell,相鄰cell之間產生特定畫素的重疊,可以有效的抵擋偏移影響

行人檢測的最佳引數設定是:3×3細胞/區間、6×6畫素/細胞9個直方圖通道。則一塊的特徵數為:3*3*9
      意義:覆蓋劃分區域用於降低影象塊偏移帶來的影響;並同時保持特定區域相關性。

7)將影象image內的所有block的HOG特徵descriptor串聯起來就可以得到該image(你要檢測的目標)的HOG特徵descriptor了。這個就是最終的可供分類使用的特徵向量了。 

        

       以220X310大小影象為例,經過縮放處理後為216x304,但並不直接提取整個影象的HOG特徵,而是用一個固定大小的視窗在影象上滑動,滑動的間隔為8個畫素,opencv中預設的視窗大小為128x64(高128,寬64),即有(128÷8)x(64÷8)=16x8cell,也即有15x7block,這樣一來一幅影象就可以取到(27-16)x(38-8)=11x30=330個視窗。現在提取每個視窗的HOG特徵,則可得到 105x36=3780HOG特徵向量。
2、HOG特徵的全域性性質

      HOG特徵並非固定長度約束的特徵描述子。向量的維數和影象大小和Cell大小有關。每一個Cell裡面統計梯度直方圖,形成每個Cell的梯度特徵。其中每個Cell裡面提取的特徵可以使用其他塊特徵取代。

2.1. HOG優點:

         與其他的特徵描述方法相比,HOG有很多優點。首先,由於HOG是在影象的區域性方格單元上操作,所以它對影象幾何的和光學的形變都能保持很好的不變性,這兩種形變只會出現在更大的空間領域上。其次,在粗的空域抽樣、精細的方向抽樣以及較強的區域性光學歸一化等條件下,只要行人大體上能夠保持直立的姿勢,可以容許行人有一些細微的肢體動作,這些細微的動作可以被忽略而不影響檢測效果。因此HOG特徵是特別適合於做影象中的人體檢測的。

         全域性變形性,區域性不變形,在區分行人特徵和左右眼特徵時具有天然的優勢。當然,HOG思想是一個演算法族,Cell和Block思想是主要思想,重疊度直方圖分割槽塊大小可以根據實際情況進行調參,在一定的資料集上,力求達到最佳效果。

3、使用OpenCV進行HOG特徵計算

OpenCV的ObjectDetect模組包含了HOG計算的原始碼,使用例程如下

bool CEyeClassify::GetHogFeature(const cv::Mat& imggray, std::vector<float>& vecFeature)
{
	const int cnSizeW = CEyeClassify::m_PatchWidth;
	const int cnSizeH = CEyeClassify::m_PatchHeight;
	{
		cv::Mat imggray1;
		resize(imggray, imggray1, cv::Size(cnSizeW, cnSizeH), 0, 0, CV_INTER_LINEAR);

		cv::HOGDescriptor hog(imggray1.size(), cv::Size(16, 16), cv::Size(8, 8), cv::Size(8, 8), 9); // 48x32  540
		hog.compute(imggray1, vecFeature);
	}

	return true;
}

二、DPM+LatentSVM模型

     DPMDeformable Part Model),正如其名稱所述,可變形的元件模型,是一種基於元件的檢測演算法,其所見即其意。該模型由大神Felzenszwalb在2008年提出,並發表了一系列的cvpr,NIPS。並且還拿下了2010年,PASCAL VOC的“終身成就獎”。

1、DPM描述子的計算過程

輸入影象image


2、DPM描述子的檢測過程

輸入影象image

          

3、Latent SVM模型

輸入影象image

        


參考資料: