首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >清晰画布如何将数字化心电数据转换为dicom文件

清晰画布如何将数字化心电数据转换为dicom文件
EN

Stack Overflow用户
提问于 2015-03-02 15:10:04
回答 1查看 1K关注 0票数 1

我正在尝试将数字化的心电数据转换为dicom文件。我的代码如下所示

代码语言:javascript
复制
        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的链接

EN

回答 1

Stack Overflow用户

发布于 2015-03-03 17:12:48

在DICOM标准中定义了9个与波形相关的IOD类,其中2个用于音频。许多属性都取决于您所处理的波形数据样本,因此不可能简单地列出所需的元素。因此,这里有一个建议,以帮助你解决你的问题。

请从DICOM标准PS3.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元素列表的表。类型列指定元素是必需的,是可选的还是有条件的。不同数据元素类型的描述位于PS 3.5节7.4中。简而言之,类型1是必需的,不能是空的。类型2是必需的,可以是空的,类型3是可选的。类型1C或类型2C是有条件的,如果符合条件,则必须在场。

波形数据(5400,1010)元素的数据样本编码规则在C.10.9.1.7节中定义。

如果您只使用一个通道,您可能需要查看普通心电图IOD (A.34.4)。

我希望这能帮到你。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28813071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档