2009-12-21 77 views
6

我想在Matlab或Octave中添加兩個不同長度的向量。例如。如何添加不同長度的向量?

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

應導致含有

cc = [101 102 3 4] 

任何人都可以找出如何做到這一點的矢量CC哪個?

更新:這是我結束的代碼,然後我轉換爲灰度圖像的信號。

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 2009-12-21 12:19:37

+2

-1:它在某些情況下在數學上有意義。 – 2014-06-28 01:46:29

+0

是是的話,例如,治療信號作爲向量時(意味着Z變換) – 2016-12-22 04:18:15

4

我沒有使用MATLAB十年,但我認爲你將不得不這樣做:

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

它給「錯誤:非平衡的或意外的括號或支架。」但是「cc = aa + [bb zeros(1,length(bb))];」正在工作=) – Louise 2009-12-21 12:20:25

+1

@Louise,我的壞,它應該是'長度',而不是'大小'。從'長度(bb)=長度(aa) - 長度(bb)'開始,'零(1,長度(bb))'起作用只是巧合。 – 2009-12-21 12:27:39

+0

很酷。感謝您的清除。 – Louise 2009-12-21 12:46:48

9

對於處理一組向量的一維情況,其他答案指出正確的解決方案(涉及用零填充較短的向量或使用子索引添加到較長的向量中執行加法)。但是,由於您在評論中提到您最終想要將兩個灰度圖像添加到一起,因此我認爲我會向您展示矩陣的更一般的二維解決方案。

首先,我會加載一些內置的MATLAB樣本圖像,並得到它們的大小:

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

請注意,我轉換的RGB圖像灰度首先使用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 2009-12-23 11:25:05

1

如果一個給定的AA比BB大,那麼我會做到這一點:

cc = aa; 
cc(1:length(bb)) = cc(1:length(bb)) + bb;