दो छवियों की तुलना करने के लिए एल्गोरिदम


158

दो अलग-अलग छवि फ़ाइलों (जो भी प्रारूप मैं चुनता हूं) को देखते हुए, मुझे मौका की भविष्यवाणी करने के लिए एक कार्यक्रम लिखने की आवश्यकता है अगर एक दूसरे की अवैध प्रतिलिपि हो। प्रतिलिपि के लेखक सामान को घुमाने, नकारात्मक बनाने, या तुच्छ विवरण जोड़ने (साथ ही छवि के आयाम को बदलने) जैसे काम कर सकते हैं।

क्या आप इस तरह की नौकरी करने के लिए कोई एल्गोरिथम जानते हैं?


12
आप कैसे निर्धारित करते हैं कि कौन सा मूल है?
jfs

1
मुझे लगता है कि उसके पास मूल है और यह सत्यापित करने की आवश्यकता है कि क्या कोई विदेशी फ़ाइल एक ट्रांसफ़ॉर्मेड कॉपी है या मूल से संबंधित नहीं है।
unfa

जवाबों:


304

ये केवल ऐसे विचार हैं जिन्हें मैंने समस्या के बारे में सोचा है, कभी भी इसे आज़माया नहीं है, लेकिन मुझे इस तरह की समस्याओं के बारे में सोचना पसंद है!

शुरू करने से पहले

चित्रों को सामान्य करने पर विचार करें, यदि एक दूसरे से अधिक रिज़ॉल्यूशन है, तो उस विकल्प पर विचार करें कि उनमें से एक दूसरे का एक संपीड़ित संस्करण है, इसलिए रिज़ॉल्यूशन को कम करने से अधिक सटीक परिणाम मिल सकते हैं।

छवि के विभिन्न संभावित क्षेत्रों को स्कैन करने पर विचार करें जो छवि के ज़ूम किए गए भागों और विभिन्न पदों और घुमावों का प्रतिनिधित्व कर सकता है। यह मुश्किल होने लगता है अगर कोई एक चित्र दूसरे का तिरछा संस्करण है, तो ये उस तरह की सीमाएँ हैं जिनकी आपको पहचान करनी चाहिए और उन पर समझौता करना चाहिए।

Matlab छवियों के परीक्षण और मूल्यांकन के लिए एक उत्कृष्ट उपकरण है।

एल्गोरिदम का परीक्षण

आपको परीक्षण डेटा का एक बड़ा मानव विश्लेषण किया गया सेट (कम से कम) परीक्षण करना चाहिए जहां मैच पहले से ही ज्ञात हैं। यदि आपके परीक्षण डेटा में उदाहरण के लिए आपके पास 1,000 छवियां हैं जहां उनमें से 5% मेल खाते हैं, तो अब आपके पास एक बहुत विश्वसनीय बेंचमार्क है। एक एल्गोरिथ्म जो 10% सकारात्मकता पाता है वह उतना अच्छा नहीं है जितना कि हमारे परीक्षण डेटा में 4% सकारात्मकता पाता है। हालाँकि, एक एल्गोरिथ्म में सभी मैच मिल सकते हैं, लेकिन एक बड़ी 20% झूठी सकारात्मक दर भी है, इसलिए आपके एल्गोरिदम को रेट करने के कई तरीके हैं।

परीक्षण डेटा को यथासंभव कई प्रकार के गतिकी को कवर करने के लिए डिज़ाइन करने का प्रयास करना चाहिए जो आपको वास्तविक दुनिया में खोजने की उम्मीद करेंगे।

यह नोट करना महत्वपूर्ण है कि प्रत्येक एल्गोरिदम उपयोगी होने के लिए यादृच्छिक अनुमान लगाने से बेहतर प्रदर्शन करना चाहिए, अन्यथा यह हमारे लिए बेकार है!

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

रंग की बाल्टी

दो चित्रों के साथ, प्रत्येक पिक्सेल को स्कैन करें और रंगों को गिनें। उदाहरण के लिए आपके पास 'बाल्टी' हो सकती है:

white
red
blue
green
black

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

एक बार आपके योग होने के बाद, इसकी तुलना दूसरी छवि के योग से करें। आपको पता चल सकता है कि प्रत्येक छवि में एक बहुत ही विशिष्ट पदचिह्न है, जो मैचों की पहचान करने के लिए पर्याप्त है।

किनारे का पता लगाना

एज डिटेक्शन का उपयोग कैसे करें । (स्रोत: wikimedia.org )वैकल्पिक शब्द

दो समान चित्रों के साथ किनारे का पता लगाने से आपको एक उपयोगी और काफी विश्वसनीय अद्वितीय पदचिह्न मिल सकते हैं।

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

वैकल्पिक शब्द

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

रुचि के क्षेत्र

कुछ छवियों में रुचि के विशिष्ट क्षेत्र / क्षेत्र हो सकते हैं। ये क्षेत्र संभवतः बाकी छवि के साथ बहुत विपरीत हैं, और मैच खोजने के लिए आपकी अन्य छवियों को खोजने के लिए एक अच्छी वस्तु हैं। इस चित्र को उदाहरण के लिए लें:

वैकल्पिक शब्द
(स्रोत: meetthegimp.org )

नीले रंग में निर्माण कार्यकर्ता रुचि का क्षेत्र है और इसे खोज वस्तु के रूप में इस्तेमाल किया जा सकता है। संभवत: इस क्षेत्र से कई तरीके हैं जिनसे आप संपत्ति / डेटा निकाल सकते हैं और अपने डेटा सेट को खोजने के लिए उनका उपयोग कर सकते हैं।

यदि आपकी रुचि के 2 से अधिक क्षेत्र हैं, तो आप उनके बीच की दूरियों को माप सकते हैं। इसका सरलीकृत उदाहरण लें:

वैकल्पिक शब्द
(स्रोत: per2000.eu )

हमारे पास 3 स्पष्ट क्षेत्र हैं। क्षेत्र 1 और 2 के बीच की दूरी 200 पिक्सेल, 1 और 3 400 पिक्सेल और 2 और 3 200 पिक्सेल के बीच हो सकती है।

ब्याज के समान क्षेत्रों के लिए अन्य छवियां खोजें, दूरी के मूल्यों को सामान्य करें और देखें कि क्या आपके पास संभावित मिलान हैं। यह तकनीक घुमाए गए और स्केल किए गए चित्रों के लिए अच्छी तरह से काम कर सकती है। आपकी रुचि के जितने अधिक क्षेत्र हैं, प्रत्येक दूरी माप के मिलान के रूप में एक मैच की संभावना बढ़ जाती है।

अपने डेटा सेट के संदर्भ के बारे में सोचना महत्वपूर्ण है। यदि उदाहरण के लिए आपका डेटा सेट आधुनिक कला है, तो ब्याज के क्षेत्र काफी अच्छी तरह से काम करेंगे, क्योंकि ब्याज के क्षेत्रों को संभवतः अंतिम छवि का एक मौलिक हिस्सा बनाया गया था। यदि आप निर्माण स्थलों की छवियों के साथ काम कर रहे हैं, तो ब्याज के क्षेत्रों को गैरकानूनी रूप से अवैध कापियर द्वारा व्याख्या किया जा सकता है और उदारतापूर्वक काट-छाँट / संपादित किया जा सकता है। अपने डेटासेट की सामान्य विशेषताओं को ध्यान में रखें, और उस ज्ञान का फायदा उठाने का प्रयास करें।

morphing

दो छवियों को मोड़ना एक छवि को चरणों के सेट के माध्यम से दूसरे में बदलने की प्रक्रिया है:

वैकल्पिक शब्द

ध्यान दें, यह एक छवि को दूसरे में लुप्त करने के लिए अलग है!

कई सॉफ्टवेयर पैकेज हैं जो छवियों को आकार दे सकते हैं। यह पारंपरिक रूप से एक संक्रमणकालीन प्रभाव के रूप में उपयोग किया जाता है, दो छवियां आमतौर पर आधे रास्ते में नहीं होती हैं, अंतिम परिणाम के रूप में दूसरे चरम में एक चरम रूप।

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

एक सरलीकृत उदाहरण में, एक एल्गोरिथ्म तेजी से निष्पादित हो सकता है जब कम बदलाव किए जा सकते हैं। फिर हम जानते हैं कि इस बात की अधिक संभावना है कि ये दोनों चित्र एक दूसरे के साथ गुण साझा करते हैं।

यह तकनीक घुमाई हुई, विकृत, तिरछी, ज़ूम वाली, सभी प्रकार की कॉपी की गई छवियों के लिए अच्छी तरह से काम कर सकती है । फिर से यह सिर्फ एक विचार है जो मेरे पास है, यह किसी भी शोधित शिक्षा पर आधारित नहीं है, जहां तक ​​मुझे पता है (हालांकि मैं मुश्किल नहीं दिख रहा हूं), इसलिए यह आपके लिए सीमित / कोई परिणाम नहीं है।

ज़िप करना

इस सवाल में ओउ का जवाब उत्कृष्ट है, मुझे याद है कि एआई का अध्ययन करने वाली इन तकनीकों के बारे में पढ़ना पसंद है। यह कॉर्पस लेक्सिकॉन की तुलना में काफी प्रभावी है।

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

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

पारदर्शिता

फिर से मैं अनिश्चित हूं कि कुछ छवि प्रकार, gif png आदि के लिए पारदर्शिता डेटा कैसे संग्रहीत किया जाता है, लेकिन यह निष्कर्षण योग्य होगा और आपके डेटा सेट पारदर्शिता के साथ तुलना करने के लिए प्रभावी सरलीकृत कट आउट के रूप में काम करेगा।

संकेत दे रहा है

एक छवि सिर्फ एक संकेत है। यदि आप एक स्पीकर से एक शोर खेलते हैं, और आप दूसरे स्पीकर में ठीक उसी वॉल्यूम पर सही सिंक में विपरीत शोर खेलते हैं, तो वे एक दूसरे को रद्द कर देते हैं।

वैकल्पिक शब्द
(स्रोत: themotorreport.com.au )

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

हालांकि, दो छवियों पर विचार करें जो समान हैं, उनमें से एक को छोड़कर उस पर लागू उज्ज्वल प्रभाव है:

वैकल्पिक शब्द
(स्रोत: mcburrz.com )

उनमें से एक को निकालना, फिर इसे दूसरे में जोड़ना एक तटस्थ कैनवास के परिणामस्वरूप नहीं होगा, जिसे हम लक्ष्य कर रहे हैं। हालाँकि, दोनों मूल चित्रों से पिक्सेल की तुलना करते समय, हम निश्चित रूप से दोनों के बीच स्पष्ट संबंध देख सकते हैं।

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

ट्री डेटा संरचनाएँ

पहले तो ये समस्या के लिए उपयुक्त नहीं लगते, लेकिन मुझे लगता है कि वे काम कर सकते थे।

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

यह शायद काम नहीं करेगा, लेकिन यह एक विचार है। Trie आंकड़ा संरचना उदाहरण एक dictionarty के लिए, भंडारण शब्दकोशों में महान है। यह एक उपसर्ग वृक्ष है। शायद एक त्रिभुज के निर्माण के लिए एक लेक्सिकॉन के बराबर छवि बनाना, (फिर से मैं केवल रंगों के बारे में सोच सकता हूं)। यदि आपने 300x300 की छवि को 5x5 वर्ग में घटा दिया है, तो प्रत्येक 5x5 वर्ग को रंगों के अनुक्रम में विघटित करें, जिसके परिणामस्वरूप आप डेटा से एक ट्राइ का निर्माण कर सकते हैं। यदि 2x2 वर्ग में है:

FFFFFF|000000|FDFD44|FFFFFF

हमारे पास एक बहुत ही अनोखा ट्राई कोड है जो 24 स्तरों को बढ़ाता है, स्तरों को बढ़ाता / घटाता है (IE हमारे उप वर्ग के आकार को कम / बढ़ाता है) अधिक सटीक परिणाम प्राप्त कर सकता है।

त्रिकोणीय पेड़ों की तुलना करना काफी आसान होना चाहिए, और संभव प्रभावी परिणाम प्रदान कर सकता है।

अधिक विचार

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

माना जाता है कि बनावट के उपाय हैं: कॉक्रोचुरेंस मैट्रीस, ग्रे-लेवल अंतर, बनावट-टोन विश्लेषण, फूरियर स्पेक्ट्रम से प्राप्त विशेषताएं, और गैबर फिल्टर। कुछ फ़ॉयर फ़ीचर और कुछ गैबोर फिल्टर अच्छे विकल्प पाए गए, विशेष रूप से जब वर्गीकरण के लिए एकल आवृत्ति बैंड का उपयोग किया गया था।

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

अन्य बातों पर विचार करें

इस तरह की चीज़ों पर शायद बहुत सारे कागज़ात हैं, इसलिए उनमें से कुछ को पढ़ने में मदद करनी चाहिए, हालांकि वे बहुत तकनीकी हो सकते हैं। यह कंप्यूटिंग में एक अत्यंत कठिन क्षेत्र है, जिसमें कई लोगों द्वारा इसी तरह के काम करने का प्रयास करते हुए कई घंटे व्यर्थ किए जाते हैं। इसे सरल रखना और उन विचारों पर निर्माण करना सबसे अच्छा तरीका होगा। यादृच्छिक मैच दर की तुलना में बेहतर एल्गोरिथ्म बनाने के लिए यह एक कठिन कठिन चुनौती होनी चाहिए, और उस पर सुधार करना शुरू करने के लिए वास्तव में बहुत मुश्किल से प्राप्त करना शुरू होता है।

प्रत्येक विधि को संभवतः परीक्षण और पूरी तरह से ट्विक करने की आवश्यकता होगी, यदि आपके पास तस्वीर के प्रकार के बारे में कोई जानकारी है जिसे आप भी देख रहे होंगे, तो यह उपयोगी होगा। उदाहरण के विज्ञापनों में, उनमें से कई में पाठ होगा, इसलिए पाठ पहचान करना एक आसान और शायद बहुत ही विश्वसनीय तरीका होगा जब विशेष रूप से अन्य समाधानों के साथ मिलकर मैच खोजने का। जैसा कि पहले उल्लेख किया गया है, आपके डेटा सेट के सामान्य गुणों का फायदा उठाने का प्रयास।

वैकल्पिक माप और तकनीकों को मिलाकर प्रत्येक में एक भारित वोट (उनकी प्रभावशीलता पर निर्भर) हो सकता है एक तरीका होगा जिससे आप एक प्रणाली बना सकते हैं जो अधिक सटीक परिणाम उत्पन्न करता है।

यदि इस उत्तर की शुरुआत के अनुसार, कई एल्गोरिदम को नियोजित किया जाता है, तो सभी पॉज़िटिव मिल सकते हैं, लेकिन 20% की झूठी सकारात्मक दर है, यह अन्य एल्गोरिदम के रूप में अन्य एल्गोरिदम के गुणों / शक्तियों / कमजोरियों का अध्ययन करने के लिए ब्याज की होगी। दूसरे से लौटे झूठे सकारात्मक को समाप्त करने में प्रभावी हो।

कभी न खत्म होने वाली परियोजना को पूरा करने के प्रयास में न पड़ने के लिए सावधान रहें, शुभकामनाएँ!


22
बहुत बढ़िया प्रतिक्रिया। एक अच्छी तरह से सोचा और प्रबुद्ध जवाब के लिए यश।
एंड्रयू हब्स

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

हाय टॉम - क्या आप किसी भी ओपन-सोर्स एज डिटेक्शन लाइब्रेरी के बारे में जानते हैं, जावा में प्रीफ?
रिचर्ड एच

1
हाय रिचर्ड, कोई खेद नहीं है, लेकिन मुझे यकीन है कि वहाँ कुछ कर रहे हैं। "जावा गैबर फिल्टर" या "जावा एज डिटेक्शन" के लिए Google पर खोजें और मुझे यकीन है कि आप एक या दो में आ जाएंगे।
टॉम गुलेन

छवि के लिए लिंक ( blog.meetthegimp.orgwp-content / uploads / 2009/04 / 97.jpg ) खराब हो गया है। ध्यान दें कि स्टैकओवरफ़्लो में अब एक छवि होस्टिंग सेवा है।
थॉमसडब्ल्यू

36

पेपर पढ़ें: पोरिकली, फतिह, ओनसेल तुजेल और पीटर मीर। "Cemariance ट्रैकिंग मॉडल अपडेट का उपयोग करके रीमैनियन मैनिफोल्ड्स के माध्यम पर आधारित है"। (2006) IEEE कंप्यूटर विज़न और पैटर्न मान्यता।

मैं इस पेपर में प्रस्तुत तकनीक का उपयोग करके आसन्न वेबकैम से कैप्चर की गई छवियों में अतिव्यापी क्षेत्रों का पता लगाने में सफल रहा। मेरा सहसंयोजक मैट्रिक्स सोबेल, कैनी और सुसान पहलू / एज डिटेक्शन आउटपुट, साथ ही साथ मूल ग्रेस्केल पिक्सल से बना था।


1
@ सटोरू लॉजिक: गूगल सर्च पेपर पर हिट शो: google.com/…
निक

34

एक विचार:

  1. की-स्केल और ट्रांसफ़ॉर्मर खोजने के लिए की-पॉइंट डिटेक्टरों का उपयोग करें। छवि में कुछ बिंदुओं के अपरिवर्तनीय विवरणक (जैसे SIFT, SURF, GLOH, या LESH)।
  2. दोनों छवियों (जैसे पैनोरमा सिलाई) से समान विवरणकों के साथ कीपॉइंट्स को संरेखित करने का प्रयास करें, यदि आवश्यक हो तो कुछ छवि को बदलने की अनुमति दें (जैसे स्केल और रोटेट, या लोचदार स्ट्रेचिंग)।
  3. यदि कई कीपॉइंट अच्छी तरह से संरेखित होते हैं (ऐसा परिवर्तन मौजूद होता है, तो कीप संरेखण त्रुटि कम है; या "ऊर्जा" कम है, आदि), आपकी संभावना इसी तरह की छवियां हैं।

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

प्रकार:

  • बिंदुओं के बजाय किनारों या अन्य विशेषताओं का पता लगाएं।

2
मुझे लगता है कि यह सही तरीका है। बस एक विवरण: SIFT, SURF, GLOH मुख्य बिंदु डिटेक्टर नहीं हैं। वे मुख्य विवरणकर्ता हैं। कॉमन कीपिंग डिटेक्टर (स्केल इनवेरिएंट) DoG, हैरिस या ईजेनवेल्यू डिटेक्टर होते हैं।
निकी

चरण 2 के लिए, आप निकटतम पड़ोसियों का उपयोग कर सकते हैं, जो वर्णनकर्ताओं के बीच यूक्लिडियन दूरी का उपयोग करते हैं
MobileCushion

15

यह वास्तव में बहुत कम सरल है जितना लगता है :-) निक का सुझाव एक अच्छा है।

आरंभ करने के लिए, ध्यान रखें कि किसी भी सार्थक तुलना विधि अनिवार्य रूप से छवियों को एक अलग रूप में परिवर्तित करके काम करेगी - एक ऐसा रूप जो समान सुविधाओं को बाहर निकालना आसान बनाता है। आमतौर पर, यह सामान बहुत हल्का पढ़ने के लिए नहीं


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

http://en.wikipedia.org/wiki/RGB_color_space
http://upvector.com/index.php?section=tutorials&subsection=tutorials/colorspace


एक अन्य उदाहरण में Hough Transform नामक कुछ चीज़ शामिल है। यह परिवर्तन अनिवार्य रूप से एक छवि को लाइनों के एक सेट में विघटित करता है। फिर आप प्रत्येक छवि में कुछ 'सबसे मजबूत' लाइनें ले सकते हैं और देख सकते हैं कि क्या वे लाइन में हैं। आप रोटेशन और स्केलिंग की भरपाई करने के लिए कुछ अतिरिक्त काम कर सकते हैं - और इस मामले में, चूंकि कुछ पंक्तियों की तुलना करना संपूर्ण चित्रों के समान करने की तुलना में कम कम्प्यूटेशनल काम है - यह इतना बुरा नहीं होगा।

http://homepages.inf.ed.ac.uk/amos/hough.html
http://rkb.home.cern.ch/rkb/AN16pp/node122.html
http://en.wikipedia.org/wiki/ Hough_transform


8

आपके द्वारा वर्णित रूप में, समस्या कठिन है। क्या आप कॉपी के रूप में इमेज के हिस्से की कॉपी, पेस्ट को दूसरी बड़ी इमेज में मानते हैं? आदि।

यदि आप एक कदम पीछे ले जाते हैं, तो यह हल करना आसान है यदि आप मास्टर छवियों को वॉटरमार्क करते हैं। आपको कोड को छवि में एम्बेड करने के लिए वॉटरमार्किंग योजना का उपयोग करना होगा। कुछ लोगों द्वारा सुझाए गए निम्न-स्तरीय दृष्टिकोण (एज डिटेक्शन आदि) के विपरीत कदम उठाने के लिए, वाटरमार्किंग विधि बेहतर है क्योंकि:

यह सिग्नल प्रोसेसिंग हमलों के लिए प्रतिरोधी है enhance सिग्नल एन्हांसमेंट - पैनापन, इसके विपरीत, आदि processing फ़िल्टरिंग - मंझला, कम पास, उच्च पास, आदि itive Additive शोर - गाऊसी, वर्दी, आदि y हानिपूर्ण संपीड़न - जेपीईजी, एमपीईजी, आदि।

यह ज्यामितीय हमलों के लिए प्रतिरोधी है ine Affine transforms - डेटा में कमी - क्रॉपिंग, क्लिपिंग, आदि ions यादृच्छिक स्थानीय विकृतियाँ ort वारपिंग

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


5

यह सिर्फ एक सुझाव है, यह काम नहीं कर सकता है और मैं इस पर कॉल करने के लिए तैयार हूं।

यह झूठी सकारात्मकता उत्पन्न करेगा, लेकिन उम्मीद है कि गलत नकारात्मक नहीं।

  1. दोनों छवियों का आकार बदलें ताकि वे एक ही आकार के हों (मेरा मानना ​​है कि दोनों छवियों में चौड़ाई के अनुपात अनुपात समान हैं)।

  2. दोषरहित संपीड़न एल्गोरिथ्म (जैसे gzip) के साथ दोनों छवियों के बिटमैप को संपीड़ित करें।

  3. उन फ़ाइलों के जोड़े खोजें जिनके समान फ़ाइल आकार हैं। उदाहरण के लिए, आप केवल उन फ़ाइलों की प्रत्येक जोड़ी को क्रमबद्ध कर सकते हैं जिनके द्वारा फ़ाइल आकार समान हैं और शीर्ष X को पुनः प्राप्त करते हैं।

जैसा कि मैंने कहा, यह निश्चित रूप से झूठी सकारात्मकता उत्पन्न करेगा, लेकिन उम्मीद है कि झूठी नकारात्मक नहीं। आप इसे पांच मिनट में लागू कर सकते हैं, जबकि पोरीकिल एट। अल। शायद व्यापक काम की आवश्यकता होगी।


मुझे यह समाधान बहुत पसंद है, इसे लागू करना आसान है और मुझे लगता है कि यह यादृच्छिक पहचान दर से बेहतर होगा
टॉम गुलेन

यह एक सवाल है: क्या यह काम करता है अगर कॉपी को एक अलग रिज़ॉल्यूशन के साथ सहेजा गया है?
डॉ। बेलिसियस

4

मेरा मानना ​​है कि यदि आप हर संभव अभिविन्यास और नकारात्मक संस्करणों के लिए दृष्टिकोण को लागू करने के लिए तैयार हैं, तो छवि पहचान के लिए एक अच्छी शुरुआत (अच्छी विश्वसनीयता के साथ) eigenfaces का उपयोग करना है: http://en.wikipedia.org/wiki/Eigenface

एक और विचार दोनों छवियों को उनके घटकों के वैक्टर में बदलना होगा। ऐसा करने का एक अच्छा तरीका एक वेक्टर बनाना है जो x * y आयामों में संचालित होता है (x आपकी छवि की चौड़ाई और ऊँचाई जा रहा है), प्रत्येक आयाम के लिए मान के साथ (x, y) पिक्सेल मान पर लागू होता है। फिर दो श्रेणियों के साथ K- निकटतम पड़ोसी का एक संस्करण चलाएं: मैच और कोई मैच नहीं। यदि यह मूल छवि के पर्याप्त रूप से करीब है, तो यह मैच श्रेणी में फिट होगा, यदि नहीं तो यह नहीं होगा।

K निकटतम पड़ोसी (KNN) यहां पाए जा सकते हैं, वेब पर इसकी अन्य अच्छी व्याख्याएँ भी हैं: http://en.wikipedia.org/wiki/K-nearest_neighbor_algorithm

KNN के लाभ यह है कि आप जितने अधिक वेरिएंट की मूल छवि से तुलना कर रहे हैं, एल्गोरिथ्म उतना ही सटीक होगा। नकारात्मक पक्ष यह है कि आपको सिस्टम को प्रशिक्षित करने के लिए छवियों की एक सूची की आवश्यकता है।


1
एक अच्छा विचार है, लेकिन केवल अगर चेहरे डेटा में मौजूद हैं। इसके अलावा यह लोगों की पहचान करता है, स्थितियों की नहीं। एक पेशेवर अभिनेता, जो कई प्रकाशनों में काम करता है, बहुत सारी झूठी सकारात्मकता पैदा करेगा।
टॉम गुलेन

जब तक मैं आपके उपयोग के इरादे को गलत नहीं समझ
लेता

वास्तव में मेरा मानना ​​है कि एल्गोरिथ्म विषय की परवाह किए बिना काम करता है, इसलिए यदि आप पेड़ों की तुलना कर रहे थे तो यह उपयोगी भी होगा। यह सिर्फ Eigenfaces कहलाने के लिए होता है क्योंकि यह शास्त्रीय रूप से चेहरे की पहचान से जुड़ा हुआ है। जब तक खोजे जाने वाले आइटम में वही समग्र सुविधाएँ होती हैं, जिस आइटम की आप उससे तुलना कर रहे हैं, तब भी काम करना चाहिए।
निक उडेल

पिछली टिप्पणी में जोड़ने के लिए बहुत लंबा: इसके अलावा: Eigenfaces पूरी छवि की तुलना करता है, न कि केवल स्क्रीन पर चेहरे। विकिपीडिया पर उदाहरण केवल फसली चेहरे का उपयोग करते हैं क्योंकि पारंपरिक अनुप्रयोग चेहरे की पहचान है, जिसके लिए केवल चेहरा उपयोगी है। यदि आपका अभिनेता अलग-अलग स्थिति में दिखाई देता है, तो इसे अलग-अलग चिह्नित किया जाएगा।
निक उदेल

1
मुझे संदेह है कि कच्चे पिक्सेल मूल्यों पर सीधे KNN को लागू करने से बहुत मदद मिलेगी। छोटे अनुवाद / घुमाव आमतौर पर कच्चे पिक्सेल मूल्यों में भारी अंतर पैदा करते हैं, खासकर अगर तस्वीर में तेज विरोधाभास या पतली रेखाएं हों। एक ही चित्र के मनमाने ढंग से रूपांतरित रूप वास्तव में उस स्थान में एक दूसरे के करीब नहीं हैं (वे गुच्छों में नहीं आते हैं), और KNN बहुत अच्छी तरह से काम नहीं करेगा। मुझे लगता है कि यह छवि हिस्टोग्राम्स या छवि के कुछ अन्य ट्रांसफॉर्म-इनवेरिएंट प्रतिनिधित्व पर अच्छी तरह से काम कर सकता है।
निकी

1

यदि आप अपनी छवियों की अवैध प्रतियों का पता लगाने के लिए एक अलग दृष्टिकोण पर विचार करने के लिए तैयार हैं, तो आप वॉटरमार्किंग पर विचार कर सकते हैं । (1.4 से)

... गुणवत्ता की हानि के बिना डिजिटल ऑब्जेक्ट में कॉपीराइट जानकारी सम्मिलित करता है। जब भी किसी डिजिटल ऑब्जेक्ट का कॉपीराइट प्रश्न में होता है, तो यह जानकारी सही मालिक की पहचान करने के लिए निकाली जाती है। कॉपीराइट धारक की पहचान के साथ मूल खरीदार की पहचान को सांकेतिक शब्दों में बदलना भी संभव है, जो किसी भी अनधिकृत प्रतियों का पता लगाने की अनुमति देता है।

हालांकि यह एक जटिल क्षेत्र भी है, ऐसी तकनीकें हैं जो वॉटरमार्क जानकारी को स्थूल छवि परिवर्तन के माध्यम से बनाए रखने की अनुमति देती हैं: (1.9 से)

... वाजिब ताकत का कोई भी संकेत परिवर्तन वॉटरमार्क नहीं निकाल सकता है। इसलिए वॉटरमार्क हटाने के लिए तैयार एक समुद्री डाकू तब तक सफल नहीं होगा जब तक कि वे वाणिज्यिक हित के लिए दस्तावेज़ पर बहुत अधिक बहस न करें।

बेशक, फेक इस दृष्टिकोण को लागू करने का आह्वान करता है: "... बहुत चुनौतीपूर्ण" लेकिन अगर आप इसके साथ सफल होते हैं, तो आपको एक उच्च विश्वास मिलता है कि छवि एक प्रति है या नहीं, एक प्रतिशत संभावना के बजाय।


भारी संपादन के बाद वॉटरमार्किंग कैसे बनी रहती है, इस पर कोई और जानकारी? बहुत दिलचस्प लगता है।
टॉम गुलेन

1

यदि आप लिनक्स चला रहे हैं तो मैं दो उपकरण सुझाऊंगा:

align_image_stack पैकेज हगिन-टूल्स से - एक कमांडलाइन प्रोग्राम है जो स्वचालित रूप से रोटेशन, स्केलिंग और अन्य विकृतियों को ठीक कर सकता है (यह ज्यादातर एचडीआर फोटोग्राफी के लिए अभिप्रेत है, लेकिन वीडियो फ्रेम और अन्य दस्तावेजों के लिए भी काम करता है)। अधिक जानकारी: http://hugin.sourceforge.net/docs/manual/Align_image_stack.html

पैकेज इमेजमैगिक से तुलना करें - एक प्रोग्राम जो दो छवियों में विभिन्न पिक्सेल की मात्रा को ढूंढ और गिन सकता है। यहाँ एक साफ ट्यूटोरियल है: http://www.imagemagick.org/Usage/compare/ uising -fuzz N% से आप त्रुटि सहिष्णुता बढ़ा सकते हैं। N जितना अधिक होगा उतनी ही उच्च त्रुटि सहिष्णुता अभी भी दो पिक्सेल को समान रूप से गिनता है।

align_image_stack को किसी भी ऑफसेट को सही करना चाहिए ताकि तुलना कमांड में वास्तव में समान पिक्सेल का पता लगाने का मौका हो।

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