使用 fo-dicom 创建 Dicom 序列
Creating Dicom Sequences with fo-dicom
从存储为 DICOM 文件的放射治疗计划中提取信息后,我的问题现在不同了。
我知道,我可以使用(例如)
在现有计划中添加或更新项目
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
编写新标签的可能性,但没有成功。所以我希望你们中的一个能给我一个提示,我哪里做错了。
这是一种方法:
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
从存储为 DICOM 文件的放射治疗计划中提取信息后,我的问题现在不同了。
我知道,我可以使用(例如)
在现有计划中添加或更新项目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
编写新标签的可能性,但没有成功。所以我希望你们中的一个能给我一个提示,我哪里做错了。
这是一种方法:
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