カメラと同じ視線のプロット図

3 ビュー (過去 30 日間)
shiomi
shiomi 2023 年 6 月 20 日
コメント済み: shiomi 2023 年 6 月 21 日
現在私は大学で研究しているものです。
私はカメラ4台を用いて粒子を撮影して、粒子の軌道を解析する研究をしています。
現在、私はPTVアルゴリズムを用いて、4台のカメラ(カメラ間隔45度)から撮影した粒子の三次元再構成
をしました。(下の図の通り)
ここから私がやりたい操作としては、再構成された三次元プロット図から(横軸:X , 縦軸:Y , 奥行き方向 : Z)
カメラからの視線と同じ二次元プロット図を生成したいということです。
以下の図2に示すのはXY断面図ですが、これは粒子を真正面から捉えた図となっています。
しかし、真正面にはカメラがないので、カメラからの視点と同じ断面図がほしいと思っています。
正確には、このXY断面の奥行き方向に伸ばした垂線に対して、Z軸反時計回り(時計回りどちらでも)22.5度
ずらした断面図がほしいです。(両周り22.5度ずつに2台のカメラがあるため)
MATLAB上でカメラからの視線と同じ断面図プロットはできますでしょうか。
何かカメラパラメータの入力が必要になるのでしょうか。
私の技術不足で申し訳ありませんが、ご教授いただければ幸いです。

回答 (1 件)

交感神経優位なあかべぇ
交感神経優位なあかべぇ 2023 年 6 月 20 日
粒子(点群)をZ軸方向に回転させる回転行列を使用して、点群データを内積したのち、2次元平面上の描画をすればよいと思います。
下記にサンプルコードを書きました。
ptCloud = pcread('teapot.ply'); %pcreadはComputerVisionToolboxが必要(サンプルデータ作成にのみ使用)
data = ptCloud.Location;
scatter3(data(:,1), data(:,2), data(:,3), 'Marker', '.');% 元データの描画
% Z軸に対し、反時計周りに22.5度回転させる回転行列の作成
cosVal = cos(deg2rad(22.5));
sinVal = sin(deg2rad(22.5));
M = eye(3);
M(1:2,1:2) = [cosVal, -sinVal; sinVal, cosVal];
% 回転行列の内積計算
zrotateData = (M * data')';
% 回転させたデータの描画
figure;
scatter3(zrotateData(:,1), zrotateData(:,2), zrotateData(:,3), 'Marker', '.');% 元画像の表示
% XY面の描画(上から見た図)
figure;
scatter(zrotateData(:,1), zrotateData(:,2), 'Marker', '.');
  1 件のコメント
shiomi
shiomi 2023 年 6 月 21 日
ご回答ありがとうございます。
回転行列の案は出てこなかったので、
ご提案いただいた回転行列を用いたコードで確かに
私がしたいことを行うことができました。
改めて、ご教示いただきありがとうございました。

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

カテゴリ

Help Center および File ExchangeLIDAR および点群の処理 についてさらに検索

製品


リリース

R2021b

Community Treasure Hunt

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

Start Hunting!