opencv - छवि प्रसंस्करण में मुख्य बिंदु क्या हैं?




image-processing sift (2)

उदाहरण के लिए OpenCV का उपयोग करते समय, SIFT या SURF जैसे एल्गोरिदम का उपयोग अक्सर की-पॉइंट का पता लगाने के लिए किया जाता है। मेरा सवाल यह है कि वास्तव में ये की-पॉइंट क्या हैं?

मैं समझता हूं कि वे एक छवि में "रुचि के अंक" हैं। मुझे यह भी पता है कि वे बड़े पैमाने पर आक्रामक हैं और परिपत्र हैं।

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


मैं SURF से परिचित नहीं हूं, लेकिन मैं आपको SIFT के बारे में बता सकता हूं, जो SURF पर आधारित है। मैंने आखिर में SURF के बारे में कुछ नोट्स दिए, लेकिन मुझे सारी जानकारी नहीं है।

SIFT लक्ष्य किसी छवि में अत्यधिक विशिष्ट स्थान (या की- पॉइंट ) खोजना है। स्थान केवल छवि पर 2 डी स्थान नहीं हैं, लेकिन छवि के स्केल स्थान में स्थान हैं , जिसका अर्थ है कि उनके तीन निर्देशांक हैं: x , y , और स्केल । SIFT कीपॉइंट खोजने की प्रक्रिया है:

  1. स्केल स्पेस बनाने के लिए अलग-अलग ब्लर चौड़ाई और सैंपलिंग रेट्स के साथ इमेज को ब्लर और रीप्ले करें
  2. विभिन्न पैमानों पर बूँदें पता लगाने के लिए गाऊसी विधि के अंतर का उपयोग करें; बूँद केंद्र किसी दिए गए x , y और पैमाने पर हमारे मुख्य बिंदु बन जाते हैं
  3. प्रत्येक कुंजीपॉइंट को अपने आस-पास के प्रत्येक पिक्सेल के लिए ग्रेडिएंट ओरिएंटेशन के हिस्टोग्राम की गणना करके और ओरिएंटेशन बिन को सबसे अधिक संख्या के साथ चुनकर एक अभिविन्यास प्रदान करें।
  4. 16 स्थानीय पड़ोस में पिक्सेल के ढाल झुकाव के आधार पर प्रत्येक कीपॉइंट को 128-आयामी सुविधा वेक्टर असाइन करें

चरण 2 हमें पैमाने पर आक्रमण देता है, चरण 3 हमें रोटेशन इन्वेरिसेन देता है, और चरण 4 हमें एक "फिंगरप्रिंट" प्रकार देता है जिसका उपयोग कुंजी बिंदु की पहचान करने के लिए किया जा सकता है। साथ में वे किसी भी अभिविन्यास में एक ही सुविधा की घटनाओं से मेल खाने के लिए और कई छवियों में पैमाने पर उपयोग किए जा सकते हैं।

SURF का लक्ष्य SIFT के समान लक्ष्यों को पूरा करना है लेकिन गति बढ़ाने के लिए कुछ चतुर चालों का उपयोग करता है।

ब्लॉब डिटेक्शन के लिए यह हेसियन विधि के निर्धारक का उपयोग करता है। वर्टिकल ओरिएंटेशन को हॉर वेलेट्स की क्षैतिज और ऊर्ध्वाधर प्रतिक्रियाओं की जांच करके पाया जाता है। फ़ीचर डिस्क्रिप्टर SIFT के समान है, 16 स्थानीय पड़ोस में पिक्सेल के झुकाव को देखते हुए, लेकिन 64-आयामी वेक्टर में परिणाम होता है।

SURF फीचर्स SURF फीचर्स की तुलना में 3 गुना तेज हो सकते हैं, फिर भी ज्यादातर स्थितियों में उतने ही मजबूत हैं।

सन्दर्भ के लिए:

एक अच्छा SIFT ट्यूटोरियल

SURF से परिचय


वे कुछ बहुत अच्छे सवाल हैं। आइए एक-एक करके हर बिंदु को निपटाएँ:

मेरा सवाल यह है कि वास्तव में ये की-पॉइंट क्या हैं?

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

स्रोत: मॉड्यूल 'ऑब्जेक्ट में कोई विशेषता नहीं है' drawMatches 'opencv python

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

इसलिए, इससे आपको जो लेना चाहिए वह यह है कि ये उस छवि के बिंदु हैं जो दिलचस्प हैं और यह पाया जाना चाहिए कि कोई भी बात नहीं है कि छवि कैसे विकृत है।

मैं समझता हूं कि वे एक छवि के "रुचि के अंक" के कुछ प्रकार हैं। मुझे यह भी पता है कि वे बड़े पैमाने पर आक्रमणकारी हैं और मुझे पता है कि वे परिपत्र हैं।

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

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

डिस्क्रिप्टर्स मुख्य रूप से कीपॉइंट के स्केल और ओरिएंटेशन दोनों से संबंधित हैं। जिन कीपॉइंट्स को हमने देखा है, वे उस कॉन्सेप्ट को डाउन कर चुके हैं, लेकिन डिस्क्रिप्टर पार्ट की जरूरत है, अगर यह हमारा उद्देश्य अलग-अलग इमेजेज में की-पॉइंट्स के बीच मैच करना है। अब, "परिपत्र" से आपका क्या मतलब है ... यह उस पैमाने से संबंधित है जिस बिंदु पर पता लगाया गया था। उदाहरण के लिए इस छवि को ले लीजिए जो VLFeat टूलबॉक्स ट्यूटोरियल से ली गई है:

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

इसके अलावा मुझे पता चला कि उनके पास अभिविन्यास है लेकिन मैं समझ नहीं सका कि वास्तव में यह क्या है। यह एक कोण है लेकिन त्रिज्या और कुछ के बीच है?

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

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

उम्मीद है की यह मदद करेगा!





keypoint