Processing forest data with similar photos


I have problem with processing forest data. I’ve read different topics and even the ODM book, but still cannot tune it fine.

Here is the area (560 photos) I want to process (processed with default parameters auto-boundary: true, dsm: true):

As you can see, only part of the area is properly processed.

I’ve tried some proposed set of parameters:

auto-boundary: true, crop: 0, dem-gapfill-steps: 4, dem-resolution: 1, dsm: true, dtm: true, matcher-neighbors: 16, mesh-size: 300000, min-num-features: 16000, orthophoto-resolution: 1, pc-classify: true, pc-filter: 1, pc-geometric: true, pc-quality: high, use-3dmesh: true
result is worse:

Some better results I got when I tried

 feature-type: hahog, min-num-features: 40000, resize-to: -1

I’ve tested increasing neighbours matching:

auto-boundary: true, dsm: true, matcher-neighbors: 20, min-num-features: 30000, resize-to: -1, skip-3dmodel: true

I tested also split processing to motivate algorithm to find features in other places of area:

dsm: true, feature-type: hahog, min-num-features: 40000, resize-to: -1, split: 50, split-overlap: 10

Still I cannot create whole orthophoto. Could you give me some advice which parameters tune better? Should I try more splitting and merging images, is it recommended way of processing such data?


Some better result with default split-overlap (150) and lower split value (50)

dsm: true, feature-type: hahog, min-num-features: 40000, resize-to: -1, split: 50


Obviously the matching process cannot find enough features.
Which is understandable , with such homogeneous surface.
If you can, try using sift feature-type and adjust in the code sift_peak_threshold

You need lower values to increase finded features.
You could start with

sift_peak_threshold : 0.01

Thanks for hint, unfortunately it doesn’t help much:

I may check other values of sift_peak_threshold

1 Like

Could you provide a bit of detail about the flight plan? What was your targeted overlap/sidelap? What’s your GSD and flight height? These highly homogeneous scenes can be really difficult.

1 Like

Using HAHOG I see that defining pc-quality as ultra will gives a lot of features to be use in the marching process (SLOW!!).
Try also to use BOW as the matcher type and see the result are better.

1 Like

I have flown enough forests to recognize this flight plan from my past. You need a lot more sidelap.

For forests at 120m/ 400ft above the ground (or lower), I recommend treating them like full 3D reconstructions: 77-83% front lap and side lap. The more, the better.


It’s not my data, I don’t know these parameters, but I’ll try to get them :slight_smile:

I know the data is not the best quality, but DroneDeploy coped with it:

That’s why I assume I may achieve similar results with ODM.

1 Like

One more interesting fact is that DroneDeploy shows different location of taking photos (without gaps). Maybe that’s also affecting the result.

1 Like


Maybe putting --fast-orthophoto along with your increased --min-num-features, --feature-type hahog, and increased --matcher-neighbors might help as it is a lot more forgiving of datasets with lower sidelap/overlap. If you have a chance, it might be good to see what that does for you.


Without split, I had a result similar to the first photo which I presented at the beginning of this thread.

Adding split:

 fast-orthophoto: true, feature-type: hahog, matcher-neighbors: 20, min-num-features: 30000, resize-to: -1, split: 50

1 Like

Can you show us a stats from opensfm?

1 Like

Here are features.json: { "wall_time": 212.57848334498703, "image_reports": [ { -
And summary from matches.json:

    "wall_time": 1026.7997168310103,
    "num_pairs": 7185,
    "num_pairs_distance": 5967,
    "num_pairs_graph": 6405,
    "num_pairs_time": 0,
    "num_pairs_order": 0,
    "num_pairs_bow": 0,
    "num_pairs_vlad": 0

Is this what you wanted?

1 Like

In opensfm/stats folder are various statistics.
For example - overlap , heatmap of detected features …

1 Like

I have no such a folder as opensfm in Should I add some parameter to have it generated?

1 Like

No, it should be in your NodeODM folder for a few days after a job processes, however.

Which platform are you using for processing?

1 Like

I’m using WebODM, I run by startup script which setups docker containers.

Example content of opnsfm folder in webodm-node-odm-1:

[email protected]:/var/www/data/bd59b8b6-d234-4e1d-a899-22af8d082371/opensfm# ls
alignment_done.txt  camera_models.json  config.yaml  exif  features  image_list.txt  matches  profile.log  reference_lla.json  reports  split_done.txt
1 Like

Can you cd into features/matches and ls from there as well?

only npz files here:

[email protected]:/var/www/data/bd59b8b6-d234-4e1d-a899-22af8d082371/opensfm# ls features/
96_1.JPG.features.npz    96_171.JPG.features.npz  96_243.JPG.features.npz  96_315.JPG.features.npz  96_388.JPG.features.npz  96_46.JPG.features.npz   96_531.JPG.features.npz

only pkl.gz files:

[email protected]:/var/www/data/bd59b8b6-d234-4e1d-a899-22af8d082371/opensfm# ls matches/
96_1.JPG_matches.pkl.gz    96_184.JPG_matches.pkl.gz  96_269.JPG_matches.pkl.gz  96_353.JPG_matches.pkl.gz  96_438.JPG_matches.pkl.gz  96_522.JPG_matches.pkl.gz

[email protected]:/var/www/data/bd59b8b6-d234-4e1d-a899-22af8d082371/opensfm# tree -d
|-- exif
|-- features
|-- matches
`-- reports
    `-- features

5 directories

[email protected]:/var/www/data/bd59b8b6-d234-4e1d-a899-22af8d082371/opensfm# ls reports/
features  features.json  matches.json

and only json files:

[email protected]:/var/www/data/bd59b8b6-d234-4e1d-a899-22af8d082371/opensfm# ls reports/features
96_1.JPG.json    96_15.JPG.json   96_20.JPG.json   96_250.JPG.json  96_300.JPG.json  96_351.JPG.json  96_401.JPG.json  96_452.JPG.json  96_502.JPG.json  96_553.JPG.json
1 Like

Strange …
It could be missing beacuse you use split-merge pipeline ?

1 Like