35

मुझे क्या करना चाहते हैं एक सरल अनुप्रयोग के लिए एक छवि मान्यता है:अजगर छवि मान्यता

  1. दिया छवि (500 x 500) pxs (1 रंग पृष्ठभूमि)
  2. छवि केवल 1 ज्यामितीय आंकड़ा होगा (त्रिभुज या वर्ग या smaleyface :)) (50x50) पीएक्स।
  3. पायथन आंकड़े की पहचान करेगा और प्रदर्शित करेगा कि ज्यामितीय आंकड़ा क्या है।

कोई लिंक? कोई संकेत? कोई एपीआई? thxs :)

उत्तर

30

एक ठेठ अजगर उपकरण श्रृंखला होगा:

  • साथ साथ PIL
  • उन्हें Numpy सरणियों में बदलना आपकी छवियों को पढ़ने
  • उपयोग Scipy की छवि फ़िल्टर (linear and rank, morphological) लागू करने के लिए आपका समाधान

आकार को अलग करने के लिए, मैं पृष्ठभूमि के आकार को देखकर अपना सिल्हूट प्राप्त करूंगा। इसके बाद मैं corner detection एल्गोरिदम (उदा। हैरिस) का उपयोग करके कोनों की संख्या का पता लगाऊंगा। एक त्रिकोण में 3 कोनों, एक वर्ग 4, और एक स्माइली नहीं है। यहां एक अजगर implementation of the Harris corner detection with Scipy है।

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

आप टिप्पणी में उल्लेख के रूप में, ब्लॉग पोस्ट समारोह है कि एक गाऊसी एल्गोरिथ्म में जरूरत गिरी का उत्पादन पेश नहीं किया। यहाँ Scipy Cookbook से एक इस तरह के एक समारोह का एक उदाहरण है (महान संसाधन Btw):

def gauss_kern(size, sizey=None): 
    """ Returns a normalized 2D gauss kernel array for convolutions """ 
     size = int(size) 
     if not sizey: 
      sizey = size 
     else: 
      sizey = int(sizey) 
     x, y = mgrid[-size:size+1, -sizey:sizey+1] 
     g = exp(-(x**2/float(size)+y**2/float(sizey))) 
     return g/g.sum() 
+0

+1, अच्छा संकेत, Scipy एक और कुंजी प्रतीत होता है, मैं हैरिस उदाहरण चला रहा हूँ :) – panchicore

+0

नहीं, मैं इस हैरिस उदाहरण नहीं चला सकता, कोड अधूरा लगता है :( – panchicore

+0

लाइन कोड: gauss = filtertools.gauss_kernel (3) ... gauss_kernel def मौजूद नहीं है :( – panchicore

2

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

आप केवल गैर घुमावदार curvfaces संभाल सकता है [मुझे याद नहीं कर सकते हैं क्या इस तकनीक कहा जाता है, लेकिन कैसे postoffice handwritting करता आरईसी के लिए अपने समान] , आप किनारे का पता लगाने कर सकता है, और फिर चौराहों पर नमूने करना समानता का अनुमान प्राप्त करने के लिए।

+0

ठीक है लेकिन ... ज्यामितीय-आंकड़ा केवल केंद्रित नहीं होगा :) – panchicore

10

OpenCV ब्लॉब विश्लेषण उपकरण है, यह आपको उस आकार के बारे में मीट्रिक देगा जो आप अपने पसंदीदा पैटर्न पहचान एल्गोरिदम के लिए फ़ीड कर सकते हैं :) उदा। क्षेत्रफल (ऊंचाई * चौड़ाई) के लिए आयताकार 1.0 अनुपात है, जब सर्कल का अनुपात 0.78 है।

+0

+1, अच्छा संकेत, ओपनसीवी कुंजी लगता है, मैं कुछ व्यावहारिक उदाहरण के लिए googling ... – panchicore

+2

0.78 का अनुपात हमेशा guarente नहीं है यह एक सर्कल होगा। 0.78 मूल्य को पूरा करने वाले कई अन्य पैटर्न हो सकते हैं। – monksy

+1

यह सच है, आपको उन सुविधाओं के सेट का चयन करना चाहिए जो उन वस्तुओं के सेट के लिए सबसे सार्थक हैं जिन्हें आप पहचानने की कोशिश कर रहे हैं। भरने का अनुपात केवल एक विशेषता है। – Harriv

3

आप बात ज्यामितीय आंकड़ा 50x50 पिक्सल है। आकार और ज्यामितीय आकृतियों उन्मुखीकरण तय कर रहे हैं, आप एक क्लासिक टेम्पलेट मिलान समस्या, correlation method के लिए उपयुक्त है। आप मूल छवि या सीमा पहचान आउटपुट पर टेम्पलेट मिलान लागू कर सकते हैं।

अन्यथा, यदि आकार (स्केल) और/या अभिविन्यास मनमाने ढंग से हैं, फूरियर डिस्क्रिप्टर लागू किया जा सकता है। ये वर्णनकर्ता रोटेशन और स्केल इनवेरिएंट हैं।

इन सभी विधियों को OpenCV, NumPy या SciPy का उपयोग करके कोड किया जा सकता है।

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