कभी-कभी दो छवि फ़ाइलें फ़ाइल स्तर पर भिन्न हो सकती हैं, लेकिन एक इंसान उन्हें समझदारी से समान मानता है। यह देखते हुए, अब मान लीजिए कि आपके पास छवियों का एक विशाल डेटाबेस है, और आप जानना चाहते हैं कि कोई मानव सोचता है कि कुछ छवि एक्स डेटाबेस में मौजूद है या नहीं। अगर सभी छवियों में एक अवधारणात्मक हैश/फिंगरप्रिंट था, तो कोई हैश छवि एक्स हो सकता है और यह देखने के लिए एक साधारण बात होगी कि यह डेटाबेस में है या नहीं।यह पता लगाना कि क्या दो छवियां समान रूप से समान हैं
मुझे पता है कि इस मुद्दे के आसपास अनुसंधान है, और कुछ एल्गोरिदम मौजूद हैं, लेकिन क्या कोई उपकरण है, जैसे यूनिक्स कमांड लाइन टूल या लाइब्रेरी जिसका उपयोग मैं किसी भी एल्गोरिदम को स्क्रैच से लागू किए बिना ऐसे हैश की गणना करने के लिए कर सकता हूं?
संपादित करें: 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
* इसका मतलब है कि आपको प्राप्त होने वाला ब्लॉब एक ही छवि के लिए भी अलग होगा, अगर इसे किसी अन्य समय पर पुनर्प्राप्त किया गया था। * यह $ $ blob "स्ट्रिंग (यदि डबल कोट्स में डाल दिया गया है) के लिए सच नहीं है, यदि छवि पिक्सल समान हैं तो वही 32 बाइट होंगे। – pts