Fast Prediction Compensated Multiple Description Coding for JPEG 2000

The prediction compensated multiple description coding described in the following papers is implemented by modifying the OpenJPEG version of the JPEG 2000 standard:

J. Wang, and J. Liang, "Filter banks for prediction-compensated multiple description coding,” submitted to IEEE Trans. Signal Processing, Sept. 2007. Revised: Aug. 2008. PDF

J. Wang, and J. Liang, "Filter Banks for Prediction-Compensated Multiple Description Coding," accepted, 2008 Data Compression Conference, Snowbird, Utah, Mar. 2008. PDF

Please click here to download the modified OpenJPEG package (including source codes).

The software is compiled in Microsoft Visual Studio environment. The Visual Studio solution files for the encoder and the decoder are image_to_j2k.sln and j2k_to_image.sln, which are in the codec folder after unzip the package. The executable files image_to_j2k.exe and j2k_to_image.exe are also included in the Example folder.

Note: Both image_to_j2k.sln and j2k_to_image.sln contain two projects, one for the encoder or the decoder, and another one is called LibOpenJPEG. The encoder or the decoder project has dependency over the LibOpenJPEG. Depending on the version of your Visual Studio, you may need to convert the solution files in the package to your new version, but sometimes the dependency can be lost during the conversion. If this is the case, you need to re-establish this dependency by right clicking the encoder or decoder project name and link to LibOpenJPEG from the "Project Dependencies..." window.

Most of the multiple description coding algorithm is implemented in the file libopenjpeg\mdc.c and mdc.h.

New encoder parameters:

A new parameter "-m" is added to the OpenJPEG encoder to facilitate the multiple description coding. Its usage is as follows:

"-m x" : where x = (total bits for inter coded coefficients) / (total bits for intra coded coefficients) * 100. This is a measure of the redundancy in the generated bitstream, since the bits for inter coded coefficients are not used when both descriptions are received. For example, when x = 20, 1/6 of all bits are the redundant bits.

New decoder parameters:

A parameter "-m" is also added to the decoder to specify the number of descriptions: Its usage is:

-m num_des : num_des is the number of descriptions (this version only supports 2 descriptions)

Examples:

Three examples are provided below. The corresponding files are also included in the Example folder of the pakage.

1. Goldhill.pgm (5 wavelet resolutions, R = 1bpp (or 0.5bpp per description), 15% redundancy ratio)

Encoding:
image_to_j2k.exe -i goldhill.pgm -o goldhill.j2k -n 5 -r 7.98 -m 15.2 -I

This will create two output files, goldhill_0.j2k and goldhill_1.j2k, one for each description.

Our algorithm uses the JPEG 2000 rate control, and is therefore very fast. The encoding only takes 0.70 sec. on a PC with 2.13 GHz Intel Core 2 CPU.

Decoding:
j2k_to_image.exe -i goldhill.j2k -o goldhill_rec.pgm -m 2

This generates three decoded images. The central decoder output goldhill_rec_central_rec_0.pgm, and the two side decoder outputs goldhill_rec_side_rec_0.pgm and goldhill_rec_side_rec_1.pgm.

Decoding of each case takes less than 0.1 seconds on a PC with 2.13 GHz Intel Core 2 CPU.

PSNR:

The PSNRs of the three decoded images are as follows (measured by the imgcmp.exe program in the JasPer project)

imgcmp.exe -f goldhill.pgm -F goldhill_rec_central_rec_0.pgm -m psnr
35.770908 dB

imgcmp.exe -f goldhill.pgm -F goldhill_rec_side_rec_0.pgm -m psnr
31.259020 dB

imgcmp.exe -f goldhill.pgm -F goldhill_rec_side_rec_1.pgm -m psnr
30.812764 dB

Left: central decoding (35.77 dB). Right: side decoding (31.26 dB).

The standard JPEG 2000 yields 36.58 dB at 1 bpp, so our method only sacrifices 0.81 dB to achieve the good MDC performance.

2. Lena (5 wavelet resolutions, R = 1 bpp (or 0.5 bpp per description), 17% redundancy ratio)

Encoding:
image_to_j2k.exe -i lena.pgm -o lena.j2k -n 5 -r 7.97 -m 17.6 -I

This will create two output files, lena_0.j2k and lena_1.j2k, one for each description.

Decoding:
j2k_to_image.exe -i lena.j2k -o lena_rec.pgm -m 2

This generates three decoded images. The central decoder output lena_rec_central_rec_0.pgm, and the two side decoder outputs lena_rec_side_rec_0.pgm and lena_rec_side_rec_1.pgm.

PSNR:

The PSNRs of the three decoded images are as follows (measured by the imgcmp.exe program in the JasPer project)

imgcmp -f lena.pgm -F lena_rec_central_rec_0.pgm -m psnr
39.494547 dB

imgcmp -f lena.pgm -F lena_rec_side_rec_0.pgm -m psnr
34.360618 dB

imgcmp -f lena.pgm -F lena_rec_side_rec_1.pgm -m psnr
34.119671 dB

Left: central decoding (39.49 dB). Right: side decoding (34.36 dB).

The standard JPEG 2000 yields 40.37 dB at 1 bpp, so our method sacrifices 0.88 dB to achieve the MDC performance.

3. Barbara (5 wavelet resolutions, R = 1bpp (or 0.5bpp per description), 5% redundancy ratio)

Encoding:
image_to_j2k.exe -i barb.pgm -o barb.j2k -n 5 -r 7.98 -m 5 -I

This will create two output files, barb_0.j2k and barb_1.j2k, one for each description.

Decoding:
j2k_to_image.exe -i barb.j2k -o barb_rec.pgm -m 2

This generates three decoded images. The central decoder output barb_rec_central_rec_0.pgm, and the two side decoder outputs barb_rec_side_rec_0.pgm and barb_rec_side_rec_1.pgm.

PSNR:

The PSNRs of the three decoded images are as follows (measured by the imgcmp.exe program in the JasPer project)

imgcmp.exe -f barb.pgm -F barb_rec_central_rec_0.pgm -m psnr
36.791200 dB

imgcmp.exe -f barb.pgm -F barb_rec_side_rec_0.pgm -m psnr
25.328942 dB

imgcmp.exe -f barb.pgm -F barb_rec_side_rec_1.pgm -m psnr
25.652281 dB

Left: central decoding (36.79 dB). Right: side decoding (25.65 dB).

The standard JPEG 2000 yields 37.17 dB at 1 bpp, so our method only sacrifices 0.38 dB to achieve the good MDC performance.