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?

  • pixel size of the image would required. – Mapperz Feb 13 '14 at 19:35
  • @Mapperz I assume you mean the pixel size in terms of the number of pixels per meter, km, etc...? – dbryson Feb 13 '14 at 19:47
  • 1
    if you know the pixel per metre then you can work out the photo/image scale see engineersedge.com/civil_engineering/…. distortion of camera lens is more complex – Mapperz Feb 13 '14 at 19:53
  • Take a look at grasswiki.osgeo.org/wiki/Orthorectification_digital_camera which may be of interest to your problem – markusN Feb 13 '14 at 23:51
  • @markusN Thanks for the link. However, I was looking for a potential solution when a reference map is not available. – dbryson Feb 14 '14 at 0:03

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.


You won't be able to do this without making large assumptions. As an extreme example, imagine that the camera is pointing down at 45 degrees at two images:

  • one which is a vertical cliff,
  • the other that is flat earth.

Obviously the horizontal extent for those two cases are quite different. The vertical cliff (in 2-D georeference) is going to be close to a straight line.

From the information you have, there is no way to tell between the vertical cliff and flat earth case, or cases in between, or even more extreme cases, like where the ground drops away instead of being flat.

If you had high-enough resolution vertical information, you might be able to resolve this problem. However its unlikely to be reliable given relatively small variations and potential obscurations in the image.

Not the answer you're looking for? Browse other questions tagged or ask your own question.