首先需要明白SVM(支持向量機)的原理
SVM
(支持向量機)分類器的原理是利用“分類超平面”來實現數據分類。在利用“分類超平面”對數據進行劃分時,遵循“間距最大”原則。例如,將二維平面內的兩組數據分類,可以確定很多個“分類超平面”,在二維維度下,超平面退化爲一條直線:
上圖中使用綠線將藍色圓圈和紅色方塊進行分類,可以有多種方式。那麼根據SVM
原理,哪一條線是最佳分類線呢?答案是,最佳分類線因該是距離藍色圓圈和紅色方框的距離都是最大的那一條,即找到兩組數據的最大間距,在最大間距中點畫一條線,如下:
在上圖中,有藍色圓圈和紅色方塊,找到一條直線,使得藍色圓圈中離這條直線最近的點和紅色方塊離這條直線距離最近的點到這條直線的距離相等,且藍色圓圈和紅色方塊在這條直線的兩側,那麼這條直線就是二維的情況下的分類藍色圓圈和紅色方塊的“間距最大”的“分類超平面”
如果分類3維數據,我們就使用一個平面來分割數據。如果分類4維數據,我們將會使用一個體來分割數據。以此類推,如果分類1024維數據,我們將使用1023維平面來分割數據。1023維的平面是什麼樣子,不知道。所以這個時候,將1023維度的平面命名爲“分類超平面”。
使用HOG和SVM結合的方法來實現貓咪圖片的分類,其需要計算每張貓咪圖片的HOG值,然後根據HOG值做爲向量來代表圖片,找到具有最大間距的分類超平面,使用這個分類超平面來對需要分類的數據進行分類
hog
的全稱是Histogram ofOriented Gradient, HOG
,即方向梯度直方圖
。它是一種在計算機視覺和圖像處理中用來進行物體檢測的特徵描述子。它通過計算和統計圖像局部區域的梯度方向直方圖來構成特徵。
HOG是方向梯度直方圖,首先需要明白它的原理
其主要思想是:在邊緣具體位置未知的情況下,邊緣方向的分佈也可以很好的表示行人目標的外形輪廓。
HOG的提取分爲以下幾個步驟
1顏色空間歸一化
2.梯度計算
3.梯度方向直方圖
4.重疊塊直方圖歸一化
5.將獲取的重疊快特徵向量組合成整個圖片的HOG特徵
1.顏色空間歸一化
1)首先使用GRAY = 0.3 * R + 0.59 * G + 0.11 * B
的公式將彩色圖像轉換爲灰度圖像,然後將得到的灰度圖像進行歸一化處理
灰度一般是256級,因此公式大概爲G2(x,y) = G1(x,y)/256
2)當光照不均勻的時候,可能會出現圖片的某些部分過暗的情況,這個時候需要使用gamma矯正,公式爲
式子中的I是原圖的灰度值,Y爲矯正之後的灰度值,這裏的ϒ一般取0.5,這種方法稱爲平方根矯正,經過矯正之後圖片過於暗的部分會變亮,從而提高圖片的整體亮度,實現圖片過暗的矯正,同樣的效果也可以通過Y(x,y) = log2(I(x,y)+1),這個公式來實現,也就是所謂的對數矯正
2.梯度計算
假設圖像上某個點處的灰度爲I(x,y)
那麼這個點處的梯度的大小和方向的計算方法爲:
可見,在梯度計算中y軸向下,x軸向右,梯度的方向用角度表示
3.梯度方向直方圖
將圖像劃分爲若干個cell,每個cell爲8 * 8=64個像素的區域,在每個cell內部統計梯度方向直方圖,這裏將360分爲9個bin,每個bin有20度,也就是每個cell統計的是9維特徵向量
4、重疊塊直方圖歸一化
當圖像的大小不能被劃分爲8 * 8 的cell的時候,需要將圖像進行縮放處理,比如圖像的寬度爲36, 36 / 8 =4.5,這樣的圖像不能被劃分成功,
可以藉助openCv的resize函數來處理,比如:
resize(picture, picture, cvSize(int(picture.cols / 8) * 8, int(picture.rows / 8) * 8));/
將圖像的大小轉換成能被8除盡的大小
由於圖像中光照情況和背景的變化多樣,梯度值的變化範圍會比較大,因而良好的特徵標準化對於檢測率的提高相當重要。標準化的方法多種多樣,大多數的都是將celll放在block中,然後標準化每個block。
Block的大小一般取2*2的cell,
比如216x304的圖像可以得到27x38個cells,故27x38個cell可劃分成26x37個block,每個block爲16x16像素。相鄰block之間是有重疊的,這樣有效的利用了相鄰像素信息,對檢測結果有很大的幫助
接下分別對每個block進行標準化,一個block內有4個cell,每個cell含9維特徵向量,故每個block就由4x9=36維特徵向量來表徵
由於L2-norm簡單且在檢測中效果相對較好,故一般採用它。
經過上述對有重疊部分block的直方圖歸一化之後,將所有block的特徵向量都組合起來,則形成26x37x36=34632維特徵向量,這就是HOG特徵,這個特徵向量就可以用來表徵整個圖像了。