Contenido principal

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

addFrame

Agregue un par de imágenes de color y profundidad al objeto SLAM visual estéreo

Desde R2025a

    Descripción

    addFrame(vslam,I1,I2) agrega el par de imágenes estéreo RGB o en escala de grises, I1 y I2, al objeto visual estéreo SLAM vslam.

    Nota

    El objeto stereovslam se ejecuta en varios subprocesos internamente, lo que puede retrasar el procesamiento de un cuadro de imagen agregado mediante la función addFrame. Además, el objeto que se ejecuta en varios subprocesos significa que el cuadro actual que el objeto está procesando puede ser diferente del cuadro agregado recientemente.

    ejemplo

    addFrame(___,gyro,accel) agrega giroscopio IMU y mediciones de aceleración para la fusión visual-inercial.

    addFrame(___,DisparityMap=Value) establece el mapa de disparidad para las imágenes de entrada estéreo I1 y I2. El mapa de disparidad debe ser una matriz simple o doble y tener el mismo ancho y alto que las imágenes de entrada. Si no se especifica, la función calcula de manera predeterminada la disparidad de cuadros utilizando coincidencia de bloques semiglobales.

    Ejemplos

    contraer todo

    Realice la localización y el mapeo visual simultáneo estereoscópico (vSLAM) utilizando los datos del Conjunto de datos de localización y mapeo a largo plazo UTIAS proporcionado por el Instituto de Estudios Aeroespaciales de la Universidad de Toronto. Puede descargar los datos a un directorio mediante un navegador web o ejecutando este código:

    ftpObj = ftp("asrl3.utias.utoronto.ca");
    tempFolder = fullfile(tempdir);
    dataFolder = [tempFolder,'2020-vtr-dataset\UTIAS-In-The-Dark\'];
    zipFileName = [dataFolder,'run_000005.zip'];
    folderExists = exist(dataFolder,"dir");

    Crea una carpeta en un directorio temporal para guardar el archivo descargado y extraer su contenido.

    if ~folderExists  
        mkdir(dataFolder) 
        disp("Downloading run_000005.zip (818 MB). This download can take a few minutes.") 
        mget(ftpObj,"/2020-vtr-dataset/UTIAS-In-The-Dark/run_000005.zip",tempFolder);
    
        disp("Extracting run_000005.zip (818 MB) ...") 
        unzip(zipFileName,dataFolder); 
    end

    Crea dos objetos imageDatastore para almacenar las imágenes estéreo.

    imgFolderLeft = [dataFolder,'\images\left\'];
    imgFolderRight = [dataFolder,'\images\right\'];
    imdsLeft = imageDatastore(imgFolderLeft);
    imdsRight = imageDatastore(imgFolderRight);

    Especifique los parámetros intrínsecos y la línea base de la cámara estéreo, y utilícelos para crear un objeto SLAM visual estéreo. La distancia focal, el punto principal y el tamaño de la imagen están en píxeles, y la línea de base está en metros.

    focalLength = [387.777 387.777];  
    principalPoint = [257.446 197.718];  
    imageSize = [384 512];            
    intrinsics = cameraIntrinsics(focalLength,principalPoint,imageSize);
    baseline = 0.239965; 
    
    vslam = stereovslam(intrinsics,baseline,MaxNumPoints=600, ...
        TrackFeatureRange=[30 120],SkipMaxFrames=5);

    Procese cada par de imágenes estéreo y visualice las poses de la cámara y los puntos del mapa 3D.

    for i = 1:numel(imdsLeft.Files)
        leftImage = readimage(imdsLeft,i);
        rightImage = readimage(imdsRight,i);
        addFrame(vslam,leftImage,rightImage);
    
        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
            plot(vslam);
        end
    
        % Get current status of system
        status = checkStatus(vslam);
        
        % Stop adding frames when tracking is lost
        if status == uint8(0)
            break
        end
    end 

    Una vez procesados todos los fotogramas, reinicie el sistema.

    while ~isDone(vslam)
        plot(vslam)
    end

    Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 12 objects of type line, text, patch, scatter. This object represents Camera trajectory.

    reset(vslam)

    Argumentos de entrada

    contraer todo

    Objeto SLAM visual estéreo, especificado como un objeto stereovslam.

    Imagen 1, especificada como una imagen RGB o en escala de grises no dispersa. El objeto de slam visual estéreo sigue la pose de la cámara 1, la cámara izquierda, que corresponde a la imagen I1 en el sistema de cámara estéreo. Las imágenes de entrada deben estar sin distorsión y rectificadas. Puede desdistorsionar y luego rectificar las imágenes utilizando las funciones undistortImage (Computer Vision Toolbox) y rectifyStereoImages (Computer Vision Toolbox), respectivamente, antes de agregar las imágenes.

    Tipos de datos: single | double | int16 | uint8 | uint16 | logical

    Imagen 2, especificada como una imagen RGB o en escala de grises no dispersa. La imagen 2 corresponde a la cámara derecha del sistema de cámara estéreo. Las imágenes de entrada deben estar sin distorsión y rectificadas. Puede desdistorsionar y luego rectificar las imágenes utilizando las funciones undistortImage (Computer Vision Toolbox) y rectifyStereoImages (Computer Vision Toolbox), respectivamente, antes de agregar las imágenes.

    Tipos de datos: single | double | int16 | uint8 | uint16 | logical

    Medición del giroscopio, especificada como una matriz N por 3. Cada fila de la matriz representa los componentes x, y y z de la medición del giroscopio para un solo fotograma, con la forma [gx,gy,gz]. N representa el número total de fotogramas. N representa el número de mediciones de IMU entre los fotogramas de la cámara anterior y actual. El número de mediciones del giroscopio y del acelerómetro debe ser igual.

    Medición de aceleración, especificada como una matriz N por 3. Cada fila de la matriz representa los componentes x, y y z de la medición de aceleración para un solo fotograma, con la forma [ax,ay,az]. N representa el número de mediciones de IMU entre los fotogramas de la cámara anterior y actual. El número de mediciones del giroscopio y del acelerómetro debe ser igual.

    Historial de versiones

    Introducido en R2025a

    expandir todo

    Consulte también

    Objetos

    Funciones