BOF算法+K-Means算法實現圖像檢索

最近看到數據挖掘中的K-Means算法,想到它經常和圖像分類中的BOF算法結合,恰好自己最近在做圖像檢索方面的研究,就試着實現了一下,代碼資源我會在文後附上鍊接

BOF(Bag of Features)算法實際上就是BOW(Bag of Words)算法在圖像領域的應用。可以參考下圖:

BOF算法

圖片來源 Bag of Features (BOF)圖像檢索算法

BOF算法的主要操作步驟如下:

  1. 視覺單詞提取:首先我們先提取圖片庫中所有圖片的圖片特徵,這裏圖片特徵可以是SIFT,SURF,MSER特徵等等,我在實現時使用的SIFT特徵. BOW算法中是以“詞”爲單位形成詞袋的,BOF算法中我們以每個特徵作爲一個patch,相當於一個視覺單詞。
  2. 視覺詞典構建:以一定的算法對所有的圖片特徵進行分類,K-Means和SVM算法均可,但是K-Means算法最爲常用。比如K=500時,我們可以把所有的特徵按照相似度量分成500個聚類,每個聚類有一個類心,那麼這500個類心就相當於詞袋中的500個基本詞彙。
  3. 圖像表示:統計每張圖片在每個聚類中的特徵個數,這樣每個圖片就可以由一個分佈直方圖表示,或者說用一個K維的向量表示,向量第i維的值爲該圖片在第i個聚類中的特徵個數。那麼每個圖像都可以由基本詞彙表示。
  4. 圖像檢索:對於一個待檢索的圖像,我們先提取該圖像的圖像特徵,併產生該圖像的分佈直方圖,即或者一個K維向量。然後,根據餘弦相似定理,計算該向量與圖片庫中每個圖像的餘弦夾角。夾角越小,相似度越大,夾角越大,相似度越小。

或者需要詳細的BOF講解可以參考這個鏈接:Bag of Features (BOF)圖像檢索算法

這裏寫圖片描述

本實驗中採用SIFT特徵,K-means聚類算法,初始類心隨機選擇,圖片庫圖片數量625。

最後實驗表明,BOF算法的檢索效果確實很不錯,好的時候查準率可以達到90%,最差情況下也能滿足50%左右的查準率。 
在實驗中,我總結了一些需要注意的地方:

  1. 圖片庫大有利於特徵聚類,當圖片數量較少,圖像特徵不多的情況下,每個聚類的中特徵點個數也就幾十個。這對於統計分類來說,結果不夠可信,誤差也較大。
  2. 圖片庫特徵點個數(至少20萬個)較多情況下,聚類個數多一些檢索效果較好,但是也不能太多,不然會出現上面的情況。一般都是成百上千個。
  3. 初始類心的選擇對結果有一定的影響,不同初始類心的選擇可能導致查準率有較大的波動。一般來說圖片越多,它的影響就會越小。也可以通過指定初始類心,使得結果更優。
  4. 帶檢索圖片的特徵點個數太少,檢索結果會比較差,但也不是越多越好。
  5. TF-IDF算法是用來在信息檢索中確定關鍵字權值,也常和BOF算法結合使用,用來確定每個類心的權值,理論上會對實驗結果有一定的提高。我在實驗中沒有使用,苦於沒有找到合適的參考方法,TF-IDF怎麼統計並確定每個類心的權值?以及這種權值對於求餘弦相似度的影響是怎樣的?如果有明白的同學,希望能夠告訴我具體方法,謝謝了。

對K-Means算法和TF-IDF算法不太熟悉的同學可以參考一下這個鏈接,裏面會有說明數據挖掘經典算法概述以及詳解鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章