2009-06-01 12 views
5

में कैसे काम करता है मैं अपना खुद का गाऊशियन फ़िल्टर लिखता हूं लेकिन यह वास्तव में धीमा है।गाऊशियन फ़िल्टर एल्गोरिदम ओपनसीवी

OpenCV के गाऊसी एल्गोरिथ्म बहुत तेजी से, मेरे गाऊसी फिल्टर से 20 गुना है। मैं अपनी परियोजना में ओपनसीवी के गॉसियन एल्गोरिदम को फिर से लिखना चाहता हूं, और मैं अपनी परियोजना में ओपनसीवी शामिल नहीं करना चाहता हूं।

हालांकि

,

किसी को भी मेरे एल्गोरिथ्म विवरण दे सकते हैं, opencv के स्रोत कोड को समझने के लिए बहुत कठिन लगता है?

उत्तर

12

गाऊसी फिल्टर एक संपत्ति यह बहुत आसान तेजी लाने के लिए बनाता है: फिल्टर स्वतंत्र रूप से दोनों आयामों में लागू किया जा सकता। आप एक-आयामी फ़िल्टर को परिभाषित करते हैं जो लंबवत रूप से संचालित होता है, और दूसरा जो क्षैतिज रूप से कार्य करता है, और दोनों को लागू करता है; यह दो आयामों में लागू एक फ़िल्टर के समान प्रभाव उत्पन्न करता है।

इसके अलावा, आप शायद SIMD instructions उदा को देखने के लिए की आवश्यकता होगी SSE3 आपके प्रोसेसर के लिए उपलब्ध है।

+2

यह पी 2 पी ऑपरेशंस के साथ पी 2 पी ऑपरेशंस के साथ 2 पी ऑपरेशंस के साथ सीधे रूपांतरण को तेज करने का एक तेज़ और आसान तरीका है। – las3rjock

+0

मेरा गाऊशियन दोनों आयामों में आवेदन कर रहा है, इसकी समय जटिलता 2 * पी * एम * एन है, यह ओपनसीवी की तुलना में 20 गुना धीमी है – user25749

4

अपने प्रश्न के दूसरे भाग का उत्तर देने के लिए, गॉसियन ब्लर बस 3-डी गाऊशियन सतह छवि पर एक संकल्प कर्नेल के रूप में लागू होता है। Wikipedia एल्गोरिथ्म पर ही एक महान संदर्भ है, लेकिन मूल रूप से, आप एक गाऊसी वक्र के मानों को लेकर कन्वर्ट है कि एक वर्ग मैट्रिक्स में, और अपनी छवि को प्रत्येक पिक्सेल से गुणा करें, जैसे:

Kernel:    
[0 1 2 0 0 
1 4 6 4 1  X Iterate over every single pixel in the image 
2 6 10 6 2 
1 4 6 4 1 
0 1 2 1 0] 

(ध्यान दें कि यह केवल एक नमूना कर्नेल है, आपके गॉसियन चर के आधार पर बहुत विशिष्ट eqns हैं, आपको अलग-अलग परिणाम मिलेंगे)

आपके प्रश्न के प्रदर्शन भाग का उत्तर देने के लिए, इस एल्गोरिदम की समग्र गति निर्भर होगी एक स्थिर आकार की छवि मानते हुए, कुछ चीजों पर। आइए कहें कि छवि एनएक्सएम पिक्सेल है, और संकल्प कर्नेल पीएक्सपी पिक्सल है। आपको पी पी एन * एम ऑपरेशंस करना होगा। अधिक पी, जितना अधिक ऑपरेशन आपको किसी दिए गए चित्र के लिए करना होगा। आप यहां उपयोग किए गए एल्गोरिदम के साथ चालाक हो सकते हैं, बहुत विशिष्ट पंक्ति या कॉलम आधारित गणित कर सकते हैं।

कार्यान्वयन भी बहुत महत्वपूर्ण है। यदि आप बेहद कुशल होना चाहते हैं, तो संभवतः आप अपने आर्किटेक्चर द्वारा प्रदान किए जाने वाले सबसे उन्नत निर्देशों का उपयोग करना चाहेंगे। यदि आप इंटेल x86 चिप का उपयोग कर रहे हैं, तो आप शायद इंटेल प्रदर्शन प्राइमेटिव्स (आईपीपी) के लिए लाइसेंस प्राप्त करना चाहते हैं और उन निर्देशों को सीधे कॉल करना चाहते हैं। आईआईआरसी, ओपनसीवी आईपीपी का उपयोग करता है जब यह उपलब्ध हो ...

यदि आप अपने दिए गए आर्किटेक्चर पर फ़्लोटिंग पॉइंट प्रदर्शन खराब हैं तो आप कुछ स्केल किए गए पूर्णांक के साथ कुछ स्मार्ट और काम भी कर सकते हैं। यह शायद चीजों को थोड़ा सा गति देगा, लेकिन इस सड़क पर जाने से पहले मैं पहले अन्य विकल्पों को देखूंगा।

2

कोशिश की जाँच here। आप समय से पहले असतत गाऊशियन मैट्रिक्स को समझना चाहते हैं, फिर इसे छवि के साथ संकलित करें।

+0

आपको बहुत धन्यवाद, rlbond – user25749

1

यदि आपका घुमाव गिरी अपेक्षाकृत बड़ी है और आप प्रत्यक्ष घुमाव को लागू कर रहे हैं, प्रदर्शन अंतर हो सकता है क्योंकि OpenCV एक तेजी से फूरियर को बदलने (FFT) का उपयोग कर घुमाव लागू कर रहा है।

-1

मैं पंडिताऊ होने के लिए नफरत है, लेकिन आप एक एल्गोरिथ्म, वह है, एक कार्य को पूरा करने के चरणों की एक सटीक दृश्य के लिए पूछ रहे हैं। आपके पास पहले से ही गाऊशियन एल्गोरिदम है।तो आपके प्रश्न का मुख्य बिंदु यह है कि जब आप कुछ तेजी से मांगते हैं, जो एल्गोरिदम के लिए पूछने जैसा नहीं है।

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