Skip to main content

Gradient Naturalization for image quality assessment

Project description

GraNatPy - Gradient Naturalization for Image Enhancement and Evaluation

This is a Python implementation of the paper:

Y. Gong and I. F. Sbalzarini. A natural-scene gradient distribution prior and its application in light-microscopy image processing. IEEE Journal of Selected Topics in Signal Processing, 10(1):99–114, 2016.

The original code can be found here.

In short, Naturalness is a gradient-based metric that can be computed for an arbitrary image; Naturalization is the method that can enhance images based on this metric.

The Naturalness metric reflects the similarity in the gradient distribution of a sample image to a gradient distribution learned from large image datasets. The closer the Naturalness is to 1, the closer the image is to what we perceive as natural. This is useful for evaluating the perceived quality of synthetically created images.

From their abstract:

[...] We argue here that the gradient distribution of natural-scene images may provide a versatile and well-founded prior for light-microscopy images that does not impose assumptions about the geometry of the ground-truth signal, but only about its gradient spectrum. We provide motivation for this choice from different points of view, and we illustrate the resulting regularizer for use on light-microscopy images. We provide a simple parametric model for the resulting prior, leading to efficiently solvable variational problems. We demonstrate the use of these models and solvers in a variety of common image-processing tasks, including contrast enhancement, noise-level estimation, denoising, blind deconvolution, and dehazing. [...]

The GraNatPy package contains the following classes and functions:

  • GraNat: convenience class wrapping the full pipeline: loading, naturalization, visualization and saving
  • naturalize_rgb_image: core function to naturalize an RGB or grayscale image
  • naturalize_single_channel: core function to naturalize a single image channel
  • compute_all_metrics: compute and print the dNf (delta Naturalness factor), MSE, PSNR, SSIM and NRMSE between two images
  • compare_images: compare a reference image against a set of similar (e.g., synthetic) images and print a summary
  • overlay_naturalness_heatmap: visualize per-region naturalness as a heatmap overlay on the original image

Installation

The simplest way is to install the package via pip:

pip install granatpy

Alternatively, clone the repository and install in editable mode:

git clone https://github.com/casus/GraNatPy
cd granatpy
pip install -e .

Quick Start

from granatpy import GraNat

# Load, naturalize and save
GraNat.load_image("photo.tif").naturalize(show=True).save("output.png")

# Visualize naturalness heatmap
from granatpy import overlay_naturalness_heatmap
import imageio.v3 as imageio
import numpy as np

img = imageio.imread("photo.tif")
fig, ax, heatmap = overlay_naturalness_heatmap(img, grid_rows=20, grid_cols=30)

# Compare images
from granatpy import compare_images

images = {
    "photo_low.tif",
    "photo_high.tif",
}
real = "photo_real.tif"
results = compare_images(real, images)

You can also find an example notebook in example/example.ipynb

License

This project is licensed under the GPL-3.0 License. See LICENSE for details.

For attribution of example images, see ATTRIBUTION.md.

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

granatpy-0.1.1.tar.gz (27.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

granatpy-0.1.1-py3-none-any.whl (25.4 kB view details)

Uploaded Python 3

File details

Details for the file granatpy-0.1.1.tar.gz.

File metadata

  • Download URL: granatpy-0.1.1.tar.gz
  • Upload date:
  • Size: 27.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for granatpy-0.1.1.tar.gz
Algorithm Hash digest
SHA256 0703c4895f9304426f7b55b5a892a06ebdbb9920300638ea3bc90778c15aab98
MD5 deb510679b77a7e4ed0bd39df3964ebb
BLAKE2b-256 62b39852e3b18f7e10da035f19c3e3c462c26e32a1cbe09616e63bff74c93495

See more details on using hashes here.

Provenance

The following attestation bundles were made for granatpy-0.1.1.tar.gz:

Publisher: python-publish.yml on casus/GraNatPy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file granatpy-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: granatpy-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 25.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for granatpy-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5d010ab082b79adbe96261f71b85b44c5a1a430b0c89e0a983901e57b9fbda81
MD5 f5bbe15e0497a2aa5a14f503d9fad8b1
BLAKE2b-256 a927ff4eaf7dfe07279056a760b566e85bc6773876fe692c08ac047c3345c42a

See more details on using hashes here.

Provenance

The following attestation bundles were made for granatpy-0.1.1-py3-none-any.whl:

Publisher: python-publish.yml on casus/GraNatPy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page