Tuesday, 28 June 2016

imagery - Geographically Semi-accurately georeferencing image with limited information




It is possible to semi-accurately georeference an image given only the following information?


I'd like to do this programmatically.



  • Center point of terrain, Lat/Lng (WGS84)

  • Pitch of camera

  • FOV

  • Altitude


My intuition says there's not enough reference points, but I hope I'm wrong.


If it's possible, can you provide any pointers to the math?




Answer



As BradHards said, you need to make many assumptions in order to locate your image. Furthermore, because of the geometry of your photo, you will have distortions even if you are in those ideal condition. So here are the expected characteristics :




  • Flat terrain




  • Low pitch and roll





  • Low field of view




The heading and the roll of your camera are required in addition to the pitch. For strongly oblique images, you need to orthorectify, but as you ask for a quick approximation, so I assume your roll and pitch can be neglected. However, you DO need the heading, otherwise you can't get the orientation of your image. If you have multiple successive images, maybe you can estimate the heading by looking at successive image centers, but this would make one more estimation. If you have only a few images, stop wasting your time with such approximation, and use GCP's on the ground.


You also need the mean elevation at the ground level, but this is quite easily accessible based on your coordinates and a free DEM like the SRTM.


You can guess the pixel size based on your field of view and the number of pixels in your image.


for georeferencing requires 6 parameters : pixel size in X and Y (equal if there is no pitch nor roll), rotations of the pixels (heading with respect to the north of your projection) and XY coordinates of one corner (lower right positive sizes in X and Y) that can be computed based on your central coordinates (again, without pitch and roll, the coordinates of the ground equal the coordinates of the plane, otherwise there is a shift equal to tan(pitch)*h in Y or tan(roll)*h in X where h is the distance between camera and ground : h = plane altitude - terrain elevation .


So now you need to estimate the AVERAGE pixel size (in the ideal conditions):


2 * tan(FOV/2)*h / (number of pixels)


As I said before, this will be very rough, use it only to get the footprint.



No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...