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