2012-03-26 4 views
5

मेरे पास 2 डी माध्य फ़िल्टर (3x3 विंडो) में एक बाधा है जिसका उपयोग मैं छवियों के एक बहुत बड़े सेट पर करता हूं, और मैं इसे आजमाने और अनुकूलित करना चाहता हूं। मैंने scipy.ndimage median_filter, साथ ही PIL, scipy.signal और scikits-image का परीक्षण किया है। हालांकि, एसओ में ब्राउजिंग में मैंने सीखा है कि सी में एक तेज़ ओ (एन) औसत फिल्टर है (कॉन्सटेंट टाइम में मेडियन फ़िल्टरिंग Rolling median algorithm in C देखें), और मुझे आश्चर्य हुआ कि क्या मैं इसे scipy.weave.inline का उपयोग करके पायथन में कार्यान्वित कर सकता हूं? वैकल्पिक मार्ग पर कोई सुझाव?तेजी से 2 डी औसत फ़िल्टरिंग के लिए scipy.weave.inline का उपयोग

+2

मैं Perreault + हेबर्ट, लगातार समय में माध्य छनन, किसी ऐसे स्थान के लिए एक cython आवरण की तुलना में चलाता है - लेकिन यह है कि हो जाएगा 3x3 के लिए ओवरकिल, एक सॉर्टिंग नेटवर्क बेहतर करें, 25 तुलनाओं में 9 इनपुट। इनपुट 0..255 या क्या हैं? – denis

+0

क्या आप बस अपनी छवि सेट को संसाधित करना चाहते हैं? क्या [ओपनसीवी] (http://opencv.org/) एक वैकल्पिक मार्ग है? [medianBlure] (http://docs.opencv.org/modules/imgproc/doc/filtering.html#medianblur) शायद? आपके पास सीयूडीए और ओपनसीएल कार्यान्वयन भी हैं। – mfrellum

+0

अधिकांश कोड ढांचे पहले से ही पाइथन में हैं, छोटे भाग matlab में हैं, किसी भी तरह से पाइथन में कोड के इस हिस्से को लागू करना सबसे अच्छा होगा। – bla

उत्तर

1

मुझे अंतर्निहित एल्गोरिदम नहीं पता है, लेकिन scikits-image में rolling median filter है।

अन्यथा, मैं इसे Cython (सी/पायथन पिजिन भाषा) में लिखने की अनुशंसा करता हूं। Numpy arrays के साथ काम करने के लिए convolution example/tutorial जांचना सुनिश्चित करें।

+0

धन्यवाद, मैं इसे देख लूंगा। इसके अलावा, 3x3 लिखकर मेरा मतलब था कि औसत विंडो आकार 3x3 है, वास्तविक छवि का उपयोग मेगापिक्सेल बड़ा है। – bla

+0

अच्छा, ऐसा लगता है कि विज्ञान और पीआईएल और scipy.ndimage से भी धीमी है। दुर्भाग्यवश, जिन छवियों पर मैं काम करता हूं वे 16 बिट हैं इसलिए 0..255 विकल्प प्रासंगिक नहीं है। अगला साइथन ... – bla

1

यदि आपका अभी भी रुचि मैं कोशिश करता हूँ numpy के आकृति बदलें और मंझला:

a= some big array 
a.reshape(N,3,3) #N being specific to your array 
[numpy.median(m) for m in a] 

मैं कैसे इस तराजू अपने testet तरीकों की तुलना में पता नहीं है, लेकिन आप के लिए जकड़ना सकता है अगर आप सी के साथ अनुकूलित करना चाहते हैं सूची समझ में पाश ...

+1

यह सुरुचिपूर्ण है, लेकिन दुर्भाग्य से यह प्रत्येक गैर-ओवरलैपिंग 3x3 के औसत की गणना करता है, न कि प्रत्येक संभावित 3x3 के औसत। –

2

इस प्रयास करें: Rolling median in C - Turlach implementation

http://ideone.com/8VVEa

उपयोग:

Mediator* m = MediatorNew(9); 
for (...) 
{ 
     MediatorInsert(m, value); 
     median = MediatorMedian(m); 
} 

मेरा मानना ​​है कि इस आर algo के रूप में ही है, लेकिन क्लीनर (आश्चर्यजनक तो, वास्तव में)।

आप या तो इसे लपेट सकते हैं, या इसे बंद कर सकते हैं और नुंबा (या साइथन) का उपयोग कर सकते हैं। मुझे लगता है कि मैं सिथॉन पर नुंबा की सिफारिश करता हूं, अगर कुछ और नहीं क्योंकि सादा पुराना पायथन कोड है।

मैं scikits को यह जोड़ने का सुझाव है, अगर यह तेजी से पहले से ही scikits में एक :)

+0

धन्यवाद एलेक्स, मैंने अभी तक कोशिश नहीं की है, लेकिन यह आशाजनक लग रहा है। – bla

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