A complete JPEG encoding and decoding implementation in Python with a user-friendly GUI for image compression and quality assessment.
- JPEG encoding and decoding from scratch
- Adjustable compression quality (1-100)
- Quality metrics: PSNR, SSIM, MSE, MAE
- GUI with Tkinter
- Performance tracking (time, memory, compression ratio)
- Python 3.7+
- OpenCV (
cv2) - NumPy
- Matplotlib
- scikit-image
- Numba
pip install opencv-python numpy matplotlib scikit-image numba
python main.py
This launches the Tkinter GUI with the following controls:
- JPEG Encode File: Select an image file (BMP, JPEG, PNG) and save as compressed JPEG
- JPEG Decode File: Select a JPEG file and decompress to standard format
- Quality Slider: Adjust compression quality (1-100)
- Low values (1-30): High compression, lower quality
- Medium values (40-70): Balanced compression and quality
- High values (80-100): Better quality, larger file size
from jpeg_encoder import JPEGEncoder import cv2 # Initialize encoder with quality setting encoder = JPEGEncoder(quality=80) # Load and prepare image image = encoder.load_image('input.jpg') prepared = encoder.prepare_image(image) # Convert to YCrCb color space ycrcb = cv2.cvtColor(prepared, cv2.COLOR_BGR2YCrCb) # Encode and save encoder.encode(ycrcb, 'output.jpg')
from jpeg_decoder import JPEGDecoder import cv2 # Initialize decoder decoder = JPEGDecoder() # Decode JPEG file decoded_image = decoder.decode('input.jpg', 'output.jpeg')
from main import ImageQualityAssessor import cv2 import numpy as np assessor = ImageQualityAssessor() original = cv2.imread('original.jpg').astype(np.float32) / 255.0 compressed = cv2.imread('compressed.jpg').astype(np.float32) / 255.0 metrics = assessor.assess_quality(original, compressed) print(f"PSNR: {metrics['PSNR']:.4f}") print(f"SSIM: {metrics['SSIM']:.4f}")
Color conversion → Block splitting → DCT → Quantization → Zigzag scan → Huffman encoding → File output
Header parsing → Huffman decoding → Inverse quantization → IDCT → Color conversion → Image output
The quality slider (1-100) scales quantization tables. Higher values preserve more detail but increase file size.
The application tracks compression ratio, processing time, memory usage, and quality metrics (PSNR, SSIM, MSE, MAE). All data is automatically saved to performance_metrics.csv.
This project is provided as-is for educational and research purposes.