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:
- 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 the complete license text.
Metadata
Release files for signal-digitizer 0.1.6
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.6.tar.gz | 13.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| signal_digitizer-0.1.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 25.5 kB
Release files / signal_digitizer-0.1.6.tar.gz
| Download URL | signal_digitizer-0.1.6.tar.gz |
|---|---|
| Size | 13.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3fe00349dfe8195ae647b12ce225441252da88865656353a653b89c8056f1bf6
|
|
BLAKE2b-256 checksum How to use checksums |
d5f8d08d6664fe430b35e448787f4e40bbed1ebafc91122f85678101fb678843
|
| 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.6-py3-none-any.whl
| Download URL | signal_digitizer-0.1.6-py3-none-any.whl |
|---|---|
| Size | 12.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
47843318988a45043fa07604b64bae4da00abe924f20fd494c1b0829ca4f5952
|
|
BLAKE2b-256 checksum How to use checksums |
d97d91f2c29f4fb45d22489ca3b791ee65574a190cc5636f8b519142420e5cc6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.11.16
|