2012-09-09 16 views
6

मैं अपने UIImageView (या UIImage) के अंदर वर्ग/आयतों की पहचान करना चाहता हूं।एक्सकोड, आईओएस - छवि रेखा/आकार पहचान

मैंने "Very simple image recognition on iOS" देखा, लेकिन यह काफी नहीं है जो मैं देख रहा हूं।

इस समय मेरे पास UIImageView है जिसे समय-समय पर UIImage दिया जाता है।

UIImage ईएस में से अधिकांश ब्लैक स्क्वायर/आयताकार इस तरह हैं: img। लेकिन कोनों को गोलाकार किनारों (या हो सकता है) हो सकता है।

मैं पहले काले वर्ग/आयत के आकार की पहचान कैसे कर सकता हूं? UIImage में पहला काला वर्ग बनाने के लिए स्क्रीन को भरने के लिए मेरा परिणाम UIImageView का आकार बदलना होगा। इस तरह: img With iPhone

+0

क्या आप केवल उन छवियों की श्रेणी को स्पष्ट कर सकते हैं जिनका आप अभ्यास में उपयोग करेंगे? क्या आप सचमुच हमेशा काले रंग के रूपरेखा बक्से का उपयोग कर रहे हैं, सब कुछ सफेद या क्या यह कहेंगे, सफेद पर काले सीमा से घिरा मनमानी सामग्री वाले बक्से, या फिर कुछ और? – Tommy

+2

"वर्ग" से आपका वास्तव में "आयताकार" मतलब है? कृपया स्पष्ट करें ... – Felix

+0

कॉमिक-स्ट्रिप व्यूअर बनाना? आपको शायद कुछ पैटर्न पहचान करनी पड़ेगी लेकिन अगर आप बस विभाजक लाइनों की तलाश में हैं तो यह बहुत बुरा नहीं होना चाहिए। – TomSwift

उत्तर

10

यदि आपकी छवियां हमेशा क्षैतिज पंक्ति में तेज काले वर्ग होंगे, तो आप आयताकारों की पहचान करने के लिए कोने का पता लगाने का उपयोग कर सकते हैं, फिर चार बाएं कोनों को चुनें। मेरे पास हैरिस, नोबल और शि-तोमासी कोने का पता लगाने के तरीकों के आधार पर मेरे खुले स्रोत GPUImage ढांचे में कोने डिटेक्टरों के तीन प्रकार हैं।

Harris corner detection results

वे एक छोटे से देखने के लिए मुश्किल हो, लेकिन लाल क्रॉसहेयर निशान जहां डिटेक्टर पाया:

0.4 की एक सीमा और 4.0 की संवेदनशीलता के साथ अपने बक्से के खिलाफ एक GPUImageHarrisCornerDetectionFilter चल रहा है निम्न परिणाम पैदावार अपने बक्से के कोनों। दोबारा, आपको अपने लक्ष्य आयत को खोजने के लिए केवल चार बिंदुओं को लेने की आवश्यकता है, और फिर बस अपनी छवि को स्केल करें या देखें ताकि यह आयताकार अब आपके विचार को भर सके।

इस सुविधा का पता लगाने के तरीके का एक उदाहरण या तो मेरे ढांचे के भीतर फ़िल्टरशोकेस या फ़ीचर एक्स्ट्राक्शन टेस्ट उदाहरण में पाया जा सकता है। मैं उस प्रक्रिया का वर्णन करता हूं जिसके द्वारा मैं this answer में सिग्नल प्रोसेसिंग पर ऐसा करता हूं।

+0

बहुत अच्छा समाधान! मुझसे +1 दुर्भाग्य से प्रश्न को गोलाकार कोनों में भी संशोधित किया गया है ... –

+0

एक भयानक ढांचे के लिए धन्यवाद! हालांकि, मैं इसे काम करने के लिए नहीं मिल सकता है। मैंने फ़ीचर एक्स्ट्राक्शन टेस्ट उदाहरण की भी कोशिश की, और इसे कोई कोने नहीं मिला। मैंने अपना खुद का प्रश्न यहां पोस्ट किया है (इसे देखने से पहले) http://stackoverflow.com/questions/18914461/gpuimage-how-to-chain-filters-with-gpuimagepicture – Mikael

+0

आईओएस 7.0 समस्या होने लगता है ... – Mikael

-2

जो मैंने आपके प्रश्न के बारे में समझा, उससे आपको अपनी छवि में काले सीमाओं के किनारों का पता लगाने के लिए Canny Edge Detection Algorithm लागू करने की आवश्यकता है।

यह आप निम्न लिंक

उपयोग Image.m फ़ाइल से ImageWrapper *Image::cannyEdgeExtract(float tlow, float thigh) समारोह में छवि प्रसंस्करण ढांचा उपलब्ध का उपयोग करना चाहिए के लिए।

+0

कैनी एज डिटेक्शन आपको यहां मदद नहीं करेगा, क्योंकि आपको अभी भी किनारों को परिभाषित करने वाले बाउंडिंग बॉक्स को निर्धारित करने की आवश्यकता होगी। इसके अलावा, यह दो किनारों को उठाएगा: एक बॉक्स के बाहर के लिए, और अंदर के लिए एक। एक रिज फ़िल्टर शायद अधिक उपयुक्त होगा, लेकिन आपको अभी भी उस से बक्से निर्धारित करने की आवश्यकता होगी। –

0

ऐसा लगता है सबसे आसान समाधान होगा:

  1. राशि अप सर्वोच्च पंक्ति में खड़ी सभी पिक्सल (एक एक्सेल टेबल की तरह) सबसे छोटी/सबसे बड़ी मूल्य के साथ
  2. पंक्तियों अपने "अंतर" क्षेत्र हैं

चौड़ाई (2) से प्राप्त की जा सकती है।

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