Main Content


Plot a camera in 3-D coordinates



cam = plotCamera plots a default camera in 3-D coordinates in the current axes. The function returns cam, a Camera object that contains the properties of the plotted camera.


cam = plotCamera(cameraTable) plots one or more cameras specified by cameraTable.


cam = plotCamera(Name=Value) specifies options using one or more name-value arguments in addition to any combination of arguments from previous syntaxes. For example, Opacity=0.4 sets the opacity of the plotted camera to 0.4.

The name-value pair arguments set the associated properties of the plotted camera visualization object.


collapse all

Create a rigidtform3d object.

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

Plot a camera with an opacity of zero and an absolute pose based on the created rigidtform3d object.

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: ''

Set viewing properties for the current axes.

grid on
axis equal
axis manual

Expand the viewable limits of each axis. These changes enable the entire animation to be visible in the next step.

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

Rotate the camera around the y-axis.

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);

Create a set of calibration images.

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

Detect the checkerboard corners in the images.

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

Generate the world coordinates of the checkerboard corners in the pattern-centric coordinate system, with the upper-left corner at (0,0). Set the square size to 29 mm.

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

Load an image at its new location.

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

Calibrate the camera.

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

Undistort the image.

im = undistortImage(imOrig,cameraParams.Intrinsics);

Find the reference object in the new image.

[imagePoints,boardSize] = detectCheckerboardPoints(im);

Compute the new extrinsics.

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

Plot the world points.

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

Mark the origin.


Compute the camera location and orientation.

absPose = extr2pose(camExtrinsics);

Plot the camera.

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

Make the z -axis point down.

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

Set the view parameters.

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

Turn on 3-D rotation.


Label the axes.

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

Input Arguments

collapse all

Properties of cameras for visualization, specified as a table. Each row represents a single camera. Each column title must match the name-part of a name-value pair argument. The nth-row values set the properties for the nth element of cam. You cannot specify values for Parent. If the table contains a ViewId column, then the view IDs are used to set the Label values of the cameras.

Name-Value Arguments

Specify optional pairs of arguments as Name1=Value1,...,NameN=ValueN, where Name is the argument name and Value is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Before R2021a, use commas to separate each name and value, and enclose Name in quotes.

Example: Size=0.3 specifies the camera-base width as 0.3.

Camera absolute pose in the world coordinate system, specified as a rigidtform3d object.

Camera-base width, specified as a positive real number.

Camera label, specified as a character vector or a string scalar.

Camera color, specified as an RGB triplet. An RGB triplet is a three-element row vector whose elements specify the intensities of the red, green, and blue components of the color. The intensities must be in the range [0, 1].

Camera opacity, specified as a scalar in the range [0, 1].

Camera visibility, specified as a numeric or logical 1 (true) or 0 (false).

Camera axes visibility, specified as a numeric or logical 1 (true) or 0 (false).

Callback function, specified as a function handle that executes when you click the camera.

Output axes, specified as an axes handle. By default, plotCamera uses the current axes handle. To return the current axes, use the gca function.

Output Arguments

collapse all

Camera visualization object, returned as one of these options.

  • Camera object — The function returns this option when plotting a single camera. Name-value arguments or cameraTable input elements set the corresponding Camera object properties.

  • Row vector of Camera objects — The function returns this option when plotting multiple cameras. The nth -row values of the cameraTable input set the properties for the nth Camera object in this vector.

Camera objects are created using the class, which contains the following properties:

Version History

Introduced in R2015a

expand all