opencv中的SVM影像分類(一)

Always_TDX發表於2015-07-28

原創作品 轉載請註明出http://blog.csdn.net/always2015/article/details/47100713

本篇文章主要是先從理論的角度對影像進行講解,主要程式碼的講解請關注下一篇博文:opencv中的svm影像分類(二)http://blog.csdn.net/always2015/article/details/47107129

一、影像分類概述

本模組是用在影像內容識別的部分,影像分類是利用計算機對影像進行定量分析,把影像中的每個像元或區域劃歸為若干個類別中的一種,以代替人工視覺判讀的技術。從目視角度來說,對影像進行提高對比度、增加視覺維數、進行空間濾波或變換等處理的目的就是使人們能夠憑藉知識和經驗,根據影像亮度、色調、位置、紋理和結構等特徵,準確地對影像景物型別或目標做出正確的判讀和解釋。
特徵提取是計算機視覺和影像處理中的一個概念。它指的是使用計算機提取影像資訊,決定每個影像的點是否屬於一個影像特徵。特徵提取的結果是把影像上的點分為不同的子集,這些子集往往屬於孤立的點、連續的曲線或者連續的區域。根據各自在影像資訊中所反映的不同特徵,把不同類別的目標區分開來的影像處理方法。它利用計算機對影像進行定量分析,把影像或影像中的每個像元或區域劃歸為若干個類別中的某一種,以代替人的視覺判讀。

二、本模組完成的主要功能

該模組作用是先對一些已經歸類好的圖片作為輸入,再對一些未知類別的圖片進行預測分類。本模組在該專案中可以分出二維碼、logo、以及文字 。例如一給定影像,檢測並讀取其中所有的條碼、logo、文字,即使他們處於任意的位置及角度,如果影像中可能有任意數量及格式的條碼、logo和文字,輸出所有的條碼、logo和文字(1個或多個)。

三、svm影像分類的基本流程

  1. 資料獲取
    比如攝像機或視訊頭的輸出,通過取樣獲得資料,也可以是一般的統計資料集,其中的資料以向量或矩陣形式表示,或者是已經準備好的待檢測的圖片
  2. 訓練圖片特徵提取和選擇
    特徵提取是指從物件本身獲取各種對於分類有用的度量或屬性。特徵選擇是指如何從描述物件的多種特徵中找出那些對於分類最有效的特徵。特徵提取我們用到了surf演算法。Surf具有比sift快的檢測速度。
    對某一類模式的識別,其關鍵在於對模式特徵的描述以及如何去提取這些特徵。徵描述直接影響到特徵提取以及特徵向量庫的建立,並影響到最後分類識影像的特徵提取和分類別精度的高低 從理論上講,個體的特徵是唯一的,這是因為不存在完全相同的兩個個體。但是由於客觀條件限制的存在,往往使得選取的特徵並不是描述個體的特徵全集,而只是特徵的一個子集。因此,確定物體的本質特徵是識別任務成功的關鍵。為了提高特徵提取時計算的魯棒性,往往又要求用盡可能少的特徵來描述物體,這使得在實際應用中特徵描述的不完全性是不可避免的。
  3. 將這些feature聚成n類。這n類中的每一類就相當於是圖片的“單詞”,所有的n個類別構成“詞彙表”。我的實現中n取1000,如果訓練集很大,應增大取值。
  4. 對訓練集中的圖片構造bag of words,就是將所有訓練圖片中的feature歸到不同的類中,然後統計每一類的feature的頻率。這相當於統計一個文字中每一個單詞出現的頻率。
  5. 分類器的設計(也就是訓練分類器)
    利用樣本資料來確定分類器的過程稱為分類器設計。訓練一個多類分類器,將每張圖片的bag of words作為feature vector,將該張圖片的類別作為label。支援向量機(Support Vector Machines,SVM)應用發熱典型流程是首先提取圖形的區域性特徵所形成的特徵單詞的直方圖來作為特徵,最後被通過SVM進行訓練得到模型。
    在影像分類中用到了一種模型叫做BOW (bag of words) 模型。Bag of words模型最初被用在文字分類中,將文件表示成特徵向量。它的基本思想是假定對於一個文字,忽略其詞序和語法、句法,僅僅將其看做是一些詞彙的集合,而文字中的每個詞彙都是獨立的。簡單說就是講每篇文件都看成一個袋子(因為裡面裝的都是詞彙,所以稱為詞袋,Bag of words即因此而來),然後看這個袋子裡裝的都是些什麼詞彙,將其分類。如果文件中豬、馬、牛、羊、山谷、土地、拖拉機這樣的詞彙多些,而銀行、大廈、汽車、公園這樣的詞彙少些,我們就傾向於判斷它是一篇描繪鄉村的文件,而不是描述城鎮的。
    最後通過訓練好的模型,再次讀取未經分類的圖片,就可以對其分類。
    流程圖如圖所示:
    這裡寫圖片描述

四、所用到的技術方法

  1. 特徵提取演算法surf
    有關surf演算法的介紹網上有很多,在這裡我就不一一介紹,大家也可以參考下面的文章:http://blog.csdn.net/yujiflying/article/details/8203511

  2. 聚類演算法:Kmeans演算法
    k-means 演算法接受引數 k ;然後將事先輸入的n個資料物件劃分為 k個聚類以便使得所獲得的聚類滿足:同一聚類中的物件相似度較高;而不同聚類中的物件相似度較小。聚類相似度是利用各聚類中物件的均值所獲得一個“中心物件”(引力中心)來進行計算的。
    K-means演算法是最為經典的基於劃分的聚類方法,是十大經典資料探勘演算法之一。K-means演算法的基本思想是:以空間中k個點為中心進行聚類,對最靠近他們的物件歸類。通過迭代的方法,逐次更新各聚類中心的值,直至得到最好的聚類結果。
    假設要把樣本集分為c個類別,演算法描述如下:
    (1)適當選擇c個類的初始中心;
    (2)在第k次迭代中,對任意一個樣本,求其到c各中心的距離,將該樣本歸到距離最短的中心所在的類;
    (3)利用均值等方法更新該類的中心值;
    (4)對於所有的c個聚類中心,如果利用(2)(3)的迭代法更新後,值保持不變,則迭代結束,否則繼續迭代。
    該演算法的最大優勢在於簡潔和快速。演算法的關鍵在於初始中心的選擇和距離公式。
    該演算法流程首先從n個資料物件任意選擇 k 個物件作為初始聚類中心;而對於所剩下其它物件,則根據它們與這些聚類中心的相似度(距離),分別將它們分配給與其最相似的(聚類中心所代表的)聚類;然後再計算每個所獲新聚類的聚類中心(該聚類中所有物件的均值);不斷重複這一過程直到標準測度函式開始收斂為止。一般都採用均方差作為標準測度函式. k個聚類具有以下特點:各聚類本身儘可能的緊湊,而各聚類之間儘可能的分開。

  3. Bag of words(BOW)模型
    最初的Bag of words,也叫做“詞袋”,在資訊檢索中,Bag of words model假定對於一個文字,忽略其詞序和語法,句法,將其僅僅看做是一個詞集合,或者說是詞的一個組合,文字中每個詞的出現都是獨立的,不依賴於其他詞 是否出現,或者說當這篇文章的作者在任意一個位置選擇一個詞彙都不受前面句子的影響而獨立選擇的。
    現在Computer Vision中的Bag of words來表示影像的特徵描述也是很流行的。大體思想是這樣的,假設有5類影像,每一類中有10幅影像,這樣首先對每一幅影像劃分成patch(可以是剛性分割也可以是像Surf基於關鍵點檢測的),這樣,每一個影像就由很多個patch表示,每一個patch用一個特徵向量來表示,我們就假設用SURF表示的,一幅影像可能會有成百上千個patch,每一個patch特徵向量的維數128。
    接下來就要進行構建Bag of words模型了,假設Dictionary詞典的Size為1000,即有1000個詞。那麼我們們可以用K-means演算法對所有的patch進行聚類,k=1000,我們知道,等k-means收斂時,我們也得到了每一個cluster最後的質心,那麼這1000個質心(維數128)就是詞典裡的1000個詞了,詞典構建完畢。
    對於bag of words 和K-means演算法這一篇文章也挺容易理解的http://www.cnblogs.com/v-July-v/archive/2011/06/20/2091170.html

  4. svm分類器
    支援向量機 (SVM) 是一個類分類器,正式的定義是一個能夠將不同類樣本在樣本空間分隔的超平面。 換句話說,給定一些標記(label)好的訓練樣本 (監督式學習), SVM演算法輸出一個最優化的分隔超平面(分類面)。具體可以參考文章:http://blog.csdn.net/sunanger_wang/article/details/7887218

五、演算法的分析

SURT採用henssian矩陣獲取影像區域性最值還是十分穩定的,但是在求主方向階段太過於依賴區域性區域畫素的梯度方向,有可能使得找到的主方向不準確,後面的特徵向量提取以及匹配都嚴重依賴於主方向,即使不大偏差角度也可以造成後面特徵匹配的放大誤差,從而匹配不成功;另外影像金字塔的層取得不足夠緊密也會使得尺度有誤差,後面的特徵向量提取同樣依賴相應的尺度,發明者在這個問題上的折中解決方法是取適量的層然後進行插值。
Bag of words方法沒有考慮特徵點的相對位置,而每類物體大都有自己特定的結構,這方面的資訊沒有利用起來。用上面一貫的類比,就好像搜尋引擎只使用了單詞頻率,而沒有考慮句子一樣,沒有結構的分析。
SVM有兩個不足:
(1) SVM演算法對大規模訓練樣本難以實施
由於SVM是藉助二次規劃來求解支援向量,而求解二次規劃將涉及m階矩陣的計算(m為樣本的個數),當m數目很大時該矩陣的儲存和計算將耗費大量的機器記憶體和運算時間。針對以上問題的主要改進有有J.Platt的SMO演算法、T.Joachims的SVM、C.J.C.Burges等的PCGC、張學工的CSVM以及O.L.Mangasarian等的SOR演算法
(2) 用SVM解決多分類問題存在困難
經典的支援向量機演算法只給出了二類分類的演算法,而在資料探勘的實際應用中,一般要解決多類的分類問題。可以通過多個二類支援向量機的組合來解決。主要有一對多組合模式、一對一組合模式和SVM決策樹;再就是通過構造多個分類器的組合來解決。主要原理是克服SVM固有的缺點,結合其他演算法的優勢,解決多類問題的分類精度。如:與粗集理論結合,形成一種優勢互補的多類問題的組合分類器。

影像分類的理論就講解到這裡,對於這個影像分類的程式碼的講解請參考下一篇文章。

相關文章