2015-03-02 63 views
1

我想將數字化ecg數據轉換爲dicom文件。我的代碼如下所示清除Canvas如何將數字化ECG數據轉換爲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

+1

PACS系統是否實際支持波形sop類?你是否能夠使用Clunie的像素化查看器打開結果文件:http://www.pixelmed.com/index.html#PixelMedJavaDICOMToolkit – 2015-03-07 13:30:52

+0

我正在使用EcgViewer應用程序來檢查數據。它說「沒有得到信號」。但我把數字化的心電圖放在正確的標籤上。哪裏可以是錯誤? @BrettOkken – 2015-03-09 13:32:45

+0

這是文件:http://www.ikincidoktor.com/NonDicomRepository/8/testecg。dcm – 2015-03-09 14:23:53

回答

2

的鏈接有在波形和他們2個是針對音頻相關的DICOM標準定義9個不同的IOD類。許多屬性都以您正在處理的波形數據樣本爲條件,並且無法簡單列出所需的元素。所以這裏有一個建議來幫助你解決你的問題。

請從DICOM標準PS 3.3(located here)附錄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)。

我希望這會有所幫助。

+0

你說得對。我嘗試添加數字化的ecg數據,而不是像素數據。我修正了它,但ecg dicom文件的強制性標記是什麼,ecg的原始數據格式是什麼?我編輯了這個問題,你可以再次檢查代碼片段嗎? – 2015-03-04 08:46:20

+0

我也有minivolt電壓值,我只有一個通道的值。 – 2015-03-04 09:35:01

+0

我認爲問題是關於電壓值。我有一個通道和值是1.4545 1.4354 1.4928 1.4737 1.4545 1.4928 1.4737 1.4545 1.4354我已乘以它們1000並轉換爲ushort比字節數組(2個字節 - 16位爲一個電壓值)。據文件看起來好,但一定有我失蹤。 – 2015-03-09 14:16:46

相關問題