Lossless JPEG transcoding
Daniel Sanchez
ECE533 Fall 2006
Final Project Presentation
University of Wisconsin-Madison
Overview
The problem of JPEG transcoding
Full-featured MATLAB JPEG codec
Lossless transcoder
Lossless rotation
2
The problem of JPEG transcoding
Basic JPEG decoder/encoder block diagrams:
JPEG Decoder
DC Huffman IDPCM DC
JPEG Level shifting RGB
IQ IDCT
File YCbCr->RGB Image
AC Huffman DeZigZag AC
JPEG Encoder
DC DPCM DC Huffman
RGB JPEG
RGB->YCbCr
Image DCT Q
Level shifting File
AC
ZigZag AC Huffman
Reencoding introduces errors because of the
color model conversions (YCbCrRGB)
3
Implementing a JPEG codec in MATLAB
Extends the MATLAB JPEG Toolbox by Phil Sallee
• http://redwood.ucdavis.edu/phil/demos/jpegtbx/
• Includes functions that cover the more tedious parts of
the codec
Implemented JPEG Encoder Provided by toolbox
DC D P CM D C H uffman
RGB RGB->YCbCr JPEG
I mage Level shifting DC T Q File
AC
ZigZag A C H uffman
Works with most images!
• Full color, arbitrary size,…
• Some restrictions in subsampling and color models
4
Example of lossy reencoding
Original image Error after reencoding (x15)
SNR=25.1dB 5
Lossless JPEG transcoder [1]
How to modify decoder/encoder?
Lossy JPEG Transcoder
DC Huffman IDPCM DC
JPEG Level shifting RGB
IQ IDCT
File YCbCr->RGB Image
AC Huffman DeZigZag AC
DC DPCM DC Huffman
RGB JPEG
RGB->YCbCr
Image DCT Q
Level shifting File
AC
ZigZag AC Huffman
Reencoded coefficients are
an estimation of the original ones
-> Correct that estimation!
6
Lossless JPEG transcoder [2]
JPEG Lossless Transcoder - Decoder
DC Huffman IDPCM
DC
JPEG Level shifting RGB
IQ IDCT
File YCbCr->RGB Image
AC
AC Huffman DeZigZag
-
RGB->YCbCr DCT Q
Lossless Difference
Compression
Level shifting + coefficients
Lossless Difference
Decompression
coefficients
DPCM DC Huffman
RGB JPEG
RGB->YCbCr DCT Q
Image Level shifting File
ZigZag AC Huffman
JPEG Lossless Transcoder - Encoder
7
Results of lossless transcoding
Original image Transcoded image Difference coefficients
(contrast ↑↑)
Lossy reencoding: SNR = 33.2 dB
Lossless transcoding: SNR = ∞
8
Lossless rotation
Different approach: Operate on blocks directly
• No need to requantize -> Lossless
• Faster than decoding/encoding
To rotate an image (90º counterclockwise):
• Rotate whole blocks 1 2 3 3 6 9
(without modifying content) 4 5 6 2 5 8
7 8 9 1 4 7
• Perform the transformation
G(u,v)=F(v,u)(-1)v on each block
□ This rotates the contents in the spatial domain!
• Transpose quantization matrices (they are not symmetric in
general!)
9
Results of lossless rotation [1]
Original image
10
Results of lossless rotation [2]
Those strange
manipulations
actually work!
Losslessly rotated
image
11
Results of lossless rotation [3]
Error when lossy rotation is applied 4 times
This time SNR=18.1 dB
Lossy rotation degrades the quality much more than reencoding!
12
Applications of lossless transcoding
Image editing (allows editors to work with lossy
compressed images without degrading quality)
Image rotation and other basic transformations
(cropping, flipping,…)
Image transmission/storage
13
Thanks
for your attention
Any questions?