对于处理一组向量的一维情况,其他答案指出了正确的解决方案(包括用零填充较短的向量或使用子索引执行加法到较长的向量)。但是,由于您在评论中提到您最终希望将两个灰度图像添加在一起,我想我会向您展示一个更通用的矩阵二维解决方案。
首先,我将加载一些内置的 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');
请注意,我包含'uint8'
在对 的调用中zeros
,因为您希望零矩阵与图像的类型相同,以便对它们的后续操作能够正常工作。矩阵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);

注意:要考虑的一件重要事情是您用于图像的类型。通常,加载到 MATLAB 中的图像数据是uint8
. 但是,您可能会注意到,像我上面所做的那样添加两个 8 位无符号整数图像会导致像素超过 255 值(8 位无符号整数的最大值)的饱和度。结果是图像的某些部分看起来是明亮的白色并丢失了细节(请注意一些与上面较小图像重叠的辣椒)。您可能希望通过在添加图像之前缩放图像中的值来避免这种情况,或者通过将图像转换为类型double
以执行操作,然后在重新保存图像之前对其进行缩放。