Main Content


Absolute camera poses of RGB-D vSLAM key frames

Since R2024a



    camPoses = poses(vslam) returns the absolute camera poses camPoses of the key frames from the RGB-D visual simultaneous localization and mapping (vSLAM) object vslam.

    [camPoses,keyFrameIDs] = poses(vslam) returns the IDs keyFrameIDs of the key frames corresponding to the camera poses. The IDs represent the order in which the image frames have been added to the vslam object by the addFrame object function.


    collapse all

    Perform RGB-D visual simultaneous localization and mapping (vSLAM) using the data from the TUM RGB-D Benchmark. You can download the data to a temporary directory using a web browser or by running this code:

    baseDownloadURL = ""; 
    dataFolder = fullfile(tempdir,"tum_rgbd_dataset",filesep); 
    options = weboptions(Timeout=Inf);
    tgzFileName = dataFolder+"fr3_office.tgz";
    folderExists = exist(dataFolder,"dir");
    % Create a folder in a temporary directory to save the downloaded file
    if ~folderExists  
        disp("Downloading fr3_office.tgz (1.38 GB). This download can take a few minutes.") 
        % Extract contents of the downloaded file
        disp("Extracting fr3_office.tgz (1.38 GB) ...") 

    Create two imageDatastore objects. One to store the color images and the other to store the depth images.

    colorImageFolder = dataFolder+"rgbd_dataset_freiburg3_long_office_household/rgb/";
    depthImageFolder = dataFolder+"rgbd_dataset_freiburg3_long_office_household/depth/";
    imdsColor = imageDatastore(colorImageFolder);
    imdsDepth = imageDatastore(depthImageFolder);

    Select the synchronized pair of color and depth images.

    data = load("rgbDepthPairs.mat");
    imdsColor=subset(imdsColor, data.indexPairs(:, 1));
    imdsDepth=subset(imdsDepth, data.indexPairs(:, 2));

    Specify your camera intrinsic parameters, and use them to create an RGB-D visual SLAM object.

    intrinsics = cameraIntrinsics([535.4 539.2],[320.1 247.6],[480 640]);
    depthScaleFactor = 5000;
    vslam = rgbdvslam(intrinsics,depthScaleFactor);

    Process each pair of color and depth images, and visualize the camera poses and 3-D map points.

    for i = 1:numel(imdsColor.Files)
        colorImage = readimage(imdsColor,i);
        depthImage = readimage(imdsDepth,i);
        if hasNewKeyFrame(vslam)
            % Query 3-D map points and camera poses
            xyzPoints = mapPoints(vslam);
            [camPoses,viewIds] = poses(vslam);
            % Display 3-D map points and camera trajectory
        % Get current status of system
        status = checkStatus(vslam);
        % Stop adding frames when tracking is lost
        if status == uint8(0)

    Once all the frames have been processed, reset the system.

    while ~isDone(vslam)

    Input Arguments

    collapse all

    RGB-D visual SLAM object, specified as an rgbdvslam object.

    Output Arguments

    collapse all

    Absolute camera poses of the key frames, returned as an M-element array of rigidtform3d objects.

    Key frame IDs for the absolute camera poses, returned as an M-element array of integers. Each element specifies the key frame ID for the camera pose in the corresponding element of camPoses. The IDs represent the order in which the image frames have been added to vslam by the addFrame object function.

    Version History

    Introduced in R2024a