The easiest way to think about the rescaling is through four ranges
(maximum-minimum pairs). In the file variable, values have a
valid range var_vrange
and these correspond to real values
var_imgrange
. The user/application wants to convert real values
usr_imgrange
to a useful valid range usr_vrange
. From
var_vrange
, var_imgrange
, usr_imgrange
and
usr_vrange
, we can determine a scale and offset for converting
pixel values: Input values are scaled to real values by
var_vrange
to var_imgrange
and then scaled again to user
values by usr_imgrange
to usr_vrange
.
If either of the vrange
variables are not specified, they default to
maximum possible range for integer types. For floating
point types, usr_vrange
is set equal to usr_imgrange
so that no conversion of real values is done.
If normalization is not being done, then for integer types
var_imgrange
and usr_imgrange
are set to [0,1] (scale
down to [0,1] and scale up again). When normalizibng,
usr_imgrange
is set to either the full range of the variable
([0,1] if not found) or the user's requested range. If the variable
values are floating point, then var_imgrange
is set to
var_vrange
(no scaling to real values), otherwise
var_imgrange
is read for each image (again, [0,1] if not
found).
What this means for reading and writing images is discussed below.