JPEG is a widely used lossy image compression algorithm in electronic devices and applications. It reduces image file size at the cost of some image quality.
Input: Digital image (represented as a matrix of pixel values) Output: Compressed image file (e.g., JPEG, JPG)
- Image storage on electronic devices and websites
- High-speed image processing applications
- Medical image compression (X-rays, MRIs)
- Divide the image into 8x8 pixel blocks
- Apply Discrete Cosine Transform (DCT) to each block
- Use filters to remove less important frequency information
- Apply entropy coding (Huffman coding) for data compression
- Store compressed 8x8 pixel blocks sequentially
Accelerating the JPEG algorithm is crucial for applications requiring fast image processing, such as video processing, continuous shooting in digital cameras, and real-time applications.
- JPEG is a sequential algorithm, limiting GPU acceleration to only certain parts
- Uncertainty about JPEG being the best compression algorithm for GPU processing
The project will be implemented in Python and executed on Google Colab. We will research JPEG compression from online resources (viblo, GitHub, etc.) and gradually build a parallelized and optimized version.
Useful resources:
- Implement JPEG compression algorithm
- Produce lower quality but smaller file size images while preserving important features
- Achieve at least 2x speedup using GPU parallelization compared to sequential algorithm
- Develop an improved second version with better results
- Create a user-friendly application interface
- Implement sequential version of JPEG compression
- Parallelize some steps of the algorithm
- Produce compressed images with slightly reduced quality and smaller file size