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: [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
カメラの外部パラメーターの可視化
一連のキャリブレーション イメージを作成します。
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");
カメラのキャリブレーションを行います。
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)");
入力引数
cameraTable
— カメラの可視化のためのプロパティ
table
カメラの可視化のためのプロパティ。table として指定します。各行が 1 台のカメラを表します。各列のタイトルが、名前と値のペアの引数の名前部分と一致していなければなりません。n 行目の値で、cam
の n 番目の要素のプロパティを設定します。Parent
の値は指定できません。table に ViewId
列が含まれている場合は、カメラの Label
の値の設定にビュー ID が使用されます。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで、Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name
を引用符で囲みます。
例: Size=0.3
は、カメラの基本幅を 0.3
と指定します。
AbsolutePose
— カメラの絶対姿勢
rigidtform3d
オブジェクト
ワールド座標系におけるカメラの絶対姿勢。rigidtform3d
オブジェクトとして指定します。
Size
— カメラの基本幅
1
(既定値) | 正の実数
カメラの基本幅。正の実数として指定します。
Label
— カメラのラベル
''
(既定値) | 文字ベクトル | string スカラー
カメラのラベル。文字ベクトルまたは string スカラーとして指定します。
Color
— カメラの色
[1 0 0]
(赤) (既定値) | RGB 3 成分
カメラの色。RGB 3 成分として指定します。RGB 3 成分は、色の赤、緑、青成分の強度を指定する 3 成分の行ベクトルです。強度は [0, 1] の範囲でなければなりません。
Opacity
— カメラの不透明度
0.2
(既定値) | 範囲 [0,1] のスカラー
カメラの不透明度。範囲 [0, 1] のスカラーとして指定します。
Visible
— カメラの可視性
true
または 1
(既定値) | false
または 0
カメラの可視性。数値または logical の 1
(true
) または 0
(false
) として指定します。
AxesVisible
— カメラの座標軸の可視性
false
または 0
(既定値) | true
または 1
カメラの座標軸の可視性。数値または logical の 1
(true
) または 0
(false
) として指定します。
ButtonDownFcn
— コールバック関数
''
(既定値) | 関数ハンドル
コールバック関数。カメラをクリックしたときに実行される関数ハンドルとして指定します。
Parent
— 出力座標軸
axes
ハンドル
出力座標軸。axes ハンドルとして指定します。既定では、plotCamera
は現在の座標軸ハンドルを使用します。現在の座標軸を返すには、関数 gca
を使用します。
出力引数
cam
— カメラ可視化オブジェクト
Camera
オブジェクト | Camera
オブジェクトの行ベクトル
カメラ可視化オブジェクト。次のいずれかのオプションとして返されます。
Camera
オブジェクト — 1 台のカメラをプロットする場合、関数はこのオプションを返します。名前と値の引数または入力要素cameraTable
により、対応するCamera
オブジェクトのプロパティが設定されます。Camera
オブジェクトの列ベクトル — 複数のカメラをプロットする場合、関数はこのオプションを返します。入力cameraTable
の n 行目の値により、このベクトルの n 番目のCamera
オブジェクトのプロパティが設定されます。
カメラ オブジェクトは、vision.graphics.Camera
クラスを使用して作成されます。このクラスには、次のプロパティが含まれます。
バージョン履歴
R2015a で導入R2022b: AbsolutePose
を rigidtform3d
オブジェクトとして指定
R2022b 以降、Computer Vision Toolbox™ のほとんどの関数は、左から乗算する規則を使用して幾何学的変換を作成および実行します。このため、名前と値の引数 AbsolutePose
を、左から乗算する規則を使用する rigidtform3d
オブジェクトとして指定できるようになりました。
AbsolutePose
を rigid3d
オブジェクトとして指定することはできますが、このオブジェクトは右から乗算する規則を使用するため、推奨されません。左から乗算する新しい幾何学的変換オブジェクトに切り替えることで、幾何学的変換のワークフローを効率化できます。詳細については、Migrate Geometric Transformations to Premultiply Conventionを参照してください。
R2020a: 関数 plotCamera
に属する Location
プロパティと Orientation
プロパティは削除済み
関数 plotCamera
は今後、カメラの姿勢を指定するために rigid3d
オブジェクトを受け入れます。R2020a 以降では、Location
プロパティと Orientation
プロパティではなく、rigid3d
オブジェクトを使用して姿勢を指定しなければなりません。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)