2007.01.17 08:00 "Re: [Tiff] Elevation Data", by Joris Van Damme
I would like to write signed 16-bit elevation data to a TIFF image file, but according to the TIFF 6.0 specification, there doesn't appear to be a correct way to do this. The specification allows the use of the SampleFormat to specify that the samples are signed 16-bit integers, but this range of values is incompatible with the PhotometricInterpretation tag, which must be present. The obvious PhotometricInterpretation to use is BlackIsZero, but its range is defined as 0 to 2**nbits-1 (i.e., unsigned integers).
What is done, mostly, in color data, is adding an offset to the data. This is done in various encoding of CIE L*a*b*, in YCbCr, etc.
In actual meaning, take your lowest level beneath the see to be 0. Encode positive offsets from that. Ideally, scale such that your highest mountain is 2**nbits-1 above that lowest beneath see level. The advantage of that is that readers that don't know your intent, are still able to render your (extra?) channel quite nicely.
Also, is there a semantic difference between SMinSampleValue and MinSampleValue? The spec explicitly states that MinSampleValue is just statistical and isn't part of a valid-sample-range definition, but it's much more coy about SMinSampleValue. If it isn't part of a hard range definition, then how can one make an interoperable image with floating-point samples?
It isn't part of a hard range definition.
Floating point data is interoperable by having ranges defined as is logical to the colorspace. For example, the range of the L* channel, in CIE L*a*b*, encoded in floating point, is 0.0 to 100.0, as that is its intrinsic nature. The range of R, G, or B channels is 0.0 to 1.0. The range of floating point MinIsBlack or MinIsWhite channels is 0.0 to 1.0.
Joris Van Damme
Download your free TIFF tag viewer for windows here: