Skip to main content

signal-digitizer logo

signal-digitizer

signal-digitizer is a Python library for converting scanned charts and grid-based plots into calibrated one-dimensional signals. It is designed for applications such as ECG traces, laboratory recorder outputs, and other plotted signals stored as PDF documents.

The library processes a chart by rendering the page, correcting skew, detecting the grid, extracting the signal trace, and converting pixel coordinates into calibrated signal values.

Installation

pip install signal-digitizer

Quick Start

import signal_digitizer as sd

x, y = sd.digitize(
    "chart.pdf",
    unit_per_vgap=1.0,
    unit_per_hgap=1.0,
)

The returned x and y arrays contain the extracted and calibrated signal coordinates.

Command Line Usage

signal-digitizer chart.pdf -o signal.csv

This processes the input PDF and saves the extracted signal to a CSV file.

How It Works

The digitization workflow consists of the following stages:

  1. Page rendering – The input PDF page is converted into an image.
  2. Skew correction – Page rotation is estimated and corrected.
  3. Grid detection – Grid lines are identified using image-processing techniques.
  4. Calibration – Grid spacing is used to convert pixel coordinates into data units.
  5. Trace extraction – The plotted signal is separated from the chart image.
  6. Signal generation – The extracted trace is converted into calibrated x and y values.

Main API

digitize()

Processes a PDF file through the complete signal digitization pipeline.

x, y = sd.digitize(
    "chart.pdf",
    unit_per_vgap=1.0,
    unit_per_hgap=1.0,
)

digitize_page()

Processes an already opened PyMuPDF page.

import pymupdf
import signal_digitizer as sd

document = pymupdf.open("chart.pdf")

x, y = sd.digitize_page(
    document[0],
    unit_per_vgap=1.0,
    unit_per_hgap=1.0,
)

digitize_image()

Processes an image that has already been loaded as a NumPy array.

x, y = sd.digitize_image(
    image_array,
    unit_per_vgap=1.0,
    unit_per_hgap=1.0,
)

Core Functionality

The library includes functionality for:

  • PDF page rendering
  • Skew estimation and correction
  • Grid-line detection
  • Axis calibration
  • Signal trace extraction
  • Conversion of extracted traces into calibrated signals
  • Signal validation using Pearson correlation and RMSE

Signal Validation

If a reference signal is available, the extracted signal can be evaluated using:

result = sd.validate_signal(y, reference_signal)
print(result)

The validation result includes correlation and error-based measures for comparing the extracted signal with the reference.

Requirements

signal-digitizer requires Python 3.9 or later.

Its core dependencies include:

  • PyMuPDF
  • NumPy
  • OpenCV
  • SciPy

These dependencies are installed automatically with the package.

Authors

  • Manoj Kumar C S
  • V N Manjunath Aradhya
  • Nikhil D Bharadwaj

Maintainers

  • Manoj Kumar C S
  • Nikhil D Bharadwaj

License

This project is distributed under the MIT License. See the LICENSE file for details.

Metadata

Release files for signal-digitizer 0.1.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for signal-digitizer 0.1.8
File Size Uploaded
signal_digitizer-0.1.8.tar.gz 13.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for signal-digitizer 0.1.8
File Interpreter ABI Platform
signal_digitizer-0.1.8-py3-none-any.whl Python 3 none any Details

Total release size: 25.6 kB

Release files / signal_digitizer-0.1.8.tar.gz

Download URL signal_digitizer-0.1.8.tar.gz
Size 13.5 kB
Tags Source
SHA-256 checksum
How to use checksums
68b751fcad9f3538095e0f7f383b024f894cb8b3902cc039d2015070441dcf7d
BLAKE2b-256 checksum
How to use checksums
55960621da3afd78346ad9af6a22d093601108cedcaaab9c02ac7c5b3910b203
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.11.16

Release files / signal_digitizer-0.1.8-py3-none-any.whl

Download URL signal_digitizer-0.1.8-py3-none-any.whl
Size 12.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
769715f707b93e78ee2487cbd796991bc04a48dbf6adf1255d18e63672a267fc
BLAKE2b-256 checksum
How to use checksums
e2688fe06061e9a33ba47fe2431c6ead04cee61b7fff6b15c861f4c1e8c50a01
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.11.16

Release history Release notifications | RSS feed

0.2.0

2 release files

0.1.13

2 release files

0.1.12

2 release files

0.1.11

2 release files

0.1.10

2 release files

0.1.9

2 release files

This release

0.1.8 This release

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page