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

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

Akzeptierte Antwort

Atsushi Ueno
Atsushi Ueno am 8 Jul. 2021
Bearbeitet: Atsushi Ueno am 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 Kommentare
Atsushi Ueno
Atsushi Ueno am 9 Jul. 2021
Image Processing Toolboxが無いと、fitgeotrans等の関数を使う事が出来ません。
akasa
akasa am 9 Jul. 2021
そうなのですね。
ありがとうございます。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Produkte


Version

R2021a

Community Treasure Hunt

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

Start Hunting!