Для одномерного случая, имеющего дело с набором векторов, другие ответы указывают на правильные решения (включая заполнение более короткого вектора нулями или выполнение сложения с использованием субиндекса в более длинный вектор). Однако, поскольку вы упомянули в комментарии, что в конечном итоге хотите добавить два изображения в градациях серого, я решил показать вам более общее двумерное решение для матриц.
Сначала я загружу несколько встроенных примеров изображений 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');
Обратите внимание, что я включил '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
для выполнения операций, а затем масштабируя их перед сохранением изображения.