C ++ या MATLAB में तकनीकी पेपर एल्गोरिदम को लागू करना


14

मैं एक इलेक्ट्रिकल इंजीनियरिंग स्नातक हूं। मैंने सिग्नल और इमेज प्रोसेसिंग एल्गोरिदम (पुनर्निर्माण, विभाजन, फ़िल्टरिंग, आदि) के बारे में कई तकनीकी पेपर पढ़े हैं। इन पेपरों में दिखाए गए अधिकांश एल्गोरिदम निरंतर समय और निरंतर आवृत्ति पर परिभाषित होते हैं, और अक्सर जटिल समीकरणों के संदर्भ में समाधान देते हैं। उक्त कागज में प्राप्त परिणामों को दोहराने के लिए आप C ++ या MATLAB में स्क्रैच से तकनीकी पेपर कैसे लागू करेंगे?

विशेष रूप से, मैं वांग एट अल ( आईईईई मेड मेड इमेजिंग। 1993; 12 (3): 486-96 ) द्वारा कागज "एक सामान्य शंकु-बीम पुनर्निर्माण एल्गोरिथ्म" देख रहा था, और मैं सोच रहा था, मैं भी कैसे शुरू करूं उनके एल्गोरिथ्म को लागू करना? समीकरण 10 आपको पुनर्निर्मित छवि का सूत्र देता है। आप इसे कैसे कोडित करेंगे? क्या आपके पास प्रत्येक लोमड़ी से गुजरने वाला एक लूप होगा और संबंधित सूत्र की गणना करेगा? आप उस फॉर्मूले में फ़ंक्शंस के कोड कैसे बनाएंगे? आप मनमाने बिंदुओं पर कार्यों का मूल्यांकन कैसे करेंगे?

मैंने गोंजालेज और वुड्स द्वारा "डिजिटल इमेज प्रोसेसिंग" पुस्तक पढ़ी है, लेकिन मैं अभी भी नुकसान में हूं। मैंने न्यूमेरिकल रेसिपी बुक सीरीज़ के बारे में भी पढ़ा है। क्या यह सही तरीका होगा?

शोध पत्रों से आपके अनुभव प्रोग्रामिंग एल्गोरिदम क्या हैं? कोई सुझाव या सुझाव?


1
जब मुझे मौका मिले तो मैं पेपर देखने जा रहा हूं। लेकिन मेरा मानना ​​है कि यह सब एक दिए गए ग्राफिक में XYZ अंक के बारे में है। आप एक शीर्ष को परिभाषित करते हैं और फिर वहां से काम करते हैं।

2
आमतौर पर, कोई नमूने द्वारा संकेतों का विवेकाधिकार करता है, और फिर अभिन्न को रकम में परिवर्तित करता है।
निबोट

इसलिए मैंने नमूना लेने और इंटीग्रल को रकम में बदलने के बारे में पढ़ा है, लेकिन अगर आप इंटीग्रैंड में कार्यों को मैट्रिसेस के रूप में संग्रहीत करते हैं, तो आप प्रत्येक नमूने बिंदु पर इंटीग्रैंड का मूल्यांकन कैसे करेंगे?

1
डेमियन, क्या आपने देखा है कि कैसे बैरन ट्रांसफॉर्मेशन को बैकप्रोजेक्शन के माध्यम से उलटा किया जाता है? यह थोड़ा सरल उदाहरण है जिसे मैं समझा सकता हूं कि क्या यह आपकी रुचि होगी। यह आपके द्वारा पोस्ट किए गए पेपर में वर्णित शंक्वाकार नमूने के बजाय समतल तरंगों का उपयोग करके टोमोग्राफी के लिए उपयोग किया जाता है। en.wikipedia.org/wiki/Radon_transform
nibot

1
@ mr-crt, क्या इसकी बजाय dsp.SE में माइग्रेट करना संभव है?
nibot 6

जवाबों:


15

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

नमूना समय-डोमेन संकेतों को फ़िल्टर करने से संबंधित ज्ञान का एक विशाल निकाय है; समय-डोमेन फ़िल्टर या तो परिमित आवेग प्रतिक्रिया फ़िल्टर के रूप में कार्यान्वित किए जाते हैं , जहाँ वर्तमान आउटपुट नमूने की गणना पिछले N इनपुट नमूनों के भारित योग के रूप में की जाती है; या अनंत आवेग प्रतिक्रिया फिल्टर, जहां वर्तमान आउटपुट पिछले इनपुट और पिछले आउटपुट का भारित योग है । औपचारिक रूप से, असतत समय फ़िल्टर को z- परिवर्तन का उपयोग करके वर्णित किया जाता है, जो कि लाप्लास परिवर्तन के लिए असतत-समय एनालॉग है । द्विरेखीय बदलने नक्शे दूसरे से एक ( c2dऔर d2cMatlab में)।

आप मनमाने बिंदुओं पर कार्यों का मूल्यांकन कैसे करेंगे?

जब आपको उस बिंदु पर एक संकेत के मूल्य की आवश्यकता होती है जो सीधे आपके नमूना ग्रिड पर झूठ नहीं होता है, तो आप पास के बिंदुओं से इसके मूल्य को प्रक्षेपित करते हैं । इंटरपोलेशन निकटतम नमूना चुनने के रूप में सरल हो सकता है, निकटतम नमूनों के भारित औसत की गणना कर सकता है, या नमूना डेटा के लिए एक मनमाने ढंग से जटिल विश्लेषणात्मक फ़ंक्शन को फिटिंग कर सकता है और आवश्यक निर्देशांक पर इस फ़ंक्शन का मूल्यांकन कर सकता है। एक समान महीन ग्रिड पर प्रक्षेपित करना अपसरण है । यदि आपके मूल (निरंतर) सिग्नल में आधा नमूना ग्रिड की तुलना में विवरण (अर्थात आवृत्तियों) बारीक नहीं है, तो निरंतर फ़ंक्शन को नमूना किए गए संस्करण ( Nyquist-Shannon नमूना प्रमेय ) से पूरी तरह से फिर से बनाया जा सकता है । एक उदाहरण के लिए कि आप 2D में कैसे इंटरपोल कर सकते हैं, देखेंबिलिनियर प्रक्षेप

मतलाब में आप 1 डी या नियमित रूप से सैंपल 2 डी डेटा (क्रमशः), या अनियमित रूप से सैंपल 2 डी डेटा से इंटरपोलेट करने के लिए उपयोग interp1या उपयोग कर सकते हैं । interp2griddata

क्या आपके पास प्रत्येक लोमड़ी से गुजरने वाला एक लूप होगा और संबंधित सूत्र की गणना करेगा?

हाँ बिल्कुल।

मतलाब आपको स्पष्ट रूप से लूप के माध्यम से ऐसा करने से बचाता है क्योंकि इसे मेट्रिस और वैक्टर (यानी बहुआयामी सरणियों) पर संचालित करने के लिए डिज़ाइन किया गया है। मतलाब में इसे "वैश्वीकरण" कहा जाता है। निश्चित अभिन्न साथ अनुमान लगाया जा सकता sum, cumsum, trapz, cumtrapz, आदि

मैंने गोंजालेज और वुड्स द्वारा "डिजिटल इमेज प्रोसेसिंग" पुस्तक पढ़ी है, लेकिन मैं अभी भी नुकसान में हूं। मैंने न्यूमेरिकल रेसिपी बुक सीरीज़ के बारे में भी पढ़ा है। क्या यह सही तरीका होगा?

हां, न्यूमेरिकल रेसिपी एक शानदार शुरुआत होगी। यह बहुत ही व्यावहारिक है और इसमें अधिकांश संख्यात्मक विधियों को शामिल किया गया है जिनकी आपको आवश्यकता होगी। (आप पाएंगे कि मतलाब पहले से ही आपकी जरूरत की हर चीज को लागू करता है, लेकिन न्यूमेरिकल रेसिपीज शानदार पृष्ठभूमि प्रदान करेंगी।)

मैंने एक "एल्गोरिदम और डेटा संरचनाएं" वर्ग लिया है, लेकिन मैं वहां प्रस्तुत सामग्री और वैज्ञानिक एल्गोरिदम को लागू करने के बीच संबंध नहीं देखता हूं।

"अल्गोरिदम और डेटा संरचनाओं" पाठ्यक्रमों में इलाज की जाने वाली सामग्री सूचियों, सरणियों, पेड़ों जैसी संरचनाओं पर ध्यान केंद्रित करती है, जिसमें पूर्णांक या तार और संचालन जैसे ग्राफ और छंटाई और चयन जैसी समस्याएं होती हैं: ऐसी समस्याएं जिनके लिए आमतौर पर एक एकल सही परिणाम होता है। जब वैज्ञानिक एल्गोरिदम की बात आती है, तो यह कहानी का केवल आधा हिस्सा है। वास्तविक संख्या और विश्लेषणात्मक कार्यों का अनुमान लगाने के लिए अन्य आधे चिंता के तरीके। आप इसे "न्यूमेरिकल मेथड्स" (या "न्यूमेरिकल एनालिसिस" पर एक कोर्स में पाएंगे; इस तरह- स्लाइड के लिए नीचे स्क्रॉल करें): विशेष कार्यों का अनुमान कैसे लगाया जाए, इंटीग्रल्स और डेरिवेटिव्स का अनुमान कैसे लगाया जाए, आदि यहां मुख्य कार्यों में से एक आपके परिणाम की सटीकता का अनुमान लगाना है, और एक सामान्य पैटर्न एक रूटीन को पुनरावृत्त करना है जो एक सुधार करता है जब तक यह पर्याप्त रूप से सटीक नहीं है, तब तक अनुमान लगाएं। (आप खुद से पूछ सकते हैं कि मतलबी कैसे जानती हैं कि कुछ करना उतना ही सरल है जितना sin(x)कुछ के लिए मूल्य का अनुमान लगाना x।)


एक सरल उदाहरण के रूप में, यहां एक छोटी स्क्रिप्ट है जो मतलाब में एक छवि के एक रेडॉन रूपांतरण की गणना करती है। रेडॉन परिवर्तन प्रक्षेपण कोणों के एक सेट पर एक छवि के अनुमानों को लेता है। एक मनमाना कोण के साथ प्रक्षेपण की गणना करने की कोशिश करने के बजाय, मैं इसके बजाय पूरी छवि का उपयोग करके घुमाता हूं imrotate, ताकि प्रक्षेपण लेना हमेशा ऊर्ध्वाधर हो। तब हम केवल एक कॉलम के साथ एक सदिश लौटाते हुए एक मैट्रिक्स लौटाता है sum, क्योंकि हम केवल एक का उपयोग कर प्रक्षेपण ले सकते हैं sum

imrotateयदि आप पसंद करते हैं, तो आप अपना खुद का लिख ​​सकते हैं interp2

%%# Home-made Radon Tranform

%# load a density map (image).  
A = phantom;

n_pixels = size(A, 1);  %# image width (assume square)

%# At what rotation angles do we want to take projections?
n_thetas = 101;
thetas = linspace(0, 180, n_thetas);

result = zeros(n_thetas, n_pixels);

%# Loop over angles
for ii=1:length(thetas)
    theta = thetas(ii);
    rotated_image = imrotate(A, theta, 'crop');
    result(ii, :) = sum(rotated_image);
end

%# display the result
imagesc(thetas, 1:n_pixels, result.');
xlabel('projection angle [degrees]');

किसी समय किरण के साथ घनत्व का अभिन्न अंग क्या था, अब एक विरूपित नमूना छवि के एक स्तंभ पर एक राशि है, जो बदले में एक समन्वित समन्वय प्रणाली पर मूल छवि को प्रक्षेपित करके पाया गया था।


वाह @nibot, इस तरह के विस्तृत जवाब के लिए धन्यवाद। मैंने एक "एल्गोरिदम और डेटा संरचनाएं" वर्ग लिया है, लेकिन मैं वहां प्रस्तुत सामग्री और वैज्ञानिक एल्गोरिदम को लागू करने के बीच संबंध नहीं देखता हूं। मैंने आपके द्वारा दिए गए लिंक को पढ़ा और सरल एल्गोरिदम (कागजात के बजाय पुस्तकों से) के साथ अभ्यास करना शुरू करूँगा। धन्यवाद फिर से
डेमियन

हाय डेमियन, मैंने अपना जवाब आपकी टिप्पणी को संबोधित करने के लिए संपादित किया। मुझे लगता है कि आप संख्यात्मक तरीकों / संख्यात्मक विश्लेषण पर एक कोर्स या पुस्तक में क्या चाहते हैं, आपको मिल जाएगा।
16

पूरे उत्तर के दौरान!
विक्टर सोरोकिन

@nibot: संपादन के लिए धन्यवाद। मैं वास्तव में आपके द्वारा जुड़े संख्यात्मक विश्लेषण पाठ्यक्रम को पसंद करता हूं। "परिमित आवेग प्रतिक्रिया फिल्टर" प्रक्षेप से क्यों जुड़ा हुआ है? मुझे आश्चर्य है कि यह ईई छात्र के रूप में पाठ्यक्रम का हिस्सा क्यों नहीं है। ओह अच्छा। धन्यवाद!
डेमियन

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

3

निबोट के उत्कृष्ट स्पष्टीकरण में जोड़ना , बस कुछ और बिंदु।

  • MATLAB, ऑक्टेव या SciPy / NumPy जैसे संख्यात्मक कंप्यूटिंग वातावरण आपको C ++ जैसी सामान्य प्रोग्रामिंग भाषा में यह सब करने की तुलना में बहुत प्रयास करने से बचाएगा। doubleसरणियों और छोरों के साथ जुगलिंग बस डेटा प्रकार जैसे कि जटिल संख्या और संचालन जैसे आपकी उंगलियों पर अभिन्न अंग होने के साथ तुलना नहीं करता है। (यह सुनिश्चित करने के लिए उपयुक्त है, और अच्छा C ++ कोड तेजी से परिमाण का एक आदेश हो सकता है, अच्छे पुस्तकालय सार और टेम्पलेट्स के साथ यह यथोचित रूप से साफ और स्पष्ट हो सकता है, लेकिन ईजी MATLAB के साथ शुरू करना निश्चित रूप से आसान है।)

  • MATLAB में इमेज प्रोसेसिंग और डिजिटल सिग्नल प्रोसेसिंग के लिए "टूलकिट्स" भी हैं , जो आपके द्वारा किए गए कार्यों के आधार पर बहुत मदद कर सकते हैं।

  • मित्रा की डिजिटल सिग्नल प्रोसेसिंग सीखने के लिए एक अच्छी किताब है (MATLAB में!) असतत समय की मूल बातें, फिल्टर, रूपांतर आदि, जो किसी भी सभ्य तकनीकी एल्गोरिदम को करने के लिए बहुत अनिवार्य ज्ञान है।

हां, मैंने इमेज प्रोसेसिंग टूलबॉक्स के प्रलेखन को पढ़ा है। मैं बेहद उपयोगी लगता हूं, लेकिन मेरा सवाल कुछ ऐसा ही लागू करने की ओर था। मूल रूप से, मैं यह जानना चाहता था कि गणितीय एल्गोरिथम / फॉर्मूला कैसे लिया जाए और इसे कैसे लागू किया जाए (जैसे आईपीटी के साथ मैथवर्क्स ने किया था)। मैं विचार पैटर्न या कुछ दिशानिर्देशों के बारे में जानना चाहता था। मैं मित्रा की पुस्तक को देखूंगा। धन्यवाद!
डेमियन

1
उपर्युक्त उत्तर को जोड़ने के लिए, C ++ टूलकिट्स ऐसे आर्मैडिलो बहुत तेजी से C ++ कोड में Matlab कोड के रूपांतरण को सरल कर सकते हैं। अर्माडिलो का वाक्य विन्यास मतलूब के समान है। आप अर्माडिलो के मेक्सिको इंटरफेस के माध्यम से मैटलैब और सी ++ कोड भी मिला सकते हैं।
mtall

2

संख्यात्मक तरीके। यह आमतौर पर एक अपर-डिवीजन विश्वविद्यालय पाठ्यक्रम और पाठ्यपुस्तक है।

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

कभी-कभी मतलब, संख्यात्मक व्यंजनों या विभिन्न छवि / सिग्नल प्रोसेसिंग पुस्तकालयों में वांछित संख्यात्मक समाधान के लिए कुशल एल्गोरिदम या कोड होगा। लेकिन कभी-कभी आपको अपना खुद का रोल करना पड़ सकता है, इसलिए यह विभिन्न संख्यात्मक समाधान विधियों के पीछे के गणित को जानने में मदद करता है। और यह अपने आप में एक बड़ा विषय है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.