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.
  • Wellner - "Interacting with Paper on the DigitalDesk", 1994.
  • Sauvola - "Adaptive document image binarization", 1999.
  • Wolf - "Extraction and Recognition of Artificial Text in Multimedia Documents", 2003.
  • Feng - "Adaptive Binarization Method for Document Image Analysis", 2004.
  • Gatos - "Adaptive degraded document image binarization", 2005. (Partial)
  • Bradley - "Adaptive Thresholding Using the Integral Image", 2007.
  • 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.7.tar.gz (55.4 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.7-cp312-abi3-win_amd64.whl (122.0 kB view details)

Uploaded CPython 3.12+Windows x86-64

doxapy-0.9.7-cp312-abi3-musllinux_1_2_x86_64.whl (597.7 kB view details)

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

doxapy-0.9.7-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (176.5 kB view details)

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

doxapy-0.9.7-cp312-abi3-macosx_11_0_arm64.whl (111.2 kB view details)

Uploaded CPython 3.12+macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: doxapy-0.9.7.tar.gz
  • Upload date:
  • Size: 55.4 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.7.tar.gz
Algorithm Hash digest
SHA256 8bb85e18071405af9eb14fd235300940a334ce7edf0d78a3e898ad30d6c590c8
MD5 dd24c2a2a8e8f3dc32c00dbbbd1ab24d
BLAKE2b-256 c1d602b3e232c56ef57691bbbe085327a2fe3e68ec064bf2334e1dcd3da5c5d6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: doxapy-0.9.7-cp312-abi3-win_amd64.whl
  • Upload date:
  • Size: 122.0 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.7-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 c5affc015b637276d9894881f7638d05d7f154154faeba68bfd64be232213fd5
MD5 48a672009dcbb1a9620d68474c20d3c9
BLAKE2b-256 14de4fc9b74529893b5fe1db242ff8b6bf213de9ffe9aedc5761f433d95990b4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for doxapy-0.9.7-cp312-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1c1ccb55be4699c5c50715fbca805ee37edab0c26bb166d3988c64d3c853efd4
MD5 f1f4a43223dc2d58f09ca63f627c66ac
BLAKE2b-256 2f46aa8aac3ab06f48b313e23aff6a078535c7ec7e2228a86004d2cd83f5a54c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for doxapy-0.9.7-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7c7d00a4d34d020801c19371ba8bf3bafb4c9ceb22265d67415aae025718188c
MD5 80e947ecfeb657affe919174afd72a42
BLAKE2b-256 4b176580bfc66f06ecd6cfe397dcb0ff3b620c09b3d01b6e271c0d517db95566

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for doxapy-0.9.7-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 174a32c16f0986a203776acbe88e8d152376c8fa90f1e81b7301b2b39a57f4d5
MD5 36e6f125323aa8f5543aa22d3b615e05
BLAKE2b-256 5e6c73c925dba40662a7f0e1907753fd2d9434e118a2a5f4b065b3d2613b7777

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