2012-02-04 12 views
8

मुझे पता है कि किनारे का पता लगाने की समस्या पहले पोस्ट की गई है (जावा में: Count the number of objects in an Image, भाषा स्वतंत्र: Image edge detection), लेकिन मैं जानना चाहता हूं कि इसे पायथन में कैसे कार्यान्वित किया जाए।पायथन किनारे का पता लगाने और वक्रता गणना

मैं कुछ साधारण आकार (कुछ शोर के साथ बाइनरी आकार) पर किनारे के चारों ओर किनारे का पता लगाने और वक्रता गणना कर रहा हूं। मुझे पता है कि ओपनसीवी के लिए कुछ रैपर हैं, लेकिन यह सुनिश्चित नहीं है कि कौन सा बेहतर है: pyopencv, pycv, pycvf?

चूंकि मैं मूल रूप से केवल इन दो कार्यों को कर रहा हूं, इसलिए मुझे यह भी यकीन नहीं है कि लाइब्रेरी का उपयोग करने के बजाय इसे स्वयं लागू करना तेज होगा या नहीं।

+1

मैं ओपनसीवी को अपनी [वेबसाइट] (http://opencv.willowgarage.com/wiki/) से डाउनलोड करने का सुझाव दूंगा - यदि आप इसे अपने निर्देशों का उपयोग करके संकलित करते हैं तो आप स्वचालित रूप से पाइथन रैपर ('आयात cv2') प्राप्त करते हैं। –

+2

इसके अलावा, 'scipy.ndimage' पर एक नज़र डालें http://docs.scipy.org/doc/scipy/reference/ndimage.html –

उत्तर

11

हम सक्रिय रूप से विकसित scikit-image है कि आप उपयोगी मिल सकता है में विभाजन और बढ़त का पता लगाने एल्गोरिदम है:

Scikit Images Examples

+0

एज डिटेक्शन अच्छा है। क्या आप वक्रता गणना लागू करेंगे? – clwen

+0

@clwen आप वक्रता को कैसे परिभाषित करते हैं? यदि आप मुझे एक पेपर या उदाहरण देते हैं, तो हम इसे एक शॉट दे सकते हैं। –

+0

मैं पाइथन में हमेशा के लिए किनारे किनारे का पता लगाने के लिए देख रहा हूँ! मैं तुमसे प्यार करता हूँ... – tylerthemiler

3

वहाँ scikit छवि के साथ अजगर में आकृति को खोजने के लिए एक बहुत ही सरल तरीका है।

from skimage import measure 
    contours = measure.find_contours(gimg, 0.8) 

इस समोच्च पंक्तियों के वेक्टर प्रतिनिधित्व रिटर्न: यह वास्तव में कोड की सिर्फ एक जोड़े को लाइन, इस तरह है। प्रत्येक पंक्ति के लिए एक अलग सरणी में। और सन्निकटन की गणना करके लाइन में अंकों की संख्या को कम करना भी आसान है। यहां स्रोत कोड के साथ थोड़ा लंबा विवरण दिया गया है: image vectorization with python

3

आप पाइथन में आसानी से किनारे का पता लगा सकते हैं।

from scipy import ndimage 
edge_horizont = ndimage.sobel(greyscale, 0) 
edge_vertical = ndimage.sobel(greyscale, 1) 
magnitude = np.hypot(edge_horizont, edge_vertical) 

और यहां मूल छवि और किनारे का पता लगाने के बाद छवि का एक उदाहरण है। enter image description here

विज्ञान-छवि में, किनारे का पता लगाने के लिए special page with explanations है।

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