2016-01-25 90 views
2

我所知,來完成這項任務所需的步驟:OpenCV的 - 使用SVM和HOG用於人員檢測

  1. 收集訓練集(正面和負面套)。
  2. 提取要用於訓練SVM的每個圖像的豬描述符(當前爲'1'類標籤爲正,'-1'類爲負類標籤)。
  3. 將訓練的SVM設置爲HOGDescriptor並使用detect/detectMultiscale。

我已經完成了上述所有步驟。我只是困惑,HOGDescriptor.detect/detectMultiscale檢測到哪個類?它是否僅檢測正面類別標籤(1)?

+0

這可以幫助你:http://www.geocities.ws/talh_davidc/ – SomethingSomething

回答

2

在計算機視覺中,視覺描述符或圖像描述符(即,HoG)是圖像內容的視覺特徵的描述。他們描述了諸如形狀,顏色,紋理或運動等基本特徵。因此,HoG描述符僅描述了圖像中顯示的場景 - 即在街上行走的行人,您可以在下面看到示例HoG描述符(HoG僅計算圖像的局部部分中梯度方向的出現):

enter image description here

支持向量機是用於分類,迴歸和異常值檢測的一組監督學習方法。但最初,支持向量機是一種用於構建最佳二元(2級)分類器的技術,所以支持向量機決定了描述符的含義。因此,HoG的輸出是SVM的輸入,後者的輸出是+1或-1。

OpenCV提供了一個隱藏此操作的接口,可以通過函數調用完成全部對象檢測。這是HOGDescriptor::detectMultiScale()所做的,它使用多尺度窗口執行對象檢測。一旦cv::HOGDescriptor hog實例將被宣佈,那麼SVM分類的係數應該也做:

hog.setSVMDetector(cv::HOGDescriptor::getDefaultPeopleDetector()); 

然後detectMultiScale()執行完整的對象檢測(描述符提取和二元分類在一起),並返回的邊框每個考生:

std::vector<cv::Rect> found; 
hog.detectMultiScale(frame, found, 0, cv::Size(8,8), cv::Size(32,32), 1.05, 2); 
+0

謝謝您的答覆。在我的情況下,我想使用自定義SVM來檢測人(不是默認值)。我已經通過提取正面和負面圖像的豬描述符來訓練線性SVM,並且我還可以通過使用hog.setSVMDetector(svm.getSupportVectors())將豬設置爲使用訓練好的SVM。令我困惑的是detectMultiScale。它是否檢測到負面課堂(無人)或正面課堂(人)?對不起,我只是新手opencv和計算機視覺。 – rjoniuqa

+0

'detectMultiScale'只返回肯定結果,但它們可以是真正的肯定(正確識別爲人物的對象)或誤報(像汽車,樹木等被錯誤識別爲人物的對象) – Kornel