2012-10-26 30 views
9

我想知道是否有一個預先存在的算法/庫/框架來比較兩個圖像,看看是否是另一個重新調整大小的版本?編程語言在這個階段並不重要。查找不同大小的重複圖像

如果沒有東西在那裏,我需要寫點東西。我到目前爲止想到的是:

  • (昂貴)將較大尺寸調整爲較小尺寸並逐個像素進行比較。

  • 更好的是,只需調整圖片上的幾個隨機「區域」並進行比較。如果它們匹配,轉換更多等等......

  • 將圖像分解成若干行和列,並對顏色值做一些奇偶校驗運算。

我尤其是前兩種思想看到的問題,是有不同的方式來重新大小擺在首位的圖片,這樣算算可能不會制定出相同的。一些重新調整大小增加了模糊等...

如果任何人都可以指出我關於這個問題的一些很好的文獻,那就太好了。我的谷歌搜索主要是共享軟件應用程序,這不是我想要的。

目標是讓它運行在網絡服務器的後端。

+0

當你選擇你的隨機區域,你如何選擇目標區域進行比較? – Acorbe

+0

查找特徵向量,他們已經成功地使用了面部識別(特徵臉)或任何數量的圖像識別技術,比隨機抽樣更復雜 –

+1

也http://stackoverflow.com/a/12823054/1633931 –

回答

2

最好的方法取決於你正在比較的圖像的特徵,圖像相同的概率百分比,以及它們不同的時候,它們通常是偏離了很多或者可能是分鐘作爲單個像素的差異?

如果上面的答案是你需要比較的圖像是完全隨機的,那麼使用昂貴的解決方案或一些可用的包可能是最好的選擇。

如果您知道圖像常常不一樣,並且圖像通常有很大不同,並且您確實想要手動展開解決方案,則可以實施一些初始「快速比較」步驟這將會更便宜,並且很快就會識別很多圖像不同的情況。例如,您可以調整較大圖像的大小,然後逐個像素(或計算像素值的散列)比較圖像的「對角線」(左上像素到右下像素)和通過這樣做排除不同的圖像,只爲那些通過這個測試的人做比較昂貴的比較。

或者根據圖像的類型在任何「良好分佈」上採取預先設定的點數,並且只對通過此測試的人員進行更昂貴的比較。

如果您知道很多關於您將要比較的圖像,他們具有已知的特徵,並且他們比他們相同的情況更多不同,執行上面提到的便宜的「快速消除比較」可能是值得的。

1

你需要研究dHash算法。

我寫了一個純java庫,只是這幾天回來。您可以使用目錄路徑(包括子目錄)來提供它,並且它將使用絕對路徑列出您想要刪除的重複圖像。或者,您也可以使用它來查找目錄中的所有唯一圖像。

它在內部使用awt api,所以不能用於Android。由於imageIO在讀取大量新圖像時遇到了問題,因此我使用了12個內部使用的猴子jar。

https://github.com/srch07/Duplicate-Image-Finder-API

罐子內部捆綁的依賴性可以從,https://github.com/srch07/Duplicate-Image-Finder-API/blob/master/archives/duplicate_image_finder_1.0.jar

API進行下載可以找到太多不同大小的圖像中重複。

+0

如果您知道關於OP問題的更多細節,這是處理這個問題的API的一部分,那就太好了。也許一般解釋它是如何工作的? api可以在不同大小的圖片中找到重複的圖片._ – RyBolt