It refers to normed numbers, https://github.com/JuliaMath/FixedPointNumbers.jl. In most image-processing frameworks the value of
white (for a grayscale pixel) is representation dependent:
white == 255 #= 8-bit camera =# == 65535 #= 16-bit camera =# == 4095 #= 12-bit camera =# == 1.0 #= floating-point representation =#
While many people who work with images have gotten used to thinking this way, it’s fair to say it’s rather bad mathematics: I’m not aware of any other domain of computation where the above equalities hold (255 == 1.0, seriously?). It also violates our general expectation that “meaning” is independent of “representation”: just do
convert(Float64, x) and suddenly you’re very confused. Particularly for cameras with 10-, 12-, and 14-bit depths, it’s very hard to automatically detect pixel-saturation because the maximum output is less than
typemax(UInt16), unless you always carry around an extra bit of metadata about the camera.
We’ve gone to the trouble to fix this by introducing a set of numbers, the normed numbers, that allow you to represent
1.0 with an 8-bit number, or a 16-bit number, or the first 10 bits of a 16-bit number, etc. These numbers are just reinterpretations of
UInt16, etc, but they provide consistent rules of arithmetic in which they behave like their floating-point cousins. Consequently, they fix image mathematics, and
white always means 1.0 no matter with what precision you choose to represent it.