2011-08-26 52 views
8

我有一個圖像數據庫。當我拍攝新照片時,我想將其與此數據庫中的圖像進行比較,並獲得相似性分數(使用OpenCV)。這種方式我想檢測,如果我有一個圖像,這是非常相似的新鮮的圖片。OpenCV:指紋圖像和數據庫對比

是否有可能創建我的數據庫圖像的指紋/散列並匹配新的數據庫?

我正在尋找一個alogrithm代碼片段或技術演示,而不是一個商業解決方案。

最佳,

的Stefan

+2

通常這種事情是由從圖像中提取特徵向量,並做某種類型的模板匹配的特徵向量來完成。 –

+0

有幾個類似的/相關的/重複的問題:?OpenCV的/ SURF如何生成圖像的哈希/指紋/簽名出來的描述符(http://stackoverflow.com/questions/7205489/opencv-fingerprint-image - 和 - 比較數據庫),[近重複圖像檢測](http://stackoverflow.com/questions/1034900/near-duplicate-image-detection/),[圖像指紋比較許多圖像的相似度] (http://stackoverflow.com/questions/596262/image-fingerprint-to-compare-similarity-of-many-images),... – Albert

回答

10

作爲Pual R已經評論,該「指紋/散列」通常是一組特徵矢量的或一組特徵描述符。但是在計算機視覺中使用的大多數特徵向量通常對於數據庫搜索而言在計算上過於昂貴。所以這個任務需要一種特殊的特徵描述符,因爲即使進行了各種優化,SURF和SIFT等描述符也需要花費太多時間進行搜索。

OpenCV爲您的任務(對象分類)提供的唯一功能是實現Bag的可視化單詞(BOW)。

它可以計算特殊類型的圖像特徵並訓練視覺詞彙詞彙。接下來,您可以使用這些詞彙來查找數據庫中的相似圖像並計算相似度分數。

Here is OpenCV文件袋的文字。 OpenCV也有一個名爲bagofwords_classification.cpp的樣本。它非常大,但可能會有所幫助。

+1

安德烈,豪你這樣做: 「它可以計算出特殊的圖像特徵和訓練視覺詞彙詞彙,接下來,您可以使用這些詞彙來查找數據庫中的相似圖像並計算相似性分數。「 謝謝 – lilouch

2

基於內容的圖像檢索系統仍然活躍的研究的一個領域:http://citeseerx.ist.psu.edu/search?q=content-based+image+retrieval

首先,你必須要清楚,什麼是你的背景相似:

  1. 類似顏色分佈:使用類似color descriptors爲圖像的細分,你應該得到一些相當令人滿意的結果。
  2. 相似對象:由於計算機不知道,對象是什麼,除非您有關於對象(或少數對象類)的廣泛領域知識,否則您不會走得太遠。有關當前研究狀況的良好概述可參見hereresults)和即將here

對於您所描述的問題,沒有「滿足所有需求」的算法。你可以分享的問題的細節越多,你可能會得到更好的答案。張貼一些有代表性的圖像(如果可能的話)並描述期望的結果也非常有幫助。

如果computer-vision.stackexchange.com已經存在,這將是一個很好的問題。

0

您可以使用pHash算法,並存儲在數據庫phash值,然後使用此代碼:

double const mismatch = algo->compare(image1Hash, image2Hash); 

這裏「不匹配」的值可以伊斯利告訴你兩個圖像之間的相似率。

pHash功能:

  1. AverageHash
  2. PHASH
  3. MarrHildrethHash
  4. RadialVarianceHash
  5. BlockMeanHash
  6. BlockMeanHash
  7. ColorMomentHash

這些功能很好,足以評估各方面的圖像相似性。