如何添加不同长度的向量?

时间:2009-12-21 11:58:02

标签: matlab vector octave

我想在Matlab或Octave中添加两个不同长度的向量。 E.g。

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

哪个应该导致包含

的矢量cc
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)

非常感谢你们所有人=)

4 个答案:

答案 0 :(得分:10)

对于处理一组向量的1-D情况,其他答案指出正确的解决方案(包括用零填充较短的向量或使用子索引对较长向量执行加法)。但是,由于您在评论中提到您最终想要将两个灰度图像一起添加,我想我会向您展示一个更为通用的二维矩阵解决方案。

首先,我将加载一些内置的MATLAB样本图像并获得它们的大小:

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

请注意,我首先使用rgb2gray将RGB图像转换为灰度。接下来,我将制作一个新的零矩阵,其大小是两个图像大小的最大值:

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以执行操作,然后在重新保存图像之前缩放图像来避免这种情况。

答案 1 :(得分:6)

这在数学上没有任何意义,但如果你坚持,你可以这样做:

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

答案 2 :(得分:4)

我十年没有使用MATLAB了,但我认为你必须做一些像:

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

答案 3 :(得分:1)

如果给定的aa大于bb,那么我会这样做:

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