Skip to main content

An image binarization library focussing on local adaptive thresholding

Project description

Δoxa Binarization Framework - Python

Introduction

DoxaPy is an image binarization library focusing on local adaptive thresholding algorithms. In English, this means that it has the ability to turn a color or gray scale image into a black and white image.

Algorithms

  • Otsu - "A threshold selection method from gray-level histograms", 1979.
  • Bernsen - "Dynamic thresholding of gray-level images", 1986.
  • Niblack - "An Introduction to Digital Image Processing", 1986.
  • Sauvola - "Adaptive document image binarization", 1999.
  • Wolf - "Extraction and Recognition of Artificial Text in Multimedia Documents", 2003.
  • Gatos - "Adaptive degraded document image binarization", 2005. (Partial)
  • NICK - "Comparison of Niblack inspired Binarization methods for ancient documents", 2009.
  • AdOtsu - "A multi-scale framework for adaptive binarization of degraded document images", 2010.
  • Su - "Binarization of Historical Document Images Using the Local Maximum and Minimum", 2010.
  • T.R. Singh - "A New local Adaptive Thresholding Technique in Binarization", 2011.
  • Bataineh - "An adaptive local binarization method for document images based on a novel thresholding method and dynamic windows", 2011. (unreproducible)
  • Phansalkar - "Adaptive Local Thresholding for Detection of Nuclei in Diversely Stained Cytology Images", 2011.
  • ISauvola - "ISauvola: Improved Sauvola's Algorithm for Document Image Binarization", 2016.
  • WAN - "Binarization of Document Image Using Optimum Threshold Modification", 2018.

Optimizations

  • Shafait - "Efficient Implementation of Local Adaptive Thresholding Techniques Using Integral Images", 2008.
  • Petty - An algorithm for efficiently calculating the min and max of a local window. Unpublished, 2019.
  • Chan - "Memory-efficient and fast implementation of local adaptive binarization methods", 2019.
  • SIMD - SSE2, ARM NEON

Performance Metrics

  • Overall Accuracy
  • F-Measure, Precision, Recall
  • Pseudo F-Measure, Precision, Recall - "Performance Evaluation Methodology for Historical Document Image Binarization", 2013.
  • Peak Signal-To-Noise Ratio (PSNR)
  • Negative Rate Metric (NRM)
  • Matthews Correlation Coefficient (MCC)
  • Distance-Reciprocal Distortion Measure (DRDM) - "An Objective Distortion Measure for Binary Document Images Based on Human Visual Perception", 2002.

Overview

DoxaPy uses the Δoxa Binarization Framework for quickly processing python Image files. It is comprised of three major sets of algorithms: Color to Grayscale, Grayscale to Binary, and Performance Metrics. It can be used as a full DIBCO Metrics replacement that is significantly smaller, faster, and easier to integrate into existing projects.

Example

This short demo uses DoxaPy to read in a color image, converts it to binary, and then compares it to a Ground Truth image in order to calculate performance.

from PIL import Image
import numpy as np
import doxapy


def read_image(file, algorithm=doxapy.GrayscaleAlgorithms.MEAN):
    """Read an image.  If its color, use one of our many Grayscale algorithms to convert it."""
    image = Image.open(file)

    # If already in grayscale or binary, do not convert it
    if image.mode == 'L':
        return np.array(image)
    
    # Read the color image
    rgb_image = np.array(image.convert('RGB') if image.mode not in ('RGB', 'RGBA') else image)

    # Use Doxa to convert grayscale
    return doxapy.to_grayscale(algorithm, rgb_image)


# Read our target image and convert it to grayscale
grayscale_image = read_image("2JohnC1V3.png")

# Convert the grayscale image to a binary image (algorithm parameters optional)
binary_image = doxapy.to_binary(doxapy.Binarization.Algorithms.SAUVOLA, grayscale_image, {"window": 75, "k": 0.2})

# Calculate the binarization performance using a Ground Truth image
groundtruth_image = read_image("2JohnC1V3-GroundTruth.png")
performance = doxapy.calculate_performance(groundtruth_image, binary_image)
print(performance)

# Display our resulting image
Image.fromarray(binary_image).show()

DoxaPy Notebook

For more details, open the DoxaPy Notebook and to get an interactive demo.

Building and Test

DoxaPy supports 64b Linux, Windows, and Mac OSX on Python 3.x. Starting with DoxaPy 0.9.4, Python 3.12 and above are supported with full ABI compatibility. This means that new versions of DoxaPy will only be published due to feature enhancements, not Python version support.

Build from Project Root

# From the Doxa project root
git clone --depth 1 https://github.com/brandonmpetty/Doxa.git
cd Doxa
cmake --preset python
cmake --build build-python --config Release
pip install -r Bindings/Python/requirements.txt
ctest --test-dir build-python -C Release

Local Package Build

python -m build

Local Wheel Build

pip wheel . --no-deps

License

CC0 - Brandon M. Petty, 2026

To the extent possible under law, the author(s) have dedicated all copyright and related and neighboring rights to this software to the public domain worldwide. This software is distributed without any warranty.

View Online

"Freely you have received; freely give." - Matt 10:8

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

doxapy-0.9.6.tar.gz (49.5 kB view details)

Uploaded Source

Built Distributions

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

doxapy-0.9.6-cp312-abi3-win_amd64.whl (114.3 kB view details)

Uploaded CPython 3.12+Windows x86-64

doxapy-0.9.6-cp312-abi3-musllinux_1_2_x86_64.whl (585.2 kB view details)

Uploaded CPython 3.12+musllinux: musl 1.2+ x86-64

doxapy-0.9.6-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (165.2 kB view details)

Uploaded CPython 3.12+manylinux: glibc 2.17+ x86-64

doxapy-0.9.6-cp312-abi3-macosx_11_0_arm64.whl (106.3 kB view details)

Uploaded CPython 3.12+macOS 11.0+ ARM64

File details

Details for the file doxapy-0.9.6.tar.gz.

File metadata

  • Download URL: doxapy-0.9.6.tar.gz
  • Upload date:
  • Size: 49.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for doxapy-0.9.6.tar.gz
Algorithm Hash digest
SHA256 17d919e4e29abbfb617fa1137e3b857aaa4e7db44e739a73b0a522f00ae55579
MD5 4950067f1ee8e275d794154d58d9dec1
BLAKE2b-256 4e6041660e8da72994fc740ffa62399fcf9ae08f95a79095eda07235bf46ae1f

See more details on using hashes here.

File details

Details for the file doxapy-0.9.6-cp312-abi3-win_amd64.whl.

File metadata

  • Download URL: doxapy-0.9.6-cp312-abi3-win_amd64.whl
  • Upload date:
  • Size: 114.3 kB
  • Tags: CPython 3.12+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for doxapy-0.9.6-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 f0c49f7cc2fc8650352e0222052a662428c1ae11d241e83e7ea20c4e14710c98
MD5 6d09d02ff6bc8adb621e9cd7241a21d5
BLAKE2b-256 1075e27c5225c40220f119426f548d5954eec24d84413d20aa5c87fa29ee3f00

See more details on using hashes here.

File details

Details for the file doxapy-0.9.6-cp312-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for doxapy-0.9.6-cp312-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b54e878aaac232efa03a6f78d3efe47ed565f7b25e4d3a851a81ec746c347e9b
MD5 79036c788a54915a7c816e8c62ef6e3e
BLAKE2b-256 d2deddc340b014f3fdfba893db2445394706fe616fc3678c8edad66fbc6bdd6f

See more details on using hashes here.

File details

Details for the file doxapy-0.9.6-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for doxapy-0.9.6-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 df9db6ccca5772f8d57614df4cec0829a4bb1c49a25d8f3e4a8e98dc2072274f
MD5 ce0cd4a1c1bef220545548a9f561c975
BLAKE2b-256 54afdc3a02eccba7490f5d7c5f7487024c3d4c474147d0b595b0089789b0238f

See more details on using hashes here.

File details

Details for the file doxapy-0.9.6-cp312-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for doxapy-0.9.6-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a0dee80001fce4081bbe1555709eb732e454ab877af198c4274bb0b0e4057f15
MD5 617d97d915ef7a7f49b556164633f65b
BLAKE2b-256 59b5d8fc22377d75c7b4be00594b94d6310d3020fd89d92caaf8aea0ac163876

See more details on using hashes here.

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