2009-12-21 12 views
6

मैं मैटलैब या ऑक्टेव में अलग-अलग लंबाई के साथ दो वैक्टर जोड़ना चाहता हूं। जैसेविभिन्न लंबाई के साथ वैक्टर जोड़ने के लिए कैसे?

aa = [1 2 3 4]; 
bb = [100 100]; 

कौन सा युक्त

cc = [101 102 3 4] 

किसी को भी यह पता लगाने कर सकते हैं ऐसा करने के तरीके एक वेक्टर सीसी में परिणाम चाहिए?

अपडेट: यह वह कोड है जो मैंने संकेतों के साथ समाप्त किया था जिसे बाद में मैं ग्रे स्केल छवियों में परिवर्तित कर देता हूं।

load train; 
t = y; 
load chirp; 
c = y; 

tc = c + [t; zeros(length(c) - length(t),1)]; 

plot(1:length(tc),tc) 

आप आप सभी को बहुत बहुत धन्यवाद =)

उत्तर

6

यह गणितीय किसी भी मतलब नहीं है, लेकिन अगर आप जोर देते हैं, तो आप ऐसा कर सकते हैं:

cc = aa + [bb zeros(1,2)]; 
+0

कूल। ऐसा इसलिए है क्योंकि मेरे पास 2 मैट्रिक्स हैं, जो वास्तव में ग्रे स्केल चित्र हैं जिन्हें मैं जोड़ना चाहता हूं। तो अब मैं मैट्रिक्स के लिए अपने समाधान को सामान्य बनाना चाहता हूं =) – Louise

+2

-1: कुछ मामलों में यह गणितीय रूप से समझ में आता है। –

+0

हां, उदाहरण के लिए, वैक्टर के रूप में संकेतों का इलाज करते समय (जेड-ट्रांसफॉर्म का मतलब है) –

4

मुझे नहीं है दस वर्षों में MATLAB थे, लेकिन मुझे लगता है कि आप की तरह कुछ करना होगा:

cc = aa + [bb zeros(1, length(aa) - length(bb))] 
+0

यह "त्रुटि: असंतुलित या अप्रत्याशित ब्रांडेसिस या ब्रैकेट" देता है। लेकिन "सीसी = एए + [बीबी शून्य (1, लंबाई (बीबी))];" काम कर रहा है =) – Louise

+1

@ लुईस, मेरा बुरा, यह 'लंबाई 'होना चाहिए और' आकार 'नहीं होना चाहिए था। वह 'शून्य (1, लंबाई (बीबी))' काम सिर्फ एक संयोग है क्योंकि लंबाई (बीबी) = लंबाई (एए) - लंबाई (बीबी) '। –

+0

कूल। इसे साफ़ करने के लिए धन्यवाद। – Louise

9

1-डी मामले वैक्टर, का एक सेट के साथ काम करने के लिए अन्य उत्तरों सही समाधानों को इंगित करते हैं (शून्य वेक्टर के साथ छोटे वेक्टर को पैडिंग करना या लंबे वेक्टर में उपनिवेश का उपयोग करके अतिरिक्त प्रदर्शन करना)। हालांकि, चूंकि आपने एक टिप्पणी में उल्लेख किया है कि आप आखिरकार दो ग्रेस्केल छवियों को एक साथ जोड़ना चाहते हैं, मैंने सोचा कि मैं आपको मैट्रिस के लिए एक सामान्य सामान्य 2-डी समाधान दिखाऊंगा।

पहले, मैं कुछ बिल्ट-इन MATLAB नमूना छवियों और मिल उनके आकार लोड होगी:

image1 = rgb2gray(imread('peppers.png')); 
image2 = imread('cameraman.tif'); 
[r1, c1] = size(image1); 
[r2, c2] = size(image2); 

सूचना है कि मैं आरजीबी छवि परिवर्तित rgb2gray का उपयोग कर पहली स्केल के लिए। के बाद से आप के लिए शून्य की मैट्रिक्स चाहते

newImage = zeros(max(r1, r2), max(c1, c2), 'uint8'); 

सूचना है कि मैं zeros करने के लिए कॉल में 'uint8' शामिल,: अगले, मैं शून्य जिसका आकार दो छवियों के आकार की अधिकतम है की एक नई मैट्रिक्स बनाती हूँ अपनी छवियों के समान ही हो, ताकि उनके बाद के ऑपरेशन सही तरीके से काम करेंगे। मैट्रिक्स newImage अब दो छवियों में से किसी एक को रखने के लिए काफी बड़ा है। अंत में, छवियों तो जैसे नई छवि में जोड़ा जा सकता:

newImage(1:r1, 1:c1) = image1;      % Insert image 1 
newImage(1:r2, 1:c2) = newImage(1:r2, 1:c2)+image2; % Add image 2 

और आप निम्नलिखित के साथ देख सकते हैं:

imagesc(newImage); 
colormap(gray); 

enter image description here

नोट: एक महत्वपूर्ण बात करने के लिए विचार करें कि आप छवियों के लिए उपयोग करते हैं। आम तौर पर, MATLAB में लोड किया गया छवि डेटा uint8 प्रकार है। हालांकि, आप देख सकते हैं कि ऊपर दी गई दो 8-बिट हस्ताक्षरित पूर्णांक छवियों को जोड़कर संतृप्ति हो सकती है जहां पिक्सल 255 के मान से अधिक हो (8-बिट हस्ताक्षरित पूर्णांक के लिए अधिकतम मान)। नतीजा यह है कि छवि के कुछ हिस्से उज्ज्वल सफेद दिखते हैं और विस्तार खो देते हैं (उपरोक्त छोटी छवि को ओवरलैप करने वाले कुछ मिर्च देखें)। आप उन्हें जोड़ने से पहले अपनी छवियों में मूल्यों को स्केल करके या अपनी छवियों को परिवर्तित करने के लिए double को ऑपरेशन करने के लिए और फिर छवि को सहेजने से पहले स्केल करके इसे टालना चाह सकते हैं।

+0

वाह! उस बहुत विस्तृत समाधान के लिए बहुत बहुत धन्यवाद! यही वही था जो मैं करना चाहता था। =) – Louise

1

यदि यह एक दिया जाता है कि आ bb से बड़ा है, तो मैं इस करना होगा:

cc = aa; 
cc(1:length(bb)) = cc(1:length(bb)) + bb; 
संबंधित मुद्दे