UID,全称为Unique Identifiers,用于区别各项事务,确保在多国家、地区、供应商,以及设备间的唯一性。
虽然UID的目的只有一个区别各项事务,确保唯一性。但是由于各自代表的领域不同、服务的对象不同、具体使用的场景不同,开源库在具体实现时会对UID进行分类,用于标记区分各事务。下面以fo-dicom中DicomUID为例进行讲解:
在DicomUID类中,定义了DicomUidType枚举类型,
1 public enum DicomUidType { 2 TransferSyntax, 3 SOPClass, 4 MetaSOPClass, 5 SOPInstance, 6 ApplicationContextName, 7 CodingScheme, 8 FrameOfReference, 9 LDAP, 10 Unknown 11 }
DICOM协议中的UID大致分成9类
1)TransferSyntax,该类UID就是我们之前提到的用于标识客户端与服务端之间消息流传输的各种编码格式。
2)SOPClass ,即常见的服务对象对类型,Service-Object-Pairs Class。主要用于标记各种服务,例如DIMSE-C服务、DIMSE-N服务。
3)MetaSOPClass,是一系列SOP Class的集合,具体参见Meta SOP Class Definitions,Meta SOP Class中最常见的就是两种具体打印服务,即Basic Grayscale Print Management Meta SOP Class和Basic Color Print Management Meta SOP Class。如下图所示:
4)SOPInstance,用于描述现实场景中具体的“实例”,可以脱离于交互上下文、交互环境(Communication Context)而存在,例如后缀为.dcm的医学图像文件等等。
5)ApplicationContextName,该UID是DICOM专属的,用于标识DICOM应用,因此ApplicationContextName类中有且只有一个对象,即
public static DicomUID DICOMApplicationContextName = new DicomUID("1.2.840.10008.3.1.1.1" , "DICOM Application Context Name", DicomUidType.ApplicationContextName);
6)CodingScheme,DICOM协议中的编码方案,可以简单的理解为DICOM协议中各种符号含义的约定,具体可参见DICOM3.0第16部分附录D
7)FrameOfReference,用于定位的坐标系,该坐标系是已经公开的、约定俗成的,例如脑图谱中著名的Talairach Brain Atlas Frame of Reference,具体可查阅Wiki百科,如下图所示:
关于FrameOfReference还可阅读国外文献资料,例如The MNI brain and the Talairach atlas和Bias Between MNI and Talairach Coordinates Analyzed Using the ICBM-I5 Brain Template。
8)LDAP,Lightweight Directory Access Protocol,中文称之为“轻型目录访问协议”。具体可搜索资料,我也是一知半解。
9)UnKnown,其他预留扩展使用,或用户自定义。
普通JPG图像的UID:1.2.840.10008.1.2.4.50