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.GetNotchFilterBandwidth
DicomWaveformChannel.GetNotchFilterFrequency
DicomWaveformChannel.GetWaveformChannelNumber
DicomWaveformChannel.SetChannelLabel
DicomWaveformChannel.SetChannelMaximumValue
DicomWaveformChannel.SetChannelMinimumValue
DicomWaveformChannel.SetChannelOffset
DicomWaveformChannel.SetChannelSampleSkew
DicomWaveformChannel.SetChannelStatus
DicomWaveformChannel.SetChannelTimeSkew
DicomWaveformChannel.SetFilterHighFrequency
DicomWaveformChannel.SetFilterLowFrequency
DicomWaveformChannel.SetNotchFilterBandwidth