i.ortho.photo(1grass)

✨ i.ortho.photo ✨

okay bestie, welcome to i.ortho.photo(1grass) β€” that's the GRASS User's Manual page, and it's a whole main-character moment πŸ’–

🌸 NAME 🌸

i.ortho.photo β€” the menu driver for the photo imagery programs. yeah. it's the girl who runs the whole group chat πŸŽ€

🌈 KEYWORDS 🌈

imagery, orthorectify, geometry


πŸ’… SYNOPSIS πŸ’…

i.ortho.photo
i.ortho.photo --help
i.ortho.photo group=name productname=string  [--help]  [--verbose]
[--quiet]  [--ui]

πŸ¦‹ Flags:

  • --help β€” prints the usage summary. your lil cheat sheet fr fr
  • --verbose β€” verbose module output, i.e. it tells you everything that's happening. oversharing but supportive 🫢
  • --quiet β€” quiet module output. the silent treatment, but make it functional
  • --ui β€” forces the GUI dialog to launch. buttons and windows, no terminal-girl behavior

πŸŽ€ Parameters:

  • group=name [required] β€” the name of the imagery group for ortho-rectification ✨
  • productname=string [required] β€” name of Modules

Options for productname:

i.group, i.ortho.target, i.ortho.elev, i.ortho.camera, g.gui.photo2image, i.ortho.init, g.gui.image2target, i.ortho.rectify

and here they are all numbered, like a little countdown πŸ‘‘

  • i.group: 1 - Select/Modify imagery group
  • i.ortho.target: 2 - Select/Modify imagery group target
  • i.ortho.elev: 3 - Select/Modify target elevation model
  • i.ortho.camera: 4 - Select/Modify imagery group camera
  • g.gui.photo2image: 5 - Compute image-to-photo transformation
  • i.ortho.init: 6 - Initialize exposure station parameters
  • g.gui.image2target: 7 - Compute ortho-rectification parameters
  • i.ortho.rectify: 8 - Ortho-rectify imagery files

πŸ‘‘ DESCRIPTION πŸ‘‘

so. i.ortho.photo is a menu that launches the different parts of the ortho rectification process of aerial imagery. that's the whole vibe. it lets you ortho-rectify imagery group files that consist of several scanned aerial photographs (raster maps) of a common area πŸ“Έ

and the way it does it? it guides you through 8 steps that you need to ortho-rectify the raster maps in a single imagery group. all 8. no skipping, bestie. alternatively, you can do all the steps separately by just running the appropriate modules yourself β€” independent queen behavior πŸ’…

  • Initialization Options
    • Create/Modify imagery group to be orthorectified: i.group
    • Select/Modify target project (formerly known as location) and mapset for orthorectification: i.ortho.target
    • Select/Modify target elevation model used for orthorectification: i.ortho.elev
    • Create/Modify camera file of imagery group: i.ortho.camera
  • Transformation Parameters Computation
    • Compute image-to-photo transformation: g.gui.photo2image
    • Initialize parameters of camera: i.ortho.init
    • Compute ortho-rectification parameters from ground control points: g.gui.image2target
  • Ortho-rectification
    • Ortho-rectify imagery group: i.ortho.rectify

okay and now the actual science, because she's not just pretty, she's smart 🧚

the ortho-rectification procedure in GRASS places the image pixels on the surface of the earth by matching the coordinate system of the aerial image in pixels (image coordinate system) and the coordinate system of the camera sensor in millimetres (photo coordinate system) for the interior orientation of the image, and further to the georeferenced coordinate system defined by projection parameters (target coordinate system) for exterior orientation.

no cap. that's literally the whole magic trick 🌟


(part 2 is loading… πŸ‘€)

✨ EXAMPLE ✨

okay so listen up bestie, before anything else β€” you need five groups of input parameters for ortho-rectification. five. not four. not "eh I'll add the rest later". all five πŸ’…

  • πŸ›©οΈ Aerial image (images),
  • πŸ“· Exposure and characteristics of the camera, i.e. its coordinates in target coordinate system and height above sea level, focal length, yaw, pitch and roll, dimensions of the camera sensor and resolution of aerial images,
  • ⛰️ Reference surface, i.e. digital elevation model in the target coordinate system used to normalize the terrain undulation,
  • πŸ—ΊοΈ Topographic reference map used to find corresponding ground control points and/or,
  • πŸ“ Coordinates of ground control points in the target coordinate system.

Example of an input oblique image in a source project

So to ortho-rectify aerial images you gotta follow the menu options step by step, bestie. orrrr, if you're feeling independent, every single step can also be done separately by running the corresponding modules. main character energy either way ✨

the aerial photos go in a source project β€” that's a general Cartesian coordinate system (XY). the digital elevation model and a map reference (topo sheet or whatever map you're using for ground control point matching) go in a target project in a real-world coordinate system (e.g. ETRS33).

here's the whole journey, step by step, no skips:

1 β€” Create/Modify imagery group to be orthorectified: i.group

this step runs in the source project 🫢

first thing first: you make or modify an imagery group of aerial images for ortho-rectification. the current imagery group is displayed at the top of the menu, so you always know what you're working with. you can pick a new or existing imagery group for the ortho-rectification. once you choose this option you'll be prompted for the name of a new or existing imagery group. and boom β€” a new file mapset/group/name_of_group/REF gets created, holding the names of all images in a group.

IMG_0020 source_mapset
IMG_0021 source_mapset
IMG_0022 source_mapset

2 β€” Select/Modify target project and mapset for orthorectification: i.ortho.target

also runs in the source project πŸ’–

the target project and mapset can be selected or modified here in Step 2. you'll be prompted for the names of the projected target project and mapset where the ortho-rectified raster maps will live. lowkey important: the target project is also the project from which the elevation model (raster map) will be selected (see Step 3). and as a result of Step 2, a new file mapset/group/name_of_group/TARGET is created containing the names of target project and mapset.

ETRS_33N
target_mapset

3 β€” Select/Modify target elevation model used for orthorectification: i.ortho.elev

yep, still the source project 🌸

Step 3 is where you select the raster map from the target project to be used as the elevation model. this elevation model is required for both the computation of photo-to-target parameters (Step 6) and for the ortho-rectification of the imagery group files (Step 8). the raster map you pick for the elevation model should cover the entire area of the image group to be ortho-rectified, fr fr β€” no partial coverage shenanigans. DTED and DEM files are suitable for use as elevation model in the ortho-rectification program. here you'll be prompted for the name of the raster map in the target project that you want to use as the elevation model. and as a result of this step, a new file mapset/group/name_of_group/ELEVATION is created, containing the name and mapset of the chosen DEM.

elevation layer :ELEVATION
mapset elevation:target_mapset
location        :ETRS_33N
math expression :(null)
units           :(null)
no data values  :(null)

4 β€” Create/Modify camera file of imagery group: i.ortho.camera

source project again bestie, keep up πŸŽ€

in Step 4 you can select or create a camera reference file that'll be used with the current imagery group. a camera reference file contains info on the internal characteristics of the aerial camera, plus the geometry of the fiducial or reseau marks. the most important characteristic of the camera is its focal length, no cap. the fiducial or reseau marks locations are required to compute the scanned image to photo coordinate transformation parameter (Step 5). two new files get created here: a file mapset/group/name_of_group/CAMERA holding the name of the reference camera, and a file mapset/camera/name_of_reference holding the camera parameters.

CAMERA NAME   sony
CAMERA ID     123
CAMERA XP     0
CAMERA YP     0
CAMERA CFL    16
NUM FID       4
      0 -11.6 0
      1 0 7.7
      2 11.6 0
      3 0 -7.7

5 β€” Compute image-to-photo transformation: g.gui.photo2image

source project vibes only πŸ¦‹

the scanned image to photo coordinate transformation parameters β€” aka the "interior orientation" β€” get computed in Step 5. this one's interactive: you associate the scanned reference points (fiducials, reseau marks, etc.) with their known photo coordinates from the camera reference file. a new file mapset/group/name_of_group/REF_POINTS is created, containing a list of pairs of coordinates in image and photo coordinate systems.

# Ground Control Points File
#
# target location: XY
# target mapset: source_mapset
# source  target  status
# east north east north (1=ok, 0=ignore)
#-------------------------------------------------------------
0 1816     -11.6 0.0     1
2728 3632     0.0 7.7     1
5456 1816     11.6 0.0     1
2728 0.0     0.0 -7.7     1

Step 5: Image-to-photo transformation of an oblique image

6 β€” Initialize parameters of camera: i.ortho.init

you guessed it β€” source project πŸ’œ

in Step 6, initial camera exposure station parameters and initial variances may be selected or modified. let's break it down:

  • πŸ“ X: East aircraft position;
  • πŸ“ Y: North aircraft position;
  • πŸ“ Z: Flight height above surface;
  • πŸ”„ Omega (pitch): Raising or lowering of the aircraft’s front (turning around the wings’ axis);
  • πŸ”„ Phi (roll): Raising or lowering of the wings (turning around the aircraft’s axis);
  • 🧭 Kappa (yaw): Rotation needed to align the aerial photo to true north: needs to be denoted as +90Β° for clockwise turn and -90Β° for a counter-clockwise turn.

Principle of pitch and yaw

in Step 6, a new file mapset/group/name_of_group/INIT_EXP is created, containing camera parameters.

INITIAL XC    215258.345387
INITIAL YC    6911444.022270
INITIAL ZC    1101.991120
INITIAL OMEGA 0.000000
INITIAL PHI   -0.168721
INITIAL KAPPA 3.403392
VARIANCE XC    5.000000
VARIANCE YC    5.000000
VARIANCE ZC    5.000000
VARIANCE OMEGA 0.000000
VARIANCE PHI   0.020153
VARIANCE KAPPA 0.017453
STATUS (1=OK, 0=NOT OK) 0

7 β€” Compute ortho-rectification parameters from ground control points: g.gui.image2target

🚨 plot twist: this step runs in the target project 🚨

the photo to target transformation parameters β€” the "exterior orientation" β€” get computed in Step 7. this one's interactive too: control points are marked on one or more imagery group files and associated with the known standard (e.g. UTM) and elevation coordinates. reasonable rectification results can be obtained with around twelve control points well distributed over the image, bestie β€” twelve, spread out, don't clump them. in this step, a new file mapset/group/name_of_group/CONTROL_POINTS is created, containing a list of pairs of coordinates of ground control points in photo and target coordinate systems.

# Ground Control Points File
#
# target location: ETRS_33N
# target mapset: target_mapset
#    source                          target                     status
#    east north     height          east     north     height    (1=ok, 0=ignore)
#------------------------------     ----------------------    ---------------
98.3679932698 906.327649515 0.0    1.0 5.0  100.0             1
733.293023813 1329.61100321 0.0    2.0 6.0  100.0             1
1292.6317412  1703.76325335 0.0    3.0 7.0  100.0             1
1625.54617472 1368.11694482 0.0    4.0 6.0  100.3             1
3239.82849913 1390.97403968 0.0    7.4 6.0  100.3             1
1570.09788497 2790.06537829 0.0    3.0 11.0 100.0             1

Step 7: Detail of ground control points matching in an oblique image and terrain model

8 β€” Ortho-rectify imagery group: i.ortho.rectify

and we're back in the source project for the finale 🎬

Step 8 is where you actually perform the image ortho-rectification, once all the transformation parameters have been computed. ortho-rectified raster files will be created in the target project for each selected imagery group file. you may select either the current window in the target project or the minimal bounding window for the ortho-rectified image β€” your call, bestie.

Step 8: Ortho-rectified oblique image

as a result, the ortho-rectified raster map is available for visualization and further image analysis. slay πŸ’…


πŸ“š REFERENCES πŸ“š

Wolf P.R. (1983). Elements of Photogrammetry: With Air Photo Interpretation and Remote Sensing McGraw Hill Higher Education ISBN-10: 0070713456, ISBN-13: 978-0070713451


πŸ‘€ SEE ALSO πŸ‘€

g.gui.image2target, g.gui.photo2image, i.group, i.ortho.camera, i.ortho.elev, i.ortho.init, i.ortho.rectify, i.ortho.target


πŸ‘‘ AUTHORS πŸ‘‘

Mike Baba, DBA Systems, Inc. GRASS development team, 199?-2017


πŸ’Ύ SOURCE CODE πŸ’Ύ

available at: i.ortho.photo source code (history)

latest change: Friday Aug 08 09:39:19 2025 in commit: ed72c71d8580e872cd6fd345c84a15c324764465

Main index | Imagery index | Topics index | Keywords index | Graphical index | Full index

Β© 2003-2026 GRASS Development Team, GRASS 8.5.0 Reference Manual

and that's a wrap on i.ortho.photo, bestie 🫢 this page ships as part of GRASS 8.5.0 (that's the version riding in the footer, with i.ortho.photo(1grass) hanging out right next to it) ✨ go forth and recti-fy your oblique images, you've got this, periodt 🌈

πŸ“¦ where this page comes from