医学影像DICOM格式转换的研究与实现
【摘要】 采用面向对象方法,借助中间文件方式,实现了一种在医学影像DICOM格式和通用图像/媒体格式之间进行相互转换的软件,可以使我国目前存在的大量不符合DICOM标准的医学影像设备能够方便地接入PACS中,又可以将标准数字医学影像设备获取的DICOM数据简便地转换成通用图像/媒体文件。
【关键词】 DICOM PACS 格式转换 医学影像
影像存档与通讯系统 (Picture Achieving & Communication System,PACS)近年来迅速,PACS利用机通讯,以数字化的方式获取、存储、显示和传输医学图像及相关信息,取代传统的胶片格式图像,并高效迅速地辅助医学诊断。为了实现各医学影像设备之间方便地传输图像,国际上制定了医疗设备的国际标准通讯协议医学数字图像通讯标准(Digital Imaging and Communication in Medicine,DICOM),目前大家遵循的是DICOM 3.0版本。
DICOM标准既是医学图像格式标准,又是医学图像通讯标准。符合DICOM格式的设备可以直接接入PACS中,与其他设备进行信息传输与交换。然而,我国由于等许多原因,现阶段的医疗影像设备如X光机、B超、DSA等设备的接口种类多样。有的影像设备只有胶片记录影像,有的只有普通视频输入,有的采用自己专用的影像格式等等,这样造成图像格式、传输及通讯协议等很不一致。显然我国目前现存的大量不符合DICOM标准的设备已经成为阻碍PACS普及与发展的瓶颈问题,而且在短时期内这种问题不可能解决。为了充分利用这些设备资源,让他们能够融入PACS中与其他设备相互通讯,我们就必须将这些设备产生的图像/媒体格式(如BMP、TIFF、GIF、JPEG和 AVI)转换为DICOM格式。另一方面,为了科研、教学和学术交流等的需要,我们又必须将标准数字医学影像设备获取的DICOM数据转换成通用图像/媒体文件。因此,本研究严格遵循DICOM 3.0标准,采用面向对象的方法,并借助中间文件的方式,设计并实现了一种通用图像/媒体文件(如BMP、TIFF、GIF、JPEG和 AVI)格式与DICOM影像格式相互转换的软件。本软件具有结构模块化、灵活性和通用性等特点。
1 DICOM标准
1.1 DICOM信息模型
DICOM标准采用面向对象的方法,并按照E-R(Entity-Relationship Model)模型,描述信息对象(如医生、病人、病例、诊断、图像等)的属性及其相互关系。E-R模型由实体集、属性和联系三部分组成。实体集(Entity)表示一类具有相同特征的个体对象,用矩形表示。属性指对象的特征,用椭圆表示。联系表示实体之间的关系,用菱形表示。实体中的源实体和目标实体,其基数可在E-R图上标明,例如一个医学图像与病人的关系可用图1表示。
由以上E-R模型可以看出,病人、检查、系列和图像构成实体,他们分别有自己的属性,而这些实体之间存在包含关系。具体的说,“病人”是第一层源实体,一个病人包含一个或多个目标实体“检查”,“检查”又成为第二层源实体,每个检查包含一个或多个新的目标实体“系列”,每个“系列”又包含零或多帧“图像”。可见,E-R模型清晰的反映了现实事物之间的层次关系。
1.2 DICOM信息操作
DICOM标准基于上面所述的E-R模型,采用面向对象的方法对实体进行抽象。基于E-R模型的对象称为信息对象(Information Objects, IO),对象的属性称为信息对象定义(IOD,Information Object Definition)。我们对DICOM信息的传输和通讯抽象概括为服务类(Service Class)。DICOM标准中有12个服务类,如打印,传输,存储等,通过这些类实现医学影像在PACS中的通讯。而一个服务类是由多个SOP类(Service-Object Pair Class),即服务-对象类构成。SOP类构成DICOM信息传输与通讯的基本功能单位,每个SOP类又由一个服务组(Service Group)和一个信息对象定义(IOD,Information Object Definition)构成。服务组是一系列消息服务元素DIMSE(DICOM Message Service Elements)命令,即对信息对象的各种操作,服务组作用于信息对象定义。对一个特定的SOP类,DICOM兼容的设备可作为两种角色的一种:服务类提供者(service class provider, SCP),它提供SOP类的服务;服务类用户(service class user, SCU),它使用SOP类的服务。DICOM信息操作方式可用E-R模型表示,见图2。
1.3 DICOM文件格式
DICOM文件由多个数据集组成。数据集表现了现实世界信息对象的相关属性,如病人姓名、性别、身高和体重等。数据集由数据元素组成,数据元素包含进行编码的信息对象属性的值,并由数据元素标签(Tag)唯一标识。数据元素具有三种结构,其中两种具有类型表示VR(是否出现由传输语法决定),差别在于其长度的表达方式,另外一种不包括类型表示。类型表示指明了该数据元素中的数据是哪种类型,它是一个长度为2的字符串,例如一个数据元素的VR为FL,表示该数据元素中存储的数据类型为浮点型。所有数据元素都包含标签、值长度和数据值体。 标签是一个16位无符号整数对,按顺序排列包括组号和元素号。数据集中的数据元素应按数据元素标签号的递增顺序组织,且在一个数据集中最多出现一次。值长度是一个16或32位(取决于显式VR或隐式VR)无符号整数,表明了准确的数据值的长度,按字节数目(为偶数)记录。此长度不包含数据元素标签、VR、值长度字段。数据值体表明了数据元素的值,其长度为偶数字节,该字段的数据类型是由数据元素的VR所明确定义。数据元素字段由三个公共字段和一个可选字段组成。下面分别列出具有显式VR和隐式VR的数据元素的结构:
2 Bytes2 Bytes4 Bytes
在对DICOM文件格式进行分析后,可依据其格式特点对其进行解析,即对文件中的各个数据元素依次辨别并处理。具体来说,先根据数据元素的组号辨别出该数据元素所在组,再根据数据元素的元素号进行辨别,最终达到根据组号和元素号标识出一个数据元素标签,并根据该数据元素标签所对应的具体含义获取所需要的信息,并保存在相应变量中。
2 DICOM格式转换实施方案
DICOM图像本身的解码和信息提取比较复杂,若从DICOM图像到每一种格式文件都生成一种编码方案的工作量很大。为了软件结构的模块性和单纯性,我们在此软件中借助了中间文件的方式,本软件选择BMP文件为中间文件。而且由BMP文件与通用图像/媒体文件(如BMP、TIFF、GIF、JPEG和 AVI)之间的转换比较简单。整个软件的格式转换流程见图5。
我们可以通过视频捕获卡捕获视频流,实现从模拟图像到数字图像之间的转换,获取机通用图像/媒体文件(如BMP、TIFF、GIF、JPEG和 AVI)。而计算机通用图像/媒体文件与中间文件(BMP文件)之间的转换,本软件调用Intel公司的IJG JPEG LIBRARY动态链接库中的函数来实现JPEG与BMP之间的转换,当然也可以利用许多商业软件如ACDSee、PhotoShop等。
本软件的核心内容是中间文件(BMP文件)与DICOM图像之间的转换。从DICOM图像向中间文件(BMP文件)转换过程中,要详细提取图像象素信息,包括从DICOM图像中获取图片的大小,压缩格式,图像位深,色彩信息等。根据前面所述DICOM标准,必须提取的图像象素信息如图6所示。
而中间文件即 BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成,其具体结构在此不作详述。根据以上DICOM图像象素信息和我们所熟悉的BMP文件格式,就可以编写相应代码,将DICOM图像转换为BMP文件格式,保存即可。当然也可以转换为JPEG格式作为中间文件,这样更简便,因为 DICOM图像中色彩信息标签中的信息就是一个完整的JPEG文件信息。从中间文件(BMP文件)向DICOM图像转换,也是根据上面所述DICOM信息模板实现,只是不仅是图像信息的转换,同时要需要生成DICOM文件的其它信息,如前面所述病人姓名,系列等。
我们采用面向对象的方法和Visual C++开发环境,借助中间文件的方式,还利用C语言编写的Windows最底层的接口函数API(Application Programming Interface),而API函数由许多动态链接库(DLL)组成。Visual C++6.0开发环境提供了各种类型库和ActiveX,构架在Win32 API函数基础上,能替代API的部分功能。这些类型库和ActiveX集中了常用的API函数,能方便地调用它们,使程序开发变得简单和快捷。
整个程序中心问题是对医学图像的处理,特别是中间文件(BMP文件)与DICOM图像之间的转换,它是由我们定义的几个核心类(Class)完成的,而这几个核心类(Class)分别负责图像的解析,对各种通用图像/媒体文件(如BMP、TIFF、GIF、JPEG和 AVI)进行解码和编码,然后还可作数据压缩和解压缩等处理。 我们定义了三个核心类(Class):CDom、CPictureDom和CView,它们负责不同的任务。
其中,CDom类负责解析图像的位置、大小和类型等,CPictureDom类负责对图像进行解码和编码,CView类负责显示解码和编码了的图像。其中CDom是极其重要的类,它针对前面所叙述的DICOM数据格式特点,先根据数据元素的组号辨别出该数据元素所在组,再辨别数据元素的元素号,根据组号和元素号标识出一个数据元素标签(Tag),然后根据类型表示(VR)确定图片格式,这样就解析了图片的信息并保存在相应变量中。CPictureDom类主要负责对图片进行重新编码,是根据由DICOM标准而自己设计的DICOM模板来实现的。这三个类又派生出若干子类,子类负责更细致的操作分工。如CDom类派生出CAVItoDom类、CJPEGtoDom类、CDVItoDom类等,他们分别将AVI图像格式、JPEG图像格式和DVI图像格式转换为DICOM标准格式。
3 结论
由于我国存在大量非DICOM标准的影像设备而无法直接应用于PACS中,因此DICOM标准的格式转换势在必行。本研究讨论了关于DICOM标准的DICOM信息模型、信息操作和数据格式几个重要问题,然后针对所论述的DICOM标准特点,设计并实现了一种在通用图像/媒体文件格式与DICOM标准格式之间转换的软件。软件所采用的是面向对象的方法和Visual C++6.0开发环境,借助中间文件的方式,并采用了Windows编程最底层的接口函数API。这样,软件开发者还可以根据自己的实际需要将自定义的数据元素按照本软件的模式,在程序中添加代码,以便更好地完善本软件。
【】
1 胡阳秋,高小榕,高上凯.医学图像DICOM格式转换软件的设计与实现.北京生物医学工程,2000,19(4):193~197.
2 唐承亮,袁煌.基于DICOM的PACS医学图像传输服务实现方案.郑州轻学院学报(版),2001,16(2):65.
3 林天毅,段会龙,吕维雪,综述,医学数字图像通讯(DICOM)标准及在我国的实施策略,国外医学生物医学工程分册,1998,21(2):65~73.