brandonmpetty / Doxa

A Local Adaptive Thresholding framework for image binarization written in C++, with JS and Python bindings. Implementing: Otsu, Bernsen, Niblack, Sauvola, Wolf, Gatos, NICK, Su, T.R. Singh, WAN, ISauvola, Bataineh, Chan and Shafait.
https://brandonmpetty.github.io/Doxa/WebAssembly
Creative Commons Zero v1.0 Universal
167 stars 37 forks source link
binarization

Δoxa Binarization Framework

Introduction

ΔBF is an image binarization framework which focuses primarily 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. It is written in C++ but supports multiple language bindings.

Algorithms

Optimizations

Performance Metrics

Native Image Support

Overview

The goal of this library is to provide the building blocks one might use to advance the state of handwritten manuscript binarization. What sets this binarization library apart is that it is intended to be used by those interested in experimenting with their own algorithms and enhancements. Instead of being relegated to MATLAB, or obfuscated by mathematics in a research paper, a lot of effort has gone into exposing these binarization techniques in an open and transparent way. A key objective in designing this framework was to make it modular and as easy to use as possible, without sacrificing speed and without depending heavily on 3rd party frameworks. This library is also heavily unit tested to help ensure quality, and to quickly spot problems after experimenting with the codebase.

Example

This short example shows you how easy it is to use ΔBF to process an image.

// Read a 32-bit color image and automatically convert to 8-bit gray scale
Image image = PNM::Read(R"(C:\MyImage.pam)");

// Use a binarization algorithm to convert it into black and white
const Parameters parameters({ {"window", 25}, {"k", 0.10} });
Image imageSauvola = Sauvola::ToBinaryImage(image, parameters);

// Save the processed image
PNM::Write(imageSauvola, R"(C:\MyImage-Sauvola.pam)");

ΔBF is incredibly light weight, being a header-only library. It can integrate easily with other 3rd party C++ frameworks like OpenCV and Qt. Examples can be found under the Demo folder.

Performance Analysis

Another thing that sets ΔBF apart is its focus on binarization performance. This makes it incredibly simple to see how your changes affect the overall quality of an algorithm.

Language Bindings

Experimental WASM support has been added in order to expose ΔBF to the web, as well as NodeJs. For Python, an experimental DoxaPy library has been developed. Examples of how to use each binding are provided in the Demo folder.

A Live Demo has been created to highlight some of what ΔBF is capable of on the web.

License

CC0 - Brandon M. Petty, 2023

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