切り取った小さな画像​を大きな画像の任意の​場所に貼り付ける

23 ビュー (過去 30 日間)
YK
YK 2021 年 5 月 30 日
回答済み: Atsushi Ueno 2021 年 5 月 30 日
matlabで、小さい画像を大きな画像の任意の場所に貼り付けることはできるでしょうか?
今、人が2人写っているとある画像をグレースケールにし、顔をモザイク化して、そのモザイクのみを切り取り、元のカラーの画像の顔の部分に貼り付ける、ということをやろうとしています。
モザイクの切り取りまではうまく行きましたが、元のカラー画像への貼り付けができません。
しかし、ネットで検索をしても「2つのイメージを合成する方法」だったり、「PowerPointに画像を貼り付ける方法」のようなものしかヒットしません。
私がやろうとしていることはmatlabで可能でしょうか?
以下は途中までのコードになっております。
%% 画像の読み込み、グレースケール化
I=imread('kadai400.png');
%グレースケールにする
Igray=rgb2gray(I);
figure,imshow(Igray);
%% 顔をモザイク化する
% 40-80,190-230をモザイク化
m=10;
for i=40:10:80
for j=190:10:230
Igray(i:i+m,j:j+m)=mean2(Igray(i:i+m,j:j+m));
end
end
% 80-110,130-160をモザイク化
for i=80:10:110
for j=130:10:160
Igray(i:i+m,j:j+m)=mean2(Igray(i:i+m,j:j+m));
end
end
figure,imshow(Igray);
%モザイク化した画像を変数に保存
for i=40:10:80
for j=190:10:230
%男性のモザイク
Itrm1=imcrop(Igray,[190 40 50 50]);
end
end
for i=80:10:110
for j=130:10:160
%女性のモザイク
Itrm2=imcrop(Igray,[130 80 40 40]);
end
end
%% figureに3つの画像を表示させる
subplot(1,3,1)
imshow(I)
title('Original Image')
subplot(1,3,2)
imshow(Itrm1)
title('trm Image1')
subplot(1,3,3)
imshow(Itrm2)
title('trm Image2')
%% 作ったモザイクを、カラー画像の顔に貼り付ける
  2 件のコメント
Atsushi Ueno
Atsushi Ueno 2021 年 5 月 30 日
何故カラー画像のままモザイク処理をしないのでしょうか?アルゴリズムの勉強の為でしょうか?
【Matlab】画像のラスタスキャン(モザイク処理)【for文】 : 初心者によるArduinoとProcessingを使ったロボット製作 (blog.jp) >ただ、「Matlab モザイク処理」とか「Matlab ラスタスキャン」とかで調べちゃうと、Matlabの場合blockprocっていう「イメージの個別ブロック処理」ってのがあって、それで2次元画像の場合は済んじゃうんですよね。しかも処理が速い。これじゃ3次元に対応できない。。し、アルゴリズムの勉強ができない・・・ってなったんです。
mean2は使うんかい!とツッコみたくなりますが
Atsushi Ueno
Atsushi Ueno 2021 年 5 月 30 日
編集済み: Atsushi Ueno 2021 年 5 月 30 日
imcropは繰り返す必要はありません。またx座標とy座標の指定が逆になっています。x:40-80, y:190-230とx:80-110, y:130-160を切り取るのであれば以下のようになります。
%モザイク化した画像を変数に保存
%男性のモザイク
Itrm1=imcrop(Igray,[40 190 40 40]); % x:40-80, y:190-230
%女性のモザイク
Itrm2=imcrop(Igray,[80 130 30 30]); % x:80-110, y:130-160

サインインしてコメントする。

採用された回答

Atsushi Ueno
Atsushi Ueno 2021 年 5 月 30 日
>私がやろうとしていることはmatlabで可能でしょうか?
  1. 元のカラー画像に、グレースケールのモザイクを、カラーに戻して貼り付け→貼付は可能、色の復元は難しい
  2. 元のカラー画像に、グレースケールのモザイクを、そのまま貼り付け→可能
2.「グレースケールのモザイクをそのまま貼り付け」から先に
%モザイク化した画像を変数に保存(toolboxが無くimcropが使えない為、直に処理しました)
Itrm1 = Igray(40:80,190:230);
Itrm2 = Igray(80:110,130:160);
% 切り取ったモザイクを、元のカラーの画像の顔の部分に貼り付ける
I(40:80,190:230,:) = repmat(Itrm1,[1,1,3]);
I(80:110,130:160,:) = repmat(Itrm2,[1,1,3]);
切り取ったグレースケール画像をRGB3枚分に複製し、元のカラー画像に貼り付けました。実際に動かして元のカラー画像にグレースケールのモザイクが貼り付けられた事を確認できました。
本当はグレー色をRGBに戻す際は各色の重みを考慮する必要がありますが目的外なのでやりません。興味があれば試してみてください。RGB イメージまたはカラーマップをグレースケールに変換 - MATLAB rgb2gray - MathWorks 日本 > rgb2gray は、R 成分、G 成分、B 成分の重み付き和を計算することによって、RGB 値をグレースケール値に変換します。0.2989 * R + 0.5870 * G + 0.1140 * B
1.「グレースケールのモザイクを、カラーに戻して貼り付け」
色の復元は、原理的には不可能です。職人技とか流行りのAIを駆使して工夫すればそれなりにカラー画像に戻せるでしょう。グレースケールにカラーマップを当てて疑似カラーにする例が下記リンクにありました。しかし目的が無い(そんな苦労してやるより元のカラー画像をモザイク処理すれば良い)のでこれもやりません。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeModify Image Colors についてさらに検索

Community Treasure Hunt

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

Start Hunting!