In our recent Eurographics paper, we demonstrated that variable rate image compression algorithms can be successfully applied to texture compression. As a proof of concept, we focused on JPEG due to its simplicity. Now that the foundation is in place, we are looking to explore more optimized variable rate approaches. Some ideas from existing image compression algorithms such as JPEG XL can be borrowed:
Variable DCT block sizes — Standard JPEG uses fixed 8×8 texel blocks for the discrete cosine transform. JPEG XL adapts block sizes to local image content: smooth regions can use larger blocks, significantly improving compression efficiency.
Adaptive quantisation — JPEG applies a single quantisation matrix across the entire image. Content-aware quantization matrices can yield better compression quality.
XYB colour space — Unlike JPEG's YCbCr, JPEG XL uses the XYB colour space, which offers better perceptual quality at the same file size. However, it is incompatible with 4:2:0 chroma subsampling, which changes the block layout — making it worth evaluating whether the quality trade-off justifies the added complexity.
Asymmetric Numeral Systems (ANS) — JPEG uses Huffman coding to encode transform coefficients; JPEG XL uses ANS instead. GPU-friendly ANS implementations exist, but require careful design to be efficient.
Parallel encoding — Our current encoding pipeline runs on the CPU by partially decoding a JPEG stream. This is a known bottleneck and a strong candidate for parallelisation.
Your own idea — Have a different angle on variable rate image compression? Just write me and we can discuss it!
Requirements
- Knowledge of English language (source code comments and final report should be in English)
- Knowledge of C++ and CUDA
- More knowledge is always advantageous
Environment
The project should be implemented on top of your existing JPEG textures implementation: Github.