Orthophoto generation with GCP then also the orthophoto is not generated on the expected geolocation

In orthophoto generation I provide geotagged images with GCP then also the orthophoto is not generated on the expected location.

2 Likes

Welcome Sharu. Sorry for the trouble, can you provide screenshots,version of ODM, install process, and operating system. If possible can you also share the dataset?

1 Like

For what it’s worth, I’m seeing something similar with a number of datasets:
image

I’m not sure, but I have my suspicions it might be related to this pull request:

This dataset is a submodel of a much larger project, so I’m running just the submodel through to discern whether this is a core issue, or some challenge associated with split-merge.

1 Like

Thank u so much smathermather for the quick reply.
while using GCP,if i dont use --use-exif flag then the generated orthophoto goes to lon=0.00 lat=0.00 locations.
i pulled the latest docker image (opendronemap/odm:gpu )and run with it .

1 Like

Do your images have proper EXIF, including GPSLatRef and GPSLongRef?

yes they do have! The same images get stitched well in Agisoft

1 Like

even it generates orthomosaic on expected location without using GCPs!

How to do georeferncing with GCPs? do we need to add extra flags? i tried --use-exif and --force-gps invidually! but didnt work for me .
when i used --use-exif it got georefernced correctly but when i relocated GCPs lat long on orthomosaic , i got 1meter to 2 meters error.
with --force-gps flag got 1meter error. but i want it to reduce or should be less than 5cm.
how to achieve than. i tried each and every flags with gpu docker image, still didnt get expected results.
when i dont include --use-exif and --force-gps flags ,
i get this
“[INFO] 50 GCP points will be used for georeferencing”.
but still get the error of 1meter and more than that.
But for same dataset Agisoft gives good results with great absolute accuracy

1 Like

When you are using GCPs, you do not need to force any extra flags.

Have you tried to adjust the --gps-accuracy flag if you’re confident in the mean GPS accuracy for the survey? We assume 10m by default.

1 Like

GPS accuracy! sure in terms of what? how much i can use?
can i set it to 10cm ? and test?

1 Like

Do you know your mean accuracy for the survey in X/Y/Z axes? If so, I would set it to the mean accuracy for Z (or 2x X/Y, as recommended by Stephen). So, if that’s 10cm, great!


this is how the orthomosaic got generated with GCPs. i didnt include any flags like use-exif or force-gps!
docker run --rm -v /home/sharu/datasets:/datasets --gpus all opendronemap/odm:gpu --project-path /datasets --feature-quality low --fast-orthophoto --orthophoto-no-tiled --cog --time --skip-band-alignment --gcp /datasets/gcp_list.txt

| [INFO] 50 GCP points will be used for georeferencing
| [INFO] Generated coords file from GCP: WGS84 UTM 37S

GCPs are

40.01532619 -82.76530394 327.245 5225.0839 2678.5995 DJI_0406.JPG
40.01532619 -82.76530394 327.245 5063.1616 3015.1610 DJI_0407.JPG
40.01517735 -82.763876 326.079 3953.1659 2182.3327 DJI_0067.JPG
40.01723723 -82.76351933 328.704 1433.6384 2956.9961 DJI_0034.JPG
40.01517735 -82.763876 326.079 376.0027 2288.7474 DJI_0003.JPG
40.01517735 -82.763876 326.079 345.4116 1380.7732 DJI_0002.JPG
40.01532619 -82.76530394 327.245 1733.6142 920.2859 DJI_0408.JPG
40.01532619 -82.76530394 327.245 1681.8977 1638.2411 DJI_0409.JPG
40.01723723 -82.76351933 328.704 2980.6935 1785.0629 DJI_0036.JPG
40.01723723 -82.76351933 328.704 2996.5680 2643.5710 DJI_0037.JPG
40.01723723 -82.76351933 328.704 1295.1876 362.5617 DJI_0031.JPG
40.01723723 -82.76351933 328.704 3962.7530 2004.9597 DJI_0099.JPG
40.01723723 -82.76351933 328.704 3956.4710 2898.9792 DJI_0100.JPG
40.01517735 -82.763876 326.079 2893.4966 1672.2021 DJI_0068.JPG
40.01517735 -82.763876 326.079 2863.1006 2381.0874 DJI_0069.JPG
40.01532619 -82.76530394 327.245 1655.0053 2446.4900 DJI_0410.JPG
40.01723723 -82.76351933 328.704 3970.8552 1149.0477 DJI_0098.JPG
40.01745652 -82.76516183 328.424 637.3207 412.1851 DJI_0439.JPG
40.01745652 -82.76516183 328.424 580.2158 1287.7829 DJI_0440.JPG
40.01745652 -82.76516183 328.424 562.1039 2174.7418 DJI_0441.JPG
40.01745652 -82.76516183 328.424 718.1693 2639.6242 DJI_0442.JPG
40.01745652 -82.76516183 328.424 3714.6199 1259.4498 DJI_0443.JPG
40.01745652 -82.76516183 328.424 3719.7637 2011.2213 DJI_0444.JPG
40.01745652 -82.76516183 328.424 3711.5003 2877.3989 DJI_0445.JPG
40.01517735 -82.763876 326.079 1429.0448 2435.8438 DJI_0134.JPG
40.01517735 -82.763876 326.079 1517.8289 1340.9125 DJI_0132.JPG
40.01517735 -82.763876 326.079 1563.6173 2145.8971 DJI_0133.JPG
40.01517735 -82.763876 326.079 3906.8882 1348.7201 DJI_0066.JPG
40.01532619 -82.76530394 327.245 2649.8769 1017.6906 DJI_0476.JPG
40.01517735 -82.763876 326.079 3867.5060 544.2138 DJI_0065.JPG
40.01532619 -82.76530394 327.245 5188.1153 1820.7302 DJI_0405.JPG
40.01532619 -82.76530394 327.245 5146.4139 959.8133 DJI_0404.JPG
40.01532619 -82.76530394 327.245 2665.2383 2737.0009 DJI_0478.JPG
40.01612577 -82.76453392 328.648 3843.0491 1885.4432 DJI_0256.JPG
40.01612577 -82.76453392 328.648 489.6509 1145.4608 DJI_0216.JPG
40.01612577 -82.76453392 328.648 459.1660 2012.2279 DJI_0217.JPG
40.01612577 -82.76453392 328.648 3846.4133 978.3146 DJI_0255.JPG
40.01612577 -82.76453392 328.648 3824.9316 2799.7565 DJI_0257.JPG
40.01612577 -82.76453392 328.648 3242.9772 455.0880 DJI_0283.JPG
40.01612577 -82.76453392 328.648 3164.5017 1323.0506 DJI_0284.JPG
40.01612577 -82.76453392 328.648 3088.1117 2209.7927 DJI_0285.JPG
40.01612577 -82.76453392 328.648 1193.3000 1636.6840 DJI_0324.JPG
40.01612577 -82.76453392 328.648 1188.5732 2490.7331 DJI_0325.JPG

1 Like

It looks like you are not using GCPs properly. They are to. Be used with 3-5 images per GCP. It looks like you are instead defining a single location per GCP
This will not work.

ok, so i have marked 7 images for a single GCP, i will try using 4 images per GCPs and share u the result. should i do it?

1 Like

3-5 images per GCP is recommended, and around 5 GCPs per site. It is recommended that they are evenly-distributed, so that normally means one in each corner and one roughly in the middle of the site.

Each GCP image tag for a given GCP must be referring to the same physical location.

1 Like

Negative GSD
i run the following command still not got the expected ortho and it is not georeferenced, attached as below
got thiswarning also | [WARNING] Negative GSD estimated, this might indicate a flipped Z-axis.

docker run --rm -v /home/sharu/datasets:/datasets --gpus all opendronemap/odm:gpu --project-path /datasets project --feature-quality low --skip-3dmodel --orthophoto-no-tiled --cog --time --skip-band-alignment --gcp /datasets/gcp_list.txt

+proj=longlat +datum=WGS84 +no_defs +type=crs
40.01745652 -82.76516183 328.424 3246.2415 1384.3436 DJI_0512.JPG gcp1
40.01745652 -82.76516183 328.424 3231.2828 2236.3909 DJI_0513.JPG gcp1
40.01745652 -82.76516183 328.424 3714.6199 1259.4498 DJI_0443.JPG gcp1
40.01745652 -82.76516183 328.424 3719.7637 2011.2213 DJI_0444.JPG gcp1

40.01723723 -82.76351933 328.704 1336.7469 1239.7312 DJI_0032.JPG gcp2
40.01723723 -82.76351933 328.704 1376.9041 2124.8124 DJI_0033.JPG gcp2
40.01723723 -82.76351933 328.704 2910.7499 1037.3521 DJI_0035.JPG gcp2
40.01723723 -82.76351933 328.704 2980.6935 1785.0629 DJI_0036.JPG gcp2

40.01517735 -82.763876 326.079 3906.8882 1348.7201 DJI_0066.JPG gcp3
40.01517735 -82.763876 326.079 3953.1659 2182.3327 DJI_0067.JPG gcp3
40.01517735 -82.763876 326.079 2893.4966 1672.2021 DJI_0068.JPG gcp3
40.01517735 -82.763876 326.079 2863.1006 2381.0874 DJI_0069.JPG gcp3

40.01532619 -82.76530394 327.245 2660.4947 1884.5368 DJI_0477.JPG gcp4
40.01532619 -82.76530394 327.245 2665.2383 2737.0009 DJI_0478.JPG gcp4
40.01532619 -82.76530394 327.245 2649.8769 1017.6906 DJI_0476.JPG gcp4
40.01532619 -82.76530394 327.245 1681.8977 1638.2411 DJI_0409.JPG gcp4

40.01612577 -82.76453392 328.648 3242.9772 455.0880 DJI_0283.JPG gcp5
40.01612577 -82.76453392 328.648 3164.5017 1323.0506 DJI_0284.JPG gcp5
40.01612577 -82.76453392 328.648 3088.1117 2209.7927 DJI_0285.JPG gcp5
40.01612577 -82.76453392 328.648 3843.0491 1885.4432 DJI_0256.JPG gcp5

Can you try with --feature-quality high or ultra?

will it require more memory?
ok now running with
docker run --rm -v /home/sharu/datasets:/datasets --gpus all opendronemap/odm:gpu --project-path /datasets project --feature-quality high --skip-3dmodel --orthophoto-no-tiled --cog --time --skip-band-alignment --gcp /datasets/gcp_list.txt

waiting for good results!
I wonder if i use --use-exif flag i got georeferenced ortho but GCPs absolute accuracy is in meters!


1 Like

Yes, it will, but that type of limited reconstruction (passing --crop 0 might also help) in the orthophoto usually indicates not finding sufficient tiepoints, and using a higher --feature-quality will usually help this.

1 Like

kindly reply on this

1 Like


docker run --rm -v /home/sharu/datasets:/datasets --gpus all opendronemap/odm:gpu --project-path /datasets project --feature-quality high --crop 0 --skip-3dmodel --orthophoto-no-tiled --cog --time --skip-band-alignment --gcp /datasets/gcp_list.txt
:pensive:

1 Like