मैं दो छवियों के बीच समानता को कैसे माप सकता हूं? [बन्द है]


94

मैं यह निर्धारित करने के लिए कि पहले से ही सही ढंग से प्रदर्शित हो रहा है या नहीं, एक आवेदन के स्क्रीनशॉट की तुलना एक वेब पेज से की जा सकती है। मैं एक सटीक मिलान तुलना नहीं चाहता, क्योंकि पहलू थोड़ा अलग हो सकता है (वेब ​​ऐप के मामले में, ब्राउज़र के आधार पर, कुछ तत्व थोड़ा अलग स्थान पर हो सकता है)। यह एक माप देना चाहिए कि स्क्रीनशॉट कितने समान हैं।

क्या कोई पुस्तकालय / उपकरण है जो पहले से ही ऐसा करता है? आप इसे कैसे लागू करेंगे?


1
इस तरह के अन्य सवालों में कुछ अच्छे जवाब हैं: stackoverflow.com/questions/75891/…
blak

1
और यहाँ और अधिक: stackoverflow.com/questions/189943/…
Anoyz

1
मशीन लर्निंग और हाल ही में "डीप लर्निंग" में हालिया प्रगति के प्रकाश में उत्तर अपडेट करने का समय।
जूलुपोंट

मेरी प्रयोगशाला को इस समस्या को भी हल करने की आवश्यकता है, और यहां उल्लिखित वर्कफ़्लो का उपयोग किया गया है: douglasduhaime.com/posts/…
duhaime

जवाबों:


73

यह पूरी तरह से इस बात पर निर्भर करता है कि आप एल्गोरिदम को कितना स्मार्ट बनाना चाहते हैं।

उदाहरण के लिए, यहाँ कुछ मुद्दे हैं:

  • फसली छवियां बनाम एक अनियंत्रित छवि
  • एक पाठ के साथ छवियों के बिना एक और जोड़ा बनाम
  • प्रतिबिम्बित चित्र

इसके लिए मैंने जो सबसे आसान और सरल एल्गोरिथम देखा है, वह प्रत्येक चित्र के लिए निम्न चरण करना है:

  1. कुछ छोटे पैमाने पर, जैसे 64x64 या 32x32, पहलू अनुपात की उपेक्षा, निकटतम पिक्सेल के बजाय स्केलिंग एल्गोरिथ्म के संयोजन का उपयोग करें
  2. पैमाने पर रंग इतना है कि सबसे गहरा काला है और सबसे हल्का सफेद है
  3. छवि को घुमाएं और पलटें ताकि सबसे ऊंचा रंग बाईं ओर हो, और फिर शीर्ष-दाएं अगला गहरा हो, नीचे-बाएं अगला गहरा हो (जहां तक ​​निश्चित रूप से संभव हो)

संपादित एक संयोजन स्केलिंग एल्गोरिथ्म है कि जब एक के लिए 10 पिक्सल उसके आकार को समारोह है कि एक में उन सभी 10 पिक्सल और उन सभी को संयुक्त का रंग लेता है का उपयोग करते हुए यह करना होगा एक है। औसतन, माध्य-मान जैसे एल्गोरिदम के साथ किया जा सकता है, या अधिक जटिल जैसे बाइबिक स्प्लिन।

फिर दोनों छवियों के बीच औसत दूरी पिक्सेल-दर-पिक्सेल की गणना करें।

डेटाबेस में एक संभावित मैच देखने के लिए, पिक्सेल रंगों को डेटाबेस में अलग-अलग कॉलम के रूप में संग्रहीत करें, उनमें से एक गुच्छा को अनुक्रमित करें (लेकिन सभी नहीं, जब तक कि आप बहुत छोटी छवि का उपयोग न करें), और एक क्वेरी करें जो प्रत्येक के लिए एक सीमा का उपयोग करता है। पिक्सेल मूल्य, यानी। प्रत्येक छवि जहां छोटी छवि में पिक्सेल -5 और +5 के बीच की छवि है जिसे आप देखना चाहते हैं।

इसे लागू करना आसान है, और चलाने के लिए काफी तेज़ है, लेकिन निश्चित रूप से अधिकांश उन्नत मतभेदों को संभाल नहीं पाएंगे। उसके लिए आपको बहुत अधिक उन्नत एल्गोरिदम की आवश्यकता है।


14
"संयोजन स्केलिंग एल्गोरिथ्म" क्या है?
ग्रीग लिंड ऑक्ट

32

इसे मापने का The क्लासिक ’तरीका छवि को कुछ विहित संख्या वाले वर्गों (10x10 ग्रिड कहना) में तोड़ना है और फिर प्रत्येक कोशिका के अंदर RGB मानों के एक हिस्टोग्राम की गणना करना और संबंधित हिस्टोग्राम्स की तुलना करना है। इस प्रकार के एल्गोरिथ्म को इसकी सादगी दोनों के कारण पसंद किया जाता है और यह स्केलिंग और (छोटे!) अनुवाद के प्रति अगाध है।


6
क्या यह पूरी छवि के लिए एक एकल हिस्टोग्राम करने के समान नहीं है, लेकिन दर्पण और घूमने के लिए लचीला नहीं होने की अतिरिक्त कमियों के साथ?
dodgy_coder

छवि के 2 हिस्सों में से 2 हिस्टोग्राम पूरे मिलान के 1 हिस्टोग्राम की तुलना में बेहतर मिलान परिशुद्धता होगा। हालाँकि इसमें आपके द्वारा बताई गई कमियां हैं, यह इस बात पर निर्भर करता है कि आप किस समस्या का समाधान कर रहे हैं।
साइको ब्रम्ह

25

एक सामान्यीकृत रंग हिस्टोग्राम का उपयोग करें। ( यहां एप्लिकेशनों पर अनुभाग पढ़ें ), वे आमतौर पर छवि पुनर्प्राप्ति / मिलान प्रणालियों में उपयोग किए जाते हैं और मिलान छवियों का एक मानक तरीका है जो बहुत विश्वसनीय, अपेक्षाकृत तेज़ और लागू करने में बहुत आसान है।

अनिवार्य रूप से एक रंग हिस्टोग्राम छवि के रंग वितरण को पकड़ लेगा। फिर यह देखने के लिए एक अन्य छवि के साथ तुलना की जा सकती है कि क्या रंग वितरण मैच करता है।

इस प्रकार का मिलान स्केलिंग (एक बार हिस्टोग्राम सामान्य होने पर), और रोटेशन / शिफ्टिंग / मूवमेंट आदि के लिए बहुत ही अनुकूल है।

पिक्सेल-दर-पिक्सेल तुलना से बचें जैसे कि छवि को घुमाया जाता है / थोड़ा स्थानांतरित किया जाता है, इससे बड़े अंतर की सूचना मिल सकती है।

हिस्टोग्राम अपने आप को उत्पन्न करने के लिए सीधा होगा (यह मानते हुए कि आप पिक्सेल मूल्यों तक पहुंच प्राप्त कर सकते हैं), लेकिन अगर आपको ऐसा नहीं लगता है, तो OpenCV लाइब्रेरी इस तरह का सामान करने के लिए एक महान संसाधन है। यहां एक पावरपॉइंट प्रस्तुति है जो आपको दिखाती है कि ओपनसीवी का उपयोग करके हिस्टोग्राम कैसे बनाया जाए।


14

वीडियो एन्कोडिंग एल्गोरिदम एमपीईजी की तरह एक वीडियो के प्रत्येक फ्रेम के बीच अंतर की गणना नहीं करते हैं ताकि वे सिर्फ डेल्टा को एन्कोड कर सकें? आप देख सकते हैं कि वीडियो एन्कोडिंग एल्गोरिदम उन फ्रेम अंतरों की गणना कैसे करते हैं।

इस ओपन सोर्स इमेज सर्च एप्लिकेशन को देखें http://www.semanticmetadata.net/lire/ । यह कई छवि समानता वाले अल्गोरिम्स का वर्णन करता है, जिनमें से तीन एमपीईजी -7 मानक से हैं: स्केलेबलकोलर, कलर लॉयआउट, एजहिस्टोग्राम और ऑटो कलर कोरलोग्राम।


1
यह यहाँ सवाल का जवाब नहीं होगा। सवाल पिक्सेल प्रति पिक्सेल तुलना के बारे में नहीं है।
कौषा

@ कौशा सच, लेकिन फिर भी सोचने के लिए एक दिलचस्प दिशा।
अर्थ-मामले

13

आप एक शुद्ध गणितीय दृष्टिकोण का उपयोग कर सकते हैं O(n^2), लेकिन यह केवल तभी उपयोगी होगा जब आप निश्चित हों कि कोई ऑफसेट या ऐसा कुछ नहीं है। (हालांकि अगर आपके पास सजातीय रंग के साथ कुछ वस्तुएं हैं तो यह अभी भी बहुत अच्छा काम करेगा।)

वैसे भी, विचार दो मैट्रिक्स के सामान्यीकृत डॉट-उत्पाद की गणना है। C = sum(Pij*Qij)^2/(sum(Pij^2)*sum(Qij^2))

यह सूत्र वास्तव में मेट्रिसेस (विर्ड) के बीच के कोण का "कोसाइन" है। बड़ी समानता (कहने देता है Pij=Qij), C 1 होगा, और यदि वे पूरी तरह से अलग हैं, तो हर i,j Qij = 1(शून्य-विभाजन से बचने) के लिए कहते हैं Pij = 255, फिर आकार के लिए nxn, बड़ा nहोगा, हम शून्य के करीब होंगे प्राप्त। (मोटे हिसाब से:) C=1/n^2


8

आपको इसके लिए पैटर्न पहचान की आवश्यकता होगी । दो छवियों के बीच छोटे अंतर को निर्धारित करने के लिए, हॉपफील्ड नेट काफी अच्छी तरह से काम करते हैं और लागू करने में काफी आसान हैं। मैं किसी भी उपलब्ध कार्यान्वयन पता नहीं है, यद्यपि।


7

एक माणिक समाधान यहां पाया जा सकता है

रीडमी से:

फेशियन, पाराश लाइब्रेरी के चारों ओर एक रूबी रैपर है, "अवधारणात्मक हैश", जो डुप्लिकेट का पता लगाता है और डुप्लिकेट मल्टीमीडिया फ़ाइलों के पास है


5

दो छवियों के बीच समानता को कैसे मापना है यह पूरी तरह से इस बात पर निर्भर करता है कि आप क्या मापना चाहते हैं, उदाहरण के लिए: इसके विपरीत, चमक, मापदण्ड, शोर ... और फिर आपके लिए सबसे उपयुक्त उपयुक्तता माप चुनें। आप MAD (माध्य निरपेक्ष अंतर) से चुन सकते हैं , MSD (मीन अंतर) जो चमक को मापने के लिए अच्छे हैं ... वहाँ भी उपलब्ध CR (सहसंबंध गुणांक) है जो दो छवियों के बीच सहसंबंध का प्रतिनिधित्व करने में अच्छा है। आप एसडीएच (अंतर छवि हिस्टोग्राम के मानक विचलन) या एमआई (पारस्परिक जानकारी) या एनएमआई (सामान्यीकृत पारस्परिक जानकारी) जैसे बहुविधता समानता उपायों जैसे हिस्टोग्राम आधारित समानता उपायों से भी चुन सकते हैं ।

क्योंकि यह समानता समय में बहुत अधिक खर्च करती है, इसलिए उन पर इन उपायों को लागू करने से पहले छवियों को स्केल करने की सलाह दी जाती है।


4

मुझे आश्चर्य होता है (मैं वास्तव में सिर्फ इस विचार को निकाल रहा हूं कि वहां गोली मार दी जाए) अगर कुछ एक छवि को दूसरे से घटाकर निकाला जा सकता है, और फिर परिणामस्वरूप छवि को जीआईएफ के जेपीईजी के रूप में संपीड़ित किया जाता है, और फ़ाइल का आकार लिया जाता है। समानता का एक उपाय।

यदि आपके पास दो समान चित्र हैं, तो आपको एक सफेद बॉक्स मिलेगा, जो वास्तव में अच्छी तरह से संपीड़ित करेगा। जितनी अधिक छवियां अलग होंगी, उतना ही अधिक जटिल यह प्रतिनिधित्व करने के लिए होगा, और इसलिए कम संकुचित होगा।

शायद एक आदर्श परीक्षण नहीं है, और शायद ज़रूरत से ज़्यादा धीमा, लेकिन यह एक त्वरित और गंदे कार्यान्वयन के रूप में काम कर सकता है।


90 डिग्री घूमने के बारे में सोचो; चित्र अभी भी समान हैं।
अर्थ-मामले

3

आप खुले स्रोत उपकरण खोज के लिए कोड को देख सकते हैं , हालांकि यह पर्ल में लिखा गया प्रतीत होता है, इसलिए मैं यह नहीं कह सकता कि यह पार्स करना कितना आसान होगा ...

खोजे गए पृष्ठ को पढ़ना जो मुझे पसंद आया, मैं देखता हूं कि समान एल्गोरिथ्म का C ++ कार्यान्वयन है । संभवत: यह समझना आसान होगा।

और ऐसा लगता है कि आप gqview का भी उपयोग कर सकते हैं ।


2

ठीक है, आपके सवाल का सीधे जवाब देने के लिए नहीं, लेकिन मैंने ऐसा होते देखा है। Microsoft ने हाल ही में PhotoSynth नाम का एक टूल लॉन्च किया है, जो बड़ी संख्या में चित्रों में ओवरलैपिंग क्षेत्रों को निर्धारित करने के लिए बहुत समान है (जो अलग-अलग पहलू अनुपात का हो सकता है)।

मुझे आश्चर्य है कि अगर उनके पास अपने ब्लॉग पर कोई उपलब्ध पुस्तकालय या कोड स्निपेट हैं।


1
इस तकनीक। बंद कर दिया गया है।
जोसेफ रॉसन

2

वैभव के नोट पर विस्तार करने के लिए, हगिन एक ओपन-सोर्स 'ऑटोस्टिचर' है, जिसे समस्या पर कुछ जानकारी मिलनी चाहिए।


2

सामग्री-आधारित छवि पुनर्प्राप्ति के लिए सॉफ्टवेयर है, जो (आंशिक रूप से) आपको क्या चाहिए। सभी संदर्भ और स्पष्टीकरण परियोजना स्थल से जुड़े हुए हैं और एक छोटी पाठ्य पुस्तक (किंडल): LIRE भी है


1

आप यह देखने के लिए Siamese Network का उपयोग कर सकते हैं कि क्या इस ट्यूटोरियल के बाद दोनों इमेज समान या डिस्मिलर हैं । यह ट्यूटोरियल समान छवियों को क्लस्टर करता है जबकि आप L2दो छवियों की समानता को मापने के लिए दूरी का उपयोग कर सकते हैं ।


0

यदि यह ऐसा कुछ है जो आप सामयिक आधार पर कर रहे हैं और इसे स्वचालित करने की आवश्यकता नहीं है, तो आप इसे एक छवि संपादक में कर सकते हैं जो परतों का समर्थन करता है, जैसे कि फ़ोटोशॉप या पेंट शॉप प्रो (शायद जीआईएमपी या पेंट.नेट भी, लेकिन मैं ' मैं उन लोगों के बारे में निश्चित नहीं हूं)। दोनों स्क्रीन शॉट्स खोलें, और एक को दूसरे के ऊपर एक परत के रूप में डालें। परत सम्मिश्रण मोड को अंतर में बदलें, और दोनों के बीच एक समान सब कुछ काला हो जाएगा। आप किसी भी संरेखण अंतर को कम करने के लिए शीर्ष परत को चारों ओर ले जा सकते हैं।


एक अन्य उपकरण जो इस प्रकार का बहुत सरल बनाता है, वह है kaleidoscopeapp.com
माइकल ओस्फोस्की

0

तुलना के अलावा छवियों के लिए पिक्सेल-दर-पिक्सेल तुलना है, जैसे,

यहां छवि विवरण दर्ज करें


@xilpex, ओपी पूछता है: क्या कोई पुस्तकालय / उपकरण है जो पहले से ही ऐसा करता है ? मेरे जवाब में ऐसी लाइब्रेरी / टूल का लिंक शामिल है।
एमलोबेव

-1

वैसे उपयोग करने के लिए वास्तव में आधार-स्तरीय विधि हर पिक्सेल रंग के माध्यम से जा सकती है और दूसरी छवि पर संबंधित पिक्सेल रंग के साथ तुलना कर सकती है - लेकिन यह शायद एक बहुत ही धीमी गति से समाधान है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.