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

52 次查看(过去 30 天)
akasa
akasa 2021-6-22
评论: akasa 2021-6-23
ある画像Aの上に他の画像Bを貼り付けたいと考えています。
ここで、Aの配列の一部をBの配列に置き換えることで作成したい画像A’ができると思うのですが、どのようにやればいいのか教えてください。
どちらもRGBでやりたいです。

采纳的回答

Atsushi Ueno
Atsushi Ueno 2021-6-22
编辑:Atsushi Ueno 2021-6-22
と同一内容の回答になりますが、厳密にいえば画像の貼り付けではなく配列の置き換えに関する質問なので異なると言えば異なります。画像データの置き換えも配列データの置き換えも実質同じだという事を説明する意味でも回答致します。
ここで扱うカラー画像のデータは、サイズが(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 个评论
akasa
akasa 2021-6-22
ご回答ありがとうございます。
自分の画像でも実行することができました!

请先登录,再进行评论。

更多回答(1 个)

Hernia Baby
Hernia Baby 2021-6-22
先回の質問にあった 画像の上に画像を貼り付ける の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 个评论
Hernia Baby
Hernia Baby 2021-6-22
解決できたみたいで幸いです。 回答者側も勉強になるので、わからないことあれば、これからも質問よろしくお願いします。
akasa
akasa 2021-6-23
そうなのですね。
また質問する機会があればよろしくお願いします。

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

产品


版本

R2021a

Community Treasure Hunt

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

Start Hunting!