我有一個圖像數據庫。當我拍攝新照片時,我想將其與此數據庫中的圖像進行比較,並獲得相似性分數(使用OpenCV)。這種方式我想檢測,如果我有一個圖像,這是非常相似的新鮮的圖片。OpenCV:指紋圖像和數據庫對比
是否有可能創建我的數據庫圖像的指紋/散列並匹配新的數據庫?
我正在尋找一個alogrithm代碼片段或技術演示,而不是一個商業解決方案。
最佳,
的Stefan
我有一個圖像數據庫。當我拍攝新照片時,我想將其與此數據庫中的圖像進行比較,並獲得相似性分數(使用OpenCV)。這種方式我想檢測,如果我有一個圖像,這是非常相似的新鮮的圖片。OpenCV:指紋圖像和數據庫對比
是否有可能創建我的數據庫圖像的指紋/散列並匹配新的數據庫?
我正在尋找一個alogrithm代碼片段或技術演示,而不是一個商業解決方案。
最佳,
的Stefan
作爲Pual R已經評論,該「指紋/散列」通常是一組特徵矢量的或一組特徵描述符。但是在計算機視覺中使用的大多數特徵向量通常對於數據庫搜索而言在計算上過於昂貴。所以這個任務需要一種特殊的特徵描述符,因爲即使進行了各種優化,SURF和SIFT等描述符也需要花費太多時間進行搜索。
OpenCV爲您的任務(對象分類)提供的唯一功能是實現Bag的可視化單詞(BOW)。
它可以計算特殊類型的圖像特徵並訓練視覺詞彙詞彙。接下來,您可以使用這些詞彙來查找數據庫中的相似圖像並計算相似度分數。
Here is OpenCV文件袋的文字。 OpenCV也有一個名爲bagofwords_classification.cpp
的樣本。它非常大,但可能會有所幫助。
安德烈,豪你這樣做: 「它可以計算出特殊的圖像特徵和訓練視覺詞彙詞彙,接下來,您可以使用這些詞彙來查找數據庫中的相似圖像並計算相似性分數。「 謝謝 – lilouch
基於內容的圖像檢索系統仍然活躍的研究的一個領域:http://citeseerx.ist.psu.edu/search?q=content-based+image+retrieval
首先,你必須要清楚,什麼是你的背景相似:
對於您所描述的問題,沒有「滿足所有需求」的算法。你可以分享的問題的細節越多,你可能會得到更好的答案。張貼一些有代表性的圖像(如果可能的話)並描述期望的結果也非常有幫助。
如果computer-vision.stackexchange.com已經存在,這將是一個很好的問題。
您可以使用pHash
算法,並存儲在數據庫phash
值,然後使用此代碼:
double const mismatch = algo->compare(image1Hash, image2Hash);
這裏「不匹配」的值可以伊斯利告訴你兩個圖像之間的相似率。
pHash功能:
這些功能很好,足以評估各方面的圖像相似性。
通常這種事情是由從圖像中提取特徵向量,並做某種類型的模板匹配的特徵向量來完成。 –
有幾個類似的/相關的/重複的問題:?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