簡體   English   中英

使用fo-dicom創建Dicom序列

[英]Creating Dicom Sequences with fo-dicom

從存儲為DICOM文件的放射治療計划中提取信息后,我的問題現在有所不同。

我知道,我可以使用(例如)在現有計划中添加或更新項目

file.Dataset.AddOrUpdate(Dicom.DicomTag.PatientAge,23);

即使按順序處理DicomTag,也不是問題所在(例如)

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文檔中,我找到了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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM