Heimdali
can write pixel values to HDF5
and Inrimage
file using their floating point representation or using a fixed point representation.
The conversion is explained by the formulaes:
where:
pixel_value
is afloat
.fixed_point_exponent
is achar
of values in [ − 100, 100] It is a global value for the image.fixed_point_factor
is of typefixed_point_type
, and is defined on all pixel.fixed_point_nbits
is the number of bits offixed_point_type
(so number of bytes times 8). As all pixel are of the same type, it is a global value for the image.fixed_point_type
can be:char
(1 byte).unsigned char
(1 byte).short
(2 bytes).unsigned short
(2 bytes).int
(4 bytes).unsigned int
(4 bytes).
round
convert a floating point to the nearest lower integer.
A file stores the fixed_point_exponent
(one value), and an array of fixed_point_factor
of type T
. When the file is read or written, these values are converted to an array of float
back and forth, and computation are performed using float
.
+-----------------------------------------------------------------------------------+ | Examples (fixed_point_exponent is 0) | +-------------+---------------------+--------------------------+--------------------+ | pixel value | fixed_point_type | 2^pixed_point_nbits -1 | fixed_point_factor | +=============+=====================+==========================+====================+ | 0.11 | [unsigned] char | 2^8 - 1 = 255 | 28 | +-------------+---------------------+--------------------------+--------------------+ | 0.22 | [unsigned] char | 2^8 - 1 = 255 | 56 | +-------------+---------------------+--------------------------+--------------------+ | 0.33 | [unsigned] char | 2^8 - 1 = 255 | 84 | +-------------+---------------------+--------------------------+--------------------+ | 0.11 | [unsigned] short | 2^16 - 1 = 65534 | 7209 | +-------------+---------------------+--------------------------+--------------------+ | 0.22 | [unsigned] short | 2^16 - 1 = 65534 | 14417 | +-------------+---------------------+--------------------------+--------------------+ | 0.33 | [unsigned] short | 2^16 - 1 = 65534 | 21626 | +-------------+---------------------+--------------------------+--------------------+ | 0.11 | [unsigned] int | 2^32 - 1 = 4294967294 | 472446400 | +-------------+---------------------+--------------------------+--------------------+ | 0.22 | [unsigned] int | 2^32 - 1 = 4294967294 | 944892800 | +-------------+---------------------+--------------------------+--------------------+ | 0.33 | [unsigned] int | 2^32 - 1 = 4294967294 | 1417339264 | +-------------+---------------------+--------------------------+--------------------+