Interpolation/
quadrilateral2square.pro
warm (or map) an arbitrary quadrilateral onto a unit square
according to the 4-point correspondences:
(x0,y0) -> (0,0)
(x1,y1) -> (1,0)
(x2,y2) -> (1,1)
(x3,y3) -> (0,1)
This is the inverse function of square2quadrilateral.
The mapping is done using perspective transformation which preserve
lines in all orientations and permit quadrilateral to quadrilateral
mappings. see ref. below.
quadrilateral2square
Picture, Grid
result = quadrilateral2square(x0in, y0in, x1in, y1in, x2in, y2in, x3in, y3in, xxin, yyin, PERF=salar 0 or 1, DOUBLE=salar 0 or 1)
Return value
(2,n) array: the new coordinates (xout,yout) of the (xin,yin) point(s) after
mapping.
If xin is a scalar, then n is equal to the number of elements of x0.
If xin is an array, then n is equal to the number of elements of xin.
Parameters
x0in
in
required
y0in
in
required
x1in
in
required
y1in
in
required
x2in
in
required
y2in
in
required
x3in
in
required
y3in
in
required
the coordinates of the quadrilateral
(see above for correspondence with the unit square). Can be
scalar or array. (x0,y0), (x1,y1), (x2,y2) and (x3,y3) are
given in the anticlockwise order.
xxin
in
required
the coordinates of the point(s) for which we want to do the mapping.
Can be scalar or array.
yyin
in
required
the coordinates of the point(s) for which we want to do the mapping.
Can be scalar or array.
Keywords
PERF
type: salar 0 or 1
default: 0
activate to print the elapsed time spent within quadrilateral2square
DOUBLE
type: salar 0 or 1
default: 0
activate to perform double precision computation
Examples
IDL> splot,[0,5],[0,3],/nodata,xstyle=1,ystyle=1
IDL> tracegrille, findgen(11)*.1, findgen(11)*.1,color=indgen(12)*20
IDL> xin = (findgen(11)*.1)#replicate(1, 11)
IDL> yin = replicate(1, 11)#(findgen(11)*.1)
IDL> out = square2quadrilateral(2,1,3,0,5,1,2,3, xin, yin)
IDL> tracegrille, reform(out[0,*],11,11), reform(out[1,*],11,11),color=indgen(12)*20
IDL> inorg=quadrilateral2square(2,1,3,0,5,1,2,3,out[0,*],out[1,*])
IDL> tracegrille, reform(inorg[0,*],11,11), reform(inorg[1,*],11,11),color=indgen(12)*20
Version history
Version
$Id: quadrilateral2square.pro 358 2008-04-28 09:41:14Z pinsard $
History
Sebastien Masson (smasson@lodyc.jussieu.fr)
August 2003
Based on "Digital Image Warping" by G. Wolberg
IEEE Computer Society Press, Los Alamitos, California
Chapter 3, see p 52-56
Known issues
Restrictions
I think degenerated quadrilateral (e.g. flat of twisted) is not work.
This has to be tested.
Produced by IDLdoc 2.0.