要做一些行人檢測方面的工作,環境為vs2010+opencv2.4.4
收集樣本訓練了自己的svm分類器,接下來在用hog的多尺度檢測函式detectmultiscale()進行檢測時遇到了一些問題,經過查閱大量的資料及反覆閱讀源**,終於搞清楚了原因,現在進行一下簡單的整理。
整個過程可以分為訓練分類器和hog檢測兩部分
opencv的svm訓練函式中提供了4種核函式:linear、poly、rbf、sigmoid,依次找出各核函式對應的效果最好的分類器,主要用到兩個函式svm::train()和svm::predict()。
svm::train()訓練分類器,該函式中可以指定包括核函式在內的其他引數。svm::predict()用於**。過程簡單表述為:先確定某一具體核函式(如linear),其他引數(如cvalue)取預設值,輸入訓練樣本訓練分類器,統計測試樣本**的準確率,不斷調整引數,找到**準確率最高的分類器。
在確定分類器後,則開始對整幅影象利用hog:: detectmultiscale()進行多尺度檢測,也正是在這個過程中遇到了問題。對線性核的情況,一切正常。但是在對其他核(如rbf)分類器的情況,出現了問題。opencv自帶的源**中,判斷是不是目標的閾值為0,在檢測的過程中將hog:: detectmultiscale()中對應的引數設定為0即可,但在非線性核(如rbf)分類器的情況,其閾值則出現了一些不可預料的結果。
針對出現的這種情況,反覆閱讀源**並查詢了相關的資料,最終確定了原因:hog的多尺度檢測函式(hog:: detectmultiscale())或者更準確一點其檢測函式(hog::detect ())只針對svm線性核進行檢測!!這在設定hog檢測子(hog::setsvmdetector)的時候就已經確定了!!
另外也可以由源**中看出,下面附上部分的源**片段進行說明,code1為svm線性核的計算方法,code2為hog檢測函式(hog:: detect ())的計算方法。
可惜,在這個問題上糾結這麼久,答案其實早就已經給出來了,但一直都沒找到!
特徵檢測之HOG
參考 原始碼解讀 下面給出opencv的hog特徵提取 hogdescriptor類可以完成hog的特徵提取過程,建構函式 hogdescriptor size win size size 64,128 size block size size 16,16 size block stride siz...
OpenCV 基於HOG特徵的行人檢測
opencv中提供了hog的行人檢測 pedestrain detection 類。cv hogdescriptor類的建構函式的各引數的定義 cpp view plain copy cv wrap hogdescriptor winsize 64,128 detect window blocksi...
OpenCV 100 HOG特徵與行人檢測
hog histogram of oriented gradient 特徵在物件識別與模式匹配中是一種常見的特徵提取演算法,是基於本地畫素塊進行特徵直方圖提取的一種演算法,物件區域性的變形與光照影響有很好的穩定性,最初是用hog特徵來來識別人像,通過hog特徵提取 svm訓練,可以得到很好的效果,o...