DOI: 10.5281/zenodo.15484518
title: Multiple Synthetic ECG Image Datasets for Digitization, Lead region and lead name Detection, and Signal Segmentation

description: ECG Image Dataset for Digitization, Detection, and Segmentation

Multiple ECG datasets for deep learning-based tasks, including ECG digitization, lead region and lead name detection, and pixel-wise waveform segmentation. A detailed description is provided in our paper. You can also use our open-source Python framework to generate large-scale, customizable ECG image datasets.

📄 Paper: An Open-Source Python Framework and Synthetic ECG Image Datasets for Digitization, Lead and Lead Name Detection, and Overlapping Waveform Segmentation (To appear)

🔗 Python framework: https://github.com/rezakarbasi/ecg-image-and-signal-dataset

🔗 Arxiv link of the paper: https://doi.org/10.48550/arXiv.2506.06315

📢 Citation

If you use this dataset, please cite both the dataset and the paper:

Dataset:  Rahimi, M., Karbasi, R., & Vahabie, A. H. (2025). An Open-Source Python Framework and Synthetic ECG Image Datasets for Digitization, Lead and Lead Name Detection, and Overlapping Signal Segmentation. University of Tehran. Zenodo dataset url.

Paper: (To be updated uponpublication)

 

📊 Dataset Summary




Task
Format/Annotations
Sample Size


ECG Digitization
ECG images + ground truth signals
2000


Lead & Lead Name Detection
ECG images + Bounding boxes (YOLO format)
2000


Segmentation (Normal)
single leads + masks + ground truth signals
20000


Segmentation (Overlapping)
Overlapping leads + clean binary masks
100(with operlap), 185(non-overlap)




 

📦 Key Features



Realistic ECG image and ground truth signals generated in multiple layouts: 3x1, 3x4, 6x2, 12x1

YOLO-format bounding boxes for lead and lead name detection

Pixel-level segmentation masks compatible with U-Net models

Support for overlapping signal segmentation with clean, non-overlapping masks

Paired time-series ground truth signals for all segmentation samples


 
description: .├── detection-dataset│   ├── images│   │   ├── 0_3by1.jpg│   │   ├── ...│   └── labels│       ├── 0_3by1.txt│       └── ...├── digitization-dataset│   ├── 0_3by1│   │   ├── 0_3by1.jpg│   │   ├── 0_3by1_lead_0.json│   │   ├── 0_3by1_lead_1.json│   │   └── 0_3by1_lead_2.json│   └── ...├── overlap-dataset│   ├── with-overlap│   │   ├── image│   │   │   ├── 699_3by4_lead_10.bmp│   │   │   └── ...│       ├── mask-bmp│   │   │   ├── 699_3by4_lead_10.bmp│   │   │   └── ...│   │   ├── mask-png│   │   │   ├── 699_3by4_lead_10.png│   │   │   └── ...│   │   └── signal-json│   │       ├── 699_3by4_lead_10.json│   │       └── ...│   └── without-overlap│       ├── image│       │   ├── 699_3by4_lead_0.png│       │   └── ...│       ├── mask-bmp│       │   ├── 699_3by4_lead_0.bmp│       │   └── ...│       ├── mask-png│       │   ├── 699_3by4_lead_0.png│       │   └── ...│       └── signal-json│           ├── 699_3by4_lead_0.json│           └── ...├── segmentation│   ├── image│   │   ├── 0_3by1_lead_0.png│   │   └── ...│   ├── mask-bmp│   │   ├── 0_3by1_lead_0.bmp│   │   └── ...│   ├── mask-png│   │   ├── 0_3by1_lead_0.png│   │   └── ...│   └── signal-json│       ├── 0_3by1_lead_0.json│       └── ...└── logs.json