Dicom 私有tag定义

    技术2022-07-10  132

    Dicom 私有tag定义

    DICOM里的Tag分为两类:一个是保存在偶数组中(如0x0028)的保留tag,是DICOM的自有字段;另一种是保存在奇数号中如(0x0069), 是自定义字段。

    定义私有数据元素,

    私有数据元素,一般在使用时可能需要不包含在标准数据元素中的信息,数据元素标签字段,可选VR字段,长度字段和值字段,使用在私有数据元素的元素标签中的组号码应该是一个奇数号码,数据元素标签的递增

    定义元素标签,

    私有元素将根据下面的规则来分配私有数据元素标签, (1) 编号为(0xFFFF1000)其中FFFF为奇数的私有数据元素,可以存储组号为FFFF的一组元素。 (2) 数据元素(0xFFFF1000)是等同于tag head, (0xFFFF0011)等同于 1类数据元素,依次递增

    //私有tag 的定义 第一步先定义一个tag head,下面是DicomTag构造需要的参数 public DicomTag(uint tagvalue, String namevalue, String varNamevalue, DicomVr vrvalue, bool isMultiVrTagvalue, uint vmLowvalue, uint vmHighvalue, bool isRetiredvalue) { TagValue = tagvalue; _name = namevalue; _varName = varNamevalue; _vr = vrvalue; _multiVrTag = isMultiVrTagvalue; _vmLow = vmLowvalue; _vmHigh = vmHighvalue; _isRetired = isRetiredvalue; } //head var headTag = new DicomTag(0x00691000, "pTagDcm_PrivateHead", "PrivateHead", DicomVr.LOvr, false, 1, 1, false); //sequence var privateSeqTag = new DicomTag(0x00690011, "pTagDcm_PrivateSequence", "Sequence", DicomVr.SQvr, false, 1, 1, false); //tag var privateStartTag = new DicomTag(0x00690012, "pTagDcm_PrivateStartValue", "PrivateStartValue", DicomVr.DSvr, false, 1, 1, false);

    导出

    // 私有tag 导出 DataSet[headTag].SetNullValue(); var privateSeqTag = new DicomElementSq(privateSeqTag); DataSet[0x00690011] = privateSeqTag ; var privateSeqItem = new DicomSequenceItem(); privateSeqTag.AddSequenceItem(privateSeqItem); privateSeqItem[privateStartTag].SetString(0, "demo");

    导入

    // 私有tag 导入 //判断dicom 文件是否含有自定义的tag if (Dataset.Contains(0x00690011)) { string gatingType; var privateSeq = Dataset[0x00690011] as DicomElementSq; string startValue; if (privateSeq[0][0x00690012].TryGetString(0, out startValue) && !string.IsNullOrEmpty(startValue)) { //do some thing } }

    还可以参考维基百科上的资料: https://support.dcmtk.org/redmine/projects/dcmtk/wiki/howto_addprivatedata

    Processed: 0.013, SQL: 9