<algorithm> (JBIG) An experts group of ISO, IEC and ITU-T (JTC1/SC2/WG9 and SGVIII) working to define a compression standard for lossless image coding. Their proposed algorithm features compatible progressive coding and sequential coding and is lossless - the image is unaltered after compression and decompression.
JBIG can handle images with from one to 255 bits per pixel. Better compression algorithms exist for more than about eight bits per pixel. With multiple bits per pixel, Gray code can be used to reduce the number of bit changes between adjacent decimal values (e.g. 127 and 128), and thus improve the compression which JBIG does on each bitplane.
JBIG uses discrete steps of detail by successively doubling the resolution. The sender computes a number of resolution layers and transmits these starting at the lowest resolution. Resolution reduction uses pixels in the high resolution layer and some already computed low resolution pixels as an index into a lookup table. The contents of this table can be specified by the user.
Compatibility between progressive and sequential coding is achieved by dividing an image into stripes. Each stripe is a horizontal bar with a user definable height. Each stripe is separately coded and transmitted, and the user can define in which order stripes, resolutions and bitplanes are intermixed in the coded data. A progressively coded image can be decoded sequentially by decoding each stripe, beginning by the one at the top of the image, to its full resolution, and then proceeding to the next stripe. Progressive decoding can be done by decoding only a specific resolution layer from all stripes.
The Q-coder codes bi-level pixels as symbols using the probability of occurrence of these symbols in a certain context. JBIG defines two kinds of context, one for the lowest resolution layer (the base layer), and one for all other layers (differential layers). Differential layer contexts contain pixels in the layer to be coded, and in the corresponding lower resolution layer.
For each combination of pixel values in a context, the probability distribution of black and white pixels can be different. In an all white context, the probability of coding a white pixel will be much greater than that of coding a black pixel. The Q-coder, like Huffman coding, achieves compression by assigning more bits to less probable symbols. The Q-coder can, unlike a Huffman coder, assign one output code bit to more than one input symbol, and thus is able to compress bi-level pixels without explicit clustering, as would be necessary using a Huffman coder.
[What is "clustering"?]
Maximum compression will be achieved when all probabilities (one set for each combination of pixel values in the context) follow the probabilities of the pixels. The Q-coder therefore continuously adapts these probabilities to the symbols it sees.
JBIG can be regarded as two combined algorithms:
(1) Sending or storing multiple representations of images at different resolutions with no extra storage cost. Differential layer contexts contain pixels in two resolution layers, and so enable the Q-coder to effectively code the difference in information between the two layers, instead of the information contained in every layer. This means that, within a margin of approximately 5%, the number of resolution layers doesn't effect the compression ratio.
(2) A very efficient compression algorithm, mainly for use with bi-level images. Compared to CCITT Group 4, JBIG is approximately 10% to 50% better on text and line art, and even better on halftones. JBIG, just like Group 4, gives worse compression in the presence of noise in images.
An example application would be browsing through an image database.
["An overview of the basic principles of the Q-coder adaptive binary arithmetic coder", W.B. Pennebaker, J.L. Mitchell, G.G. Langdon, R.B. Arps, IBM Journal of research and development, Vol.32, No.6, November 1988, pp. 771-726].