Discrete Cosine Transform Encoding Package

Greg Cockroft frame!c3po!glc at uunet.uu.net
Fri Mar 23 09:08:19 AEST 1990


The code contained in this directory implements Discrete Cosine Transform
Encoding of 24 bit sun rasterfiles.  The file format dependencies have
been isolated, so it should be trivial to add additional file types. 

The purpose is to compress large images to very small sizes without loss
of substantial picture quality. A full size NTSC 24 bit video test frame
is included.  Its a boring snapshot from a cheer commericial.  I figured
they wouldn't sue me.  It has been compressed to 45K from 900K.  The args
used for compression were "8 .2 8 .1 16 .05 16" (If this code comes in a
mail package the test frame will be not be in the final state. To get it
to its smallest size "compress frame", after extracting the tarfile)

[[Ed's Note: Place in archives - rest of readme follows.

FTP:	Hostname : titan.rice.edu (128.42.1.30)
	Directory: sun-source
	Filename : transform.tar.Z.uu

Archive Server Address: archive-server at rice.edu
Archive Server Command: send sun-source transform.tar.Z.uu

Unpack by (1) uudecode (2) uncompress (3) tar -xf. -bdg]]

If you just want to get started:
	make
	cat frame.Z | uncompress | transform >sunrasterfile

To compress your own frames
	cat sunrasterfile | transform "8 .25 8 .1 16 .1 16" | compress >foo

This code doesn't attempt to efficiently code the output coefficients,
it requires compress or pack to finish the job.

Here is a description of the input args for compression

	"N YT YQ IT IQ QT QQ"

	N -- is matrix size   8-32

Execution time increases in proportion to N^2 because simple matrix 
multiplication is used to compute the DCT.

YT -- is ratio of Y coefficients to keep 0-1.0
IT -- is ratio of I coefficients to keep 0-1.0
QT -- is ratio of Q coefficients to keep 0-1.0
YQ -- control the coarseness of Y quantization
IQ -- control the coarseness of I quantization
QQ -- control the coarseness of Q quantization

As you lower *T and raise *Q the compression rate goes up.
As you lower *T too low, your image will start to get blurry. 
As you raise *Q too high you will start noticing blockiness in the image.


OPERATION
----------
Compression is accomplished by first reading in the entire image into
memory. The image is compressed in YIQ space. The 3 three components are
handled in separate passes. The Y for the image is calculated. NbyN arrays
of pixel are filled and transformed. The Mean Square Values and Absolute
values of the transformed coefficients are calculated and kept around for
later. 

The number of coefficients to keep for Y is YT*N*N.  The largest MSV
values are found and the number of bytes to code each is found from the
Max Absolute values.  Bookkeeping info is written out, followed by the
coeffiecients.  Same for I & Q.

STANDARDS
---------
A standard for DCT image compression should be public this spring.
Created by the JPEG committee. It differs from this code in the way the
coefficients are quantized and packed. It also processes a block at a
time, so that large images can be processed. I'll put out an updated
version when the public draft is available.

PERFORMANCE
-----------
The current implementation uses floating point throughout. Some machines
would get a big gain from using fixed point. 

The convertion from RGB to YIQ could be implemented with integer math.

In an 8by8 DCT matrix, there are only 7 unique values if you discount 
the sign differences. Table lookups could be used instead of multiplications 
in the matrix multiplication.

There are faster ways to compute the DCT transform. 
	1. A Fast DCT can be calculated using FFT. 
	2. A WHT transform followed by a sparse matrix multiplication.


BOOKS
-----
Digital Pictures   Arun N. Netravali and Barry G. Haskell
	Great book on video compression.

Text Compression  Timothy C Bell, John G. Cleary, Ian H. Witten
	Good book on information theory and entropy encoding.

Greg Cockroft
Cockroft & Beach Computing
410 Riverside Court #105
Santa Clara, CA 95054
glc at frame.com



More information about the Comp.sys.sun mailing list