इमेज प्रोसेसिंग: छवि में एक चतुर्भुज साइनबोर्ड का पता कैसे लगाएं?


14

मैं मोबाइल फोन का उपयोग करके कैप्चर की गई छवि से एक चतुर्भुज साइनबोर्ड का पता कैसे लगा सकता हूं? मैं आयत जैसी आकृतियों का पता कैसे लगा सकता हूं? गोल आयताकार (आकार के कोनों के बजाय गोल कोनों)?

मैं opencv.wrapper का उपयोग कर रहा हूं लेकिन मैं इसके लिए नया हूं।

धन्यवाद।

यहाँ नमूना है: alt text http://www.freeimagehosting.net/uploads/b03442fd36.png

alt text http://www.freeimagehosting.net/uploads/e6b36040e8.png

शोर और कई लाइनों के कारण, मैं यह निर्धारित करने में सक्षम नहीं हूं कि साइनबोर्ड की सीमा रेखा कौन सी है। कभी-कभी मुझे हूप ट्रांसफॉर्मेशन के बाद लाइनों की सीमा मिल सकती है। मैं फँसा हूँ .... इस तरह के परिदृश्य में ...

यह मोबाइल फोन कैमरे से ली गई 2 कच्ची तस्वीरें हैं

alt text http://www.freeimagehosting.net/uploads/6dbd613edf.jpg alt text http://www.freeimagehosting.net/uploads/720da20080.jpg

मुझे यह देखने के लिए फिर से सलाह की जरूरत है कि मैं साइनबोर्ड को बाहर निकालने के लिए छवि को कैसे संसाधित कर सकता हूं?

आपका बहुत बहुत धन्यवाद


2
कीवर्ड: opencv,

हाँ, FTW बदलने के लिए पर्याप्त है!

लेकिन छवि में शोर हैं कि मैं कैसे पता लगा सकता हूं कि साइनबोर्ड की सीमा क्या है

@ xabi123: कठिन परिवर्तन, दहलीज,

1
क्या आप एक नमूना छवि साझा कर सकते हैं?

जवाबों:


7

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

लेकिन: आप जिस चिन्ह की तलाश कर रहे हैं उसमें अन्य विशेषताएं हैं जिनका पता लगाना आसान होना चाहिए:

  • वहाँ साइन बैकग्राउंड में (लगभग) निरंतर चमक होती है
  • यह छवि का एक अपेक्षाकृत बड़ा क्षेत्र लेता है
  • यह छवि के केंद्र के पास है

तो आप कम विपरीत के साथ एक बड़े जुड़े क्षेत्र की तलाश कर रहे हैं। मैंने मैथेमेटिका में प्रूफ-ऑफ-कॉन्सेप्ट एल्गोरिथ्म हैक किया है। (मैं एक OpenCV विशेषज्ञ नहीं हूं, लेकिन जब मैं उन्हें जानता हूं तो संबंधित OpenCV फ़ंक्शन का उल्लेख करूंगा।)

सबसे पहले, मैं प्रत्येक पिक्सेल में ढाल परिमाण का पता लगाने के लिए गाऊसी व्युत्पन्न फिल्टर का उपयोग करता हूं। गाऊसी व्युत्पन्न फिल्टर में एक विस्तृत एपर्चर (इस मामले में 11x11 पिक्सेल) है, इसलिए यह बहुत शोर-असंवेदनशील है। मैं तब = 1 के लिए ढाल छवि को सामान्य करता हूं, इसलिए मैं दोनों नमूनों के लिए एक ही थ्रेसहोल्ड का उपयोग कर सकता हूं।

src = Import["http://www.freeimagehosting.net/uploads/720da20080.jpg"];
pixels = ImageData[ColorConvert[src, "Grayscale"]];
gradient = Sqrt[GaussianFilter[pixels, 5, {1, 0}]^2 + GaussianFilter[pixels, 5, {0, 1}]^2];
gradient = gradient/Mean[Flatten[gradient]];

OpenCV कार्यान्वयन: आप sepFilter2Dवास्तविक फ़िल्टरिंग के लिए उपयोग कर सकते हैं , लेकिन जाहिर है, आपको फ़िल्टर कर्नेल मानों की गणना स्वयं करनी होगी

परिणाम इस तरह दिखता है:

ढाल का परिमाण

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

binaryBorders = Binarize[Image[gradient], 0.2];
sign = DeleteBorderComponents@ColorNegate[binaryBorders];
largestComponent = SortBy[ComponentMeasurements[sign, {"Area", "ConvexVertices"}][[All, 2]], First][[-1, 2]];

OpenCV कार्यान्वयन: थ्रेसहोल्ड सीधा होना चाहिए, लेकिन मुझे लगता है कि OpenCV में जुड़ा घटक विश्लेषण शामिल नहीं है - आप इसके लिए बाढ़ भरण या cvBlobsLib का उपयोग कर सकते हैं ।

अब, बस छवि के केंद्र के पास सबसे बड़ा ब्लॉब ढूंढें और उत्तल पतवार ढूंढें (मैंने बस सबसे बड़े ब्लॉब का उपयोग किया है जो पृष्ठभूमि से जुड़ा नहीं है, लेकिन यह हर छवि के लिए पर्याप्त नहीं हो सकता है)।

परिणाम: यहाँ छवि विवरण दर्ज करें यहाँ छवि विवरण दर्ज करें


0

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

यदि, उदाहरण के लिए, साइनबोर्ड (या इसकी सीमाएं) अपने परिवेश की तुलना में हल्का है (जो प्रश्न में दिखाए गए सभी उदाहरणों के मामले में है) तो आपके एक्स-अक्ष वक्र में दो चोटियां होंगी (बाएं और दाएं और सीमाओं के लिए) ) और आप में दो चोटियों y- अक्ष वक्र (ऊपर और नीचे की सीमाओं के लिए)। 1-डायमेंशन सिग्नल (शायद हाई-पास फिल्टर) के लिए बॉर्डर डिटेक्शन तकनीक का उपयोग करके आप साइनबोर्ड के कोनों निर्देशांक को घटा सकते हैं।

मैंने इस दृष्टिकोण को लाइसेंस प्लेटों का पता लगाने के लिए और चेहरे की पहचान के लिए भी इस्तेमाल किया जा रहा है (नाक चेहरे का उज्जवल हिस्सा है, इसलिए यह एक्स-एक्स और वाई-एक्सिस कर्व्स में एक चोटी उत्पन्न करता है)।


हम्म .. क्या होगा अगर साइनबोर्ड घुमाया जाए या कैमरा रोल किया जाए?
मुस्तफा

0

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

यहाँ विचार की रूपरेखा है:

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

स्पष्टीकरण और फायदे:

  • पाठ के आस-पास का क्षेत्र आमतौर पर समरूप होता है - वास्तविक आयत पहला मजबूत रिकॉल होना चाहिए
  • इस तरह से आपको पूरी छवि पर पर्याप्त परिवर्तन नहीं करना है, इसलिए आप इसे और अधिक स्वाभाविक रूप से कर सकते हैं (शायद एक ही क्षेत्र में कई बार लेकिन अलग-अलग बाल्टी आकार के साथ ...)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.