我在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鏈接中的討論之一。
很好的答案!由於這是一個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)。 –