Clear Canvas如何将数字化心电图数据转换为dicom文件
本文关键字:转换 数据 dicom 文件 心电图 数字化 Canvas Clear | 更新日期: 2024-09-23 04:54:16
我正在尝试将数字化心电图数据转换为dicom文件。我的代码如下
DateTime today = DateTime.Today;
DicomFile dicomFile = new DicomFile();
dicomFile.TransferSyntax = TransferSyntax.ExplicitVrLittleEndian;
dicomFile.DataSet[DicomTags.StudyDate].SetStringValue(today.ToString("yyyyMMdd"));
dicomFile.DataSet[DicomTags.StudyTime].SetStringValue(today.ToString("HHmmss"));
dicomFile.DataSet[DicomTags.PatientsBirthName].SetStringValue(patientName);
dicomFile.DataSet[DicomTags.PatientId].SetStringValue(patientId);
dicomFile.DataSet[DicomTags.StudyInstanceUid].SetStringValue(studyId);
dicomFile.DataSet[DicomTags.SeriesInstanceUid].SetStringValue(seriesId);
dicomFile.DataSet[DicomTags.Modality].SetStringValue(modality);
dicomFile.DataSet[DicomTags.ConversionType].SetStringValue(conversionType);//Drawing
string sopInstanceUid = DicomUid.GenerateUid().UID; // Should be unique for each image
this.pacsAccessionNumber = (Functions.GetRandomString() + Functions.GetRandomString()).Substring(0, 16);
dicomFile.DataSet[DicomTags.InstanceNumber].SetInt32(0, instanceNumber);//Series Instance Number
dicomFile.DataSet[DicomTags.SopClassUid].SetStringValue(SopClass.Sop12LeadEcgWaveformStorage.Uid);
dicomFile.DataSet[DicomTags.SopInstanceUid].SetStringValue(sopInstanceUid);
dicomFile.DataSet[DicomTags.AccessionNumber].SetStringValue(this.pacsAccessionNumber);
dicomFile.MediaStorageSopClassUid = SopClass.Sop12LeadEcgWaveformStorage.Uid;
dicomFile.MediaStorageSopInstanceUid = sopInstanceUid;
dicomFile.DataSet[DicomTags.Manufacturer].SetStringValue("MITS");// Manufacturer Name
DicomSequenceItem waveFormSeq = new DicomSequenceItem();
waveFormSeq[DicomTags.WaveformOriginality].SetStringValue("DERIVED");// Other option is ORIGINAL
waveFormSeq[DicomTags.WaveformChannelNumber].SetUInt32(0, 1);//must be between 1-13
waveFormSeq[DicomTags.NumberOfWaveformSamples].Values = samplingCount;//NumberOfWaveformSamples -- max value is 16384
waveFormSeq[DicomTags.SamplingFrequency].SetFloat32(0, 1000);//frequency(must be dynamic) -- must be dynamic must be between 200-100
waveFormSeq[DicomTags.WaveformSampleInterpretation].SetStringValue("SS");//signed
waveFormSeq[DicomTags.WaveformBitsAllocated].SetInt32(0, 16);//16 bit
waveFormSeq[DicomTags.WaveformData].Values = voltageValues;
DicomSequenceItem channelSeq = new DicomSequenceItem();
channelSeq[DicomTags.ChannelSensitivityCorrectionFactor].SetUInt32(0, 1);
channelSeq[DicomTags.ChannelBaseline].SetUInt32(0, 0);
channelSeq[DicomTags.ChannelTimeSkew].SetUInt32(0, 0);
DicomSequenceItem channelSourceSeq = new DicomSequenceItem();
channelSourceSeq[DicomTags.CodeValue].SetStringValue("5.6.3-9-1");
channelSourceSeq[DicomTags.CodingSchemeDesignator].SetStringValue("SCPECG");
channelSourceSeq[DicomTags.CodingSchemeVersion].SetStringValue("1.3");
channelSeq[DicomTags.ChannelSourceSequence].AddSequenceItem(channelSourceSeq);
DicomSequenceItem channelSensUnitSeq = new DicomSequenceItem();
channelSensUnitSeq[DicomTags.CodeValue].SetStringValue("uV");
channelSensUnitSeq[DicomTags.CodingSchemeDesignator].SetStringValue("UCUM");
channelSensUnitSeq[DicomTags.CodingSchemeVersion].SetStringValue("1.4");
channelSeq[DicomTags.ChannelSensitivityUnitsSequence].AddSequenceItem(channelSensUnitSeq);
waveFormSeq[DicomTags.ChannelSequence].AddSequenceItem(channelSeq);
dicomFile.DataSet[DicomTags.WaveformSequence].AddSequenceItem(waveFormSeq);
SendFile(dicomFile);
但在pacs服务器中,我无法打开dcm文件。
我缺了什么吗?
dicom文件的链接http://www.ikincidoktor.com/NonDicomRepository/8/testecg.dcm
DICOM标准中定义了9个与波形相关的不同IOD类,其中2个用于音频。许多属性是以您正在处理的波形数据样本为条件的,不可能简单地列出所需的元素。因此,这里有一个建议可以帮助你解决你的问题。
请从DICOM标准PS 3.3(位于此处)附件A.34开始,选择您想要使用的适当IOD。在每个IOD类定义中,您将看到一个表,该表列出了IOD所需的模块,并参考了模块定义的位置(C.?.?.?)。它还将在本节中指定任何特定于IOD的要求。
例如,12导联心电图IOD的定义见附录A.34.3,表A.34.3-1列出了以下模块作为该IOD的强制性模块:
- 患者(C.7.1.1)
- 一般研究(C.7.2.1)
- 通用系列(C.7.3.1)
- 通用设备(C.7.5.1)
- 波形识别(C.10.8)
- 波形(C.10.9)
- 获取上下文(C.7.6.14)
- 波形注释(C.10.10(有条件,如果存在注释,则为必填项)
接下来,您需要查看附录C下的每个所需模块。在这里,您将找到一个表格,其中包含组成模块的DICOM元素列表。Type列指定元素是必需的、可选的还是有条件的。不同数据元素类型的说明见PS 3.5第7.4节。简而言之,类型1是必需的,并且不能为空。类型2是必需的,可以为空,类型3是可选的。1C型或2C型是有条件的,如果满足条件,则必须存在。
波形数据(54001010)元素的数据样本编码规则见C.10.9.1.7节。
如果您只使用一个通道,您可能需要查看普通心电图IOD(A.34.4)。
我希望这能有所帮助。