blockproc
के बाद से (और पदावनत blkproc
) Image Processing Toolbox में दोनों कार्य हैं, मैंने सोचा कि मैं एक बुनियादी MATLAB समाधान है कि कोई अतिरिक्त toolboxes की आवश्यकता है ...
जोड़ना होगा यदि आप एक विभाजित करने के लिए चाहते हैं मैट्रिक्स submatrices में, एक ही रास्ता मैट्रिक्स को तोड़ने के लिए और एक सेल सरणी के एक सेल में प्रत्येक submatrix स्टोर करने के लिए mat2cell
उपयोग करने के लिए है। आपके मामले के लिए, वाक्य रचना इस प्रकार दिखाई देगा:
C = mat2cell(I, [128 128], [128 128]);
C
अब प्रत्येक कोशिका I
की एक 128-दर-128 submatrix भंडारण के साथ एक 2-दर-2 सेल सरणी है। आप प्रत्येक कोशिका पर कार्रवाई चाहते हैं, आप तो समारोह cellfun
इस्तेमाल कर सकते हैं। उदाहरण के लिए, यदि आप प्रत्येक submatrix में मूल्यों का मतलब ले जाना चाहते थे, आप क्या करेंगे निम्नलिखित:
meanValues = cellfun(@(x) mean(x(:)), C);
पहला तर्क एक anonymous function जो पहले एक स्तंभ वेक्टर और उसके बाद में प्रत्येक submatrix को नया स्वरूप दे करने के लिए एक function handle है मतलब लेता है। आउटपुट प्रत्येक सबमिट्रिक्स के लिए औसत मानों का 2-बाय-2 मैट्रिक्स है।समारोह आप cellfun
के पास विभिन्न आकार या प्रत्येक कक्ष के लिए प्रकार के आउटपुट बनाता है, तो cellfun
उन्हें श्रृंखलाबद्ध एक समस्या है जाएगा और एक त्रुटि फेंक देगा: आप करने के लिए अपने कॉल के अंत करने के लिए ..., 'UniformOutput', false);
जोड़ देते हैं तो
??? Error using ==> cellfun
Non-scalar in Uniform output, at index 1, output 1.
Set 'UniformOutput' to false.
cellfun
, फिर उपर्युक्त मामले में आउटपुट 2-बाय-2 सेल सरणी होगा जिसमें प्रत्येक सबमिट्रिक्स पर ऑपरेशन करने के परिणाम शामिल होंगे।
यदि आप अभी भी BLKPROC फ़ंक्शन के साथ छवि प्रसंस्करण टूलबॉक्स का पुराना संस्करण उपयोग कर रहे हैं, तो उपरोक्त उदाहरण का वाक्यविन्यास बदल जाएगा: 'B = blkproc (I, [8 8], @ (x) माध्य (एक्स (:))); ' – gnovice