Hi Daniel,

Thanks for trying with the data! I appreciate that. The gdal command I provided 
in the sample-gdal-call.txt file is the only one I could get to have "good" 
looking results. What command did you use to include the DEM?

If there has been a fix between 3.6 and 3.8.3 that helps with this, then I'm 
happy to try it. I'll give that a look too.

thanks!
Joe
________________________________
From: Daniel Evans <daniel.fred.ev...@gmail.com>
Sent: Thursday, April 18, 2024 5:44 AM
To: Joseph McGlinchy <jmcglin...@hydrosat.com>
Cc: Even Rouault <even.roua...@spatialys.com>; gdal-dev@lists.osgeo.org 
<gdal-dev@lists.osgeo.org>
Subject: Re: [gdal-dev] gdalwarp with RPCs causing bogus output

Hi Joe,

Trying your commands with GDAL 3.8.3, the results don't seem to be as bad as 
what you're reporting - I don't see big strips missing. Adding in the DEM file 
as Even mentioned, it seems to be doing what I'd expect (the correction isn't 
"right" because of the georeferencing offset, but it's doing what it's told 
using the underlying DEM).

Any possibility of trying a newer GDAL version in case there has been a fix 
since 3.6.0?

Cheers,
Daniel

On Thu, 18 Apr 2024 at 02:35, Joseph McGlinchy via gdal-dev 
<gdal-dev@lists.osgeo.org<mailto:gdal-dev@lists.osgeo.org>> wrote:
Hi Even,

Thank you for this great response. I'll try out some of those things you 
mention on the CRS of the DEM and correcting for the geoid; I had also been 
reading that any height values used in this process need to be heights above 
the ellipsoid.

I had seen good outputs from gdaltransform​, both forward and inverse, and can 
get back to the corner coordinates, center coordinates, etc. in both lon/lat 
and sample/line so it could be a subtlety of the DEM + CRS, or the more 
challenging issue of stable RPCs.

On the topic of stable RPCs, do you happen to know if it is enough to zero out 
the higher-order terms after the full set of coefficients are fit? Since there 
are squared terms in the higher-order coefficients, that could definitely be 
part of the issue, even if it works mathematically.

thanks!
Joe
________________________________
From: Even Rouault 
<even.roua...@spatialys.com<mailto:even.roua...@spatialys.com>>
Sent: Wednesday, April 17, 2024 4:20 PM
To: Joseph McGlinchy <jmcglin...@hydrosat.com<mailto:jmcglin...@hydrosat.com>>; 
gdal-dev@lists.osgeo.org<mailto:gdal-dev@lists.osgeo.org> 
<gdal-dev@lists.osgeo.org<mailto:gdal-dev@lists.osgeo.org>>
Subject: Re: [gdal-dev] gdalwarp with RPCs causing bogus output


Hi,


I haven't done myself that exercice but I know that computing RPC values that 
are stable enough might be challenging, so perhaps the issue is related to that


A few other remarks:

- your gdalwarp command line refers to  RPC_DEM_SRS and RPC_DEM_MISSING_VALUE 
but doesn't include a RPC_DEM itself, hence those are likely to be non effective

- you generally don't want to use both RPC_HEIGHT and RPC_DEM.  RPC_HEIGHT is 
essentially useful when you don't have a DEM available, and thus fallback 
taking an average elevation

- there's a subtlety regarding DEM. RPC reference for altitudes is WGS84 
ellipsoidal height, not orthometric/MSL altitude. But DEM values use 
orthometric/MSL altitude, hence a geoid correction must be applied. So you'd 
rather want to use RPC_DEM_SRS=EPSG:4326+5773 for example to use the EGM96 
geoid (cf https://github.com/OSGeo/gdal/issues/3298). That said, misusing 
orthometric altitude vs ellipsoidal height generally accounts for small shifts, 
not big ones

- you could use gdaltransform with all your -to parameter and 
input_with_RPCs.tiff to check at least that the forward RPC transformation path 
works correctly (the one from longitude, latitude -> column, line). And with -i 
to check the inverse RPC transformer. The inverse RPC transformer can have a 
hard time converging in montainous areas or for images off-nadir


Even


Le 17/04/2024 à 23:30, Joseph McGlinchy via gdal-dev a écrit :
Hello,

I am attempting to implement georegistration through RPC. I have the following 
information I've used to calibrate the RPC coefficients, using all terms for 
numerator and denominator for both sample and line equations.


  *
image grid, stored in tiff format with no geo-information associated with it, 
so it reflects the imaging orientation
  *
a 'ground' grid, which corresponds to the longitude/latitude coordinates for 
each pixel determined from a line-of-sight vector and imaging system 
coordinates where the pseudo-rays intersect the WGS84 geoid
  *
a random sample of up to 4000 image coordinate / object space coordinate pairs 
(I arrived at this number through trial and error; using all pixels explodes 
RAM)
  *
elevation extracted at the longitude/latitude coordinates from a DEM, in this 
case, SRTM, but have also tried using NASADEM

I am able to write out an image to EPSG:4326 by populating the RPC metadata and 
using the non-georeferenced image data. However, I am struggling to use 
gdalwarp​ in a reliable way to orthorectify that data, let alone writing it out 
in a way that 'bakes in' the georegistration with the RPCs whether that is in 
EPSG:4326 or the local UTM zone. I see strips of the image "ripped out" with 
odd curves in various places throughout the image.

The only way I've been able to use gdalwarp​ to write the image at all is with 
the following parameters (any DEM reference is to the SRTM DEM):

gdalwarp --config CPL_DEBUG ON -t_srs EPSG:32610 -rpc -to 
"RPC_DEM_SRS=+proj=longlat +datum=WGS84 +no_def" -to "RPC_HEIGHT=350" -to 
"RPC_DEM_MISSING_VALUE=0.001" -to "RPC_FOOTPRINT='POLYGON ((list of polygon 
coordinates comprising the long/lat grid))'" -to "RPC_MAX_ITERATIONS=101" 
input_with_RPCs.tiff output.tiff

This is the only configuration i can use to run gdalwarp​ successfully.  
removing any single RPC_X tranformer option gives me bogus output. The 
RPC_HEIGHT value i specify above is not close to the mean or median elevation 
of the extent of my data; mean is ~195m and median is ~150m.

With the debug turned on, any other set of parameters gives me failed RPC 
convergence on several points. I am able to reproduce this regularly by 
specifying RPC_DEM=dem.tif, where dem.tif is the same data I used to extract 
elevation values when calibrating the RPCs. I am seeing normalized latitude and 
longitude values with magnitude > 1 (I checked every location in the image, 
based on the metadata, the range is not outside of [-1,1]), as well as 
normalized altitude values with magnitude > 1 (there are some, not many, that 
have magnitude of 1.75).

My workflow can be summarized as:


  1.
load grids (image data, longitude, latitude)
  2.
randomly sample up to 4000 points in image coordinates, object coordinates
     *
assign z-value from SRTM DEM
     *
evaluate if any of the points are in NODATA areas of SRTM (image is coastal, so 
there are NODATA areas for SRTM here), if so, remove those and generate more 
points
  3.
normalize coordinates of grids to be in [-1,1], recording offsets and scale
  4.
 calibrate RPC coefficients using all terms
  5.
write out GeoTIFF with image grid for pixels, along with RPC required metadata 
fields and CRS EPSG:4326

System information (please let me know if more is needed)
OS: Ubuntu 20.04 LTS (GNU/Linux 5.10.16.3-microsoft-standard-WSL2 x86_64) 
(Windows Subsystem for Linux)
GDAL 3.6.0 (python)

Thank you in advance for any insight into this process! I am happy to package 
up any of the data I am using, as well. I have placed the initial data from the 
end of Step 5 described above, along with some additional files, a sample 
gdalwarp call, and a file-list.txt, at 
https://drive.google.com/drive/folders/1BfevhKQa4ZHi_OQfiX_rUk2sqeoNVhyM?usp=sharing

If more is needed for anyone interested in having a look, please let me know 
and I'll upload.


Cheers,
Joe




_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org<mailto:gdal-dev@lists.osgeo.org>
https://lists.osgeo.org/mailman/listinfo/gdal-dev


--
http://www.spatialys.com
My software is free, but my time generally not.

_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org<mailto:gdal-dev@lists.osgeo.org>
https://lists.osgeo.org/mailman/listinfo/gdal-dev
_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to