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
https://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to