2016-10-19 41 views
4

我在csv格式如原始ECG電壓採樣:如何寫從原始ECG數據DICOM文件

time voltage (mV) 
0.000 9.169110459 
0.001 9.144672532 
0.002 9.144672532 
0.003 9.169110459 
0.004 9.169110459 
0.005 9.169110459 
0.006 9.169110459 
0.007 9.144672532 
0.008 9.217986315 
0.009 9.169110459 
0.01 9.169110459 
0.011 9.169110459 
0.012 9.169110459 
0.013 9.144672532 
0.014 9.144672532 
0.015 9.169110459 
0.016 9.169110459 
0.017 9.169110459 
0.018 9.169110459 
0.019 9.169110459 
0.02 9.169110459 
0.021 9.169110459 
0.022 9.144672532 
0.023 9.169110459 

,並想將其轉換爲DICOM文件,這樣我就可以在查看ecg viewer like ECG toolkit for c#:https://sourceforge.net/projects/ecgtoolkit-cs/

我該如何處理這種轉換?我做了一些Google搜索,但沒有找到能夠從原始數據編寫dicom文件的工具。

編輯:

最後我去爲一個SCP文件,因爲這是更容易。我最終使用上面的庫來創建一個scp文件。下面的代碼:

using System; 
using System.Linq; 
using ECGConversion; 
using ECGConversion.ECGDemographics; 
using ECGConversion.ECGSignals; 

namespace SCPWriter 
{ 
    public static class CreateScpEcg 
    { 
     public static void CreateScpEcgFile(double[] voltages, int sampleRate, string directory, string patientId) 
     { 
      var rhythm = voltages; 

      var filePath = directory + patientId; 

      // get an empty ECG format file 
      IECGFormat format = ECGConverter.Instance.getFormat("SCP-ECG"); 
      if (format != null) 
      { 
       // five required actions for the demographic info. 
       format.Demographics.Init(); 
       format.Demographics.PatientID = patientId; 
       format.Demographics.LastName = ""; 
       format.Demographics.TimeAcquisition = DateTime.Now; 
       // make an AcquiringDeviceID object 
       AcquiringDeviceID acqID = new AcquiringDeviceID(true); 

       // can also specify your own acquiring device info 
       Communication.IO.Tools.BytesTool.writeString("MYDEVI", acqID.ModelDescription, 0, acqID.ModelDescription.Length); 
       // set the Acquiring Device ID (required) 
       format.Demographics.AcqMachineID = acqID; 
       // declare the signal part. 
       var leadType = new LeadType[] { LeadType.I }; 
       var rhythmAVM = 1; 
       var rhythmSPS = sampleRate; 
       Signals sigs = new Signals((byte)leadType.Length); 
       sigs.RhythmAVM = rhythmAVM; 
       sigs.RhythmSamplesPerSecond = rhythmSPS; 

       for (int i = 0; i < sigs.NrLeads; i++) 
       { 
        // very important to assign signal. 

        sigs[i] = new Signal(); 
        sigs[i].Type = leadType[i]; 
        sigs[i].Rhythm = rhythm.Select(Convert.ToInt16).ToArray(); 
        sigs[i].RhythmStart = 0; 
        sigs[i].RhythmEnd = rhythm.Length - 1; 
       } 
       // store signal to the format. 
       if (format.Signals.setSignals(sigs) != 0) 
       { 
        Console.Error.WriteLine("setSignals failed!"); 
        return; 
       } 
       // write the file 
       var outputFile = filePath + ".scp"; 


       ECGWriter.Write(format, outputFile, true); 
       if (ECGWriter.getLastError() != 0) 
       { 
        Console.Error.WriteLine("Writing failed: {0}!", ECGWriter.getLastErrorMessage()); 
        return; 
       } 
      } 
     } 


    } 
} 

注:我只是在 「引領我」 有興趣,但你可以在這一行中添加更多的線索: VAR leadType =新LeadType [] {} LeadType.I

NB :這不是我的代碼,這是來自上面sourceforge鏈接中的討論之一。

回答

2

我的建議:

  1. 選擇一個DICOM工具 它沒有任何意義,實現你自己的DICOM數據的二進制編碼。
  2. 看看DICOM Information Object Definition for ECG Waveform 上面的鏈接定義了12導聯波形對象。如果您的數據不是12導聯,請選擇this。我所提供的鏈接指向模塊表,通過下面的鏈接可以看到這種類型的對象必須/允許的屬性。
  3. 您將不可避免地需要了解一些關於DICOM術語以及標準中的信息的基本知識。我強烈推薦this文件作爲起點。對於這個任務,一定要了解信息對象定義(的IOD),模塊,屬性類型(類型1,2,3)和值表示(VRS)

然後它是非常簡單的。通過您選擇的IOD的強制屬性(我提到的兩個之一),並使用您選擇的工具箱填充它們。然後使用該工具包將文件寫入磁盤並完成。確保使用meta-header將數據寫入DICOM文件。一個好的工具包提供了將數據集寫入磁盤的選項。

請注意,簡單地將DICOM文件寫入磁盤不是「官方DICOM接口」。要在不同DICOM應用程序之間交換數據,您必須使用網絡協議(在您的情況下爲存儲服務類)或創建符合DICOM標準的介質(這會對使用的介質,文件格式,文件名造成一些限制,並且需要包含DICOM目錄文件列出媒體的內容)。

當您要求使用工具時,您可能需要查看DCMTK。有不同的方式來完成任務。 dcmdump或dcmodify將是更接近查看的工具。但是,這樣做很麻煩,您可能需要將ECG數據轉換爲dcmtk可用於填充波形序列的格式。我不建議你這樣做,但它可能是避免編寫大量代碼的一種方法。

+0

很好的答案!由於這是一個C#問題,所以可以注意到有一些開源的C#DICOM工具包可用,比如[fo-dicom](https://github.com/fo-dicom/fo-dicom),[邪惡的DICOM](https://github.com/rexcardan/Evil-DICOM)和[ClearCanvas](https://github.com/ClearCanvas/ClearCanvas)。 –

相關問題