JPEG arithmetic encoding and decoding portable software implementation
======================================================================

Release of 28-Mar-98 by Guido Vollbeding <guido@jpegclub.org>
=============================================================

Primary URLs:

	http://sylvana.net/jpeg-ari/
	(directory containing the actual archive files:)

	http://sylvana.net/jpeg-ari/jpeg-ari-28mar98.tar.gz

	http://sylvana.net/jpeg-ari/jpeg-ari.zip


DISCLAIMER
==========

This package is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

It is possible that certain products which can be built using this
software modules might form inventions protected by patent rights in
some countries (e.g. by patents about arithmetic coding algorithms
owned by IBM and AT&T in the USA). Provision of this software by the
author does NOT include any licenses for any patents.
In those countries where a patent license is required for certain
applications of this software modules, you will have to obtain such
a license yourself.

See Annex L in the JPEG spec for further information
and a list of relevant patents.


What is it?
===========

This is my implementation of the arithmetic encoding and decoding
back-end for JPEG as specified in the

  ISO/IEC International Standard 10918-1 and CCITT Recommendation
  ITU-T T.81, "Information Technology - Digital Compression and
  Coding of Continuous-tone Still Images, Part 1: Requirements
  and Guidelines".

Arithmetic coding is a state-of-the-art lossless entropy data
compression method which offers better compression performance
than the well-established Huffman entropy coding process.

The JPEG standard specifies a particular arithmetic coding scheme
to be used optionally as alternative to Huffman coding.


Who needs it?
=============

This package might be of interest for people who are looking for
enhanced state-of-the-art image compression technologies.

It is intended to provide a reasonable tool for experimental,
comparison and evaluation purposes.

See the Disclaimer above for restricted conditions of usage.


How does it work?
=================

This distribution is organized as add-on to the widespread
Independent JPEG Group's JPEG software.

Thus, once you managed to install the IJG software distribution
successfully, there should be no additional problems (portability
issues etc.) to incorporate this package into the library,
and usage is straightforward.

Transcode given JPEG files simply with a command like

  jpegtran -arithmetic [-progressive] < orig.jpg > arit.jpg

into an arithmetic coded version LOSSLESSLY! Since there are
practically no applications in existence which can handle such
files, you can only transform it back with the same tool

  jpegtran [-optimize] [-progressive] < arit.jpg > orig2.jpg

to verify correct operation.

Thus, you can easily verify the enhanced compression performance
of the arithmetic coding version compared to the Huffman (with
fixed or custom tables) version.

The claim to evaluate was that arithmetic coding gives an average
5-10% compression improvement against Huffman.
Early tests with this implementation support this claim, and you
can perform tests with own material.

Here are some actual results:

% ./jpegtran -optimize < testorig.jpg > testopt.jpg
% ./jpegtran -arithmetic < testorig.jpg > testarit.jpg
% ./jpegtran < testarit.jpg > testorig2.jpg
% ./jpegtran -arithmetic -progressive < testorig.jpg > testaritp.jpg
% ./jpegtran < testaritp.jpg > testorig3.jpg
% ./jpegtran -optimize < ../butterfly.jpg > ../buttopt.jpg
% ./jpegtran -progressive < ../butterfly.jpg > ../buttprog.jpg
% ./jpegtran -arithmetic < ../butterfly.jpg > ../buttarit.jpg
% ./jpegtran < ../buttarit.jpg > ../butterfly2.jpg
% ./jpegtran -arithmetic -progressive < ../butterfly.jpg > ../buttaritp.jpg
% ./jpegtran < ../buttaritp.jpg > ../butterfly3.jpg
% ls -l test*.jpg
-rw-r--r--  1 guivol       5153 Apr 13 18:51 testarit.jpg
-rw-r--r--  1 guivol       5186 Apr 13 18:51 testaritp.jpg
-rw-r--r--  1 guivol       5756 Apr  2 15:10 testimg.jpg
-rw-r--r--  1 guivol       5645 Apr  2 15:10 testimgp.jpg
-rw-r--r--  1 guivol       5463 Apr 13 18:51 testopt.jpg
-rw-r--r--  1 guivol       5770 Apr  2 15:10 testorig.jpg
-rw-r--r--  1 guivol       5770 Apr 13 18:51 testorig2.jpg
-rw-r--r--  1 guivol       5770 Apr 13 18:51 testorig3.jpg
-rw-r--r--  1 guivol       5655 Apr  2 15:10 testprog.jpg
% ls -l ../butt*.jpg
-rw-r--r--  1 guivol     460091 Apr 13 18:52 ../buttarit.jpg
-rw-r--r--  1 guivol     453703 Apr 13 18:52 ../buttaritp.jpg
-rw-r--r--  1 guivol     527823 Nov 19 18:41 ../butterfly.jpg
-rw-r--r--  1 guivol     527823 Apr 13 18:52 ../butterfly2.jpg
-rw-r--r--  1 guivol     527823 Apr 13 18:52 ../butterfly3.jpg
-rw-r--r--  1 guivol     511834 Apr 13 18:52 ../buttopt.jpg
-rw-r--r--  1 guivol     492237 Apr 13 18:52 ../buttprog.jpg
% 

Note that arithmetic coding requires only a single processing
pass due to its fully-adaptive nature, and compared to one-pass
(fixed tables) Huffman the arithmetic coded version consistently
achieves 10% compression improvement.
Compared with two-pass (custom tables) Huffman the improvement
is 5-10%.

Note that I wasn't able yet to cross-check interoperability of
the produced files with other implementations.
Thus, I can't be sure that the files are compliant to the spec,
but I hope so and the tests support it.
The encoding and decoding processes should be correct anyway,
however, in the sense that they are complementary to each other
and thus retain data integrity.

I would appreciate any indications for compliance or interoperability
with other implementations from somebody.
Please let me know if you are able to cross-check something.


Installation
============

The installation is a 2-stage procedure:

1. Preparing the IJG package for potential incorporation
   of the arithmetic coding feature.

2. Incorporation of the actual arithmetic coding modules
   and enabling the feature for usage.

The reason for this 2-stage process is the hope to make
step 1 obsolete in future IJG releases.
The actual implementation should remain separate IMHO due
to the different usage conditions.

Step 1:

1.1. Copy all files from the subdirectory 'patchv6b' into
     the IJG software's v6b source directory.
     This includes minor patches to some files and 3 extra
     files which hold place for the actual implementation.

1.2. Update your Makefile/Projectfile for the inclusion of
     the 3 extra files. This will be done automatically
     if you use a configure-generated makefile and type
     './configure' (reconfigure).

1.3. Recompile ('make').

See the file 'PATCHES' in 'patchv6b' for details.

Step 2:

2.1. Replace the 3 placeholder files by the actual implementation
     modules.

2.2. Enable application support of the new features by #defining
     C_ARITH_CODING_SUPPORTED and D_ARITH_CODING_SUPPORTED
     in 'jmorecfg.h'.

2.3. Recompile ('make').

Note that I suggest to add 3 placeholder files to the IJG
distribution. This would remove the need for system-dependent
changes (Makefiles) and thus considerably simplify the actual
installation for systems without a configure-generated makefile.


References
==========

- The Independent JPEG Group's software

- JBIG-KIT lossless image compression library by Markus Kuhn

- William B. Pennebaker, Joan L. Mitchell:
  "JPEG Still Image Data Compression Standard",
  Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1.

- jpeg-faq (http://www.faqs.org/faqs/jpeg-faq/)

- compression-faq (http://www.faqs.org/faqs/compression-faq/)
