Specialized modalities

ECG waveform visualization

View DICOM ECG waveforms channel by channel and measure intervals with calipers.

DICOM stores an ECG as sampled signal data rather than as an image. dcmage decodes that data and plots each channel, so you can check a waveform file’s content and measure intervals without a separate ECG viewer.

How DICOM stores a waveform

A waveform object keeps its signal in the Waveform Sequence (5400,0100). Each item of the sequence is a multiplex group: a set of channels recorded together at one sampling rate. For each group, the file records:

  • the number of channels (003A,0005) and the number of samples per channel (003A,0010)
  • the sampling frequency in Hz (003A,001A)
  • the sample size and interpretation, for example signed 16-bit (5400,1004 and 5400,1006)
  • a Channel Definition Sequence (003A,0200) with each channel’s label, source, sensitivity and units
  • the Waveform Data (5400,1010) itself, with the samples of all channels interleaved

To turn stored numbers into millivolts, a reader multiplies each sample by the channel sensitivity. The standard also defines a baseline and a sensitivity correction factor per channel.

What dcmage reads

dcmage decodes every multiplex group in the Waveform Sequence. It separates the interleaved samples into channels, reads 8, 16 or 32-bit samples as signed or unsigned according to the sample interpretation, and scales each channel by its Channel Sensitivity (003A,0210). Channel labels come from Channel Label (003A,0203), then from the channel source’s code meaning, then fall back to “Channel 1”, “Channel 2” and so on. Units come from the sensitivity units code.

The waveform tab appears for files whose modality is ECG, such as the 12-Lead ECG Waveform Storage SOP Class.

Steps

  1. Open the ECG file (⌘O).
  2. Open the ECG tab in the right rail. Each multiplex group shows a summary line with its channel count, sampling frequency, duration and sample count, followed by one trace per channel with its label and units.
  3. To measure, press on a trace at the start point, drag to the end point, and release.
  4. Read the caliper badge. It shows the interval in milliseconds, the rate in beats per minute when the interval is longer than 0.05 s, and the signed amplitude change in the channel’s units.
  5. Click ✕ next to the trace to clear the caliper.

Measuring from one R peak to the next gives the RR interval and the heart rate. Measuring across a QRS complex gives its duration.

Limits

  • Channel Baseline (003A,0213) and the Channel Sensitivity Correction Factor (003A,0212) are not applied, so absolute amplitudes can be offset from the values another viewer shows. Intervals are not affected.
  • Each trace is scaled to its own minimum and maximum. There is no ECG paper grid, mm/mV scale or time axis, so read values from the caliper, not from the trace height.
  • There is one caliper per channel, and calipers are not saved with the file.
  • Waveform annotations and labels cannot be added or edited. dcmage does not read or write the Waveform Annotation Sequence (0040,B020), so it is not a labeling tool for ECG datasets.
  • Waveforms cannot be exported as CSV or image files.
  • Files with other waveform modalities, such as hemodynamic or audio waveforms, do not get the ECG tab.

De-identification works on ECG files in the same way as on images: the chosen profile removes or replaces the patient attributes in the header. Review free-text fields yourself, because the profile does not check the text of waveform annotations.

Result

Each channel of the ECG renders as a trace with its label and units. A drag on a trace adds a caliper that reports the interval in milliseconds, the heart rate and the amplitude change, and the ✕ button removes it.