1. 程式人生 > >opencv3計算機視覺學習筆記-詞袋+svm

opencv3計算機視覺學習筆記-詞袋+svm

BOW實現步驟:

  • 1.建立詞彙(特徵)詞典
  • 2.得到訓練資料到字典的對映
  • 3.選擇適當的分類器進行訓練
  • 4.對新來的樣本,先對映到字典空間,然後利用得到的分類器進行分類

1.建立詞彙(特徵)詞典

以SIFT 128維特徵作為例子。例如現在有1000張訓練圖片,對每一張訓練圖片都提取SIFT的128維特徵,那麼最終可以得到N(i)*128的特徵,N(i)代表第i張圖特徵點的個數,因為每張影象不一樣,所以每張影象的SIFT 特徵個數也不一樣。提取特徵後對1000張影象提取出的所有SIFT特徵進行聚類(目的是為了合併那些相近的特徵,相當於集合的合併操作),常用的聚類方法是k-均值聚類。對以上例子對∑N(i)∑N(i)個特徵選擇1000聚類中心進行聚類,將這1000個聚類中心稱為詞典,這個詞典好比一個容器,通俗一點就是一個直方圖的基,利用這個基去統計這些樣本的資訊。

2.得到訓練樣本到字典的對映

此時已經得到一個直方圖的基,如下圖:
圖1 直方圖的基,n表示聚類中心個數
圖1 直方圖的基,n表示聚類中心個數
這些直方圖的基像是在空間的一些三維空間基向量i,jk,利用這些基向量去構造別的向量,只需要知道特定的係數就行。所以接下來的步驟就是將原始的影象(SIFIT 128維)向這些基向量作對映,得到相關係數(影象中出現該特徵的個數),如圖:
這裡寫圖片描述
圖2 兩個類別的直方圖
通過相關的對映,得到不同類別的一個類別的直方圖統計,這樣整個BOW特徵提取過程就算是完全實現了。接下來如何進行匹配,就是選擇分類器的問題了。

3.選擇適當的分類器進行訓練

分類器可以選擇樸素貝葉斯分類器或SVM。有研究表明BOW結合SVM效果比較好。訓練的時候,將步驟2中得到的相關係數作為輸入,送入到SVM分類器中進行訓練。

4.對新樣本進行識別

訓練好分類器後,對於新來的樣本,同樣先提取SIFT特徵,然後將SIFT特徵對映到圖1中的詞典中去,然後得到的直方圖就可以通過分類器進行分類了。
這裡寫圖片描述
圖3 新圖片的BOW直方圖特徵。