pvrg-jpeg - JPEG compression and decompression
pvrg-jpeg -iw ImageWidth -ih ImageHeight [-JFIF] [-q(l)
Q-Factor]
[-a] [-b] [-d] [-k predictortype] [-n] [-O] [-y] [-z] [-g]
[-p PrecisionValue] [-t pointtransform]
[-r ResyncInterval] [-s StreamName] [-o OutBaseName]
[[-ci ComponentIndex1] [-fw FrameWidth1] [-fh FrameHeight1]
[-hf HorizontalFrequency1] [-vf VerticalFrequency1]
ComponentFile1]
[[-ci ComponentIndex2] [-fw FrameWidth2] [-fh FrameHeight2]
[-hf HorizontalFrequency2] [-vf VerticalFrequency2]
ComponentFile2]
....
pvrg-jpeg is a still-image compression/decompression
program that performs JPEG encoding and decoding of multiple raster-scanned
files.
These ``raster-scanned files'' are basically PGM (portable
graymap) files without the PGM header. A typical JPEG image is made of three
of these files representing the Y, Cr, and Cb color channels. Usually the Y
(lumience) channel is full size, while the two chroma channels are half
width and half height. But no particular channel really needs to be full
size, so pvrg-jpeg will need to know the dimensions of the original
image when creating jpegs.
- ImageWidth
- specifies the width of the original image. This should correspond to the
width of the widest component and, thus, the width of the ``original
image''. All components have widths roughly corresponding to an integer
decimation ratio from this specification.
- ImageHeight
- specifies the height of the tallest component. This corresponds to the
height of the ``original image''.
- -JFIF
- specifies that a JFIF header is placed on the encoded stream. This is
unnecessary for decoding.
- Q-Factor
- option specifies a multiplicative factor for the quantization: each
quantization coefficient of the default matrix is scaled by (Q-Factor/50).
A Q-Factor of 0 is the same thing as a Q-Factor of 50 because it disables
this function. -q specifies an 8 bit quantization matrix;
-ql specifies a 16 bit quantization matrix, useful for 12 bit
data.
- -a
- enables the double-precision floating point Reference DCT. (Default is
Chen DCT.)
- -b
- enables the Lee DCT. (Default is Chen DCT.)
- -d
- enables decoding. See below.
- -g
- This option will put PGM headers on output files when decoding.
- -k predictortype
- The lossless predictor type, specified as an integer between 1-7. If
specified, then lossless mode is used.
- -n
- This option specifies that the files should not be transmitted in
interleaved format.
- -o OutBaseName
- This will use specified string as a base name for output files when
decoding.
- -O
- signals that the command interpreter will read from the standard
input.
- -p
- Specifies the precision. Normally should be between 2-16 for lossless; 8
or 12 for DCT. If it is specified as a number greater than 8 then the
input is considered to be unsigned shorts (16 bits, msb first). Not
aggressively checked.
- -s JPEGStreamName
- When encoding, this will be used as the output file. When decoding, this
will be used as the input file.
- -t pointtransform
- Specifies the shifting (right) upon loading input and shifting (left) upon
writing input. Generally used by the lossless mode only. Can be used by
the DCT mode to add or subtract bits.
- -y
- for decoding only, signals that no resynchronization is enabled,
thus ignore any markers found in the data stream.
- -z
- enables use of default Huffman tables. This converts the coding from a
two-pass system using the first pass to generate custom tables to a
one-pass system using internal default tables. With this option, the
compression speed is nearly doubled, but because the internal tables are
not custom to the image, the compressed file size increases slightly.
- ResyncInterval
- specifies a resync (restart) interval for the input file--if set to 0
(default), resynchronization is disabled; otherwise it signifies the
number of MDU between a resync marker.
- StreamName
- is the place to load(decoder)/store(encoder) the coded image--if
unspecified it defaults to ComponentFile1.jpg.
For every component in the image we have:
- ComponentIndex
- describes the component index where the file data should be associated
with. The possible values are between 0 and 255. As a rule Y is in 1; U is
in 2; V is in 3. The file specifications, if left undisturbed, will result
in component location of 1 for the first component file, 2 for the second
component file, and so on. If -ci is specified for the previous
component file, then the next component index defaults to the previous
component index plus 1.
- FrameWidth
- describes the actual width of the component. This should be determinable
by the size of the original image (ImageHeight and ImageWidth) and the
frequency sampling of that component. This program assumes that the
sampling component will be round up to the nearest integer and
other programs may not necessarily follow that convention, we allow
precise specification of the FrameWidth. The program will notify the user
if the framewidth and frameheight specifications do not correspond to a
logical MDU pattern and thus will refuse to take the input (in fact,
sometimes rounding down will not result in a logical MDU pattern).
- FrameHeight
- describes the actual height of the component. Multiplied together with
FrameWidth, this should equal the file size of the component. See the
above discussion on the actual specification.
- Hor-Frequency
- specifies the block sampling frequency of the component in the horizontal
direction for every MDU transmitted.
- Ver-Frequency
- specifies the block sampling frequency of the component in the vertical
direction. When multiplied together with the Horizontal frequency, it
corresponds to the number of blocks of that component in the MDU.
- ComponentFilen
- represents the directory path location of the nth component
file.
In order to encode a set of raster-scanned files: 128x128 in
image.Y; 64x128 in image.U; and 64x128 in image.V into
the file image.jpg, the command is
pvrg-jpeg -iw 128 -ih 128 -hf 2 image.Y image.U image.V -s
image.jpg
In order to decode a compressed file in image.jpg, type
pvrg-jpeg -d -s image.jpg
The three output files will be in image.jpg.1 image.jpg.2
image.jpg.3. The images can be displayed by the cv program. The
images can also be converted to ppm and back through the programs
cyuv2ppm and ppm2cyuv Those utility programs available by
anonymous ftp from havefun.stanford.edu:pub/cv/CVv1.2.1.tar.Z.
There are many more options within an internal command interpreter. Please see
the accompanying documentation in doc.ps for more details.
Somewhat slower than many commercial implementations, some bugs
are probably lurking around. Lossless coding and decoding are especially
slow. This program can produce jpeg files that other programs cannot
understand.