image-processing मैथमैटिका के साथ वाल्डो कैसे ढूंढूं?




wolfram-mathematica (4)

यह सप्ताहांत में मुझे परेशान कर रहा था: वाल्डो कहां हल करने का एक अच्छा तरीका क्या है ? [उत्तरी अमेरिका के बाहर 'वाली' ] गणित (छवि प्रसंस्करण और अन्य कार्यक्षमता) का उपयोग कर पहेली?

यहां तक ​​कि मेरे पास अब तक एक ऐसा कार्य है, जो कुछ गैर-लाल रंगों को कम करके दृश्य जटिलता को कम करता है:

whereIsWaldo[url_] := Module[{waldo, waldo2, waldoMask},
    waldo = Import[url];
    waldo2 = Image[ImageData[
        waldo] /. {{r_, g_, b_} /;
          Not[r > .7 && g < .3 && b < .3] :> {0, 0,
          0}, {r_, g_, b_} /; (r > .7 && g < .3 && b < .3) :> {1, 1,
          1}}];
    waldoMask = Closing[waldo2, 4];
    ImageCompose[waldo, {waldoMask, .5}]
]

और एक यूआरएल का एक उदाहरण जहां यह 'काम करता है':

whereIsWaldo["http://www.findwaldo.com/fankit/graphics/IntlManOfLiterature/Scenes/DepartmentStore.jpg"]

(वाल्डो नकद रजिस्टर द्वारा है):


मैं गणित नहीं जानता। । । बहुत बुरा। लेकिन मुझे सबसे अधिक भाग के लिए उपरोक्त उत्तर पसंद है।

अभी भी जवाब देने के लिए अकेले पट्टियों पर भरोसा करने में एक बड़ी गड़बड़ी है (मुझे व्यक्तिगत रूप से एक मैन्युअल समायोजन के साथ कोई समस्या नहीं है)। यहां एक उदाहरण है ( here ब्रेट चैंपियन द्वारा सूचीबद्ध) प्रस्तुत किया गया है जो दिखाता है कि वे कभी-कभी शर्ट पैटर्न को तोड़ देते हैं। तो फिर यह एक और जटिल पैटर्न बन जाता है।

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

छवि पर एक सफेद संतुलन प्राप्त करें, और छवि से लाल संतुलन लाल करें। मेरा मानना ​​है कि वाल्डो हमेशा एक ही मूल्य / रंग है, लेकिन छवि स्कैन या खराब प्रतिलिपि से हो सकती है। फिर हमेशा उन रंगों की एक सरणी देखें जो वाल्डो वास्तव में है: लाल, सफेद, गहरा भूरा, नीला, आड़ू, {जूता रंग}।

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

तो, इस तस्वीर में लोगों की ऊंचाई प्राप्त करने के लिए यादृच्छिक लोगों को ढूंढें। छवि में यादृच्छिक बिंदुओं पर चीजों की एक गुच्छा की औसत ऊंचाई को मापें (एक साधारण रूपरेखा काफी अलग लोगों का उत्पादन करेगी)। यदि प्रत्येक चीज एक दूसरे से कुछ मानक विचलन के भीतर नहीं है, तो उन्हें अभी अनदेखा कर दिया जाता है। ऊंचाई की औसत छवि की ऊंचाई पर तुलना करें। यदि अनुपात बहुत अच्छा है (उदाहरण के लिए, 1: 2, 1: 4, या इसी तरह के करीब), फिर पुन: प्रयास करें। कुछ मानक विचलन के बाहर किसी भी औसत को छोड़कर, यह सुनिश्चित करने के लिए कि नमूने सभी एक साथ निकट हैं, यह सुनिश्चित करने के लिए 10 (?) बार चलाएं। गणित में संभव है?

यह आपका वाल्डो आकार है। वाल्सो पतला है, इसलिए आप कुछ 5: 1 या 6: 1 (या जो भी) एचटी: wd की तलाश में हैं। हालांकि, यह पर्याप्त नहीं है। यदि वाल्डो आंशिक रूप से छुपा हुआ है, तो ऊंचाई बदल सकती है। तो, आप लाल-सफेद के एक ब्लॉक की तलाश में हैं जो ~ 2: 1 है। लेकिन वहां अधिक संकेतक होना चाहिए।

  1. वाल्डो में चश्मे हैं। लाल-सफेद से ऊपर दो सर्किल 0.5: 1 के लिए खोजें।
  2. नीली पैंट। लाल-सफेद के अंत और उसके पैरों की दूरी के बीच किसी भी दूरी के भीतर एक ही चौड़ाई पर नीले रंग की कोई भी मात्रा। ध्यान दें कि वह अपनी शर्ट कम पहनता है, इसलिए पैर बहुत करीब नहीं हैं।
  3. टोपी। लाल-सफेद किसी भी दूरी को उसके सिर के ऊपर से दोगुनी तक। ध्यान दें कि इसमें नीचे काले बाल होना चाहिए, और शायद चश्मा होना चाहिए।
  4. लंबी आस्तीन। मुख्य लाल-सफेद से कुछ कोण पर लाल-सफेद।
  5. काले बाल।
  6. जूता रंग मुझे रंग नहीं पता।

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

इससे प्रक्रियाओं को संसाधित करने में कमी आएगी।

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

इस पर कोड कैसे करें इस पर कोई विचार?

संपादित करें:

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

इसके बाद, सभी लाल क्षेत्रों को गैर-लाल, फैलाएं (बहुत) छोड़ दें, फिर कंकालनाइज़ करें और छिड़क दें। यह हिस्सा संभावित वाल्डो केंद्र बिंदुओं की एक सूची देगा। यह अन्य सभी वाल्डो रंग खंडों की तुलना करने के लिए मार्कर होगा।

यहां से, कंकाल वाले लाल क्षेत्रों (पतला नहीं) का उपयोग करके, प्रत्येक क्षेत्र में रेखाओं की गिनती करें। यदि सही संख्या है (चार, दाएं?), यह निश्चित रूप से एक संभावित क्षेत्र है। यदि नहीं, तो मुझे लगता है कि इसे केवल बाहर निकालें (एक वाल्डो केंद्र होने के नाते ... यह अभी भी उसकी टोपी हो सकती है)।

फिर जांच करें कि ऊपर एक चेहरा आकार है, ऊपर एक बाल बिंदु, नीचे पैंट बिंदु, नीचे जूते अंक, और इसी तरह।

अभी तक कोई कोड नहीं - अभी भी दस्तावेज़ पढ़ रहा है।


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

वाल्डो वर्गीकृत प्रशिक्षण के साथ दो चुनौतियां होंगी:

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

एक त्वरित Google छवि खोज कुछ अच्छे डेटा को बदल देती है - मुझे कुछ प्रशिक्षण उदाहरण एकत्र करने और अभी इसे कोड करने के लिए जाना होगा!

हालांकि, यहां तक ​​कि एक मशीन लर्निंग दृष्टिकोण (या @IND द्वारा सुझाए गए नियम-आधारित दृष्टिकोण) वाल्डोस की भूमि जैसी छवि के लिए संघर्ष करेंगे!


मुझे वाल्डो मिला है!

मैंने इसे कैसे किया है

सबसे पहले, मैं उन सभी रंगों को फ़िल्टर कर रहा हूं जो लाल नहीं हैं

waldo = Import["http://www.findwaldo.com/fankit/graphics/IntlManOfLiterature/Scenes/DepartmentStore.jpg"];
red = Fold[ImageSubtract, #[[1]], Rest[#]] &@ColorSeparate[waldo];

इसके बाद, मैं शर्ट में लाल और सफेद संक्रमण खोजने के लिए इस छवि के सहसंबंध को एक साधारण काले और सफेद पैटर्न के साथ गणना कर रहा हूं।

corr = ImageCorrelate[red, 
   [email protected][ConstantArray[1, {2, 4}], ConstantArray[0, {2, 4}]], 
   NormalizedSquaredEuclideanDistance];

मैं छवि में पिक्सल को पर्याप्त उच्च सहसंबंध के साथ चुनने के लिए Binarize का उपयोग करता Binarize और उनके चारों ओर सफेद सर्कल खींचता हूं ताकि वे Dilation का उपयोग कर उन पर जोर दे सकें।

pos = Dilation[ColorNegate[Binarize[corr, .12]], DiskMatrix[30]];

मुझे स्तर के साथ थोड़ा सा खेलना पड़ा। यदि स्तर बहुत अधिक है, तो बहुत से झूठे सकारात्मक विकल्प चुने जाते हैं।

आखिरकार मैं परिणाम को ऊपर प्राप्त करने के लिए मूल छवि के साथ इस परिणाम को जोड़ रहा हूं

found = ImageMultiply[waldo, ImageAdd[ColorConvert[pos, "GrayLevel"], .5]]

मेरा अनुमान है कि "ऐसा करने के लिए बुलेटप्रूफ तरीका" (लगता है कि सीआईए किसी भी उपग्रह छवि में वाल्डो को किसी भी समय, प्रतिस्पर्धी तत्वों के बिना प्रतिस्पर्धी तत्वों के बिना केवल एक छवि नहीं ढूंढता) ... मैं वाल्डो की कई छवियों पर बोल्टज़मान मशीन को प्रशिक्षित करता हूं - उसके सभी बैठे बैठे, खड़े हो गए, प्रक्षेपित, आदि; शर्ट, टोपी, कैमरा, और सभी काम करता है। आपको वाल्डोस के बड़े कॉर्पस की आवश्यकता नहीं है (शायद 3-5 पर्याप्त होगा), लेकिन उतना ही बेहतर होगा।

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

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





wolfram-mathematica