Mapir Survey3 - Orthophoto can not be generated


#1

Hello,

I have been trying to run WebODM with some photos taken with MAPIR Survey3 camera, however I got the following warning message.

“An orthophoto could not be generated. To generate one, make sure GPS information is embedded in the EXIF tags of your images, or use a Ground Control Points (GCP) file”

I used this camera with the GPS device for this camera, so it suppose to have GPS data within the metadata. I checked metadata with Exiftool and I saw that all photos have GPS location.

Any suggestions?

In the following link you can download those photos to try create the orthophoto.

Thanks in advance


An orthophoto could not be generated
#2

Could you provide a bit more specifics? When in the process? What is your ODM set-up? What are your settings in settings.yaml? How did you take the images, aka seem to be at 6sec intervals but at what speed? Overlap?

I am running your images in node-odm built with my development ODM image. Its building and has not provided any errors so far.

Plotted image locations in QGIS, looks fine, images have GPS data embedded.


#3

Here is the final output:
[WARNING] DEM will not be generated
[INFO] Running ODM DEM Cell - Finished
[INFO] Running ODM Orthophoto Cell
[DEBUG] running /code/build/bin/odm_orthophoto -inputFile /var/www/data/0d86202e-1a30-42eb-b096-bcc67ce4e501/odm_texturing/odm_textured_model.obj -logFile /var/www/data/0d86202e-1a30-42eb-b096-bcc67ce4e501/odm_orthophoto/odm_orthophoto_log.txt -outputFile /var/www/data/0d86202e-1a30-42eb-b096-bcc67ce4e501/odm_orthophoto/odm_orthophoto.png -resolution 30.0 -verbose -outputCornerFile /var/www/data/0d86202e-1a30-42eb-b096-bcc67ce4e501/odm_orthophoto/odm_orthophoto_corners.txt
Writing corners to: /var/www/data/0d86202e-1a30-42eb-b096-bcc67ce4e501/odm_orthophoto/odm_orthophoto_corners.txt

Reading mesh file…
… mesh file read.

Number of faces in the model 1309
Set boundary to contain entire model.
Local boundary points:
Point 1: -125.76 -135.78
Point 2: -125.76 114.41
Point 3: 108.79 114.41
Point 4: 108.79 -135.78

Ortho photo bounds x : -125.76 -> 108.79
Ortho photo bounds y : -135.78 -> 114.41
Ortho photo area : 58682.1m2
Ortho photo resolution, width x height : 7037x7506
Translating and scaling mesh…
… mesh translated and scaled.

Rendering the ortho photo…
Material 0 rendered.
Material 1 rendered.
Material 2 rendered.
Material 3 rendered.
Material 4 rendered.
Material 5 rendered.
Material 6 rendered.
Material 7 rendered.
Material 8 rendered.
…ortho photo rendered

Writing ortho photo to /var/www/data/0d86202e-1a30-42eb-b096-bcc67ce4e501/odm_orthophoto/odm_orthophoto.png
Writing corner coordinates to /var/www/data/0d86202e-1a30-42eb-b096-bcc67ce4e501/odm_orthophoto/odm_orthophoto_corners.txt
Orthophoto generation done.
[WARNING] No coordinates file. A georeferenced raster will not be created
[INFO] Running ODM OrthoPhoto Cell - Finished
[INFO] OpenDroneMap app finished - Fri Mar 16 00:52:49 2018
Postprocessing: /var/www/data/0d86202e-1a30-42eb-b096-bcc67ce4e501
No orthophoto found at odm_orthophoto/odm_orthophoto.tif: will skip tiling
Found suitable point cloud for PotreeConverter: opensfm/depthmaps/merged.ply
== params ==
source[0]: opensfm/depthmaps/merged.ply
outdir: potree_pointcloud
spacing: 0
diagonal-fraction: 250
levels: -1
format:
scale: 0
pageName:
output-format: BINARY

AABB:
min: [-89.6762, -124.407, 64.0056]
max: [88.3376, 103.035, 83.0042]
size: [178.014, 227.442, 18.9986]

cubic AABB:
min: [-89.6762, -124.407, 64.0056]
max: [137.766, 103.035, 291.448]
size: [227.442, 227.442, 227.442]

spacing calculated from diagonal: 1.57576
READING: opensfm/depthmaps/merged.ply
closing writer

conversion finished
690048 points were processed and 690048 points ( 100% ) were written to the output.
duration: 7.108s
Copying opensfm/depthmaps/merged.ply to odm_georeferencing/odm_georeferenced_model.ply, even though it’s not georeferenced…
Postprocessing: done (•̀ᴗ•́)و!
Compressing all.zip

Interesting - only built a non-georeferenced png, but no ortho tif. PNG is also flipped, with beach and water treatment (?) plant mirrored. Noticed run showed a number of images that did not converge, took almost 2hrs for 70 images, normally process ~150 forest survey images in little over an hour.

Did notice the camera was a RGN model, wonder if that is causing issues? I have produced orthos from RGB, NIR, and RED Survey2 cameras, so likely not.

Survey3 GPS would likely be using WGS84? There is another forum post that also had mirrored image, might be from datum in that case?


#4

Hello Peter, thanks for your help.

I run this project with following WebODM options:

  • Default
  • fast-orthophoto
  • min-num-features: 12000 & fast-orthophoto
  • rerun-from: resize

Photos were taken at 60 m from the ground, with a frequency of 5 seconds, I mounted mapir survey3 camera (Green, Red, Near Infrared) and its GPS on a phantom 4 pro, I used tripod flight mode for a more stable flight (3.6 km/h).

At the end, no matter the settings of the WebODM I got the same results as you (i.e. no orthophoto, no dsm), just a weird png with the orthophoto.

About GPS, I think both DJI and MAPIR use longitude and latitude WGS84. I saw that GPS version of DJI is 2.3.0.0, while MAPIR is 2.2.0.0.

These are the metadata for DJI and MAPIR for the first photo:
DJI:
GPS Version ID: 2.3.0.0
GPS Latitude Ref: North
GPS Longitude Ref: West
GPS Altitude Ref: Above Sea Level
GPS Altitude: 50.2 m Above Sea Level
GPS Latitude: 24 deg 8' 16.73" N
GPS Longitude: 110 deg 25' 35.25" W
GPS Position: 24 deg 8' 16.73" N, 110 deg 25' 35.25" W

MAPIR
GPS Version ID: 2.2.0.0
GPS Latitude Ref: North
GPS Longitude Ref: West
GPS Altitude Ref: Above Sea Level
GPS Altitude: 3 m Above Sea Level
GPS Latitude: 24 deg 8' 16.83" N
GPS Longitude: 110 deg 25' 35.39" W
GPS Position: 24 deg 8' 16.83" N, 110 deg 25' 35.39" W


#5

One thing I noticed is that your images do not explicitly list your GPSMapDatum. Not sure why, but could you use Exif Tool [https://sno.phy.queensu.ca/~phil/exiftool/] to write the GPSMapDatum to another set of test images?

$ exiftool -GPSMapDatum=“WGS-84” 2018_0313_09*.JPG

I would think that ODM would default to WGS-84, but it may not


#6

That didn’t help, though there are more specific errors shown. Checked image file mentioned in error, don’t see any issue.

Posted bug report


Failed to find match for field ‘curvature’.
Successfully loaded 692316 points with corresponding normals from file.
Octree depth used for reconstruction is: 5
Estimated initial vertex count: 1024

Reconstruction complete:
Vertex count: 1229
Triangle count: 2314

Vertex count in mesh lower than initially generated mesh, unable to decimate.
Saving mesh to file.
Successfully wrote mesh to:
/var/www/data/d9e91b26-41b5-4e55-803f-a06c769d0d7e/odm_meshing/odm_mesh.ply
[INFO] Running ODM Meshing Cell - Finished
[INFO] Running MVS Texturing Cell
[DEBUG] Writing MVS Textured file in: /var/www/data/d9e91b26-41b5-4e55-803f-a06c769d0d7e/odm_texturing/odm_textured_model.obj
[DEBUG] running /usr/local/bin/texrecon /var/www/data/d9e91b26-41b5-4e55-803f-a06c769d0d7e/opensfm/reconstruction.nvm /var/www/data/d9e91b26-41b5-4e55-803f-a06c769d0d7e/odm_meshing/odm_mesh.ply /var/www/data/d9e91b26-41b5-4e55-803f-a06c769d0d7e/odm_texturing/odm_textured_model -d gmi -o gauss_clamping -t none
/usr/local/bin/texrecon (built on Mar 14 2018, 22:08:25)
Load and prepare mesh:
PLY Loader: comment PCL generated
Reading PLY: 1229 verts… 2314 faces… done.
Generating texture views:
NVM: Loading file…
NVM: Number of views: 52
NVM: Number of features: 0

Loading 100%... done. (Took 6.765s)

Building adjacency graph:

Adding edges 100%... done. (Took 0.01s)
3400 total edges.

View selection:
Building BVH from 2314 faces… done. (Took: 6 ms)

Calculating face qualities 100%... done. (Took 4.083s)

                                                                            
Postprocessing face infos 100%... done. (Took 0.005s)
Maximum quality of a face within an image: 7477.4
Clamping qualities to 5615.34 within normalization.
Writing data cost file... done.
Optimizing:
	Time[s]	Energy
	0	2131
	0	2065
	0	2032
	0	2016
	0	2006
	0	2003
	0	2001
	0	2001
	0	1999
	0	1999
	0	1999
	0	1998
	0	1998
	0	1998
1074 faces have not been seen
Took: 4.263s

Generating texture patches:
Running… done. (Took 1.665s)
13 texture patches.
Running global seam leveling:
Create matrices for optimization… done.
Lhs dimensionality: 816 x 816
Calculating adjustments:
Color channel 1: CG took 101 iterations. Residual is 9.38383e-05
Color channel 2: CG took 74 iterations. Residual is 9.5346e-05
Color channel 0: CG took 106 iterations. Residual is 7.71225e-05
Took 0.002 seconds

Adjusting texture patches 100%... done. (Took 1.166s)

Running local seam leveling:

Blending texture patches 100%... done. (Took 3.622s)

Generating texture atlases:
Sorting texture patches… done.

Working on atlas 8 100%... done.
Finalizing texture atlases... done. (Took: 0.32s)

Building objmodel:
Saving model… done.
Whole texturing procedure took: 31.188s
[INFO] Running ODM Texturing Cell - Finished
[INFO] Running ODM Georeferencing Cell
[DEBUG] None
[WARNING] No coordinates file. Generating coordinates file: /var/www/data/d9e91b26-41b5-4e55-803f-a06c769d0d7e/odm_georeferencing/coords.txt
[WARNING] Could not generate coordinates file. Ignore if there is a GCP file. Error: logFile_ was set to: /var/www/data/d9e91b26-41b5-4e55-803f-a06c769d0d7e/odm_georeferencing/odm_georeferencing_utm_log.txt
Error in OdmExtractUtm:
Failed parsing GPS position for 2018_0313_093924_076.JPG
For more detailed information, see log file.

[WARNING] Georeferencing failed. Make sure your photos have geotags in the EXIF or you have provided a GCP file.
[WARNING] Found a valid georeferenced model in: /var/www/data/d9e91b26-41b5-4e55-803f-a06c769d0d7e/odm_georeferencing/odm_georeferenced_model.ply
[INFO] Running ODM Georeferencing Cell - Finished
[INFO] Running ODM DEM Cell
[DEBUG] running l2d_classify --help > /dev/null
[INFO] Create DSM: False
[INFO] Create DTM: False
[INFO] DEM input file /var/www/data/d9e91b26-41b5-4e55-803f-a06c769d0d7e/odm_georeferencing/odm_georeferenced_model.las found: False
[WARNING] DEM will not be generated
[INFO] Running ODM DEM Cell - Finished
[INFO] Running ODM Orthophoto Cell
[DEBUG] running /code/build/bin/odm_orthophoto -inputFile /var/www/data/d9e91b26-41b5-4e55-803f-a06c769d0d7e/odm_texturing/odm_textured_model.obj -logFile /var/www/data/d9e91b26-41b5-4e55-803f-a06c769d0d7e/odm_orthophoto/odm_orthophoto_log.txt -outputFile /var/www/data/d9e91b26-41b5-4e55-803f-a06c769d0d7e/odm_orthophoto/odm_orthophoto.png -resolution 30.0 -verbose -outputCornerFile /var/www/data/d9e91b26-41b5-4e55-803f-a06c769d0d7e/odm_orthophoto/odm_orthophoto_corners.txt
Writing corners to: /var/www/data/d9e91b26-41b5-4e55-803f-a06c769d0d7e/odm_orthophoto/odm_orthophoto_corners.txt

Reading mesh file…
… mesh file read.

Number of faces in the model 1240
Set boundary to contain entire model.
Local boundary points:
Point 1: -129.53 -135.71
Point 2: -129.53 114.21
Point 3: 112.33 114.21
Point 4: 112.33 -135.71

Ortho photo bounds x : -129.53 -> 112.33
Ortho photo bounds y : -135.71 -> 114.21
Ortho photo area : 60445.7m2
Ortho photo resolution, width x height : 7256x7498
Translating and scaling mesh…
… mesh translated and scaled.

Rendering the ortho photo…
Material 0 rendered.
Material 1 rendered.
Material 2 rendered.
Material 3 rendered.
Material 4 rendered.
Material 5 rendered.
Material 6 rendered.
Material 7 rendered.
…ortho photo rendered

Writing ortho photo to /var/www/data/d9e91b26-41b5-4e55-803f-a06c769d0d7e/odm_orthophoto/odm_orthophoto.png
Writing corner coordinates to /var/www/data/d9e91b26-41b5-4e55-803f-a06c769d0d7e/odm_orthophoto/odm_orthophoto_corners.txt
Orthophoto generation done.
[WARNING] No coordinates file. A georeferenced raster will not be created
[INFO] Running ODM OrthoPhoto Cell - Finished
[INFO] OpenDroneMap app finished - Fri Mar 16 19:41:49 2018
Postprocessing: /var/www/data/d9e91b26-41b5-4e55-803f-a06c769d0d7e
No orthophoto found at odm_orthophoto/odm_orthophoto.tif: will skip tiling
Found suitable point cloud for PotreeConverter: opensfm/depthmaps/merged.ply
== params ==
source[0]: opensfm/depthmaps/merged.ply
outdir: potree_pointcloud
spacing: 0
diagonal-fraction: 250
levels: -1
format:
scale: 0
pageName:
output-format: BINARY

AABB:
min: [-89.5821, -123.985, 63.9865]
max: [88.5075, 110.541, 82.837]
size: [178.09, 234.526, 18.8505]

cubic AABB:
min: [-89.5821, -123.985, 63.9865]
max: [144.944, 110.541, 298.512]
size: [234.526, 234.526, 234.526]

spacing calculated from diagonal: 1.62484
READING: opensfm/depthmaps/merged.ply
closing writer

conversion finished
692316 points were processed and 692316 points ( 100% ) were written to the output.
duration: 9.281s
Copying opensfm/depthmaps/merged.ply to odm_georeferencing/odm_georeferenced_model.ply, even though it’s not georeferenced…
Postprocessing: done (•̀ᴗ•́)و!
Compressing all.zip


#7

Hi,

one question, can you send the result of exiftool just to check what metadata are present on the image ?
If you are flying at 50.2m above sea level, why in your picture you have on the picture 3m above see level ?


#8

Hola! han podido solucionar el problema?

Gracias

Eddison


#9

I saw that, and my guess is that the GPS of MAPIR is not much good. Now I’m trying with a different set of images, however I have the same problems.


#10

No, sigo intentando de otras maneras, pero sin éxito,


#11

It seems the problem is the format of GPS.

Error: Error in OdmExtractUtm:
Failed parsing GPS position for 2018_0316_105018_106.JPG

Something similar was posted here: https://github.com/OpenDroneMap/WebODM/issues/185

Maybe somebody can fix this problem. Piero? :slight_smile:


#12

Hi,

As I asked, how is the Altitude value for your pictures?
The issue posted was related to Z/Altitude value.


#13

Most of the pictures have 60 m, however others have 6, 3, 0 etc.

I run again but this time using the first 15 and it works!

The first 2 has 3 m, other about 60 m, so maybe the problem is not altitude. Perhaps DSM maybe wrong, but that is not a problem for me, since I just want the orthomosaic.


#14

You can try to fix the Altitude in all your pictures with exiftool and can discard Altitude issues.


#15

Hi Raulmartinez,

I have recently bought a Survey3 Mapir RGB camera and have got the same error message when trying to make an ortho for the first time. Have you got any advice on how to get the process to work?


#16

Hi,

I couldn’t solve the problem. :frowning:

However, since I have to create orthomosaics using this camera for a research project, I decide to try with PhotoScan Pro of Agisoft using trial version (30 days). Orthomosaics and DEM were generated without further problems.

Hopefully, administrators of this community will not expel me because of this, hehehe.

Best
Raúl


#17

I managed to process 204 images captured on a survey3 camera using Webodm into a orthophoto, 3d model, surface model etc. The images were jpgs and not tiffs. I tried using tiffs created by the MAPIR MCC program but webodm did not like them and gave me the same message you had got. It is either my hardware not being powerful enough, I have 8gb ram and i7 core, or something to do with the way the tiffs are created by the MAPIR program.

The gps data looks close to the google earth images used in webodm so the accuracy is not too bad.

Next I will try to import them into QGIS


#18

Thats great!

MAPIR suggest that once you have your mosaic you can use MAPIR MCC. If you try with “calibrated” images you can have problems to combine them.

“After you have pre-processed your images you have the option of stitching them into the final orthomosaic or calibrating each photo before stitching. Typically it’s better to stitch the non-calibrated images and then calibrate the orthomosaic due to possible issues with stitching the calibrated images”.

Did you change settings of WebODM to create mosaics?
How did you do it?

Best
Raúl


#19

I did not change any of the settings on webodm and I did not use calibrated images; just rgb. I am not sure how it works using mcc after creating the mosaic. I just used jps as the large tiffs seemed to be causing a problem.


#20

There is a page for improving output of mapir cameras on pix4d. It is possible to use this to improve webodm results? If so, where does it need to be added?