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
|
.help geoxytran Apr95 images.immatch
.ih
NAME
geoxytran -- geometrically transform a list of coordinates
.ih
USAGE
geoxytran input output database transforms
.ih
PARAMETERS
.ls input
The list of input coordinate files to be transformed.
.le
.ls output
The list of output transformed coordinate files. The number of output files must
be one or equal to the number of input files.
.le
.ls database
The name of the text database file written by the geomap task which
contains the desired spatial transformation.
If database is undefined geoxytran computes
a linear transformation using the current
values of the xref, yref, xout, yout, xshift, yshift, xmag, ymag, xrotation,
and yrotation parameters.
.le
.ls transforms
The database record containing the desired spatial transformation.
The number of records must be one or equal to the number of input coordinate
files. Transforms is usually the name of the coordinate file that the
geomap task used to compute the spatial transformation.
If defined the values of xref, yref, xout, yout, xshift, yshift, xmag, ymag,
xrotation, and yrotation will supersede the computed values in the
database file.
.le
.ls geometry = "geometric" (linear|geometric)
The type of geometric transformation. The geometry parameter is
only requested if database is defined. The options are:
.ls linear
Perform only the linear part of the spatial transformation.
.le
.ls geometric
Compute both the linear and distortion portions of the spatial transformation.
.le
.le
.ls direction = "forward" (forward|backward)
The transformation direction may be "forward" or "backward". The forward
direction directly evaluates the database solution. The backward
direction iteratively determines the coordinate which evaluates to the
specified coordinate.
.le
.ls xref = INDEF, yref = INDEF
The x and y coordinates of the reference origin.
If the database file is undefined xref and
yref default to [0.0,0.0]. Otherwise xref and yref
default to the mean of minimum and maximum x and y values
[(xmin + xmax) / 2.0, (ymin + ymax) / 2.0] computed by geomap.
.le
.ls xmag = INDEF, ymag = INDEF
The x and y scale factors in input units
per reference unit. If database is undefined xmag and ymag
default to [1.0, 1.0]. Otherwise xmag and ymag default to the values computed
by geomap.
.le
.ls xrotation = INDEF, yrotation = INDEF
The x and y rotation angles in degrees measured counter-clockwise with
respect to the x and y axes. If database
is undefined then xrotation and yrotation are interpreted as the
rotation of the coordinates with respect to the x and y axes and
default to [0.0, 0.0]. For example xrotation and yrotation values of
[30.0, 30.0] will rotate a point 30 counter-clockwise with respect
to the x and y axes. Otherwise xrotation and yrotation default to the
values computed by geomap. Geomap computes the x and y rotation angles
of the x and y axes, not the rotation angle of the coordinates. An output
coordinate system rotated 30 degrees counter-clockwise with respect
to the reference coordinate system will produce xrotation and yrotation
values of [330.0,330.0] or equivalently [-30.0,-30.0] in the database file
not [30.0,30.0].
.le
.ls xout = INDEF, yout = INDEF
The x and y coordinates of the output origin.
If the database file is undefined xout and
yout default to [0.0,0.0].
If database is defined xout and yout
default to the position that the reference origin [xref,yref]
occupies in the transformed system.
.le
.ls xshift = INDEF, yshift = INDEF
The x and y shift of the reference origin in output units.
If the database file is undefined xshift and yshift default to [0.0,0.0].
If the database file is defined xshift and yshift default to the
values computed by geomap. If defined xshift and yshift take precedence over
the x and y shifts determined from xref, yref, xout and yout.
.le
.ls xcolumn = 1, ycolumn = 2
The columns in the input coordinate file containing the x and y coordinates.
.le
.ls calctype = "real"
The precision of the coordinate transformation calculations. The options
are "real" and "double". Note that this only applies to a "forward"
transformation. The "backward" transformation is done iteratively and
is always calculated in double precision to get the best convergence.
.le
.ls xformat = "", yformat = ""
The default output format for the computed x and y coordinates. If
xformat and yformat are undefined geoxytran outputs the coordinates
using the maximum of the precision of the input coordinates
and the value of the \fImin_sigdigits\fR parameter.
.le
.ls min_sigdigits = 7
The minimum precision of the output x and y coordinates.
.le
.ih
DESCRIPTION
GEOXYTRAN applies a coordinate transformation to a list of reference
coordinates in the text file \fIinput\fR and writes the transformed
coordinates to the text file \fIoutput\fR. The input coordinates
are read from, and the output coordinates written to, columns
\fIxcolumn\fR and \fIycolumn\fR in the input and output
files. The format of the output coordinates can be specified using the
\fIxformat\fR and \fIyformat\fR parameters. If the output formats
are unspecified the coordinates are written out with a precision
which is the maximum of the precision of the input coordinates
and the value of the \fImin_sigdigits\fR parameter. All remaining fields in
the input file are copied to the output file without modification.
Blank lines and comment lines are also passed to the output file
unaltered.
The coordinate transformation either be read from record \fItransforms\fR
in the database file \fIdatabase\fR computed by GEOMAP, or specified
by the user via the \fIxref\fR, \fIyref\fR, \fIxmag\fR, \fIymag\fR,
\fIxrotation\fR, \fIyrotation\fR, \fIxout\fR, \fIyout\fR, \fIxshift\fR,
and \fIyshift\fR parameters.
The transformation computed by GEOMAP has the following form.
.nf
xout = f (xref, yref)
yout = g (xref, yref)
.fi
The functions f and g are either a power series polynomial or a Legendre
or Chebyshev polynomial surface whose order and region of validity were
set by the user when GEOMAP was run. The computed transformation is
arbitrary and does not correspond to any physically meaningful model.
However the first order terms can be given the simple geometrical
interpretation shown below.
.nf
xout = a + b * xref + c * yref
yout = d + e * xref + f * yref
b = xmag * cos (xrotation)
c = ymag * sin (yrotation)
e = -xmag * sin (xrotation)
f = ymag * cos (yrotation)
a = x0 - b * xref0 - c * yref0 = xshift
d = y0 - e * xref0 - f * yref0 = xshift
.fi
Xref0, yref0, x0, and
y0 are the origins of the reference and output coordinate systems
respectively. xmag and ymag are the x and y scale factors in output units
per reference unit and xrotation and yrotation are the rotation angles measured
counter-clockwise of the x and y axes.
The linear portion of the GEOMAP transformation may be altered after the fact
by setting some or all of the parameters \fIxref\fR, \fIyref\fR, \fIxout\fR,
\fIyout\fR, \fIxshift\fR, \fIyshift\fR, \fIxmag\fR, \fIymag\fR, \fIxrotation\fR,
and \fIyrotation\fR. If defined these parameters will replace the corresponding
values in the GEOMAP database file.
Xref, yref, xshift, yshift, xout and yout can be used to redefine the shift
where xshift and yshift take precedence over xref, yref, xout and yout.
Xmag, and ymag can be used to reset the scale of the transformation.
Xrotation and yrotation can be used to redefine the orientation of the
transformation. Note that xrotation and yrotation are interpreted as
the rotation of the coordinate axes not the coordinates.
The default values of these parameters are.
.nf
xref = (xmin + xmax) / 2.0
yref = (ymin + ymax) / 2.0
xout = f (xref,yref)
yout = g (xref,yref)
xshift = xshift (database) = xout - f(xref,yref)
yshift = yshift (database) = yout - g(xref,yref)
xmag = xmag (database)
ymag = ymag (database)
xrotation = xrotation (database)
yrotation = yrotation (database)
.fi
If the GEOMAP database is undefined then GEOXYTRAN performs a linear
transformation on the input coordinates using the parameters
\fIxref\fR, \fIyref\fR, \fIxmag\fR, \fIymag\fR, \fIxrotation\fR,
\fIyrotation\fR, \fIxout\fR, \fIyout\fR, \fIxshift\fR, and
\fIyshift\fR as shown below. Note that in this case xrotation and
yrotation are interpreted as the rotation of the coordinates
themselves not the coordinate axes.
.nf
xout = a + b * xref + c * yref
yout = d + e * xref + f * yref
b = xmag * cos (xrotation)
c = -ymag * sin (yrotation)
e = xmag * sin (xrotation)
f = ymag * cos (yrotation)
a = xo - b * xref0 - c * yref0 = xshift
d = yo - e * xref0 - f * yref0 = xshift
.fi
.ih
Forward vs. Backward Transformations
The transformation direction is specified by the \fIdirection\fR parameter
which may take the values "forward" or "backward". The forward transformation
is a direct evaluation of the database solution. The backward
transformation is an iterative evaluation to obtain the coordinate which
evaluates to the desired coordinate.
When the same solution is used with \fBgeotran\fR to transform an image
to another image matching the "reference" image is needed to obtain
coordinates in the transformed image. This is because the transformation
is produced with \fBgeomap\fR to map "reference" coordinates to the
image which is subsequently transformed. Therefore, if you have coordinates
in the image which has been transformed then you should use the "backward"
transformation to get coordinates for the transformed image. But if you
have standard coordinates from the reference image being matched then you
would use the "forward" transformation. If you are not sure then you can
use \fBtvmark\fR to overlay the results to find which direction produces
the desired coordinates.
Because the backward transformation is performed iteratively it can be
slow. If higher speeds are desired, such as when evaluating a very
large number of coordinates, one might create a transformation solution
that can be evaluated in the forward direction. This is done by
using \fBgeomap\fR with the reference and target coordinates reversed.
.ih
FORMATS
A format specification has the form "%w.dCn", where w is the field
width, d is the number of decimal places or the number of digits of
precision, C is the format code, and n is radix character for
format code "r" only. The w and d fields are optional. The format
codes C are as follows:
.nf
b boolean (YES or NO)
c single character (c or '\c' or '\0nnn')
d decimal integer
e exponential format (D specifies the precision)
f fixed format (D specifies the number of decimal places)
g general format (D specifies the precision)
h hms format (hh:mm:ss.ss, D = no. decimal places)
m minutes, seconds (or hours, minutes) (mm:ss.ss)
o octal integer
rN convert integer in any radix N
s string (D field specifies max chars to print)
t advance To column given as field W
u unsigned decimal integer
w output the number of spaces given by field W
x hexadecimal integer
z complex format (r,r) (D = precision)
Conventions for w (field width) specification:
W = n right justify in field of N characters, blank fill
-n left justify in field of N characters, blank fill
0n zero fill at left (only if right justified)
absent, 0 use as much space as needed (D field sets precision)
Escape sequences (e.g. "\n" for newline):
\b backspace (not implemented)
\f formfeed
\n newline (crlf)
\r carriage return
\t tab
\" string delimiter character
\' character constant delimiter character
\\ backslash character
\nnn octal value of character
Examples
%s format a string using as much space as required
%-10s left justify a string in a field of 10 characters
%-10.10s left justify and truncate a string in a field of 10 characters
%10s right justify a string in a field of 10 characters
%10.10s right justify and truncate a string in a field of 10 characters
%7.3f print a real number right justified in floating point format
%-7.3f same as above but left justified
%15.7e print a real number right justified in exponential format
%-15.7e same as above but left justified
%12.5g print a real number right justified in general format
%-12.5g same as above but left justified
%h format as nn:nn:nn.n
%15h right justify nn:nn:nn.n in field of 15 characters
%-15h left justify nn:nn:nn.n in a field of 15 characters
%12.2h right justify nn:nn:nn.nn
%-12.2h left justify nn:nn:nn.nn
%H / by 15 and format as nn:nn:nn.n
%15H / by 15 and right justify nn:nn:nn.n in field of 15 characters
%-15H / by 15 and left justify nn:nn:nn.n in field of 15 characters
%12.2H / by 15 and right justify nn:nn:nn.nn
%-12.2H / by 15 and left justify nn:nn:nn.nn
\n insert a newline
.fi
.ih
EXAMPLES
.nf
1. Compute the transformation from the reference system to the output
system and then evaluate the transformation for both the input list and
the list of unknowns.
cl> type rtran
1.0000 1.0000 184.1445 -153.0376
512.0000 1.0000 684.0376 184.1445
512.0000 512.0000 346.8555 684.0376
1.0000 512.0000 -153.0380 346.8555
cl> geomap rtran rtran.db 1.0 512.0 1.0 512.0 intera-
cl> type rtran.db
# Tue 14:53:36 18-Apr-95
begin rtran
output rtran.db
xrefmean 256.5
yrefmean 256.5
xmean 265.4999
ymean 265.5
xshift 183.826
yshift -154.6757
xmag 1.180001
ymag 1.179999
xrotation 326.
yrotation 326.
surface1 11
3. 3.
2. 2.
2. 2.
0. 0.
1. 1.
512. 512.
1. 1.
512. 512.
183.826 -154.6757
0.9782647 0.6598474
-0.6598479 0.9782643
surface2 0
cl> geoxytran rtran STDOUT rtran.db rtran
184.1444 -153.038 184.1445 -153.0376
684.0377 184.1444 684.0376 184.1445
346.8554 684.0375 346.8555 684.0376
-153.038 346.8555 -153.038 346.8555
cl> geoxytran unknowns unknowns.tran rtran.db rtran
2. Evaluate the backward transformation to take coordinates from the
output system to the reference system. In this example we use the
output of the first example to illustrate getting back the coordinates
used in the original geomap input.
cl> geoxytran rtran STDOUT rtran.db rtran dir=forward |\
>>> geoxytran STDIN STDOUT rtran.db rtran dir=backward
0.999798 0.9997257 184.1445 -153.0376
512. 0.9999674 684.0376 184.1445
512. 512. 346.8555 684.0376
0.999918 512.0001 -153.0380 346.8555
3. Evaluate the transform computed in example 1 for the same list of
unknowns but modify the transformation slightly by setting xmag
and ymag to 1.18 and 1.18 exactly.
cl> geoxytran unknowns unknowns.tran rtran.db rtran xmag=1.18 \
ymag=1.18
4. Evaluate the same transformation for the same unknowns as before
using the linear transformation parameters not the transform computed
by geomap. Note that the angle is the negative of the one defined
in the database file.
cl> geoxytran unknowns unknowns.tran "" xmag=1.18 ymag=1.18 \
xrot=34 yrot=34 xshift=183.826 yshift=-154.6757
.fi
.ih
BUGS
.ih
SEE ALSO
geomap, lists.lintran, geotran, gregister
.endhelp
|