2010-11-19 20 views
5

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


int i,j,n,index; 
for (i = 0;i<numrows;i++) 
{ 
    for (j = 0;j<numcols;j++) 
    { 
      if (img[i*numcols + j] == 100) 
     { 
      for (n = 300;n<600;n++) 
      { 
       index = cvRound(j*tabCos[n] + i * tabSin[n]) + (numrho-1)/2; 
       accum[(n+1) * (numrho+2) + index+1]++; 
      } 
     } 
    } 
} 
+0

क्या आपके पास डेटा का वास्तविक उदाहरण है जिस पर इस कोड को लागू किया गया है? ऐसा लगता है कि कई संभावित अनुकूलन हैं, कुछ डेटा से स्वतंत्र हैं, लेकिन अन्य वास्तविक पर निर्भर करते हैं। आईएमजी और छवि के आकार में डेटा के वितरण। – kriss

+0

मेरे पास मौजूद डेटा का एक उदाहरण http: // stackoverflow पर है।कॉम/प्रश्न/4372259/आटा-ट्रांसफॉर्म-त्रुटि-इन-मैटलैब-एंड-ओपनसीवी मुझे एहसास है कि प्रति स्तंभ केवल 3 अंक हैं (जैसे कि मैंने उन छवियों को कैसे बनाया है) इसलिए इसे तेज करने का कोई तरीका होना चाहिए लेकिन समय लेने वाला हिस्सा संचयक भर रहा है और छवि – Denis

उत्तर

1

कोई यह नहीं है। [] उपयोगों में से कई को बदलें, जैसा कि आप सरल पॉइंटर अंकगणित द्वारा प्रश्न में सरणी को पुन: सक्रिय करने के लिए कर सकते हैं। स्थानीय चर में invariant अभिव्यक्ति सार तत्व।

हालांकि, पहला सवाल यह है कि, आपका प्रोफाइलर दिखाता है कि यह कोड आपके पूरे ऐप के संदर्भ में एक बाधा है। यदि नहीं, तो माइक्रो-ऑप्टिमाइज़िंग को परेशान क्यों करें?

संपादित करें: पाश सूक्ष्म अनुकूलन - पसंद करते हैं दूसरा कोई सरणी अनुक्रमण के रूप में आवश्यक (mult बनाम जोड़ने)

int ints[100]; 
int i; 
int *pi; 

for (i = 0; i < 100; ++i) 
{ 
    printf("%d", ints[i]); 
} 

for (pi = ints; pi < ints + 100; ++pi) 
{ 
    printf("%d", *pi); 
} 
+0

के माध्यम से नहीं जा रहा है मैंने सोचा [] और सरल सूचक अंकगणित संकलक बिंदु दृश्य के बराबर होगा, (* (accum + (n + 1) * (numrho + 2) + सूचकांक +1)) ++; तब accum के बराबर होगा [(एन + 1) * (numrho + 2) + सूचकांक + 1] ++; नहीं? यह हिस्सा निश्चित रूप से मेरी प्रसंस्करण में बाधा है, शेष कार्यक्रम बहुत आसान है। – Denis

+0

@denis - यदि आप सब कुछ करते हैं तो हाँ, लेकिन उदाहरण के लिए संपादित करें –

+0

मुझे खेद है, मैं इस मंच के लिए नया हूं, आप किस संपादन का जिक्र कर रहे हैं? – Denis

2

वहाँ एक बड़ा और दोहराव Hough कोड का एक टुकड़ा मैं थोड़ा भी संलग्न कर रहा हूँ में बदलना है । कुछ सफलता के साथ संचयक के लिए कोड के उस हिस्से का रखरखाव स्पैस एरेज़ (वास्तव में एक सी ++ std::map सेल इंडेक्स पर कुंजी लगाया गया है) के साथ प्रयोग कर रहा है।

मुझे लगता है कि गति अप कैश इलाके के मुद्दों से संबंधित है, और यह निश्चित रूप से स्पैस पर निर्भर करता है।


अद्यतन: ऊपर संदर्भित सॉफ्टवेयर कई कण भौतिकी प्रयोगों की सेवा करने का इरादा है, लेकिन मूल रूप से (अर्थात छोटे पैमाने पर) एक परीक्षण बिस्तरों परियोजना पर इस्तेमाल किया गया था। चूंकि हम बड़ी परियोजनाओं के बारे में गंभीर हो गए हैं और उनके लिए मोंटे कार्लो करना शुरू कर दिया है, इसलिए हफ़ ट्रांसफॉर्म स्पैर मैट्रिक्स के साथ भी बोतल की गर्दन का थोड़ा सा हो गया है।

के रूप में अभी तक हम एक समाधान नहीं है, लेकिन उनके सहयोगियों में से एक Gandalf जो "fast hough transform" भी शामिल है, जो मूल्यांकन करने के लिए प्रकट होता है जिस तरह की तरह एक क्वाड-वृक्ष में परिणत (2 डी में, शायद आप 3 डी में एक Oct-पेड़ का उपयोग) में पाया गया काम के आदेश को कम करने के लिए। हम शायद इसके साथ प्रयोग करने जा रहे हैं।

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

+1

क्या आपके पास इस दृष्टिकोण के बारे में बोलने वाले पेपर का लिंक है? मेरा मैट्रिक्स काफी स्पैस है जो पूरी तरह से फिट होगा। – Denis

+0

@ डेनिस: नहीं। यह काम अभी भी चल रहा है, और चूंकि यह एक कण भौतिकी प्रयोग के लिए विश्लेषण कोड है, इसलिए कोड पर एक पेपर होने की संभावना नहीं है, हालांकि मुझे संदेह है कि यह छात्र के शोध प्रबंध में जाएगा। – dmckee

+0

@ डेनिस मुझे डीएमकी द्वारा रिपोर्ट किए गए दृष्टिकोण के बारे में पता नहीं है लेकिन गैंडफ में उद्धृत पेपर है: LI, Hungwen; लाविन, मार्क ए .; ली मास्टर, रोनाल्ड जे। ** फास्ट हौफ ट्रांसफॉर्म: एक पदानुक्रमित दृष्टिकोण। ** _Computer विजन, ग्राफिक्स, और इमेज प्रोसेसिंग_, 1 9 86, 36.2: 13 9 -161। –

0

आपके आवेदन के आधार पर, हाफ ट्रांसफॉर्म को अनुकूलित करने के लिए कई तरीके हैं और कम-स्तर कोड के साथ झुकाव संभवतः उनमें से अंतिम है। मैं यादृच्छिक एचटी या मल्टीर्सोल्यूशन एचटी के साथ शुरू करूंगा, हाइब्रिड दृष्टिकोण विलय का पालन किया। मेरा मानना ​​है कि पहले अनुकूलित एल्गोरिदम बेहतर है। अंतिम चरण सीएडी मेमोरी जैसे हार्डवेयर अनुकूलन का उपयोग करेगा।

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