配列の一部をほかの配列の要素と置き替える

ある画像Aの上に他の画像Bを貼り付けたいと考えています。
ここで、Aの配列の一部をBの配列に置き換えることで作成したい画像A’ができると思うのですが、どのようにやればいいのか教えてください。
どちらもRGBでやりたいです。

 Accepted Answer

Atsushi Ueno
Atsushi Ueno on 22 Jun 2021
Edited: Atsushi Ueno on 22 Jun 2021

1 vote

と同一内容の回答になりますが、厳密にいえば画像の貼り付けではなく配列の置き換えに関する質問なので異なると言えば異なります。画像データの置き換えも配列データの置き換えも実質同じだという事を説明する意味でも回答致します。
ここで扱うカラー画像のデータは、サイズが(x方向画素数,y方向画素数,RGB3要素)であるuint8型の3次元配列データです。
a = uint8(randi([0 255],[100 100 3])); % 100*100*3のuint8型配列を0-255のランダム値で埋める
imshow(a); % aを画像として表示
b = uint8(cat(3,ones(50).*255,zeros(50),zeros(50))); % 50*50*3のuint8型配列を(R:全部255,G:全部0,B:全部0)に設定
imshow(b); % bを画像として表示
a_dash = a; % aをa'としてコピー
a_dash(25:74,25:74,:) = b; % a'の座標(25~74,25~74,1~3)の値をb(1~50,1~50,1~3)の値に置き換える
imshow(a_dash); % a'を画像として表示

1 Comment

akasa
akasa on 22 Jun 2021
ご回答ありがとうございます。
自分の画像でも実行することができました!

Sign in to comment.

More Answers (1)

Hernia Baby
Hernia Baby on 22 Jun 2021

0 votes

先回の質問にあった 画像の上に画像を貼り付ける のStep3の部分に相当します。
RGBもグレースケールも同じ処理なので、簡単なグレースケールで例を示します
x = linspace(255,0,12);
x = uint8(x);
I = reshape(x,[3,4]);
imshow(I,'InitialMagnification','fit');
ここから右下だけ真っ白にします
これは 変数 Ⅰ の最後の行列の数字を0から255に上書きするので表示が変わります
I(end,end) = 255;
imshow(I,'InitialMagnification','fit');
これを三次元にしたものがRGB版になります。

3 Comments

akasa
akasa on 22 Jun 2021
ご回答ありがとうございます。
上の回答者様のほうが早かったため採用させていただきましたが、あなた様の回答も参考にさせていただきました。
Hernia Baby
Hernia Baby on 22 Jun 2021
解決できたみたいで幸いです。 回答者側も勉強になるので、わからないことあれば、これからも質問よろしくお願いします。
akasa
akasa on 23 Jun 2021
そうなのですね。
また質問する機会があればよろしくお願いします。

Sign in to comment.

Products

Release

R2021a

Asked:

on 22 Jun 2021

Commented:

on 23 Jun 2021

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!