JPEG Wikipedia: Felis_silvestris_silvestris.jpg, Michael Gäbler CC BY 3.0
DFT vs. DCT
Image Compression Image compression system Input Image MAPPER QUANTIZER SYMBOL ENCODER Compressed output
Image Compression Image compression system Input Image MAPPER QUANTIZER SYMBOL ENCODER Compressed output
Image Compression Image compression system Input Image MAPPER QUANTIZER SYMBOL ENCODER Compressed output Reduces redundancies Coding, inter-pixel, & psycho-visual Lossy vs. Lossless compression Pre-compression e.g. down-sampling (psycho-visual)
Image Compression Image compression system Input Image MAPPER QUANTIZER SYMBOL ENCODER Compressed output Mapper Inter-pixel redundancy Run-length coding Predictive coding DCT BCT (block coding, microblocks) Zonal vs. Threshold masking DWT (w. Alessandro) Transform vs. Waveform coding
Image Compression Image compression system Input Image MAPPER QUANTIZER SYMBOL ENCODER Compressed output Quantizer Reduces precision of mapper output Lossy e.g. DPCM
Image Compression Image compression system Input Image MAPPER QUANTIZER SYMBOL ENCODER Compressed output Symbol encoder Coding redundancy Huffman coding Multipixel coding
JPEG - 1990 Lossy compression standard (codec) Bit stream output for storage in file format (EXIF or JFIF) Adjustable degree of compression Typically 10x compression Best for natural scenes (DCT!) Up to 65535 x 65535 pixels (4 gigapixels)
JPEG RGB image conversion downsampling Brightness+ 2 color components Why??
JPEG RGB image conversion downsampling Macro block division Brightness+ 2 color components 8x8 Block DCT C(u,v) 8x8 blocks From 8 bit to ~16 bit. Higher precision used for DCT coefficients.
JPEG RGB image conversion downsampling Macro block division Brightness+ 2 color components 8x8 DCT coefficient quantization Block DCT Precomputed tables(!) 50% quality round() C(u,v) Q(u,v) C(u,v) 8x8 blocks Why low in top left, and high in lower right? Wikipedia: JPEG
JPEG RGB image conversion downsampling Macro block division Brightness+ 2 color components 8x8 Ordering coefficients DCT coefficient quantization Block DCT C(u,v) 8x8 blocks round() C(u,v) Q(u,v)
JPEG RGB image conversion downsampling Macro block division Brightness+ 2 color components 8x8 Ordering coefficients DCT coefficient quantization Block DCT Zig-zag pattern round() C(u,v) Q(u,v) C(u,v) 8x8 blocks Why?
Encoding coefficient stream The u,v=0,0 value (DC component) usually varies smoothly between the microblocks DCT coefficients. Natural images. Predictive/Differential coding! C 0 (u,v) C 1 (u,v) C N (u,v)
Encoding coefficient stream The rest of the coefficients (AC components) we can use another encoding on. Which? Example DCT coefficient block after quantization (at 50% quality) Wikipedia: JPEG
Ordering coefficients We can group and send the coefficients in several ways. 1 2 0 0 1 0 0 0 3-1 0 0 You want to transmit these tables. At least two ways: A. Send each table row-by-row in succession. B. Send position-by-position. How does this affect the compressibility?
Ordering coefficients Baseline sequential Baseline progressive Send each table, one at a time, in sequence. Send subset of coefficient(s) from each table at a time.
Ordering coefficients Baseline sequential Baseline progressive Loading Loading
JPEG RGB image conversion downsampling Macro block division Brightness+ 2 color components 8x8 Ordering coefficients DCT coefficient quantization Block DCT C(u,v) 8x8 blocks round() C(u,v) Q(u,v) u,v=0,0 (DC) Predictive coding u,v 0,0 (AC) Run-Length coding Huffman coding Put into bit stream
JPEG compression artifacts Noise around edges (curves/corners) Blocky images Why should you care? Variable compression level in each macroblock(?)
JPEG 2000 More flexible Wavelets! Stores different parts of image at different quality Adaptable macroblock size throughout image Poor adoption