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.
Package Information
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:
- Page rendering – The input PDF page is converted into an image.
- Skew correction – Page rotation is estimated and corrected.
- Grid detection – Grid lines are identified using image-processing techniques.
- Calibration – Grid spacing is used to convert pixel coordinates into data units.
- Trace extraction – The plotted signal is separated from the chart image.
- Signal generation – The extracted trace is converted into calibrated
xandyvalues.
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.9
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| signal_digitizer-0.1.9.tar.gz | 13.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| signal_digitizer-0.1.9-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 25.8 kB
Release files / signal_digitizer-0.1.9.tar.gz
| Download URL | signal_digitizer-0.1.9.tar.gz |
|---|---|
| Size | 13.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5c10a20f8351495653ad5528f76e69975d1b6e76e46e94d2fe1c02faad1d6677
|
|
BLAKE2b-256 checksum How to use checksums |
f0c3d94fa653cb217cc8f59541aaa4917d65d7e8255eaf15e7a1ef5eced24c12
|
| 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.9-py3-none-any.whl
| Download URL | signal_digitizer-0.1.9-py3-none-any.whl |
|---|---|
| Size | 12.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ab3727eb75224775ae3d7ee4ca9dbe36a884c18c9d0f954a9aeee0254aa8f7e8
|
|
BLAKE2b-256 checksum How to use checksums |
3f7dd3df05297fef0bf42df38195483e84653e7e8e28e9b2a798681316125fc3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.11.16
|