Spherical warping of 3D georeferenced surface model

New to the community, wanted to express my appreciation for the great work going on here!

I’m working with an initial data set collected with a Matrice 100 with a Z3 camera. The data set was collected using the planning functions in Map Pilot, using 80/80 overlaps at an altitude of 60 meter. The complete data set is 174 images, and I am working with the first 21 images as a small test set. The site is an open field area with a small water channel running down the middle.

I was successful in using WebODM to process the data set using default setting for everything except the following:

min-num-features: 8000 (increased from 4000 per WebODM after Code 1 crash)
force-ccd: set to 6.16 (after WebODM error indicating ccd width not found)
dem-terrain-type: set to FlatNonForrest (seemed like the closest description)
use-25dmesh: Enabled (did this when I was trying to solve Code 1 crash then just left it enabled)
use-pmvs: Enabled (per suggestion with Code 1 crash)

When I reviewed the results, I found two issues that I am trying to understand.

  1. In the 3D model, there appears to be a spherical warping of the surface that is not consistent with the terrain. This shows up in the small test data set as an upward arcing of the middle of the data set surface. When I run the larger data set, it is more obvious that the high point is in the center of the data set, with the rest of the surface arcing downward toward the edges.

  1. There is a significant amount of clipping of the final orthophoto on the corners. This is not extreme in the small data set, but gets significantly more pronounced when I process the full data set.

These are probably two separate issues but thought I would include them together in case they were related.

The data set and results for the small data set are available at:

https://drive.google.com/open?id=1PUakBcn9ajDJUH_-1jkfhCLx0yAOZElK

Would really appreciate any insights on this!

  1. For warping, you might want to undistort your images before processing with a program such as GitHub - dakotabenjamin/CameraCalibration. We’ll probably integrate this process automatically in the ODM pipeline at some point, just haven’t had the time to do it yet.

  2. For clipping, see if removing both “–use-25dmesh” and “–use-pmvs” parameters gives you better results (leave all the others unchanged).

Thanks for the quick response. I will have to put some research into (1) to see if I can figure that out.

For 2, I tried rerunning per your suggestion removing the “-use-25dmesh” and “-use-pmvs”. I’m back to the Code 1 error with the following traceback:

Traceback (most recent call last):
File “/code/run.py”, line 47, in
plasm.execute(niter=1)
File “/code/scripts/opensfm.py”, line 138, in process
(context.pyopencv_path, context.opensfm_path, tree.opensfm))
File “/code/opendm/system.py”, line 34, in run
raise Exception(“Child returned {}”.format(retcode))
Exception: Child returned 137

This seems to have occurred at the end of the depthmap pruning process. Everything up to that point looked good. Note that this was running the full data set of 174 images.

OK I retried this on the smaller data set (to save some testing time) and found that the clipping issue is resolved if I remove the “-use-25dmesh” but retain the “-use-pmvs” and no Code 1 issue. I will try this on the larger data set now.

It seems like the problem I was having before with the larger data set was related to memory settings still. I seem to have to go into the Oracle VM and set those for each session for some reason. At any rate, I was able to successfully complete the orthophoto mosaic for the big data set:

I am going to work on sorting out the warping now.

You can also avoid the warping by adjusting your flights:

  • make the camera point at a slight angle from nadir (7-ish degrees should work)
  • fly perpendicular flight lines (criss-crossing).

This will create converging camera angles which reduces the errors that cause warping.

Ah yes that makes sense! Will give that a shot for my next attempt. Thanks very much!