2025 Winter School

De POLR
Sauter à la navigation Sauter à la recherche

Welcome to the winter school 2025 Data Analysis session!

The session aims to introduce photogrammetry from drone imagery. For this we use an Open-Source software: OpendroneMap This tutorial contains all the step-by-step information to create a first orthomosaic and a 3D DEM (Digital Elevation Model) using ODM.

Getting started

Given that photogrammetry requires significant computing resources, particularly in terms of RAM, the processing will be carried out on the UQAR high performance computing infrastructure which hosts a cluster named Pelerin.

Accessing the dataset

The Dataset is stored on a Network storage. First you need to connect to the storage. In the file explorer, right-click on Network and go to map a network. In Folder write:

\\sabre.uqar.ca\ecole_hiver_ismer

and click on Finish

Connecting to Pelerin

To access the cluster, we will use the client SSH MobaXterm. Please click on this link to download the client: mobaxterm or (if link doesn't work), download the portable edition from https://mobaxterm.mobatek.net/download-home-edition.html . Une fois le dossier .zip décompressé, lancez le programme .exe

Now open a new SSH session by clicking on the tab sessionSSH.

  • Remote host is : calculs.uqar.ca
  • the username is: formation
  • The password is : *************

From now on, all the processing will be carried out using linux commands. (If you're new to linux commands here are some few help for basic commands you would need.) You are now on the computing infrastructure. to access the cluster:

ssh pelerin

You are now connected to the cluster. It contains 27 nodes (computers). Each of these node contains between 40 and 512 cpus as well as 80MB to 2.5TB of RAM. For the purposes of training, each participant will be assigned a node (e.g. calcul-6) on which t to perform the analyses. To access it:

ssh <my_node>

User guide

The same storage that have been mounted locally is also mount on pelerin. it is the directory h25. So that all the treatment done on pelerin will be directly accessible from your computer locally.

  • create a new directory under /home/formation/h25/WORKDIR/:
mkdir ~/h25/WORKDIR/<my_directory>

(note: as you are using a shared directory, please use a name different from the others, this can be your last name for example)

The directory ~/h25/DATASET/ contains all the images that have been taken during the field work and there are classed in different experiences called exp1,exp2 etc..

  • create a symbolic link from the data experience of your choice to a subdirectory that should be named images under your working directory:
ln -s ~/h25/DATASET/exp1 ~/h25/WORKDIR/<my_directory>/images
  • You are now ready to create your first orthomosaic using singularity and ODM.
singularity run --bind ~/h25/WORKDIR/<my_directory>/:/datasets/code ~/odm.sif --project-path /datasets --fast-orthophoto

This command is just an example of using ODM. The general syntax is:

singularity run [arguments for singularity] <path_to_odm>.sif [arguments for ODM]

The command singularity run executes odm.sif with arguments, the main ones of which are listed below.

-v $(pwd)/:/datasets/code allows you to make a link between the local directory and the virtual location in the container. This syntax will execute the script on the disk containing your local directory. Here, ~/h25/WORKDIR/<my_directory>/ .

All the arguments and detailed informations for ODM can be found in the ODM documentation. The more useful are showed below:


--project-path /datasets creates the directory tree needed for the project, in the local directory. It is important to use this syntax to be able to restart a process midway (--rerun-from odm_meshing par exemple) while the treatment has finished.

--fast-orthophoto creates an orthomosaic without 3D DEM. Results are less accurate but the computing time is reduced.

--dtm compute the 3D DEM

Outputs=

project/
├── images/
│ ├── img-1234.jpg
│ └── ...
├── opensfm/ # Tie Points and camera positions here in JSON format
│ ├── config.yaml
│ ├── images/
│ ├── masks/
│ ├── gcp_list.txt
│ ├── metadata/
│ ├── features/
│ ├── matches/
│ ├── tracks.csv
│ ├── reconstruction.json
│ ├── reconstruction.meshed.json
│ ├── undistorted/
│ ├── undistorted_tracks.json
│ ├── undistorted_reconstruction.json
│ └── depthmaps/
│ └── merged.ply # Dense Point Cloud
├── odm_meshing/
│ ├── odm_mesh.ply # A 3D mesh
│ └── odm_meshing_log.txt # Output of the meshing task. May point out errors.
├── odm_texturing/
│ ├── odm_textured_model.obj # Textured mesh
│ ├── odm_textured_model_geo.obj # Georeferenced textured mesh
│ └── texture_N.jpg # Associated textured images used by the model
├── odm_georeferencing/
│ ├── odm_georeferenced_model.ply # A georeferenced dense point cloud
│ ├── odm_georeferenced_model.laz # LAZ format point cloud
│ ├── odm_georeferenced_model.csv # XYZ format point cloud
│ ├── odm_georeferencing_log.txt # Georeferencing log
│ └── odm_georeferencing_utm_log.txt # Log for the extract_utm portion
├── odm_orthophoto/
│ ├── odm_orthophoto.png # Orthophoto image (no coordinates)
│ ├── odm_orthophoto.tif # Orthophoto GeoTiff
│ ├── odm_orthophoto_log.txt # Log file
│ └── gdal_translate_log.txt # Log for georeferencing the png file
└── odm_dem/
| ├── dsm.tif # Digital Surface Model Geotiff - the tops of everything
| └── dtm.tif # Digital Terrain Model Geotiff - the ground.

Visualizing output

Open google earth pro on your desktop and drag the orthophoto in it to visualize it