Introduction
OpenDroneMap is open-source software for processing aerial imagery. In simple terms, it enables digital 3D mapping of objects using overlapping photos showing the scene from different perspectives. Although there are many practical applications, here we will focus on the use of OpenDronMap for processing drone-taken photos of agricultural land areas for mapping crops and monitoring woodlands.
OpenDroneMap is still an actively developing project. To stay up to date with recent releases and new features check out the blog: https://www.opendronemap.org/blog/.
OpenDroneMap project has gained scale that is accompanied by a growing community: https://community.opendronemap.org. Do not hesitate to actively join both when you have questions or developed solutions that enrich the user community.
OpenDronMap Modules
OpenDroneMap is not a single software but rather a modular package that combines individual components which can be assembled in various configurations to meet the needs of a wide range of users and their computing setups.
Figure 1. OpenDroneMap project includes several modules: ODM is the core of software that can be run directly from the command line; NodeODM is a communication channel between components; ClusterODM allows management of multiple ODM nodes; WebODM is a web-based graphical user interface; CloudODM faciliotates in-cloud computations; pyODM enables incorporation of ODM into the customized applications.
ODM
The ODM is analytical core of the OpenDroneMap software. It is an open source toolkit that actually process aerial images. The ODM module can be run directly from the command line on a local machine or remotely on HPC infrastructure. It generates a complete set of files organized in hierarchical directories (point clouds, 3D textured models, georeferenced ortophotos and elevation models). Unfortunately, in this approach there is NO support to create web tiles �. Thus, the analysis results cannot be directly opened in the complementary WebODM graphical interface. But the files can be still visualized in external software that supports the given format. The other modules of the package are higher-level layers that facilitate the use of the software, but they always call out functions from the built-in ODM core.
To learn how to run ODM from the command line, and specifically on HPC infrastructure such as SCINet clusters, go to the hands-on tutorial: Command-line ODM modules.
WebODM
The WebODM is a web-based graphical user interface (GUI) for the OpenDroneMap software. In the back-end, it employs by default a single NodeODM to facilitate communication with a built-in ODM core. It generates an identical set of outputs to ODM on the command line, but it also automatically creates web tiles, so it is possible to visualize the results directly in the graphical interface. Other features include project management and the ability to reopen and/or restart tasks. There is also a built-in tool for creating grand control points.
In general, after start the GUI is available on localhost (port 8000) in a web browser directly on the machine on which WebODM is running. That’s why it’s a perfect solution when working on a local machine. WebODM can also be available remotely on HPC infrastructure through the OpenOn Demand service. Depending on the admins’ configuration, it will probably have more processing nodes (multiple NodeODM instances) added, which will increase computing performance. Adding more processing nodes enables to run of many jobs in parallel.
To learn how to run graphical interface of the WebODM on your local machine or remotely using Open OnDemand service on HPC infrastructure (such as SCINet clusters), go to the hands-on tutorial: WebODM: web-based graphical interface.
Prepare input imagery
As of now (2022), OpenDroneMap only supports imagery inputs in JPEG (JPG) and TIFF (8 and 16-bit) formats. In some cases, WebODM successfully performs analysis for PNG files as well, but the reconstruction performance is worse than using JPEG.
Using raw image formats such as DNG is NOT currently possible. Therefore, if you have data of such type it is necessary to convert the photos to one of the supported formats, preferably JPEG. Follow the instructions in the next section: DNG to JPG conversion, to learn how to effectively convert raw DNG files to JPG to preserve the highest possible resolution.
Sometimes the conversion of the graphic format results in the loss of metadata, especially geolocation details. Without this data, creating georeferenced results (i.e., orthophotos, geoTIFF, digital elevation models) with OpenDroneMap will not be possible. In the next section: Keep EXIF GEO metadata, you will learn how to copy EXIF metadata including geolocation, from the original raw files to JPG files.
DNG to JPG batch conversion
Changing the file format can easily be done in many graphics programs with a visual interface, such as GIMP. Unfortunately, this usually means having to edit individual files one by one, and with a vast number of files, this is an overkilling task. So it’s good to know that you can automate the procedure for converting any number of files on the command line.
I have tested various options for converting the raw DNG images into the format allowed as input for WebODM (JPG, PNG, TIF). Based on the preliminary tests performed on the set of 20 photos, three tools are suitable:
ufraw
, command-line, easily installable on any system- ImageMagick (
magick
), command-line, easily installable on any system - macOS Preview (
sips
), available on macOS, usage from the command-line or graphical interface
The summary of results is provided in the table below, and some visual glimpses are in the pictures below.
conversion tool: | magic | magic | magic | ufraw | ufraw | ufraw | sips (macOS) | sips (macOS) |
---|---|---|---|---|---|---|---|---|
format | JPG | JPEG | PNG | JPG | PNG | TIF | JPG | PNG |
size | 19MB | 19MB | 64MB | 2.5MB | 21MB | 36MB | 3.6MB | 45MB |
resolution | 4000×3000 | 4000×3000 | 4000×3000 | 4000×3000 | 4000×3000 | 4000×3000 | 3992×2992 | 3992×2992 |
colors | brighter | brighter | brighter | darker | darker | darker | original | original |
used Exiftool | YES | YES | YES | YES | YES | YES | NO | NO |
WebODM success | YES | YES | FAILED | YES | YES | YES | YES | FAILED |
visual quality | good | good | - | good | low | broken | good | - |
no. points rebuilt | 5,31 M | 5,37 M | - | 1,24 M | 3,26 M | 1,00 M | 4,39 M | - |
average GSD | 1.62 cm | 1.63 cm | - | 1.9 cm | 0.72 cm | - | 1.52 cm | - |
area | 1,224 m² | 1,222 m² | - | 1,283 m² | 1,299 m² | 36.01 m² | 1,343 m² | - |
^ original DNG size ~24MB/photo with resolution 3992 × 2992
In short, the most universal and ensuring best performance is magick
with conversion into the JPG or JPEG format. The size and resolution of the files after conversion are almost the same (24MB DNG vs. 19MB JPG). The only inconvenience is that the color is slightly brighter than the preview of the original DNG. Please review in the picture below the color changes after conversion of the image format.
Despite the altered color intensity, magick
came with the highest performance when reconstructing a 3D model from photos (highest number of rebuilt points, high average GSD, large area), so it is a recommended method. However, below you will also find usage instructions for the other tools.
If you are working on a computing machine with multiple cores, it will be advantegous to use the GNU parallel module, which will parallelize the conversions of many files and save your time.
If running the command throws an error: "error: 'parallel' command not found", it means that you do not have the parallel module installed/loaded into your environment.
- install parallel on macOS:
brew install parallel
- install parallel on Linux:
sudo apt-get install parallel
- load parallel module on HPC:
module load parallel
- using magic
Learn more about the ImageMagick tool at https://imagemagick.org
Follow installation instructions at https://imagemagick.org/script/download.php
install magic on macOS:
brew update
brew install imagemagick
install magic on Linux:
sudo apt update
sudo apt install imagemagick
install magic on Windows:
Download ready-to-run executable from: https://imagemagick.org/script/download.php#windows
The ImageMagick is a toolkit composed of several utilities for manipulating images. Once installed you can run them directly on the command line by calling specific commands, such as magic, animate, compare, composite, conjure, convert, display, identify, import, mogrify, montage, stream. You can learn more about their use from the documentation: ImageMagick Command-line Tools.
DNG to JPG batch conversion using magic:
# run magic in a loop
for i in *.DNG
do
magick -quality 100 -define dng:use-camera-wb=true $i "${i%DNG}jpg"
done
# run magic in parallel
ls *.DNG | sed 's/DNG//g' | parallel magick -quality 100 -define dng:use-camera-wb=true {}DNG {}JPG
^ -quality 100
- the option sets the JPEG quality to 100%. You can customize it as much as you like.
^ -define dng:use-camera-wb=true
- the option adjust colors to match the original.
- using ufraw
Learn more about the UFRaw (Unidentified Flying Raw) tool at http://ufraw.sourceforge.net
Follow system-specific installation instructions at http://ufraw.sourceforge.net/Install.html
DNG to JPG batch conversion using ufraw:
# run ufraw in a loop
for i in *.DNG
do
ufraw-batch --wb=camera --exposure=auto --out-depth=8 --out-type=jpg --output "${i%DNG}jpg" $i
done
# run ufraw in parallel
ls *.DNG | sed 's/DNG//g' | parallel ufraw-batch --wb=camera --exposure=auto --out-depth=8 --out-type=jpg --output {}jpg {}DNG
- using sips (macOS)
The sips
command comes pre-installed on macOS. Simply open a terminal window and copy-paste one of the code snippet given below. The advantage of this solution is also that sips automatically copies the EXIF metadata to the file in the new format.
DNG to JPG batch conversion using sips:
# run sips in a loop
for i in *.DNG
do
sips -s format jpeg -s formatOptions 100 "${i}" --out "${i%DNG}jpg"
done
# run sips in parallel
ls *.DNG | sed 's/DNG//g' | parallel sips -s format jpeg -s formatOptions 100 {}DNG --out {}jpg
^ -s formatOptions 100
- the option sets the JPEG quality to 100%. You can customize it as much as you like.
Keep EXIF GEO metadata
It often happens that EXIF (Exchangeable Image File Format) metadata, especially geolocation data, is lost when converting image files. Whether GEO data, such as Latitude or Longitude, is recorded in the file’s metadata you can easily check in the image preview. All you have to do is right-click and select ‘Get info’ or ‘Image properties’ from the menu that appears.
You can also use the GIMP tool with a graphical interface to check whether your converted images have geolocation data. Open an image with GIMP and select the options in order:
Image → Metadata → View Metadata, then click on the EXIF tab, and search for GPSAltitude, GPSLatitude, and GPSLongitude tags.
If the original photo (e.g., DNG) contains GEO metadata, but the file after conversion (e.g. JPG) does not have these tags or they are empty, you have to copy this data manually. You can easily automate this procedure and apply it to batch files using the Exiftool
command-line tool.
Learn more about the ExifTool tool at https://exiftool.org
Download source code and follow system-specific installation instructions at https://exiftool.org/install.html
copy EXIF tags from original images using exiftool:
# run exiftool in a loop
for i in *.DNG
do
exiftool -overwrite_original_in_place -tagsFromFile $i "${i%DNG}jpg"
done
# run exiftool in parallel
ls *.DNG | sed 's/DNG//g' | parallel exiftool -overwrite_original_in_place -tagsFromFile {}DNG {}jpg
add EXIF tags from a text file using exiftool:
You can also use exiftool
to add geolocation information to the image metadata by copying it from the column-like text files. First, prepare a text file with the data by properly ordering and formatting the columns:
SourceFile GPSLatitude GPSLongitude GPSAltitude GPSLatitudeRef GPSLongitudeRef GPSAltitudeRef
image1.JPG 43.3565900 116.4459442 198.609 N W 0
image2.JPG 43.3524584 116.4458293 198.609 N W 0
^ the first column should contain the names of your images; you can easily create the list of filenames using the ls
command and redirecting the output into the ` > gps.csv`.
Once the file is ready, execute the exiftool
with the following configuration:
exiftool -GPSLatitude -GPSLongitude -GPSAltitude -GPSLatitudeRef -GPSLongitudeRef -GPSAltitudeRef -csv="gps.csv" -o geo_output/ input_images/
^ input_images
is a directory with input imagery
^ geo_output
is a directory with geotagged output imagery
^ gps.csv
should be stored in a current directory (i.e., a parent dir for both input_images
and geo_output
)
Now that you have a complete imagery in the ODM-supported format (JPG/JPEG/TIFF) and all of them are properly geotagged, you can take one of the following hands-on tutorials to perform your geospatial analysis using OpenDroneMap software:
Further Reading
- WebODM: web-based graphical user interface
- Command-line ODM modules
- Geolocation data for the ODM workflow