用fo-dicom创建Dicom序列

时间:2017-10-25 09:54:52

标签: c# dicom fo-dicom

从存储为DICOM-File的放射治疗计划中提取信息后,我的问题现在不同了。

我知道,我可以使用(例如)

添加或更新现有计划中的项目
file.Dataset.AddOrUpdate(Dicom.DicomTag.PatientAge,23);

即使在序列中处理DicomTags也不是(例如)

的问题
file.Dataset.Get<Dicom.DicomSequence>(Dicom.DicomTag.BeamSequence).Items[1].
            Get<Dicom.DicomSequence>(Dicom.DicomTag.ControlPointSequence).Items[0].
            Get<Dicom.DicomSequence>(Dicom.DicomTag.BeamLimitingDevicePositionSequence).Items[2].
            AddOrUpdate(Dicom.DicomTag.LeafJawPositions, "-30\\30");

但现在我想知道是否有可能创建一个完整的新序列并在其中存储信息? 我知道这需要我不仅要创建一个项目,而且还要创建更多关于此项目的信息,因为我看到的计划中没有任何序列有这个。

fo-dicom API documentation我找到了Dicom.IO.Writer命名空间。我看了看但没找到我期望找到的东西。按照我的第一直觉,我会写这个

string filename = "output.dcm";
DicomWriter file = new DicomWriter(@filename);
... trying to create TagElements

另一个命令行DicomFileWriter file = new DicomFileWriter(...);也不起作用,因为构造函数只想接收选项。另一个DicomWriter()构造函数与此类似。

我还检查了file.Dataset编写新标签的可能性,但没有成功。所以我希望你们中的一个人能给我一个提示我做错步骤的提示。

1 个答案:

答案 0 :(得分:2)

这是一种方法:

string filename = "output.dcm";

DicomDataset ds = new DicomDataset(); //Main dataset
ds.Add(DicomTag.SpecificCharacterSet, "ISO_IR 100"); //Add some items
ds.Add(DicomTag.PatientID, "191212121212");

DicomDataset sqContent = new DicomDataset(); //Content of the sequence
sqContent.Add(DicomTag.Modality, "US");
sqContent.Add(DicomTag.ScheduledProcedureStepStartDate, DateTime.Now.Date);

DicomSequence sq = new DicomSequence(DicomTag.ScheduledProcedureStepSequence, sqContent); // Create sequence, add content
ds.Add(sq); //Add sequence to main dataset

DicomFile file = new DicomFile();
file.Dataset.Add(ds); //Add main dataset to DicomFile
file.FileMetaInfo.TransferSyntax = DicomTransferSyntax.ImplicitVRLittleEndian; //Specify transfer syntax
file.Save(filename); //Save file to disk