plotCamera
3 次元座標でのカメラのプロット
説明
は、既定のカメラを現在の座標軸の 3 次元座標にプロットします。この関数は cam
= plotCameracam
を返します。これは、プロットされたカメラのプロパティを含んでいる Camera
オブジェクトです。
は、cam
= plotCamera(cameraTable
)cameraTable
で指定された 1 台以上のカメラをプロットします。
は、前の構文にある引数の任意の組み合わせに加えて、名前と値の引数を 1 つ以上使用してオプションを指定します。たとえば、cam
= plotCamera(Name=Value
)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: [1×1 Axes] Size: 1 AbsolutePose: [1×1 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
一連のキャリブレーション イメージを作成します。
imds = imageDatastore(fullfile(toolboxdir("vision"),"visiondata","calibration","slr"));
イメージ内のチェッカーボードのコーナーを検出します。
[imagePoints,boardSize] = detectCheckerboardPoints(imds.Files);
左上隅が (0,0) のパターン中心の座標系でチェッカーボードのコーナーのワールド座標を生成します。正方形のサイズを 29 mm に設定します。
squareSize = 29;
worldPoints = patternWorldPoints("checkerboard",boardSize,squareSize);
イメージをその新しい位置で読み込みます。
imOrig = imread(fullfile(toolboxdir("vision"),"visiondata","calibration","slr","image9.jpg")); figure; imshow(imOrig,InitialMagnification=50); title("Input 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
原点をマークします。
plot3(0,0,0,"g*");
カメラの位置と方向を計算します。
absPose = extr2pose(camExtrinsics);
カメラをプロットします。
cam = plotCamera(AbsolutePose=absPose,Size=20);
z 軸を下に向けます。
set(gca,CameraUpVector=[0 0 -1]);
表示パラメーターを設定します。
camorbit(gca,-110,60,data=[0 0 1]); axis equal grid on
3 次元回転をオンにします。
cameratoolbar('SetMode','orbit');
座標軸にラベルを付けます。
xlabel("X (mm)"); ylabel("Y (mm)"); zlabel("Z (mm)");
入力引数
名前と値の引数
オプションの引数のペアを 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
は現在の axes ハンドルを使用します。現在の座標軸を返すには、関数 gca
を使用します。
出力引数
カメラ可視化オブジェクト。次のいずれかのオプションとして返されます。
Camera
オブジェクト — 1 台のカメラをプロットする場合、関数はこのオプションを返します。名前と値の引数または入力要素cameraTable
により、対応するCamera
オブジェクトのプロパティが設定されます。Camera
オブジェクトの列ベクトル — 複数カメラをプロットする場合、関数はこのオプションを返します。入力cameraTable
の n 行目の値により、このベクトルの n 番目のCamera
オブジェクトのプロパティが設定されます。
カメラ オブジェクトは、vision.graphics.Camera
クラスを使用して作成されます。このクラスには、次のプロパティが含まれます。
バージョン履歴
R2015a で導入R2022b 以降、Computer Vision Toolbox™ のほとんどの関数は、左から乗算する規則を使用して幾何学的変換を作成および実行します。このため、名前と値の引数 AbsolutePose
を、左から乗算する規則を使用する rigidtform3d
オブジェクトとして指定できるようになりました。
AbsolutePose
を rigid3d
オブジェクトとして指定することはできますが、このオブジェクトは右から乗算する規則を使用するため、推奨されません。左から乗算する新しい幾何学的変換オブジェクトに切り替えることで、幾何学的変換のワークフローを効率化できます。詳細については、Migrate Geometric Transformations to Premultiply Conventionを参照してください。
関数 plotCamera
は今後、カメラの姿勢を指定するために rigid3d
オブジェクトを受け入れます。R2020a 以降では、Location
プロパティと Orientation
プロパティではなく、rigid3d
オブジェクトを使用して姿勢を指定しなければなりません。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)