home *** CD-ROM | disk | FTP | other *** search
/ Dream 55 / Amiga_Dream_55.iso / RISCOS / APPS / GRAPHIC / JPEG6A.ZIP / Jpeg-6arit / ReadMeArit < prev    next >
Text File  |  1997-04-14  |  7KB  |  210 lines

  1. JPEG arithmetic encoding and decoding portable software implementation
  2. ======================================================================
  3.  
  4. Pre-Release of 14-Apr-97 by Guido Vollbeding <guivol@esc.de>
  5. ============================================================
  6.  
  7. Primary URLs:
  8.  
  9.     http://www.esc.de/homes/guivol/jpeg-ari/
  10.     (directory containing the actual archive files:)
  11.  
  12.     http://www.esc.de/homes/guivol/jpeg-ari/jpeg-ari-14apr97.tar.gz
  13.  
  14.     http://www.esc.de/homes/guivol/jpeg-ari/jpeg-ari.zip
  15.  
  16.  
  17. DISCLAIMER
  18. ==========
  19.  
  20. This package is distributed in the hope that it will be useful,
  21. but WITHOUT ANY WARRANTY; without even the implied warranty of
  22. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  23.  
  24. It is possible that certain products which can be built using this
  25. software modules might form inventions protected by patent rights in
  26. some countries (e.g. by patents about arithmetic coding algorithms
  27. owned by IBM and AT&T in the USA). Provision of this software by the
  28. author does NOT include any licences for any patents.
  29. In those countries where a patent licence is required for certain
  30. applications of this software modules, you will have to obtain such
  31. a licence yourself.
  32.  
  33. See Annex L in the JPEG spec for further information
  34. and a list of relevant patents.
  35.  
  36.  
  37. What is it?
  38. ===========
  39.  
  40. This is my implementation of the arithmetic encoding and decoding
  41. back-end for JPEG as specified in the
  42.  
  43.   ISO/IEC International Standard 10918-1 and CCITT Recommendation
  44.   ITU-T T.81, "Information Technology - Digital Compression and
  45.   Coding of Continuous-tone Still Images, Part 1: Requirements
  46.   and Guidelines".
  47.  
  48. Arithmetic coding is a state-of-the-art lossless entropy data
  49. compression method which offers better compression performance
  50. than the well-established Huffman entropy coding process.
  51.  
  52. The JPEG standard specifies a particular arithmetic coding scheme
  53. to be used optionally as alternative to Huffman coding.
  54.  
  55.  
  56. Who needs it?
  57. =============
  58.  
  59. This package might be of interest for people who are looking for
  60. enhanced state-of-the-art image compression technologies.
  61.  
  62. It is intended to provide a reasonable tool for experimental,
  63. comparison and evaluation purposes.
  64.  
  65. See the Disclaimer above for restricted conditions of usage.
  66.  
  67.  
  68. How does it work?
  69. =================
  70.  
  71. This distribution is organized as add-on to the widespread
  72. Independent JPEG Group's JPEG software.
  73.  
  74. Thus, once you managed to install the IJG software distribution
  75. successfully, there should be no additional problems (portability
  76. issues etc.) to incorporate this package into the library,
  77. and usage is straightforward.
  78.  
  79. Transcode given JPEG files simply with a command like
  80.  
  81.   jpegtran -arithmetic [-progressive] < orig.jpg > arit.jpg
  82.  
  83. into an arithmetic coded version LOSSLESSLY! Since there are
  84. practically no applications in existence which can handle such
  85. files, you can only transform it back with the same tool
  86.  
  87.   jpegtran [-optimize] [-progressive] < arit.jpg > orig2.jpg
  88.  
  89. to verify correct operation.
  90.  
  91. Thus, you can easily verify the enhanced compression performance
  92. of the arithmetic coding version compared to the Huffman (with
  93. fixed or custom tables) version.
  94.  
  95. The claim to evaluate was that arithmetic coding gives an average
  96. 5-10% compression improvement against Huffman.
  97. Early tests with this implementation support this claim, and you
  98. can perform tests with own material.
  99.  
  100. Here are some actual results:
  101.  
  102. % ./jpegtran -optimize < testorig.jpg > testopt.jpg
  103. % ./jpegtran -arithmetic < testorig.jpg > testarit.jpg
  104. % ./jpegtran < testarit.jpg > testorig2.jpg
  105. % ./jpegtran -arithmetic -progressive < testorig.jpg > testaritp.jpg
  106. % ./jpegtran < testaritp.jpg > testorig3.jpg
  107. % ./jpegtran -optimize < ../butterfly.jpg > ../buttopt.jpg
  108. % ./jpegtran -progressive < ../butterfly.jpg >../buttprog.jpg
  109. % ./jpegtran -arithmetic < ../butterfly.jpg > ../buttarit.jpg
  110. % ./jpegtran < ../buttarit.jpg > ../butterfly2.jpg
  111. % ./jpegtran -arithmetic -progressive < ../butterfly.jpg > ../buttaritp.jpg
  112. % ./jpegtran < ../buttaritp.jpg > ../butterfly3.jpg
  113. % ls -l test*.jpg
  114. -rw-r--r--  1 guivol       5153 Apr 13 18:51 testarit.jpg
  115. -rw-r--r--  1 guivol       5186 Apr 13 18:51 testaritp.jpg
  116. -rw-r--r--  1 guivol       5756 Apr  2 15:10 testimg.jpg
  117. -rw-r--r--  1 guivol       5645 Apr  2 15:10 testimgp.jpg
  118. -rw-r--r--  1 guivol       5463 Apr 13 18:51 testopt.jpg
  119. -rw-r--r--  1 guivol       5770 Apr  2 15:10 testorig.jpg
  120. -rw-r--r--  1 guivol       5770 Apr 13 18:51 testorig2.jpg
  121. -rw-r--r--  1 guivol       5770 Apr 13 18:51 testorig3.jpg
  122. -rw-r--r--  1 guivol       5655 Apr  2 15:10 testprog.jpg
  123. % ls -l ../butt*.jpg
  124. -rw-r--r--  1 guivol     460091 Apr 13 18:52 ../buttarit.jpg
  125. -rw-r--r--  1 guivol     453703 Apr 13 18:52 ../buttaritp.jpg
  126. -rw-r--r--  1 guivol     527823 Nov 19 18:41 ../butterfly.jpg
  127. -rw-r--r--  1 guivol     527823 Apr 13 18:52 ../butterfly2.jpg
  128. -rw-r--r--  1 guivol     527823 Apr 13 18:52 ../butterfly3.jpg
  129. -rw-r--r--  1 guivol     511834 Apr 13 18:52 ../buttopt.jpg
  130. -rw-r--r--  1 guivol     492237 Apr 13 18:52 ../buttprog.jpg
  131.  
  132. Note that arithmetic coding requires only a single processing
  133. pass due to its fully-adaptive nature, and compared to one-pass
  134. (fixed tables) Huffman the arithmetic coded version consistently
  135. achieves 10% compression improvement.
  136. Compared with two-pass (custom tables) Huffman the improvement
  137. is 5-10%.
  138.  
  139. Note that I wasn't able yet to cross-check interoperability of
  140. the produced files with other implementations.
  141. Thus, I can't be sure that the files are compliant to the spec,
  142. but I hope so and the tests support it.
  143. The encoding and decoding processes should be correct anyway,
  144. however, in the sense that they are complementary to each other
  145. and thus retain data integrity.
  146.  
  147. I would appreciate any indications for compliance or interoperability
  148. with other implementations from somebody.
  149. Please let me know if you are able to cross-check something.
  150.  
  151.  
  152. Installation
  153. ============
  154.  
  155. The installation is a 2-stage procedure:
  156.  
  157. 1. Preparing the IJG package for potential incorporation
  158.    of the arithmetic coding feature.
  159.  
  160. 2. Incorporation of the actual arithmetic coding modules
  161.    and enabling the feature for usage.
  162.  
  163. The reason for this 2-stage process is the hope to make
  164. step 1 obsolete in future IJG releases.
  165. The actual implementation should remain separate IMHO due
  166. to the different usage conditions.
  167.  
  168. Step 1:
  169.  
  170. 1.1. Copy all files from the subdirectory 'patchv6a' into
  171.      the IJG software's v6a source directory.
  172.      This includes minor patches to some files and 3 extra
  173.      files which hold place for the actual implementation.
  174.  
  175. 1.2. Change your Makefile/Projectfile for the inclusion of
  176.      the 3 extra files.
  177.  
  178. See the file 'PATCHES' in 'patchv6a' for details.
  179.  
  180. Step 2:
  181.  
  182. 2.1. Replace the 3 placeholder files by the actual implementation
  183.      modules.
  184.  
  185. 2.2. Enable application support of the new features by #defining
  186.      C_ARITH_CODING_SUPPORTED and D_ARITH_CODING_SUPPORTED
  187.      in 'jmorecfg.h'.
  188.  
  189. Note that I suggest to add 3 placeholder files to the IJG
  190. distribution. This would remove the need for system-dependent
  191. changes (Makefiles) and thus considerably simplify the actual
  192. installation.
  193.  
  194.  
  195. References
  196. ==========
  197.  
  198. - The Independent JPEG Group's software
  199.  
  200. - JBIG-KIT lossless image compression library by Markus Kuhn
  201.  
  202. - William B. Pennebaker, Joan L. Mitchell:
  203.   "JPEG Still Image Data Compression Standard",
  204.   Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1.
  205.  
  206. - jpeg-faq (http://www.faqs.org/faqs/jpeg-faq/)
  207.  
  208. - compression-faq (http://www.faqs.org/faqs/compression-faq/)
  209.