Posts by: pierotofy

OpenDroneMap Update: Cloud Optimized GeoTIFFs, Plant Health, Histograms and More!

 

WebODM 1.2.0 has been released today. This is a major release update that brings some shiny new features to the platform, most importantly a large effort to write a dynamic tiling system (powered in large part by rio-cogeo and rio-tiler, thank you Vincent Sarago for the great software!) They include:

Cloud Optimized GeoTIFF support

COGs are “regular GeoTIFF files, aimed at being hosted on a HTTP file server, with an internal organization that enables more efficient workflows on the cloud.”. Sounds like a perfect match for WebODM. This feature in fact has been on the TODO list since mid-2018.

But what are “efficient workflows”? In WebODM’s case, the primary goal of using COGs is dynamic tiling; once we store our maps and elevation models using COGs, we can display (and manipulate) them in real time before serving them to end users. Which means no more static tiles and a lot of cool new features, such as plant health algorithms, dynamic hillshading, histograms, levels and color maps!

Plant Health

This feature has been asked over and over by our community members (we hear you!). We finally added support for Plant Health algorithms. The current list of algorithms is probably not comprehensive, but we made sure to set it up in a straightforward manner to allow for contributions even from non-developers. We look forward for feedback from the community for the addition of more algorithms.

People can apply the plant health algorithms to JPG images that were captured with a spectral filter. We are working to add full support for .TIFF inputs (both 8bit and 16bit) and for multi-camera captures, which will land in ODM within the next few months.

Histograms, Hillshading and Color Maps

Thanks to dynamic tiling we can now visualize rasters statistics with histograms (showing the distribution of values). We can also change colors and enable hillshading on-demand.

We can also stretch the color distribution to visualize better looking orthophotos (this feature is called levels in programs such as GIMP that do image editing).

Left: default orthophoto. Right: Histogram levels adjusted to stretch color distribution.

We are just scratching the surface of what we can do with dynamic tiles. Another cool thing we can do is choose a discrete color map (Pastel) and apply it to an elevation model.

Which highlights areas of similar elevation.

New Icons

We’ve updated the look of WebODM to use the newer version of Font Awesome! If you find missing icons, please let us know, it was a tricky upgrade to perform and we might have missed a few.

Take a moment to share this post with your followers on social media and update your copy of WebODM. As usual report any issues on GitHub.

Toward ODM 1.0 and Beyond

 

During this past summer, the OpenDroneMap team has been active on a number of fronts.

Split-Merge Improvements

While this feature has been announced months ago, we’ve been working on a number of improvements to make it more stable and fast. The distributed split-merge workflow in particular is non-trivial and has required a number of fixes to improve its reliability over time. The LocalRemoteExecutor (LRE) module is perhaps one of the most interesting modules in the codebase, allowing submodels to be processed with a mix of local and remote processing, working in sync with ClusterODM (which is now more fault tolerant).

Ground Control Points

GCPs kept confusing our users with respect to supported coordinate reference systems (CRS). The system only handled well UTM CRSes, but the software happily accepted others, some which worked, some which didn’t.

If you are a frequent user on our forum you might have noticed a significant decrease (disappearance?) of questions related to GCPs. That’s because without fanfare, we’ve improved significantly GCP support in July (see PR #997). You can now use whatever CRS you please and ODM will handle the rest.

Major Speed Improvements

Our friends at Mapillary have also been working throughout the summer and brought some really neat new features to OpenSfM. Among some of these, there’s Bag of Words (BoW) matching, which significantly boosts reconstructions lacking georeferencing information. Datasets captured with a handheld camera are now much faster to process. You will also notice speed-ups for processing normal drone datasets (unrelated to BoW matching).

Camera Calibration Transfer and Models

Up until recently, you might have had some difficulty processing datasets captured with fisheye cameras such as the ones found in GoPros or Parrot Bebop drones.

ODM now comes with support for 4 different camera models:

  • Perspective (default)
  • Brown (like perspective, but capable of handling more complex distortion models)
  • Fisheye
  • Equirectangular (spherical)

To use a particular camera model simply pass –camera-lens <type> (lower case).

image
Bebop dataset before latest changes. Problem?
image
Processed by passing –camera-lens fisheye. Better!

It’s also possible to transfer a camera calibration model computed from one dataset to process another. This is useful to process a dataset that was captured in less-than-ideal conditions (for which good camera calibration parameters cannot be computed), but for which a good dataset captured with the same camera exists.

A cameras.json file is now created and placed in the root folder of each project and that file can be reused to process another dataset via –cameras /path/to/cameras.json.

Automated Docker Builds

Since ODM takes a while to compile, we haven’t been able to leverage Docker Hub’s ability for automatic builds (due to system timeouts). So up until a few days ago we have been building and publishing docker images manually. But no more! Starting from last week, a dedicated build server checks for changes on the ODM and WebODM repositories and automatically builds, tags and pushes the latest changes in master to Docker Hub.

ODM Book

Last but not least, the first edition of OpenDroneMap: The Missing Guide has been published. Spanish and Portuguese translations are also on the way. This has been a very time consuming task, but one which we hope will help more people get the most out of OpenDroneMap.

Future Plans

The community has already provided tremendous feedback. We know what needs to be done and we will continue to listen to our users. Among some of the most requested features:

  • Better GCP interface / workflows
  • Quality/Accuracy reports
  • Override mechanism for EXIF coordinates (PPK)
  • Multiband (TIFF) image support
  • NDVI, VARI index support (and others)
  • WebODM interface/workflow improvements

If your organization uses OpenDroneMap and is in a position to help (financially or by dedicating a developer to a task), get in touch on the forum.

Share Massive Drone Captures Directly from WebODM with Cesium ion

 

Reposted from the Cesium blog.

We’re excited to announce that the latest version of WebODM (OpenDroneMap) now ships with support for 3D tiling with Cesium ion.

WebODM allows users to generate point clouds, 3D models, and terrain from aerial images. With this new Cesium ion integration, users can also fuse the data they’ve collected with other geospatial datasets, such as the Cesium World Terrain, all placed in an accurate global context.

This photogrammetry mesh of Malalison Island, Philippines, was tiled on Cesium ion and fused with the global Cesium World Terrain. See a live demo in your browser. Source data captured by the American Red Cross and processed with OpenDroneMap.

It’s also possible to layer multiple versions of data, which is useful if, for example, you’re monitoring an area by comparing scans from different points in time.

Even though such high resolution 3D data often comes in gigabytes, our new integration makes it easy to tile that data into 3D Tiles and host it with the Cesium ion platform directly from the WebODM dashboard.

Cesium ion plugin in WebODM

The latest version of WebODM now has a “Tile in Cesium ion” button which will tile and host massive 3D datasets in the cloud.

MicMac Support Lands in WebODM

 

Continuing our recent announcement about MicMac integration, today we are pleased to announce that support for NodeMICMAC in WebODM is now available!

We have started making changes to the NodeODM API to accommodate a more engine agnostic definition, which will continue in the future to improve the synergy between projects.

Existing WebODM users (using docker) can get up and running with MicMac by simply typing:

./webodm.sh update
./webodm.sh restart --with-micmac

Kudos to the DroneMapper team for the development of NodeMICMAC that has made this feat possible.

We look forward to hear the community feedback.

Stitching Historical Aerial Images From 1940 Using OpenDroneMap

 

During the recent OSGeo Code Sprint hosted at the University of Minnesota, we had the opportunity to learn more about the university’s effort to preserve some historical archives of aerial imagery.

We put our eyes on an old 1940 dataset of Hennepin County, Minnesota. The images are overlapping by about 20-30%. There’s also paper tears in many of the scans. We had never tried this before. Would it be good enough for ODM to process? We had to find out.

We quickly put together a script to download some of the images from the University’s online archive, add EXIF tags to the images and send them to ODM using the –fast-orthophoto option, which works well for high altitude flights and datasets with little overlap. We didn’t know what to expect. But a few hours later, when we saw the results, we knew it had worked!

Code available at: https://github.com/pierotofy/historical_aerial_downloader

GeoTIFF: https://drive.google.com/open?id=18UhkAR5jggOtgNvBzadEz-P-bymu14_m

Images credits to the University of Minnesota.

Introducing Contours in WebODM

 

With the 0.9 release of WebODM we are introducing the ability to preview and export contours directly from map view. This has been a much requested feature and we decided to take on the work to implement it.

Behind the curtains we used the GRASS GIS engine which already powers the volume measurement plugin to do the contours calculation, with some help from GDAL/OGR. The beauty of using a familiar language to power these computations is that it’s really easy (if you are familiar with GRASS) to understand how the information is calculated. No mistery. It’s all here.

http://github.com/OpenDroneMap/WebODM

Enjoy!

WebODM 0.8.1 is out! Improvements and Task Imports.

 

Originally posted on https://www.pierotoffanin.com/2019/02/webodm-0-8-1-is-out-improvements-and-tasks-import/

Today we’ve released version 0.8.1 of WebODM. It features several improvements including:

  • Ability to import tasks that have been processed on another WebODM instance (or via webodm.net or NodeODM).
  • Custom TMS/XYZ basemaps and no basemaps toggle.
  • Review step prior to processing a dataset, which should reduce mistakes when creating a new task and selecting the wrong node or options.
  • New UI colors.
  • Simplified process for starting a development environment (deprecated the devenv.sh script in favor of a –dev flag to be passed to webodm.sh)
  • Volume measurement bug fix for iframes and public links.
  • Export volume measurements! This was probably overdue, there was no way to export the geometry / volume calculation results out of WebODM. Now you can!

Announcing CloudODM and PyODM

 

2019 is off to a great start for OpenDroneMap. We are announcing the releases of two open source projects, CloudODM and PyODM. Let’s explore each.

CloudODM

Photogrammetry is a memory intensive process. Not all computers are equipped with large amounts of RAM or powerful CPUs. And of course, we’d like ODM’s capabilities to be available on as many platforms and machines as possible. CloudODM is a command line tool to process aerial imagery in the cloud via NodeODM‘s API. Small, native clients are available for all major platforms including Windows, Mac and Linux. Perhaps you have installed NodeODM on one of your powerful machines at home, but you have a less powerful laptop that you use for your daily work. Now you can invoke odm commands from the less powerful computer and let CloudODM handle the rest. Scripting and automation anyone?

PyODM

Speaking of scripting, we couldn’t just release a command line client without having a proper library for doing the same. PyODM is a Python library that speaks the NodeODM API and allows developers to implement image processing capabilities in 5 lines of code!


from pyodm import Node
n = Node('localhost', 3000)
task = n.create_task(['examples/images/image_1.jpg', 'examples/images/image_2.jpg'], {'dsm': True})
task.wait_for_completion()
task.download_assets("results")

Conclusion

We want to take a moment to thank our community of users. Your feedback has been and continues to be invaluable for the growth of the project. It’s knowing that there are thousands of you out there using the software daily that motives us to continue working. So thank you!

If you haven’t yet, keep the feedback coming and let us know what you would like to see next.

Better Everything: Announcing OpenDroneMap 0.4

 

After much anticipation, we are proud to announce the 0.4 release of OpenDroneMap. We have given a preview of what was coming in a previous blog post and in this post we want to expand on what you can get today from the program.

Much Denser Point Clouds

With the proper settings (just increase –depthmap-resolution) we can now easily achieve 20x point density, much better point coverage and better memory usage. This is thanks to the fantastic work of Dakota that brought Shading Aware Multiview Stereo in replacement of PMVS.

Better Orthophotos

We have done two major improvements to increase the quality of our orthophotos. A new 2.5D meshing approach which is both faster and yields improved building outlines and a modification of the texturing program to affect the priority of nadir shots (which users can control via –texturing-nadir-weight). With these two modifications in place, we are seeing visual improvements across a wide range of datasets.

Better Meshes

The new version includes an improved screened poisson reconstruction algorithm and an additional cleanup step, which means better 3D meshes, less artifacts and better memory usage.

Faster DSM/DTM Generation

Much denser point clouds meant that existing performance problems in the DEMs generation became really apparent and a bottleneck. This is why we worked to both parallelize and speed-up key areas of the DEMs pipeline, which now yield results orders of magnitude faster, especially on multi-core machines.

Standarized Units

We have normalized –orthophoto-resolution and –dem-resolution to use the de-facto industry standard unit of cm / pixel. This is a breaking change, so please update your scripts if the output resolutions are lower than what you would expect. Previous units were pixel / meter and meter / pixel. OpenDroneMap finally joins the rest of the industry in terms of standard units.

Ground Sampling Distance

With this optimization, texturing is faster, memory usage is lowered and if you try to process at a resolution higher than what your images allow you, OpenDroneMap will automatically choose the highest resolution for you. No more guess work. If you want the highest resolution possible for your dataset, simply set –orthophoto-resolution to 0.0001 and OpenDroneMap will do the rest.

Please update, test and report any issues you find directly on GitHub.

Enjoy!

 

 

From Images to Commons: Fast Sharing to OpenAerialMap

 

OpenDroneMap processes aerial imagery. OpenAerialMap (OAM) collects aerial imagery. It’s just natural that the two projects should have some form of integration.

Today, thanks to the efforts of participants from both projects, we are announcing a new feature in WebODM for quickly sharing processed orthophotos to OAM. We expect that this feature will increase user’s participation in the collective effort to build an open access repository of aerial imagery.

Why should we care about open aerial imagery? Aside from the many reasons that have been covered elsewhere and that are not within the scope of this post to discuss, freely accessible aerial imagery is going to be key to keep up with innovation trends. With the recent improvements in AI, availability of training data is going to be a requirement for developing solutions that are “smarter” and provide better analytics.

One of the interesting applications of AI for OpenDroneMap is automatic parameter tuning based on scene detection. Currently users can tweak dozens of different parameters before processing a dataset. It’s often a painful trial-and-error process. AI could enable workflows in which images are passed through a scene detector that can answer queries such as “is this a picture of farm land?” or “is this an urban area?”. Depending on the scene, certain parameters could be automatically tweaked to yield better results, without needing user interaction.

To start contributing open imagery via WebODM, simply update the program to the latest version and look for the “OpenAerialMap” menu.

We will be presenting more details, including a sneak peek of how to start creating your own WebODM plugins, at FOSS4G in Dar Es Salaam on August 29th @ 12:00 in the Bagamoyo room. Look for our talk From images to commons: fast sharing to OpenAerialMap using WebODM in the conference program.

Hope to see you in Dar. Karibu!