有時兩個圖像文件在文件級別上可能會有所不同,但是人類會認爲它們在感知上完全相同。鑑於此,現在假設你有一個巨大的圖像數據庫,並且你想知道一個人是否會認爲圖像X存在於數據庫中。如果所有圖像都具有敏感的散列/指紋,則可以散列圖像X,並且查看它是否在數據庫中是很簡單的事情。檢測兩個圖像在視覺上是否相同
我知道有研究解決這個問題,一些算法存在的,但沒有任何工具,像UNIX命令行工具,或者我可以用它來計算這樣的散列沒有從頭開始實現一些算法庫?
編輯:從findimagedupes相關代碼,使用ImageMagick
try $image->Sample("160x160!");
try $image->Modulate(saturation=>-100);
try $image->Blur(radius=>3,sigma=>99);
try $image->Normalize();
try $image->Equalize();
try $image->Sample("16x16");
try $image->Threshold();
try $image->Set(magick=>'mono');
($blob) = $image->ImageToBlob();
編輯:警告! ImageMagick $ image對象似乎包含有關讀入的圖像文件的創建時間的信息。這意味着即使對於同一圖像,如果在不同的時間檢索到的圖像塊也會有所不同。爲確保指紋保持不變,請使用$ image-> getImageSignature()作爲最後一步。
這過程聽起來非常處理器密集型。 – endolith 2009-08-15 18:28:02
*這意味着如果在不同的時間檢索到相同的圖像,你得到的blob會有所不同。*對於`「$ blob」`字符串(如果放在雙引號中),這是不正確的,如果圖像像素相同,則將完全相同的32個字節。 – pts 2016-12-01 16:46:55