1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
|
.help geomap Jan01 images.immatch
.ih
NAME
geomap -- compute one or more spatial transformation functions
.ih
USAGE
geomap input database xmin xmax ymin ymax
.ih
PARAMETERS
.ls input
The list of text files containing the pixel coordinates of control points in
the reference and input images. The control points are listed
one per line with xref, yref, xin, and yin in columns 1 through 4 respectively.
.le
.ls database
The name of the text file database where the computed transformations will
be stored.
.le
.ls xmin, xmax, ymin, ymax
The range of reference coordinates over which the computed coordinate
transformation is valid. If the user is working in pixel units these limits
should normally be set to the values of the column and row limits of the
reference image, e.g xmin = 1.0, xmax = 512, ymin= 1.0, ymax = 512 for
a 512 x 512 image. The minimum and maximum xref and yref values in \fIinput\fR
are used if xmin, xmax, ymin, or ymax are undefined.
.le
.ls transforms = ""
An optional list of transform record names. If transforms is undefined
the database record(s) are assigned the names of the
individual text files specified by \fIinput\fR.
.le
.ls results = ""
Optional output files containing a summary of the results including a
description of the transform geometry and a listing of the input coordinates,
the fitted coordinates, and the fit residuals. The number of results files
must be one or equal to the number of input files. If results is "STDOUT" the
results summary is printed on the standard output.
.le
.ls fitgeometry = "general"
The fitting geometry to be used. The options are the following.
.ls shift
X and y shifts only are fit.
.le
.ls xyscale
X and y shifts and x and y magnification factors are fit. Axis flips are
allowed for.
.le
.ls rotate
X and y shifts and a rotation angle are fit. Axis flips are allowed for.
.le
.ls rscale
X and y shifts, a magnification factor assumed to be the same in x and y, and a
rotation angle are fit. Axis flips are allowed for.
.le
.ls rxyscale
X and y shifts, x and y magnifications factors, and a rotation angle are fit.
Axis flips are allowed for.
.le
.ls general
A polynomial of arbitrary order in x and y is fit. A linear term and a
distortion term are computed separately. The linear term includes an x and y
shift, an x and y scale factor, a rotation and a skew. Axis flips are also
allowed for in the linear portion of the fit. The distortion term consists
of a polynomial fit to the residuals of the linear term. By default the
distortion term is set to zero.
.le
For all the fitting geometries except "general" no distortion term is fit,
i.e. the x and y polynomial orders are assumed to be 2 and the cross term
switches are assumed to be "none", regardless of the values of the
\fIxxorder\fR, \fIxyorder\fR, \fIxxterms\fR, \fIyxorder\fR, \fIyyorder\fR and
\fIyxterms\fR parameters set by the user.
.le
.ls function = "polynomial"
The type of analytic surface to be fit. The options are the following.
.ls legendre
Legendre polynomials in x and y.
.le
.ls chebyshev
Chebyshev polynomials in x and y.
.le
.ls polynomial
Power series in x and y.
.le
.le
.ls xxorder = 2, xyorder = 2, yxorder = 2, yyorder = 2
The order of the polynomials in x and y for the x and y fits respectively.
The default order and cross term settings define the linear term in x
and y, where the 6 coefficients can be interpreted in terms of an x and y shift,
an x and y scale change, and rotations of the x and y axes. The "shift",
"xyscale", "rotation", "rscale", and "rxyscale", fitting geometries
assume that the polynomial order parameters are 2 regardless of the values
set by the user. If any of the order parameters are higher than 2 and
\fIfitgeometry\fR is "general", then a distortion surface is fit to the
residuals from the linear portion of the fit.
.le
.ls xxterms = "half", yxterms = "half"
The options are:
.ls none
The individual polynomial terms contain powers of x or powers of y but not
powers of both.
.le
.ls half
The individual polynomial terms contain powers of x and powers of y, whose
maximum combined power is max (xxorder - 1, xyorder - 1) for the x fit and
max (yxorder - 1, yyorder - 1) for the y fit.
.le
.ls full
The individual polynomial terms contain powers of x and powers of y, whose
maximum combined power is max (xxorder - 1, xyorder - 1) for the x fit and
max (yxorder - 1, yyorder - 1) for the y fit.
.le
The "shift", "xyscale", "rotation", "rscale", and "rxyscale" fitting
geometries, assume that the cross term switches are set to "none"
regardless of the values set by the user. If either of the cross terms
parameters are set to "half" or "full" and \fIfitgeometry\fR is "general"
then a distortion surface is fit to the residuals from the linear
portion of the fit.
.le
.ls maxiter = 0
The maximum number of rejection iterations. The default is no rejection.
.le
.ls reject = 3.0
The rejection limit in units of sigma.
.le
.ls calctype = "real"
The precision of the coordinate transformation calculations. The options are
real and double.
.le
.ls verbose = yes
Print messages about actions taken by the task ?
.le
.ls interactive = yes
In interactive mode the user may interact with the fitting process, e.g.
change the order of the fit, reject points, display the data, etc.
.le
.ls graphics = "stdgraph"
The graphics device.
.le
.ls cursor = ""
The graphics cursor.
.le
.ih
DESCRIPTION
GEOMAP computes the transformation required to map the reference coordinate
system to the input coordinate system. The coordinates of points in common
to the two systems are listed in the input text file(s) \fIinput\fR
one per line in the following format: "xref yref xin yin".
The computed transforms are stored in the text database file \fIdatabase\fR
in records with names specified by the parameter \fItransforms\fR. If the
transforms parameter is undefined the records are assigned the name of
the input coordinate files.
The computed transformation has the form shown below, where the reference
coordinates must be defined in the coordinate system of the reference image
system if the user intends to resample an image with gregister or geotran, or
transform coordinates from the reference coordinate system to the input
image coordinate system.
.nf
xin = f (xref, yref)
yin = g (xref, yref)
.fi
If on the other hand the user wishes to transform coordinates from the
input image coordinate system to the reference coordinate system then he or she
must reverse the roles of the reference and input coordinates as defined above,
and compute the inverse transformation.
The functions f and g are either a power series polynomial or a Legendre or
Chebyshev polynomial surface of order \fIxxorder\fR and \fIxyorder\fR in x
and \fIyxorder\fR and \fIyyorder\fR in y.
Several polynomial cross terms options are available. Options "none",
"half", and "full" are illustrated below for a quadratic polynomial in
x and y.
.nf
xxterms = "none", xyterms = "none"
xxorder = 3, xyorder = 3, yxorder = 3, yyorder = 3
xin = a11 + a21 * xref + a12 * yref +
a31 * xref ** 2 + a13 * yref ** 2
yin = a11' + a21' * xref + a12' * yref +
a31' * xref ** 2 + a13' * yref ** 2
xxterms = "half", xyterms = "half"
xxorder = 3, xyorder = 3, yxorder = 3, yyorder = 3
xin = a11 + a21 * xref + a12 * yref +
a31 * xref ** 2 + a22 * xref * yref + a13 * yref ** 2
yin = a11' + a21' * xref + a12' * yref +
a31' * xref ** 2 + a22' * xref * yref + a13' * yref ** 2
xxterms = "full", xyterms = "full"
xxorder = 3, xyorder = 3, yxorder = 3, yyorder = 3
xin = a11 + a21 * xref + a31 * xref ** 2 +
a12 * yref + a22 * xref * yref + a32 * xref ** 2 * yref +
a13 * yref ** 2 + a23 * xref * yref ** 2 +
a33 * xref ** 2 * yref ** 2
yin = a11' + a21' * xref + a31' * xref ** 2 +
a12' * yref + a22' * xref * yref + a32' * xref ** 2 * yref +
a13' * yref ** 2 + a23' * xref * yref ** 2 +
a33' * xref ** 2 * yref ** 2
.fi
If the \fBfitgeometry\fR parameter is anything other than "general", the order
parameters assume the value 2 and the cross terms switches assume the value
"none", regardless of the values set by the user. The computation can be done in
either real or double precision by setting \fIcalctype\fR. Automatic pixel
rejection may be enabled by setting \fmaxiter\fR > 0 and \fIreject\fR to some
number greater than 0.
\fIXmin\fR, \fIxmax\fR, \fIymin\fR and \fIymax\fR define the region of
validity of the fit in the reference coordinate system and must be set by
the user. These parameters can be used to reject out of range data before the
actual fitting is done.
GEOMAP may be run interactively by setting \fIinteractive\fR = yes and
inputting commands by the use of simple keystrokes.
In interactive mode the user has the option of changing the
fit parameters and displaying the data graphically until a satisfactory
fit has been achieved. The available keystroke commands are listed
below.
.nf
? Print options
f Fit the data and graph with the current graph type (g, x, r, y, s)
g Graph the data and the current fit
x,r Graph the x fit residuals versus x and y respectively
y,s Graph the y fit residuals versus x and y respectively
d,u Delete or undelete the data point nearest the cursor
o Overplot the next graph
c Toggle the constant x, y plotting option
t Plot a line of constant x, y through the nearest data point
l Print xshift, yshift, xmag, ymag, xrotate, yrotate
q Exit the interactive curve fitting
.fi
The parameters listed below can be changed interactively with simple colon
commands. Typing the parameter name alone will list the current value.
.nf
:show List parameters
:fitgeometry Fitting geometry (shift,xyscale,rotate,
rscale,rxyscale,general)
:function [value] Fitting function (chebyshev,legendre,
polynomial)
:xxorder :xyorder [value] X fitting function xorder, yorder
:yxorder :yyorder [value] Y fitting function xorder, yorder
:xxterms :yxterms [n/h/f] X, Y fit cross terms type
:maxiter [value] Maximum number of rejection iterations
:reject [value] Rejection threshold
.fi
The final fit is stored in a simple text file in a format suitable for use
by the GREGISTER or GEOTRAN tasks.
If \fIverbose\fR is "yes", various pieces of useful information are printed
to the terminal as the task proceeds. If \fIresults\fR is set to a file name
then the input coordinates, the fitted coordinates, and the residuals of
the fit are written to that file.
The transformation computed by the "general" fitting geometry is arbitrary
and does not correspond to a physically meaningful model. However the computed
coefficients for the linear term can be given a simple geometrical geometric
interpretation for all the fitting geometries as shown below.
.nf
fitting geometry = general (linear term)
xin = a + b * xref + c * yref
yin = d + e * xref + f * yref
fitting geometry = shift
xin = a + xref
yin = d + yref
fitting geometry = xyscale
xin = a + b * xref
yin = d + f * yref
fitting geometry = rotate
xin = a + b * xref + c * yref
yin = d + e * xref + f * yref
b * f - c * e = +/-1
b = f, c = -e or b = -f, c = e
fitting geometry = rscale
xin = a + b * xref + c * yref
yin = d + e * xref + f * yref
b * f - c * e = +/- const
b = f, c = -e or b = -f, c = e
fitting geometry = rxyscale
xin = a + b * xref + c * yref
yin = d + e * xref + f * yref
b * f - c * e = +/- const
.fi
The coefficients can be interpreted as follows. Xref0, yref0, xin0, yin0
are the origins in the reference and input frames respectively. Orientation
and skew are the rotation of the x and y axes and their deviation from
perpendicularity respectively. Xmag and ymag are the scaling factors in x and
y and are assumed to be positive.
.nf
general (linear term)
xrotation = rotation - skew / 2
yrotation = rotation + skew / 2
b = xmag * cos (xrotation)
c = ymag * sin (yrotation)
e = -xmag * sin (xrotation)
f = ymag * cos (yrotation)
a = xin0 - b * xref0 - c * yref0 = xshift
d = yin0 - e * xref0 - f * yref0 = yshift
shift
xrotation = 0.0, yrotation = 0.0
xmag = ymag = 1.0
b = 1.0
c = 0.0
e = 0.0
f = 1.0
a = xin0 - xref0 = xshift
d = yin0 - yref0 = yshift
xyscale
xrotation 0.0 / 180.0 yrotation = 0.0
b = + /- xmag
c = 0.0
e = 0.0
f = ymag
a = xin0 - b * xref0 = xshift
d = yin0 - f * yref0 = yshift
rscale
xrotation = rotation + 0 / 180, yrotation = rotation
mag = xmag = ymag
const = mag * mag
b = mag * cos (xrotation)
c = mag * sin (yrotation)
e = -mag * sin (xrotation)
f = mag * cos (yrotation)
a = xin0 - b * xref0 - c * yref0 = xshift
d = yin0 - e * xref0 - f * yref0 = yshift
rxyscale
xrotation = rotation + 0 / 180, yrotation = rotation
const = xmag * ymag
b = xmag * cos (xrotation)
c = ymag * sin (yrotation)
e = -xmag * sin (xrotation)
f = ymag * cos (yrotation)
a = xin0 - b * xref0 - c * yref0 = xshift
d = yin0 - e * xref0 - f * yref0 = yshift
.fi
.ih
EXAMPLES
1. Compute the linear transformation between coordinate systems.
A record called "m51.coo" will be written in the database
file "database".
.nf
cl> geomap m51.coo database 1. 512. 1. 512.
.fi
2. Compute the 3rd order transformation in x and y between two
coordinate systems. A record called "m51.coo" will be written in
the database file "database". This record supersedes the one
of the same name written in example 1.
.nf
cl> geomap m51.coo database 1. 512. 1. 512. xxo=4 xyo=4 \
>>> yxo=4 yyo=4 xxt=full yxt=full inter-
.fi
3. Register a 500 by 500 image of m51 to an 800 by 800 image of the same
field taken with a different instrument, and display the original
800 by 800 image and the transformed image. Use the default fitting parameters.
.nf
cl> geomap m51.coo database 1.0 800.0 1.0 800.0
cl> gregister m51.500 m51.500.out database m51.coo
cl> display m51.800 1 fi+
cl> display m51.500.out 2 fi+
.fi
4. Use the above transform to transform a list of object pixel coordinates
in the m51.800 image to their pixel coordinates in the m51.500 system.
.nf
cl> geoxytran m51.800.xy m51.500.xy database m51.coo
.fi
5. Transform object pixel coordinates in the m51.500 image to their
pixel coordinates in the m51.800 image. Note that to do this the roles
of the reference and input coordinates defined in example 3 must be
reversed and the inverse transform must be computed.
.nf
cl> fields m51.coo 3,4,1,2 > m51.coo.inv
cl> geomap m51.coo.inv database 1.0 512.0 1.0 512.0
cl> geoxytran m51.512.xy m51.800.xy database m51.coo.inv
.fi
6. Compute 3 different transforms, store them in the same database file,
and use them to transform 3 different images. Use the original image names as
the database record names.
.nf
cl> geomap coo1,coo2,coo3 database 1. 512. 1. 512. \
>>> transforms=im1,im2,im3
cl> gregister im1,im2,im3 im1.out,im2.out,im3.out database \
>>> im1,im2,im3
.fi
.ih
BUGS
The user should be aware that for high order fits the "polynomial" basis
functions become very unstable. Switching to the "legendre" or "chebyshev"
polynomials and/or going to double precision will usually cure the problem.
.ih
SEE ALSO
imshift, magnify, rotate, imlintran, gregister, geotran, geoxytran
.endhelp
|