Python implementation of SSIMULACRA2 image quality metric
Project description
SSIMULACRA2
A Python implementation of SSIMULACRA2 (Structural SIMilarity Unveiling Local And Compression Related Artifacts) - a perceptual image quality metric that helps you detect and measure compression artifacts.
What is SSIMULACRA2?
SSIMULACRA2 is a full-reference image quality metric designed to mimic how humans perceive image quality, with a special focus on compression artifacts. This Python package offers a clean and efficient implementation that closely follows the original C++ algorithm from the JPEG XL project.
Want to know if your compressed images still look good? SSIMULACRA2 gives you a score from 100 (perfect quality) down to negative values (terrible quality) to help you decide:
- Negative scores: You've gone too far! Extremely low quality with very strong distortion
- 10: Very low quality - comparable to what you'd get from cjxl -d 14 / -q 12 or libjpeg-turbo quality 14, 4:2:0
- 30: Low quality - similar to output from cjxl -d 9 / -q 20 or libjpeg-turbo quality 20, 4:2:0
- 50: Medium quality - like what cjxl -d 5 / -q 45 or libjpeg-turbo quality 35, 4:2:0 would produce
- 70: High quality - you'd have trouble noticing artifacts without comparing to the original
- 80: Very high quality - most people couldn't tell the difference from the original in a side-by-side comparison
- 85: Excellent quality - virtually impossible to distinguish from the original in a flip test
- 90: Visually lossless - even in a flicker test at 1:1, you can't tell the difference
- 100: Mathematically lossless - pixel-perfect match to the original
Getting Started
Installation
It's easy to install via pip:
pip install ssimulacra2
Usage
Command Line
Simple and straightforward:
# Basic usage - get the score with interpretation
ssymulacra2 original.png compressed.png
# Just the score, no extra info
ssymulacra2 original.png compressed.png --quiet
Python
Import directly into your Python projects:
from ssimulacra2 import compute_ssimulacra2, compute_ssimulacra2_with_alpha
# Basic usage
score = compute_ssimulacra2("original.png", "compressed.png")
print(f"Quality score: {score:.2f}")
# For images with alpha channel (automatically uses both dark and light backgrounds)
score = compute_ssimulacra2_with_alpha("original.png", "compressed.png")
print(f"Quality score with alpha: {score:.2f}")
Goal
This implementation aims to closely match the original C++ algorithm, providing results consistent with the reference code.
Requirements
You'll need:
- Python 3.8+
- NumPy
- SciPy
- Pillow (PIL)
Performance
Performance benchmarks for a 1024x768 image:
| Version | Mean [s] | Min [s] | Max [s] | Relative |
|---|---|---|---|---|
v0.1.0 |
22.456 ± 0.144 | 22.245 | 22.680 | 33.29 ± 0.59 |
v0.2.0 |
0.674 ± 0.011 | 0.661 | 0.696 | 1.00 |
HEAD |
0.689 ± 0.028 | 0.666 | 0.764 | 1.02 ± 0.05 |
The dramatic speed improvement from v0.1.0 to v0.2.0 comes from better leveraging NumPy's vectorized operations. Note that the slight differences in results between versions are due to ongoing experimentation with Gaussian blur parameters to better match the original implementation.
License
This project is licensed under the BSD 3-Clause License - see the LICENSE file for details.
Acknowledgements
This implementation is based on the original SSIMULACRA2 algorithm developed for the JPEG XL project.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ssimulacra2-0.2.2.tar.gz.
File metadata
- Download URL: ssimulacra2-0.2.2.tar.gz
- Upload date:
- Size: 10.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a7341122afa38398cf0a212d86bd427b97caacda4a66140ae7175ccba4ebfd15
|
|
| MD5 |
f88f217f2b01f8f91a5c54617d369332
|
|
| BLAKE2b-256 |
6d36ddcfbe71218a06e6e6dc3fe423ae489ae50b31a211a6a894095295ad639d
|
File details
Details for the file ssimulacra2-0.2.2-py3-none-any.whl.
File metadata
- Download URL: ssimulacra2-0.2.2-py3-none-any.whl
- Upload date:
- Size: 11.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4f5505806810b965577ca6e2d97fd817d40912a9916aec97c0f79fb981b36732
|
|
| MD5 |
2700bc74901674c58997168dcb25d793
|
|
| BLAKE2b-256 |
b8e16866a3dbe5fb47f08149c79ae9f85533079de2fd8c83f465287f411f25d5
|