Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

plotCamera

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

説明

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

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

cam = plotCamera(Name,Value) は、1 つ以上の名前と値のペアの引数を使用してオプションを指定します。たとえば、'Opacity',0.4 は、プロットされたカメラの不透明度を 0.4 に設定します。

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

すべて折りたたむ

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

R = [1 0 0; 0 0 -1;0 1 0];
t = [10 0 20];
pose = rigid3d(R,t);

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

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

           Parent: [1x1 Axes]
             Size: 1
     AbsolutePose: [1x1 rigid3d]
          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:pi/64:10*pi
    T = [cos(theta) 0 sin(theta);0 1 0;-sin(theta) 0 cos(theta)];
    cam.AbsolutePose = rigid3d(T * R, [10 * cos(theta), 10 * sin(theta), 20]);
    drawnow();
end

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

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

images = imageSet(fullfile(toolboxdir('vision'),'visiondata','calibration','slr'));

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

[imagePoints,boardSize] = detectCheckerboardPoints(images.ImageLocation);

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

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

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

cameraParams = estimateCameraParameters(imagePoints,worldPoints);

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

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

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

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

im = undistortImage(imOrig,cameraParams);

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

[imagePoints,boardSize] = detectCheckerboardPoints(im);

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

[rotationMatrix,translationVector] = extrinsics(imagePoints,worldPoints,cameraParams);

ワールド座標点をプロットします。

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

Figure contains an axes. The axes contains an object of type line.

原点をマークします。

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

Figure contains an axes. The axes contains 2 objects of type line.

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

orientation = rotationMatrix';
location = -translationVector * orientation;

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

absPose = rigid3d(orientation,location);
cam = plotCamera('AbsolutePose',absPose,'Size',20);

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

z 軸を下に向けます。

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

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

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

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

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

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

cameratoolbar('SetMode','orbit');

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

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

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

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

入力引数

すべて折りたたむ

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

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

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

ワールド座標系におけるカメラの絶対姿勢。rigid3d オブジェクト 'AbsolutePose' で構成されるコンマ区切りペアとして指定します。

カメラの基本幅。'Size' と正の実数で構成されるコンマ区切りペアとして指定します。

カメラのラベル。'Label' と、文字ベクトルまたは string スカラーで構成されるコンマ区切りのペアとして指定します。

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

カメラの不透明度。'Opacity' と [0,1] の範囲のスカラーで構成されるコンマ区切りのペアとして指定します。

カメラの可視性。'Visible' と数値または logical 1 (true) または 0 (false) で構成されるコンマ区切りペアとして指定します。

カメラの座標軸の可視性。'AxesVisible' と数値または logical 1 (true) または 0 (false) で構成されるコンマ区切りペアとして指定します。

コールバック関数。'ButtonDownFcn' と、カメラをクリックしたときに実行される関数ハンドルで構成されるコンマ区切りのペアとして指定します。

出力座標軸。'Parent' と座標軸ハンドルで構成されるコンマ区切りのペアとして指定します。既定では、plotCamera は現在の座標軸ハンドルを使用します。現在の座標軸を返すには、関数 gca を使用します。

出力引数

すべて折りたたむ

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

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

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

カメラ オブジェクトは vision.graphics.Camera クラスを使用して作成されます。

R2015a で導入