標籤:影像處理 模式識別 演算法 hog svm
利用opencv的hog+svm實現細胞識別分類器
影像處理中的細胞識別和Face Service可以這樣來類比,映像中的一張張人臉就是一個個細胞。
模式識別的關鍵在於樣本庫的選取,識別率也只能在和樣本庫比較接近的環境下才能保證。主要工作是三部分一是特徵提取,二是樣本庫的訓練train,三是目標檢測detect。
一.特徵提取
特徵提取採用的是HOG特徵即HOG描述子,該特徵在行人檢測中效果非常好。而一般Face Service採用的是haar特徵,這在opencv中都有實現,並都給出了相應的分類器,效果都很不錯。
首先採集了正樣本6000多份,然後負樣本90000多份,正樣本就是手動從映像中把細胞儲存下來,為了工作方便一般先大概截個正方形就好了,然後對得到的正樣本依次做三次順時針旋轉,目的是為了滿足旋轉不變性。之後寫個程式將這些正樣本的尺寸統一縮放到64*64,這個尺寸決定了最終svm演算法中的特徵維數。負樣本就是非細胞的映像,可以用程式得到,不需要人工了,最終也將尺寸統一縮放到64*64即可。
二.訓練樣本
利用HOGDescriptor.compute計算所有的樣本特徵值,存入svm演算法中訓練用的特徵矩陣train_mat中,同時將每個樣本的類別儲存到標籤向量label_mat中,正樣本的標籤為1,負樣本為0;然後用svm.train函數訓練得到分類器檔案svm_data.xml。
三.目標檢測
訓練好的SVM分類器儲存為XML檔案,然後根據其中的支援向量和參數產生OpenCV中的HOG描述子可用的檢測子參數,再調用OpenCV中的多尺度檢測函數進行細胞檢測。
檢測子參數的計算過程就是svm演算法中從一開始得到的阿爾法係數轉變得到w係數的過程。
---------------------------------------------------------------------------------------------------------------------
難例(Hard Example)是指利用第一次訓練的分類器在負樣本原圖(肯定沒有人體)上進行行人檢測時所有檢測到的矩形框,這些矩形框地區很明顯都是誤判,把這些誤判的矩形框儲存為圖片,加入到初始的負樣本集合中,重新進行SVM的訓練,可顯著減少誤判。
利用opencv的hog+svm實現細胞識別分類器