मुझे वास्तव में इसके लिए किसी बाहरी पुस्तकालय का उपयोग करने का कोई कारण नहीं दिखता है, मैंने इस तरह की चीज कई बार की है और निम्नलिखित एल्गोरिदम काफी अच्छी तरह से काम करता है। मैं मानता हूं कि यदि आप दो छवियों की तुलना कर रहे हैं कि उनके पास समान आयाम हैं, लेकिन यदि आप नहीं करते हैं तो आप केवल एक का आकार बदल सकते हैं।
badness := 0.0
For x, y over the entire image:
r, g, b := color at x,y in image 1
R, G, B := color at x,y in image 2
badness += (r-R)*(r-R) + (g-G)*(g-G) + (b-B)*(b-B)
badness /= (image width) * (image height)
अब आपको दो छवियों के बीच सामान्यीकृत खराबता मान मिल गया है, कम बुरेपन, छवियों से अधिक संभावना है। यह सरल और प्रभावी है, ऐसी कई चीजें हैं जो कुछ मामलों में इसे बेहतर या तेज बनाती हैं लेकिन आपको शायद ऐसा कुछ भी करने की आवश्यकता नहीं है। आपको वास्तव में बुरेपन को सामान्य करने की भी आवश्यकता नहीं है, लेकिन अगर आप कई संभावित मैचों को मैन्युअल रूप से देखना चाहते हैं तो इस तरह आप इसके लिए केवल एक थ्रेसहोल्ड के साथ आ सकते हैं।
के बाद से इस सवाल का कुछ अधिक ध्यान मैं मामलों में इस तेजी लाने के लिए जहां कई छवियों कई बार कार्रवाई कर रहे हैं एक तरह से जोड़ने का निर्णय लिया गया है हो गया है। मैंने इस दृष्टिकोण का उपयोग किया जब मेरे पास तुलना करने के लिए हजारों छवियां थीं, और मुझे यकीन था कि छवियों की एक विशिष्ट जोड़ी जंगली रूप से अलग होगी। मैं यह भी जानता था कि मेरी सभी छवियां बिल्कुल समान आयाम होंगी। ऐसी स्थिति में जहां आप संवाद बॉक्स की तुलना कर रहे हैं, आपकी सामान्य छवियां अधिकतर ग्रे-आश हो सकती हैं, और आपकी कुछ छवियों को आकार बदलने की आवश्यकता हो सकती है (हालांकि हो सकता है कि यह केवल एक गलत मिलान इंगित करता हो), इस मामले में यह दृष्टिकोण आपको प्राप्त नहीं कर सकता है बहुत।
विचार quad-tree बनाने का विचार है जहां प्रत्येक नोड उस क्षेत्र के औसत आरजीबी मानों का प्रतिनिधित्व करता है जो नोड का प्रतिनिधित्व करता है। तो एक 4x4 छवि में आरजीबी मूल्यों के साथ रूट नोड होगा जिसमें छवि के औसत आरजीबी मूल्य के बराबर होगा, उसके बच्चों के पास उनके संबंधित 2x2 क्षेत्रों के औसत आरजीबी मूल्य का प्रतिनिधित्व करने वाले आरजीबी मूल्य होंगे, और उनके बच्चे व्यक्तिगत पिक्सेल का प्रतिनिधित्व करेंगे। (व्यावहारिक रूप से यह 16x16 के क्षेत्र से गहराई से नहीं जाना एक अच्छा विचार है, उस बिंदु पर आपको केवल व्यक्तिगत पिक्सेल की तुलना करना शुरू करना चाहिए।)
छवियों की तुलना करना शुरू करने से पहले आपको एक बुरेपन सीमा पर निर्णय लेने की भी आवश्यकता होगी । आप इस सीमा से ऊपर की किसी भी विश्वसनीय सटीकता के साथ बैडनेस की गणना नहीं करेंगे, इसलिए यह मूल रूप से उस सीमा है जिस पर आप एक छवि को 'मैच नहीं' के रूप में लेबल करने के इच्छुक हैं।
अब जब आप छवि ए से छवि बी की तुलना करते हैं, तो पहले अपने क्वाड-पेड़ प्रस्तुतियों के रूट नोड्स की तुलना करें। जैसे ही आप एक पिक्सेल छवि के लिए बुरेपन की गणना करेंगे, और यदि खराबता आपके दहलीज से अधिक हो तो तत्काल लौटें और इस स्तर पर बुरेपन की रिपोर्ट करें। चूंकि आप सामान्यीकृत बैडनेस का उपयोग कर रहे हैं, और चूंकि बुरेपनों को वर्ग के अंतरों का उपयोग करके गणना की जाती है, इसलिए किसी भी विशेष स्तर पर खराबता निम्न स्तर पर बुरेपन के बराबर या उससे कम होगी, इसलिए यदि यह किसी भी बिंदु पर थ्रेसहोल्ड से अधिक हो तो आप इससे भी अधिक हो जाएंगे व्यक्तिगत पिक्सेल के स्तर पर दहलीज।
यदि थ्रेसहोल्ड परीक्षण एनएक्सएन छवि पर गुजरता है, तो बस अगले स्तर पर नीचे जाएं और इसकी तुलना करें जैसे यह 2nx2n छवि थी। एक बार जब आप पर्याप्त कम हो जाए तो बस व्यक्तिगत पिक्सेल की तुलना करें। छवियों के आपके कॉर्पस के आधार पर यह आपको कई तुलनाओं को छोड़ने की अनुमति दे सकता है।
क्या फ़ाइल प्रारूप? – EkoostikMartin
Auwtch .. उस कार्य के साथ शुभकामनाएँ। मैंने एक बार चुनौती के रूप में इस तरह कुछ प्रोग्रामिंग करने की कोशिश की। चुनौती विफल: डी वे कुछ बहुत कठिन एल्गोरिदम हैं। – Matthias
फ़ाइल प्रारूप jpg, png, gif हो सकता है ...जो कुछ भी आप पसंद करते हैं; मैं तुलनात्मक रूप से तुलना से पहले रूपांतरित कर सकते हैं। मूल रूप से वे पीएनजी हैं :) –