Orthorectification digital camera
Geocoding of photographs taken with digital handheld camera
To geocode oblique photographs taken with a digital handheld camera, we need a digital elevation model (DEM) and a topographic reference map. The elevation model is required to normalize the terrain undulation. The raster resolution of the DEM should be similar to the resolution of the aerial photo. Usually such high-resolution DEMs (raster cell length below 1m) are not easily available. Therefore, interpolation of a given DEM to a higher resolution is recommended to minimize displacement effects. The topographic reference map is needed to find corresponding ground control points (GCPs) between aerial photo and this map for geocoding. The map scale of the reference map should at least match the average scale of the aerial photo (for example 1:5000), but should be probably larger to provide more details for improved geocoding accuracy. The ground control points are required to register the image xy coordinate system to a georeferenced coordinate system (like UTM or Gauss-Krüger).
Metadata like the time stamp or the focal length are taken from EXIF data (e.g. with "jhead", http://www.sentex.net/~mwandel/jhead/ ).
PROCEDURE
Ortho-rectification of oblique photographs
In projected location:
- get approximate camera position: d.where/d.what.rast: EAST: NORTH: 664194.71461534 5104463.03343466 height: 450 Pitch: 20 Roll: 0 Yaw (against north): -45
See also: http://en.wikipedia.org/wiki/Pitch_%28flight%29
###################################### g.region rast=cf83 -p projection: 0 (x,y) zone: 0 north: 798 south: 0 west: 0 east: 1200 nsres: 1 ewres: 1 rows: 798 cols: 1200 -> img size in Pixel (NOTE: newer cameras provide this in exif metadata!)
i.ortho.photo
Menu 5. Compute image-to-photo transformation
Some considerations:
Calibrated Focal Length mm.: guessing 50 for a digital handheld camera (airborne cameras have often a focal length of 150 mm) Fiducial marks (positive values, use g.region -p): y | 2 +--------+--------+ | | | | | | 1 + + 3 | | | | | | +--------+--------+------> x (0,0) 4 also: xmax = 1200/2 = 600 ymax = 798/2 = 399 Digital cameras have a resolution Fiducial marks have to be given in millimeters (so, to calculate) and not in pixel: first calc. DPI, then derive "pseudo''millimeters from that for Fiducial marks: E.g.: Lenght of an object (eg bridge) in pixel (use d.what.rast + Pytaghoras) compared to length of bridge in meters on reference map (d.measure). eg 226 pixel versus 75 meter in UTM map [ DPI = pixel/inch = pixel / 2.54cm ] -> 226/7500 * 2.54cm = 0.07653867 DPI (check) Since we calculate in *millimeter* and not DPI, we calc. for Fiducial marks: 226/7500 * 0.1 = 0.003013333 Multiply all pixel with this value: 1200 * 0.003013333 = 3.616000 1200 * 0.003013333 /2 = 1.808000 798 * 0.003013333 = 2.404640 798 * 0.003013333 /2 = 1.202320 Ergo: Fiducial marks: 1 1_____ 0_________ 1.2______ 2 2_____ 1.8______ 2.4______ 3 3_____ 3.61_____ 1.2______ 4 4_____ 3.61______ 0_________ (be a bit more precise...) ################## Then use menu 5 in i.ortho.photo. It's a challenge to hit the center of the image borders... try smallest RMS
Menu 6. Initialize exposure station parameters
Initial Camera Exposure X-coordinate Meters: 664194________ Initial Camera Exposure Y-coordinate Meters: 5104463_______ Initial Camera Exposure Z-coordinate Meters: 200___________ Initial Camera Omega (roll) degrees: 0_____________ Initial Camera Phi (pitch) degrees: 20____________ Initial Camera Kappa (yaw) degrees: -45___________
Menu 7. Compute ortho-rectification parameters
Use mouse now Search ground control points, minimize RMS (see Analyse menu entry) to ideally half a pixel.
Menu 8. Ortho-rectify imagery files
Enter an extension to be appended to rectified maps: .ortho______________ Compute local camera angle? (y/n) [n] y Enter a name for the camera angle map: 22_1684.camera_angle__________ Overwrite maps in target location/mapset? (y/n) [n] y Please select one of the following options 1. Use the current window in the target location 2. Determine the smallest window which covers the image > 2 Enter desired target resolution, or RETURN to determine it automatically: > 2.0 Please select one of the following interpolation methods 1. nearest neighbor 2. bilinear 3. bicubic 4. bilinear with fallback 5. bicubic with fallback > 2 Enter amount of memory to use in MB, or RETURN use 100 MB > 1000
Now the orthophoto is generated and will be stored in the target location.
Hints: How to calculate Fiducial marks, if no DPI known
- Pixel extent: g.region rast=oblique y | 2 +--------+--------+ | | | | | | 1 + + 3 | | | | | | +--------+--------+------> x (0,0) 4 e.g. xmax = 1200/2 = 600 ymax = 798/2 = 399
Important: while digital handheld cameras provide DPI and chip size, one has to estimate everything if it is unknown. Fiducial marks have to be given in millimeters, not in pixel!
Calculation of Pseudomillimeter: - measure in XY location length of an object in pixel (with d.what.rast + Pytaghoras) - measure in UTM location length of same object in reference map (d.measure) in meters Example: bridge 226 pixel versus 75 meter in UTM. [ DPI = pixel/inch = pixel / 2.54cm ] -> 226/7500 * 2.54cm = 0.07653867 DPI BUT: We want *millimeter* and not DPI for the fiducial marks: 226/7500 * 0.1 = 0.003013333 Finally multiply pixels with this factor: 1200 * 0.003013333 = 3.616000 1200 * 0.003013333 /2 = 1.808000 798 * 0.003013333 = 2.404640 798 * 0.003013333 /2 = 1.202320 Ergo: Fiducial marks: 1 1_____ 0_________ 1.2______ 2 2_____ 1.8______ 2.4______ 3 3_____ 3.61_____ 1.2______ 4 4_____ 3.61______ 0_________ Suggestions: - take long objects, - average over 2 longitudinal and transversal oriented objects
See also
- M. Neteler, D. Grasso, I. Michelazzi, L. Miori, S. Merler, and C. Furlanello, 2005: An integrated toolbox for image registration, fusion and classification. International Journal of Geoinformatics, 1(1), pp. 51-61 PDF
- Orthorectification chapter from the GRASS GIS book: http://www.grassbook.org/sample2nd/grassbook_2nd_2004_chapter10_aerial.pdf