для 1-D случае имеем дело с множеством векторов, в другие ответы указывают на правильные решения (включая заполнение более короткого вектора нулями или выполнение добавления с использованием субиндекса в длинный вектор). Однако, поскольку вы упомянули в комментарии, что в конечном итоге вы хотите добавить два изображения в оттенках серого, я подумал, что покажу вам более общее 2-D решение для матриц.
Во-первых, я буду загружать несколько встроенных образцов изображений 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
для выполнения операций, а затем для их масштабирования перед сохранением изображения.
Круто. Это потому, что у меня есть 2 матрицы, которые на самом деле представляют собой изображения в масштабе серого, которые я хотел бы добавить. Итак, теперь я хотел бы обобщить ваше решение на матрицы =) – Louise
-1: в некоторых случаях это имеет смысл математически. –
Да, например, при обработке сигналов в виде векторов (означает z-преобразование) –