Skip to content

Reconstruct from a video

Pau Gargallo edited this page Jun 16, 2016 · 9 revisions

Introduction

It is possible to build a reconstruction using a video file instead of still images. The technique for reconstructing the camera trajectory from a video is called Simultaneous Localization And Mapping (SLAM). OpenDroneMap uses the opensource ORB_SLAM2 library for this task.

We will explain here how to use it. We will need to build the SLAM module, calibrate the camera and finally run the reconstruction from a video.

Building with SLAM support

By default, OpenDroneMap does not build the SLAM module. To build it we need to do the following two steps

Build SLAM dependencies

cd SuperBuild/build
cmake -DODM_BULID_SLAM=ON .
make
cd ../..

Build the SLAM module

cd build
cmake -DODM_BULID_SLAM=ON .
make
cd ..

Calibrating the camera

The SLAM algorithm requires the camera to be calibrated. It is difficult to extract calibration parameters from the video's metadata as we do when using still images. Thus, it is required to run a calibration procedure that will compute the calibration from a video of a checkerboard.

We will start by recording the calibration video. Display this chessboard pattern on a large screen, or print it on a large paper and stick it on a flat surface. Now record a video pointing the camera to the chessboard.

chessboard shot

While recording move the camera to both sides and up and down always maintaining the entire pattern framed. The goal is to capture the pattern from different points of views. The resulting video should look like this.

Now you can run the calibration script as follows

python modules/odm_slam/src/calibrate_video.py --visual PATH_TO_CHESSBOARD_VIDEO.mp4

You will see a window displaying the video and the detected corners. When it finish, it will print the computed calibration parameters. They should look like this (with different values)

# Camera calibration and distortion parameters (OpenCV)
Camera.fx: 1512.91332401
Camera.fy: 1512.04223185
Camera.cx: 956.585155225
Camera.cy: 527.321715394

Camera.k1: 0.140581949184
Camera.k2: -0.292250537695
Camera.p1: 0.000188785464717
Camera.p2: 0.000611510377372
Camera.k3: 0.181424769625

Keep this text. We will use it on the next section.

Running OpenDroneMap from a video