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


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

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

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"]

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

Mathematica graphic


1511
2017-12-12 18:29


मूल


अब मुझे "नकद रजिस्टर कहां है" का खेल खेलना होगा ... - abcd
@योडा - ऊपरी बाएं, बहुत सारे जूते के साथ टेबल, एक नकद रजिस्टर और टेबल के कोने के पास वाल्डो। - Arnoud Buzing
गणित प्रस्ताव को विभिन्न कारणों से बंद कर दिया गया था, हालांकि वे हमें यह देखने की इजाजत दे रहे हैं कि क्या हम इसे बनाकर चला सकते हैं नया। यदि आप चाहें तो हम आपकी मदद चाहते हैं। - rcollyer
कंप्यूटर दृष्टि में पीएचडी छात्र के रूप में मैं इसे एक शॉट देने के लिए बहुत मोहक हूं ... लेकिन मुझे विरोध करना चाहिए। इसके लायक होने के लिए मैं ओरिएंटेड ग्रेडियेंट्स के हिस्टोग्राम + स्लाइडिंग विंडो एसवीएम के रूप में जाना चाहूंगा इस बहुत प्रभावशाली काम (चेतावनी: पीडीएफ)। - dimatura
"कहाँ है वैली">। < - Lightness Races in Orbit


जवाब:


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

waldo had been found

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

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

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

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

corr = ImageCorrelate[red, 
   Image@Join[ConstantArray[1, {2, 4}], ConstantArray[0, {2, 4}]], 
   NormalizedSquaredEuclideanDistance];

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

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

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

अंततः मैं परिणाम को प्राप्त करने के लिए मूल परिणाम के साथ इस परिणाम को जोड़ रहा हूं

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

1624
2017-12-12 19:32



@ माइकबेंटगेई जबकि हेइक का समाधान बहुत अच्छा है, मैं इसे पैकेज में इतना तेज़ नहीं करूँगा WhereIsWaldo कार्य, क्योंकि यह एक सामान्य समाधान नहीं है। हेइक ने खुद को इंगित किया है कि सकारात्मक होने से पहले स्तरों को चारों ओर खेला जाना चाहिए। मेरा मतलब यह देखने के लिए, अपने पैक किए गए फ़ंक्शन को चालू करें "http://www.findwaldo.com/fankit/graphics/IntlManOfLiterature/Scenes/AtTheBeach.jpg" यह इस के साथ कठिन है। - abcd
यह छवि ट्रिकियर है: वाल्डो। मुझे लगता है कि, ऐसा कुछ है जो संभावित वाल्डोस को हाइलाइट कर सकता है अभी भी उपयोगी है ('उपयोगी' की कुछ परिभाषा के लिए) (यह मुझे कुछ चीजों की याद दिलाता है आईफोटो कभी-कभी हमारे फोटो संग्रह में एक चेहरा के रूप में पहचाना जाएगा ...) - Brett Champion
कृपया यह मेटा पोस्ट देखें: meta.stackexchange.com/questions/116401/... - Bill the Lizard
ऐसा लगता है कि कहां वाल्डो के नियमों को गलत समझा गया है। ये है स्पष्ट रूप से धोखा दे। - Stefan Kendall
हालांकि यह एक अच्छा हैक है, यह सिर्फ काम नहीं करता है। इसके लिए मैन्युअल ट्यूनिंग की आवश्यकता होती है और केवल एक छवि पर काम करता है। मुझे समझ में नहीं आता कि यह क्यों उखाड़ फेंक दिया गया है और यहां तक ​​कि एक जवाब के रूप में भी चुना गया है। यह बेहतर कामकाजी तरीकों के साथ जवाब देने की कोशिश करने से किसी और को हतोत्साहित करता है। - sam hocevar


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

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

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


140
2017-12-12 20:25



इसके लिए पर्याप्त सादे तंत्रिका नेटवर्क पर्याप्त नहीं हैं? इसके अलावा, विकिपीडिया लेख का दावा है कि बोल्टज़मान मशीन व्यावहारिक नहीं हैं। - GClaramunt
कोशिश किए बिना मुझे यकीन नहीं है, लेकिन अगर पर्याप्त पर्याप्त और जटिल पर्याप्त तंत्रिका नेटवर्क कुछ भी के लिए पर्याप्त होना चाहिए। विशेष रूप से पुनरावर्ती के साथ। बोल्टज़मान मशीन डेटा के एक साधारण सरलीकृत सेट को पहचानने के लिए बहुत ही बहुत अच्छी तरह से डेटा के समुद्र में उच्च मात्रा में शोर के साथ बहुत अच्छी तरह से काम करती है। - Gregory Klopper
ज़िप कोड को बोल्टज़मान मशीनों के साथ हर समय पढ़ा जाता है, और छत के माध्यम से मेल डिलीवरी की शुद्धता चली जाती है। - Gregory Klopper


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

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

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

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

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


46
2018-04-01 01:23



एक मशीन लर्निंग-आधारित कंप्यूटर दृष्टि प्रणाली जो वास्तविक दुनिया में "वाल्डो कहां है" समस्या को हल करने का प्रयास करती है (यानी, फ्लिकर पर भीड़ की तस्वीरों में एक विशेष व्यक्ति को ढूंढना) पिछले साल कंप्यूटर विजन और पैटर्न रिकग्निशन कॉन्फ्रेंस में प्रस्तुत किया गया था। वे एक ही दृश्य की कई तस्वीरें का उपयोग करके कुछ 3 डी स्थान जानकारी जोड़कर थोड़ा धोखा देते हैं। - lubar
cs.washington.edu/homes/rahul/data/WheresWaldo.html - lubar
वोट दें। जब मैंने इसे पढ़ा तो मैंने भी वेवलेट सोचा। - davec


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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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


40
2018-01-10 09:36



शायद आप जिस प्रणाली / भाषा से परिचित हैं, उसमें आप अवधारणा का सबूत दिखा सकते हैं। इससे आपको यह महसूस हो जाएगा कि कठिनाइयों में कहां आ सकता है। - Szabolcs
ओह, मैं चुनौती का आनंद ले रहा हूं क्योंकि यह खड़ा है। यह मुझे समुद्र तट पर चलने और रात के खाने के लिए ड्रेसिंग के बीच कुछ करने देता है। - iND
इसलिए। । । डाउनवॉट्स क्यों? यह अन्य सट्टा जवाब से अलग कैसे है? क्या यह एक सुझाव है कि इस सवाल को और गंभीरता से लिया जाना चाहिए? या सिर्फ मेरी जांच में मुझे और गंभीर लगना चाहिए? क्या मेरा दृष्टिकोण वास्तव में गलत है? - iND
मैंने आपको कम नहीं किया और मुझे नहीं लगता कि डाउनवॉट उत्तर देने के ईमानदार प्रयासों के लिए उपयुक्त हैं (जब तक वे गलत जानकारी नहीं देते)। डाउनवॉट्स के लिए सबसे संभावित कारण यह है कि आपने (काफी जटिल ध्वनि) दृष्टिकोण की कोशिश नहीं की है, और एक अच्छा समाधान खोजने के लिए शायद व्यावहारिक प्रयोग की एक अच्छी मात्रा लेनी चाहिए और कई विचारों को सत्तारूढ़ करना होगा। अन्य सट्टा जवाब एक सुझाव देता है सामान्य विधि (एक शुरुआती बिंदु के रूप में) जिसे अतीत में इसी तरह की समस्याओं के लिए उपयोग किया गया है, और इसमें अच्छी मात्रा में साहित्य है। बस क्या हुआ यह बताने की कोशिश कर रहा है। - Szabolcs
स्पष्टीकरण के लिए धन्यवाद। मुझे लगता है कि मैं विचारों के इतिहास पर ध्यान केंद्रित नहीं कर रहा हूं। - iND


ओपनसीवी का उपयोग करके वाल्डो को खोजने के लिए मेरे पास त्वरित समाधान है।

मैंने इस्तेमाल किया टेम्पलेट मिलान वाल्डो खोजने के लिए ओपनसीवी में उपलब्ध फ़ंक्शन।

ऐसा करने के लिए एक टेम्पलेट की आवश्यकता है। तो मैंने मूल छवि से वाल्डो फसल ली और इसे टेम्पलेट के रूप में इस्तेमाल किया।

enter image description here

इसके बाद मैंने फोन किया cv2.matchTemplate() साथ काम करते हैं सामान्यीकृत सहसंबंध गुणांक विधि के रूप में इस्तेमाल किया। यह नीचे एक सफेद क्षेत्र में दिखाया गया है (कहीं ऊपर बाएं क्षेत्र में कहीं भी):

enter image description here

उच्चतम संभावित क्षेत्र की स्थिति का उपयोग किया गया था cv2.minMaxLoc() फ़ंक्शन, जिसे मैंने वाल्डो को हाइलाइट करने के लिए आयत खींचने के लिए उपयोग किया था:

enter image description here


3
2018-04-11 11:11



एसओ के सबसे मशहूर छवि प्रसंस्करण प्रश्नों से निपटने की कोशिश कर रहे हैं? ;) आपका समाधान अच्छा और आसान है, लेकिन इस विशिष्ट छवि के लिए केवल / केवल काम करता है और बी / वाल्डो की सटीक छवि की आवश्यकता होती है जिसे आप पहले खोजना चाहते हैं, जबकि मुझे लगता है कि सवाल किसी भी वाल्डो को किसी भी "वाल्डो छवि कहां" में ढूंढने के बारे में था आप सामान्य खेल खेलेंगे: यह जानने के बिना कि वह पहले जैसा दिखता है। यह सवाल किसी भी तरह से बहुत मजेदार है - Soltius
@ सोलिटस हे ठीक है !!! मैंने इसे विशेष रूप से इस छवि के लिए ही काम किया। विभिन्न छवियों के लिए इसे काम करना हालांकि एक चुनौती होगी !! - Jeru Luke