2009-09-04 31 views
2

用戶正在上傳照片到我們的PHP構建系統。其中一些我們因爲不相關的內容而被標記爲禁止。我正在尋找「自動比較」算法的優化,它正在跳過這些標記爲禁止的照片。每次上傳都需要與許多vorbinden進行比較。圖像文件cheksum作爲一個獨特的內容比較優化

可能的解決方案:

1 /商店禁止文件和比較全部內容 - 工作得很好,但速度很慢。

2 /存儲映像文件校驗和並比較校驗和 - 這是提高速度的想法。

3 /任何速度足夠快並可以比較照片之間相似度的智能算法。但是我沒有任何關於PHP的想法。

什麼是最佳解決方案?

回答

4

不計算校驗和,計算哈希值!

我曾經創建過一個簡單的應用程序,它必須在我的硬盤上查找重複的圖像。它只會搜索.JPG文件,但對於每個文件,我會計算出前1024個字節的散列值,然後將圖像的寬度,高度和大小追加到它以得到如下字符串:「875234:640:480: 13286「,我將它用作圖像的關鍵字。 事實證明,我沒有看到這個算法有任何錯誤的重複,儘管仍然有錯誤重複的機會。 但是,這種方案將允許有人只是增加一個字節,或對圖像進行非常小的調整時重複。

另一個竅門可能是減少每個圖像的大小和顏色數量。如果將每個圖像的大小調整爲128x128像素,並將顏色數量減少到16(4位),那麼您最終會得到8192個字節的合理獨特模式。計算這個模式的散列值並使用散列作爲主鍵。一旦你點擊了,你可能仍然有誤報,因此你需要比較新圖像的模式和系統中存儲的模式。 如果第一個散列解決方案指示新圖像是唯一的,則可以使用此模式比較。儘管如此,我仍然需要爲自己的工具制定計劃。但它基本上是一種採取圖像指紋,然後比較它們。

我的第一個解決方案將找到完全匹配。我的第二個解決方案會找到類似的圖像(順便說一下,我在Delphi中編寫了我的哈希方法,但從技術上講,任何哈希方法都會足夠好。)

2

圖像相似性比較並不是一個微不足道的問題,所以除非你真的想投入大量的努力來比較圖像的算法,你的想法創建某種形式的圖像數據的散列和比較,至少會允許您可以快速檢測到確切的重複項。我會按照你現在的計劃去做,但要確保它是一個體面的(但很快)散列,以便碰撞的可能性很低。

1

哈希的問題,如所建議的,如果某人更改1個像素,哈希變成完全不同。

有很好的框架可以比較文件的內容,並返回(百分比)他們看起來很像。有一個具體的命令行應用程序,我曾經遇到過,它是在科學環境中構建的,它是開源的,但我不記得它的名字。

這種框架絕對可以幫助你,因爲它們可以非常快速,即使有大量的文件。

+0

可能那個科學工具是Sikuli.org? – David 2012-01-18 02:46:41

+0

這不是,我很抱歉,直到今天,我仍然不記得它的名字。我似乎沒有提及它了:( – Jake 2012-01-18 22:16:46