ベクトルのセットを扱う1次元の場合、他の回答は正しい解決策を示します(短いベクトルにゼロをパディングするか、長いベクトルにサブインデックスを使用して加算を実行することを含みます)。ただし、コメントで、最終的に2つのグレースケール画像を一緒に追加したいとおっしゃっていたので、行列のより一般的な2Dソリューションを紹介したいと思いました。
まず、組み込みのMATLABサンプル画像をいくつかロードし、それらのサイズを取得します。
image1 = rgb2gray(imread('peppers.png'));
image2 = imread('cameraman.tif');
[r1, c1] = size(image1);
[r2, c2] = size(image2);
最初にを使用してRGB画像をグレースケールに変換したことに注意してくださいrgb2gray
。次に、サイズが2つの画像のサイズの最大値であるゼロの新しいマトリックスを作成します。
newImage = zeros(max(r1, r2), max(c1, c2), 'uint8');
ゼロの行列を画像と同じタイプにして、その後の操作が正しく機能するようにするため、'uint8'
の呼び出しに含めたことに注意してください。zeros
これで、マトリックスnewImage
は2つの画像のいずれかを含むのに十分な大きさになりました。最後に、次のように画像を新しい画像に追加できます。
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);

注:考慮すべき重要なことの1つは、画像に使用するタイプです。通常、MATLABにロードされる画像データのタイプはuint8
です。ただし、上記のように2つの8ビット符号なし整数画像を追加すると、ピクセルが255の値(8ビット符号なし整数の最大値)を超えると飽和状態になる可能性があることに気付くかもしれません。その結果、画像の一部が明るい白に見え、ディテールが失われます(上の小さな画像と重なっているコショウの一部に注意してください)。これを回避するには、画像を追加する前に画像の値をスケーリングするか、画像をタイプに変換しdouble
て操作を実行し、画像を再保存する前にスケーリングします。