2016-01-05 63 views
1

我的場景如下: 我必須在數據庫中保存1000張圖像,然後必須將新圖像與數據庫圖像進行比較(匹配應該是70%或更多)以獲得最佳效果在php中匹配來自數據庫的圖像。在php中的圖像比較

是有更好的結果快速比較的任何算法或方法...

感謝提前:)

+0

讓我們看看你到目前爲止嘗試過 –

回答

1

試試這個課程。它支持從圖像獲取哈希字符串中的數據庫來存儲和使用新的圖像後比較:
https://github.com/nvthaovn/CompareImage

這是非常快速和準確的,雖然不是最優的代碼。我的數據庫中有20000張照片。

+0

感謝它爲我工作:) – VRK

1

這完全取決於你想如何聰明的算法是。

例如,這裏有一些問題:

裁剪的圖像與一個未裁剪圖像 圖像與文本添加與另一個沒有 鏡像圖像 我見過的最簡單,最簡單的算法就是對每個圖像執行以下步驟:

縮放到某個小的值,如64x64或32x32,忽略長寬比,使用組合縮放算法而不是最近像素 縮放顏色範圍,以使最暗的黑色和最亮白色 旋轉和翻轉的圖像,所以t最左邊的顏色是左上角,然後右上角是下一個更深,左下角是下一個更深(當然儘可能) 編輯一個組合縮放算法是一個當縮放10個像素下降到一個將執行它使用一個函數,將所有這10個像素的顏色合併爲一個。可以用像平均值,平均值或更復雜的算法(如雙三次樣條)來完成。

然後計算兩個圖像之間的像素之間的平均距離。

要在數據庫中查找可能的匹配項,請將像素顏色作爲單個列存儲在數據庫中,爲其中的一大堆(但不是全部,除非使用非常小的圖像)編制索引,並執行查詢每個像素值的範圍,即。每幅圖像中小圖像中的像素在要查找的圖像的-5和+5之間。

這很容易實現,運行速度相當快,但當然不會處理最高級的差異。爲此你需要更先進的算法。

+0

感謝您的答案將嘗試實施..你有任何鏈接或代碼,所以我可以參考它.. – VRK

2

我建議你使用感知哈希或類似的 - 主要是爲了表現的原因。本質上,您可以在插入數據庫的位置爲數據庫中的每個圖像創建單個數字或散列,並將該散列保留在數據庫中。然後,當您獲取插入的新圖像時,計算其哈希值並將其與所有其他圖像的PRE-CALCULATED哈希值進行比較,以便您不必從磁盤拖動現有圖像的所有兆字節像素以進行比較他們。

最好的pHASH是尺度不變和圖像格式不變的。這是Neal Krawetz博士的一篇文章...... Perceptual Hashing

ImageMagick還可以做感知散列並可從PHP調用 - 請參閱here