## table of contents

v.rectify(1grass) | GRASS GIS User's Manual | v.rectify(1grass) |

# NAME¶

**v.rectify** - Rectifies a vector by computing a
coordinate transformation for each object in the vector based on the control
points.

# KEYWORDS¶

vector, rectify, level1, geometry

# SYNOPSIS¶

**v.rectify**

**v.rectify --help**

**v.rectify** [-**3orb**] **input**=*name*
**output**=*name* [**group**=*name*]
[**points**=*name*] [**rmsfile**=*name*]
[**order**=*integer*] [**separator**=*character*]
[--**overwrite**] [--**help**] [--**verbose**] [--**quiet**]
[--**ui**]

## Flags:¶

**-3**-

Perform 3D transformation **-o**-

Perform orthogonal 3D transformation **-r**-

Print RMS errors

Print RMS errors and exit without rectifying the input map **-b**-

Do not build topology

Advantageous when handling a large number of points **--overwrite**-

Allow output files to overwrite existing files **--help**-

Print usage summary **--verbose**-

Verbose module output **--quiet**-

Quiet module output **--ui**-

Force launching GUI dialog

## Parameters:¶

**input**=*name***[required]**-

Name of input vector map

Or data source for direct OGR access **output**=*name***[required]**-

Name for output vector map **group**=*name*-

Name of input imagery group **points**=*name*-

Name of input file with control points **rmsfile**=*name*-

Name of output file with RMS errors (if omitted or ’-’ output to stdout **order**=*integer*-

Rectification polynomial order (1-3)

Options:*1-3*

Default:*1* **separator**=*character*-

Field separator for RMS report

Special characters: pipe, comma, space, tab, newline

Default:*pipe*

# DESCRIPTION¶

*v.rectify* uses control points to calculate a 2D or 3D
transformation matrix based on a first, second, or third order polynomial
and then converts x,y(, z) coordinates to standard map coordinates for each
object in the vector map. The result is a vector map with a transformed
coordinate system (i.e., a different coordinate system than before it was
rectified).

The *-o* flag enforces orthogonal rotation (currently for 3D
only) where the axes remain orthogonal to each other, e.g. a cube with right
angles remains a cube with right angles after transformation. This is not
guaranteed even with affine (1st order) 3D transformation.

Great care should be taken with the placement of Ground Control Points. For 2D transformation, the control points must not lie on a line, instead 3 of the control points must form a triangle. For 3D transformation, the control points must not lie on a plane, instead 4 of the control points must form a triangular pyramid. It is recommended to investigate RMS errors and deviations of the Ground Control Points prior to transformation.

2D Ground Control Points can be identified in
*g.gui.gcp*.

3D Ground Control Points must be provided in a text file with the
**points** option. The 3D format is equivalent to the format for 2D
ground control points with an additional third coordinate:

where

x y z east north height status

*x, y, z*are source coordinates,

*east, north, height*are target coordinates and status (0 or 1) indicates whether a given point should be used. Numbers must be separated by space and must use a point (.) as decimal separator.

If no **group** is given, the rectified vector will be written
to the current mapset. If a **group** is given and a target has been set
for this group with *i.target*, the rectified vector will be written to
the target location and mapset.

## Coordinate transformation and RMSE¶

The desired order of transformation (1, 2, or 3) is selected with
the **order** option. *v.rectify* will calculate the RMSE if the
**-r** flag is given and print out statistcs in tabular format. The last
row gives a summary with the first column holding the number of active
points, followed by average deviations for each dimension and both forward
and backward transformation and finally forward and backward overall
RMSE.

## 2D linear affine transformation (1st order transformation)¶

x’ = a1 + b1 * x + c1 * y

y’ = a2 + b2 * x + c2 * y

## 3D linear affine transformation (1st order transformation)¶

x’ = a1 + b1 * x + c1 * y + d1 * z

y’ = a2 + b2 * x + c2 * y + d2 * z

z’ = a3 + b3 * x + c3 * y + d3 * z The a,b,c,d coefficients are
determined by least squares regression based on the control points entered.
This transformation applies scaling, translation and rotation. It is NOT a
general purpose rubber-sheeting, nor is it ortho-photo rectification using a
DEM, not second order polynomial, etc. It can be used if (1) you have
geometrically correct data, and (2) the terrain or camera distortion effect
can be ignored.

## Polynomial Transformation Matrix (2nd, 3d order transformation)¶

*v.rectify* uses a first, second, or third order
transformation matrix to calculate the registration coefficients. The
minimum number of control points required for a 2D transformation of the
selected order (represented by n) is

((n + 1) * (n + 2) / 2) or 3, 6, and 10 respectively. For a 3D transformation
of first, second, or third order, the minimum number of required control
points is 4, 10, and 20, respectively. It is strongly recommended that more
than the minimum number of points be identified to allow for an
overly-determined transformation calculation which will generate the Root
Mean Square (RMS) error values for each included point. The polynomial
equations are determined using a modified Gaussian elimination method.

# SEE ALSO¶

The GRASS 4 *Image* *Processing manual*

*g.gui.gcp,* *i.group,* *i.rectify,*
*i.target,* *m.transform,* *r.proj,* *v.proj,*
*v.transform,*

*Manage Ground Control Points*

# AUTHOR¶

Markus Metz

based on i.rectify

# SOURCE CODE¶

Available at: v.rectify source code (history)

Main index | Vector index | Topics index | Keywords index | Graphical index | Full index

© 2003-2021 GRASS Development Team, GRASS GIS 7.8.6 Reference Manual

GRASS 7.8.6 |