对于处理一组向量的一维情况,其他答案指出正确的解决方案(涉及用零填充较短的向量或使用子索引添加到较长的向量中执行加法)。但是,由于您在评论中提到您最终想要将两个灰度图像添加到一起,因此我认为我会向您展示矩阵的更一般的二维解决方案。
首先,我会加载一些内置的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);
注:一个重要的事情考虑是你使用的图像类型。通常情况下,加载到MATLAB中的图像数据类型为uint8
。但是,您可能会注意到,如上所述添加两个8位无符号整数图像可能会导致饱和,其中像素数超过255(8位无符号整数的最大值)。结果是图像的部分看起来很亮白,并且失去了细节(注意一些与上面小图像重叠的辣椒)。您可能希望通过在添加图像之前缩放图像中的值来避免这种情况,或者通过将图像转换为double
来执行操作,然后在重新保存图像前对其进行缩放。
酷。这是因为我有2个矩阵,其实是我想补充的灰度图。所以现在我想推广你的解决方案矩阵=) – Louise 2009-12-21 12:19:37
-1:它在某些情况下在数学上有意义。 – 2014-06-28 01:46:29
是是的话,例如,治疗信号作为向量时(意味着Z变换) – 2016-12-22 04:18:15