Main Content

plotCamera

3 次元座標でのカメラのプロット

説明

cam = plotCamera は、既定のカメラを現在の座標軸の 3 次元座標にプロットします。この関数は cam を返します。これは、プロットされたカメラのプロパティを含んでいる Camera オブジェクトです。

cam = plotCamera(cameraTable) は、cameraTable で指定された 1 台以上のカメラをプロットします。

cam = plotCamera(Name=Value) は、前の構文にある引数の任意の組み合わせに加えて、名前と値の引数を 1 つ以上使用してオプションを指定します。たとえば、Opacity=0.4 は、プロットされたカメラの不透明度を 0.4 に設定します。

名前と値のペアの引数は、プロットされたカメラの可視化オブジェクトの関連プロパティを設定します。

すべて折りたたむ

rigidtform3d オブジェクトを作成します。

initialRotation = [1  0  0;
                   0  0  1;
                   0 -1  0];
initialTranslation = [10 0 20];
pose = rigidtform3d(initialRotation,initialTranslation);

不透明度を 0 とし、作成した rigidtform3d オブジェクトに基づく絶対姿勢を使用して、カメラをプロットします。

cam = plotCamera(AbsolutePose=pose,Opacity=0)
cam = 
  Camera with properties:

           Parent: [1x1 Axes]
             Size: 1
     AbsolutePose: [1x1 rigidtform3d]
          Visible: 1
      AxesVisible: 0
    ButtonDownFcn: ''
            Color: [1 0 0]
          Opacity: 0
            Label: ''

現在の座標軸の表示プロパティを設定します。

grid on
axis equal
axis manual

各座標軸の表示可能な範囲を拡張します。これらの変更により、次のステップでアニメーション全体が表示されるようになります。

xlim([-15 20]);
ylim([-15 20]);
zlim([15 25]);

y 軸を中心としてカメラを回転します。

for theta = 0:10:1800
    updateAngles = [0 -theta 0];
    updateTranslation = [10*cosd(theta) 10*sind(theta) 20];
    updateTform = rigidtform3d(updateAngles, updateTranslation);
    cam.AbsolutePose = rigidtform3d(initialRotation * updateTform.R, updateTform.Translation);
    drawnow();
end

Figure contains an axes object. The axes object contains 10 objects of type line, text, patch.

一連のキャリブレーション イメージを作成します。

imds = imageDatastore(fullfile(toolboxdir("vision"),"visiondata","calibration","slr"));

イメージ内のチェッカーボードのコーナーを検出します。

[imagePoints,boardSize] = detectCheckerboardPoints(imds.Files);

左上隅が (0,0) のパターン中心の座標系でチェッカーボードのコーナーのワールド座標を生成します。正方形のサイズを 29 mm に設定します。

squareSize = 29;
worldPoints = generateCheckerboardPoints(boardSize,squareSize);

イメージをその新しい位置で読み込みます。

imOrig = imread(fullfile(toolboxdir("vision"),"visiondata","calibration","slr","image9.jpg"));
figure;
imshow(imOrig,InitialMagnification=50);
title("Input Image");

Figure contains an axes object. The axes object with title Input Image contains an object of type image.

カメラのキャリブレーションを行います。

cameraParams = estimateCameraParameters(imagePoints,worldPoints,"ImageSize",size(imOrig,1:2));

イメージの歪みを補正します。

im = undistortImage(imOrig,cameraParams.Intrinsics);

新しいイメージで参照オブジェクトを検索します。

[imagePoints,boardSize] = detectCheckerboardPoints(im);

新しい外部パラメーターを計算します。

camExtrinsics = estimateExtrinsics(imagePoints,worldPoints,cameraParams.Intrinsics);

ワールド ポイントをプロットします。

figure;
plot3(worldPoints(:,1),worldPoints(:,2),zeros(size(worldPoints, 1),1),"*");
hold on

Figure contains an axes object. The axes contains a line object which displays its values using only markers.

原点をマークします。

plot3(0,0,0,"g*");

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

カメラの位置と方向を計算します。

absPose = extr2pose(camExtrinsics);

カメラをプロットします。

cam = plotCamera(AbsolutePose=absPose,Size=20);

Figure contains an axes object. The axes object contains 12 objects of type line, text, patch. One or more of the lines displays its values using only markers

z 軸を下に向けます。

set(gca,CameraUpVector=[0 0 -1]);

Figure contains an axes object. The axes object contains 12 objects of type line, text, patch. One or more of the lines displays its values using only markers

表示パラメーターを設定します。

camorbit(gca,-110,60,data=[0 0 1]);
axis equal
grid on

Figure contains an axes object. The axes object contains 12 objects of type line, text, patch. One or more of the lines displays its values using only markers

3 次元回転をオンにします。

cameratoolbar('SetMode','orbit');

座標軸にラベルを付けます。

xlabel("X (mm)");
ylabel("Y (mm)");
zlabel("Z (mm)");

Figure contains an axes object. The axes object with xlabel X (mm), ylabel Y (mm) contains 12 objects of type line, text, patch. One or more of the lines displays its values using only markers

入力引数

すべて折りたたむ

カメラの可視化のためのプロパティ。table として指定します。各行が 1 台のカメラを表します。各列のタイトルが、名前と値のペアの引数の名前部分と一致していなければなりません。n 行目の値で、cam の n 番目の要素のプロパティを設定します。Parent の値は指定できません。table に ViewId 列が含まれている場合は、カメラの Label の値の設定にビュー ID が使用されます。

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: Size=0.3 は、カメラの基本幅を 0.3 と指定します。

ワールド座標系におけるカメラの絶対姿勢。rigidtform3d オブジェクトとして指定します。

カメラの基本幅。正の実数として指定します。

カメラのラベル。文字ベクトルまたは string スカラーとして指定します。

カメラの色。RGB 3 成分として指定します。RGB 3 成分は、色の赤、緑、青成分の強度を指定する 3 成分の行ベクトルです。強度は [0, 1] の範囲でなければなりません。

カメラの不透明度。範囲 [0, 1] のスカラーとして指定します。

カメラの可視性。数値または logical の 1 (true) または 0 (false) として指定します。

カメラの座標軸の可視性。数値または logical の 1 (true) または 0 (false) として指定します。

コールバック関数。カメラをクリックしたときに実行される関数ハンドルとして指定します。

出力座標軸。axes ハンドルとして指定します。既定では、plotCamera は現在の座標軸ハンドルを使用します。現在の座標軸を返すには、関数 gca を使用します。

出力引数

すべて折りたたむ

カメラ可視化オブジェクト。次のいずれかのオプションとして返されます。

  • Camera オブジェクト — 1 台のカメラをプロットする場合、関数はこのオプションを返します。名前と値の引数または入力要素 cameraTable により、対応する Camera オブジェクトのプロパティが設定されます。

  • Camera オブジェクトの列ベクトル — 複数のカメラをプロットする場合、関数はこのオプションを返します。入力 cameraTable の n 行目の値により、このベクトルの n 番目の Camera オブジェクトのプロパティが設定されます。

カメラ オブジェクトは、vision.graphics.Camera クラスを使用して作成されます。このクラスには、次のプロパティが含まれます。

バージョン履歴

R2015a で導入

すべて展開する