2011-09-06 13 views
5

तो मेरे पास एक 2-आयामी सरणी है जो एक समन्वय विमान, एक छवि का प्रतिनिधित्व करती है। उस छवि पर, मैं अपने लाल रंग के पिक्सल की तलाश में हूं और अपने कैमरे द्वारा पाये गये सभी लाल पिक्सल के आधार पर एक लाल एलईडी लक्ष्य का स्थान ढूंढ रहा हूं (उम्मीद है)। वर्तमान में, मैं बस लाल पिक्सल के सभी के केन्द्रक पर मेरी क्रॉसहेयर थप्पड़ मारने हूँ:एक ऐरे का भारित केंद्र

// pseudo-code 

for(cycle_through_pixels) 
{ 
    if(is_red(pixel[x][y])) 
    { 
     vals++; // total number of red pixels 
     cx+=x; // sum the x's 
     cy+=y; // sum the y's 
    } 
} 
cx/=vals; // divide by total to get average x 
cy/=vals; // divide by total to get average y 

draw_crosshairs_at(pixel[cx][cy]); // found the centroid 

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

मेरा प्रश्न यह है:

मैं कैसे इस पद्धति एक अधिक भारित केन्द्रक देखने के लिए बदल सकता हूँ? बस रखो, मैं छोटे से बड़े ब्लॉब्स को छोटे से अधिक महत्वपूर्ण बनाना चाहता हूं, संभवतः दूर-दूर छोटे ब्लब्स को पूरी तरह से अनदेखा करना भी चाहता हूं।

+1

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

+0

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

उत्तर

1

आप छवि में connected components पा सकते हैं और केवल उन घटकों को शामिल कर सकते हैं जिनमें आपके केंद्रीकृत कैल्श्यूशन में एक निश्चित सीमा से कुल आकार है।

+0

मैं इस अवधारणा के मूल विचार के साथ आया हूं और सोच रहा हूं कि यह बहुत ही अपमानजनक था, और मुझे कभी पता नहीं था कि इसे Google खोज में क्या कहना है। यह मुझे दिखाने के लिए बहुत बहुत धन्यवाद, जब मुझे मौका मिलता है तो मैं इसे आजमाउंगा। – Andrew

+0

यह एक बहुत ही आम छवि प्रसंस्करण ऑपरेशन है। यदि आप एक छवि प्रसंस्करण टूलकिट का उपयोग कर रहे हैं, तो इसमें एक ऐसा फ़ंक्शन हो सकता है जो पहले से ही करता है। – tkerwin

+0

यह शानदार काम किया! सबसे पहले, इस अवधारणा को लागू करने के लिए मैंने वही किया जो मेरी इच्छा थी: मेरे छोटे फ्लोटिंग क्रॉसहेयर स्क्रीन पर सबसे बड़े ब्लॉब के केंद्र की तरफ रहते हैं, लगभग छोटे हस्तक्षेप को अनदेखा करते हैं और केवल बड़े गलती स्प्लोट पर थोड़ी सी चीजें देते हैं। इसके अलावा, मेरे क्रॉसहेयर अविश्वसनीय रूप से अधिक स्थिर हो गए हैं; जबकि जब भी ड्रोन थोड़ा हिल जाता है या रोशनी बदल जाती है, तो यह स्क्रीन के चारों ओर आसानी से बहती है, इससे पहले कि यह एक गड़बड़ तरीके से चारों ओर कूद जाएगा। – Andrew

1

मुझे लगता है कि सबसे आसान (और शायद भद्दा) उत्तर होगा: केवल पिक्सेल मान की गणना करने के बजाय, लगभग 8 पिक्सेल (कुल 9 में) की गणना करें। अब, प्रत्येक मान 0 से 9 तक हो सकता है, और उसी रंग के साथ ब्लॉब्स के लिए अधिक मूल्य शामिल हैं। अब, vals++ के बजाय आप आस-पास के क्षेत्र में भी पिक्सेल की संख्या से मूल्य बढ़ाएंगे।

+0

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

संबंधित मुद्दे