Send comments on this topic. | Back to Introduction - All Topics | Help Version 15.12.21
Working with DICOM Waveforms

The DICOM standard supports waveform storage and communication; this includes hemodynamic curve data, cardiac electrophysiology, electrocardiography (ECG) and audio signals (WAV files). A waveform consists of one or more multiplex groups, each encoded into an item in the "Waveform Sequence" (5400,0100). All channels within a multiplex group are synchronously digitized at a common sampling frequency. The waveform samples can be 8 or 16 bit, with data representation as signed , unsigned , mu-law or A-law. DICOM also supports waveform annotations, which are typically generated as part of the data acquisition process, such as waveform maxima and minima, or the labeling of particular stimuli.

LEADTOOLS waveform support is comprehensive and handles the various features supported by the standard. The DicomWaveformGroup class encapsulates the attributes of a multiplex group (the building block for waveforms in DICOM), while the DicomWaveformChannel class provides members to create and manipulate waveform channels. On the Data Set level, the toolkit provides four simple, yet powerful class members for using waveforms:

The DicomDataSet.AddWaveformGroup method, which you use to create a new waveform group.

The DicomDataSet.DeleteWaveformGroup method, which you use to delete an existing waveform group.

The DicomDataSet.WaveformGroupCount property, which you use to obtain the number of waveform groups.

The DicomDataSet.GetWaveformGroup method, which you use to extract a waveform group from a Data Set.

The DicomWaveformGroup Class

The functionality offered by the DicomWaveformGroup class can be divided into three main categories:

Channel Manipulation

Audio Support

Management of Waveform Group Attributes

More information is provided in the following sections.

Channel Manipulation

At the heart of any waveform support is the creation and management of channels. To create a new channel, use the DicomWaveformGroup.AddChannel method. To get an existing one use the DicomWaveformGroup.GetChannel method. The following class members can also be used to manage channels:

DicomWaveformGroup.DeleteChannel

DicomWaveformGroup.ChannelCount

DicomWaveformGroup.GetNumberOfSamplesPerChannel

DicomWaveformGroup.SetNumberOfSamplesPerChannel

Audio Support

LEADTOOLS waveform support includes support for audio data. To load a wave file into a waveform group, use the DicomWaveformGroup.LoadAudio method. This method is very useful when creating DICOM objects of type "Basic Voice Audio" (1.2.840.10008.5.1.4.1.1.9.4.1), which is typically used for report dictation.

To create a wave file from the channels in a waveform group, use the DicomWaveformGroup.SaveAudio method. This method is very useful when extracting audio (wave) data from a DICOM object of type "Basic Voice Audio" (1.2.840.10008.5.1.4.1.1.9.4.1).

Management of Waveform Group Attributes

LEADTOOLS waveform support includes comprehensive support for the management of the attributes of a waveform group.

In DICOM it is mandatory to specify the waveform's originality (that is, whether the waveform data is original (source) data, or derived data), as well as its sampling frequency. Consequently it is important to call DicomWaveformGroup.SetWaveformOriginality and DicomWaveformGroup.SetSamplingFrequency and set these values in order to create a proper waveform group.

If the acquisition equipment adds padding values, DICOM makes it mandatory to set the padding value. This can be done using the DicomWaveformGroup.SetWaveformPaddingValue method. For more information, refer to the "Waveform Padding Value" (5400,100A) element in the DICOM standard.

The following methods are other methods that can be used to set and get the different attributes of a waveform group:

DicomWaveformGroup.GetMultiplexGroupLabel

DicomWaveformGroup.GetMultiplexGroupTimeOffset

DicomWaveformGroup.GetSampleInterpretation

DicomWaveformGroup.GetSamplingFrequency

DicomWaveformGroup.GetTriggerSamplePosition

DicomWaveformGroup.GetTriggerTimeOffset

DicomWaveformGroup.GetWaveformOriginality

DicomWaveformGroup.GetWaveformPaddingValue

DicomWaveformGroup.SetMultiplexGroupLabel

DicomWaveformGroup.SetMultiplexGroupTimeOffset

DicomWaveformGroup.SetSampleInterpretation

DicomWaveformGroup.SetTriggerSamplePosition

DicomWaveformGroup.SetTriggerTimeOffset

DicomWaveformGroup.SetWaveformOriginality

DicomWaveformGroup.SetWaveformPaddingValue

The DicomWaveformChannel Class

The DicomWaveformChannel class provides functionality that can be divided into the following five categories:

1.

Setting/Getting Channel Samples

2.

Setting/Getting Channel Source

3.

Setting/Getting Channel Sensitivity

4.

Adding/Managing Waveform Annotations

5.

Setting/Getting Other Waveform Channel Attributes

More information is provided in the following sections.

Setting/Getting Channel Samples

Before setting channel data be sure to call the DicomWaveformGroup.SetSampleInterpretation method to set the sample interpretation. To set the data for an 8-bit channel use the DicomWaveformChannel.SetChannelSamples8 method. Use the DicomWaveformChannel.SetChannelSamples16 method to set the data for a 16-bit one. Data representation for 8-bit channels can be signed, unsigned, mu-law or A-law, while the data representation for 16-bit channels can be signed or unsigned. To get the data for a channel call the DicomWaveformChannel.GetChannelSamples method.

Setting/Getting Channel Source

In DICOM, it is mandatory to specify the source for a channel. For this reason it is important to call the DicomWaveformChannel.SetChannelSource method to create a proper waveform channel. If you want to get a channel source, call the DicomWaveformChannel.GetChannelSource method.

Setting/Getting Channel Sensitivity

In DICOM, it is mandatory to specify the channel sensitivity if the channel samples represent defined (not arbitrary) units. Since this is almost always the case, it is important to call DicomWaveformChannel.SetChannelSensitivity to create a proper waveform channel.

To get the channel sensitivity call the DicomWaveformChannel.GetChannelSensitivity method.

Adding/Managing Waveform Annotations

To get the number of annotations call the DicomWaveformChannel.GetAnnotationCount method. To create a new annotation, call the DicomWaveformChannel.AddAnnotation method, while you call the DicomWaveformChannel.GetAnnotation method to get an existing one. To delete an annotation call DicomWaveformChannel.DeleteAnnotation.

Setting/Getting Other Waveform Channel Attributes

The following class members are other members that can be used to set and get the different attributes of a waveform channel:

DicomWaveformChannel.GetChannelLabel

DicomWaveformChannel.GetChannelMaximumValue

DicomWaveformChannel.GetChannelMinimumValue

DicomWaveformChannel.GetChannelOffset

DicomWaveformChannel.GetChannelSampleSkew

DicomWaveformChannel.GetChannelStatus

DicomWaveformChannel.GetChannelTimeSkew

DicomWaveformChannel.GetFilterHighFrequency

DicomWaveformChannel.GetFilterLowFrequency

DicomWaveformChannel.Index

DicomWaveformChannel.GetNotchFilterBandwidth

DicomWaveformChannel.GetNotchFilterFrequency

DicomWaveformChannel.GetWaveformChannelNumber

DicomWaveformChannel.Group

DicomWaveformChannel.SetChannelLabel

DicomWaveformChannel.SetChannelMaximumValue

DicomWaveformChannel.SetChannelMinimumValue

DicomWaveformChannel.SetChannelOffset

DicomWaveformChannel.SetChannelSampleSkew

DicomWaveformChannel.SetChannelStatus

DicomWaveformChannel.SetChannelTimeSkew

DicomWaveformChannel.SetFilterHighFrequency

DicomWaveformChannel.SetFilterLowFrequency

DicomWaveformChannel.SetNotchFilterBandwidth

DicomWaveformChannel.SetNotchFilterFrequency

DicomWaveformChannel.SetWaveformChannelNumber