MATLAB Answers

長方形の画像を台形にする関数

1 view (last 30 days)
akasa
akasa on 3 Jul 2021
Commented: akasa on 9 Jul 2021
前回と似たアニメーションを製作中なのですが、今度は壁に画像を貼り付けたいと考えています。壁に貼り付けたとき画像が斜め前方にあるとすると自分からは台形に見えると思います。なので長方形の画像を台形にする関数の使い方を教えていただきたいです。
またその際に前回同様赤い台形の部分を探して画像を貼り付けようと考えているのでその方法も教えていただきたいです。

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 8 Jul 2021
Edited: Atsushi Ueno on 8 Jul 2021
本質問に対して本回答に至ったのは、@akasaさんの他の質問にも関連した経緯があります。
画像貼付にimfuse関数を使い(使い方が良く判ってないので)画像が変ですが目的まで到達しました。また後で直します。
%% 壁と赤い領域のある画像の読み込み
Rode = imread('blob.jpg');
[RY,RX,~] = size(Rode);
%% 赤い台形領域の検出 (画像内の色を検索する方法+@)
red = 80; green = 30; blue = 30;
[y,x] = ind2sub(size(Rode), find(Rode(:,:,1) >= red & Rode(:,:,2) <= green & Rode(:,:,3) <= blue));
LtX = min(x); RtX = max(x); UpY = min(y); DnY = max(y); % 台形の左上と右下の座標を得る(簡易版)
y = find(Rode(:,RtX,1) >= red & Rode(:,RtX,2) <= green & Rode(:,RtX,3) <= blue);
RtUpY = min(y); RtDnY = max(y); % 台形の右上と左下の座標を得る(簡易インチキ版)
%% 射影変換 (正方形から台形への射影変換)
img = imread('Matlab_Logo.png');
[SY,SX,~] = size(img);
movingPoints = [1 1; SX 1; 1 SY; SX SY];
fixedPoints = [LtX UpY; RtX RtUpY; LtX RtDnY; RtX DnY];
tform = fitgeotrans(movingPoints, fixedPoints, 'Projective');
RA = imref2d([RX RY], [1 RY], [1 RX]);
[out,r] = imwarp(img, tform, 'OutputView', RA);
C = imfuse(Rode,out,'blend','Scaling','joint');
imshow(C);
今は壁と赤い領域のある画像を直接読み込んでいますが、OpenGLで表示した画面のスクリーンショットを撮れば、ARのような扱いも可能になり、処理を繰り返せばアニメーション表示にも対応出来るはずです。(下記MATLAB Onlineではスクショが撮れず、デスクトップのMATLABにはImage Processing Toolboxが入ってないので、両方とも動かす事ができませんでした)
  3 Comments
akasa
akasa on 9 Jul 2021
そうなのですね。
ありがとうございます。

Sign in to comment.

More Answers (0)

Products


Release

R2021a

Community Treasure Hunt

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

Start Hunting!