时间:2024-05-04
关豪然 宋卫东 王志杰 张 悦 张丰收
(河南科技大学医学技术与工程学院 洛阳 471023)
20 世纪80 年代以来,计算机断层成像技术等数字成像技术得到快速发展,许多医疗设备制造商开发了大量的医疗成像设备,但不同的国家和不同的制造商都拥有各自的医疗图像文件格式。不但给医学图像信息交流和共享带来了极大的难题,也严重阻碍了图像处理、存档和传输系统的建立。针对这一问题,美国放射协会(American College of Radiology,ACR)和电器协会(National Electrica Manufacturers Association,NEMA)共同制定了统一的数字化影像设备的图像数据格式,即DICOM 格式[1]。目前国内外医疗成像设备上普遍遵循DICOM 作为存储和交换医学图像数据的标准解决方案[2]。
区别于常见的图像格式,DICOM 格式文件同时包含图像信息和大量有用的医疗相关信息,这造就了其编码方式和文件结构的复杂性,因此DICOM 图像的读取和显示比其他格式的图像难度要大。本文对DICOM 文件结构进行了简单的介绍,然后给出了常用的医学图像处理软件和平台(Matlab、Python、VTK、ITK)读取和显示DICOM 文件的步骤和代码,使开发人员能够快速准确地找到解析DICOM 文件的方法,节省开发时间,能够把更多的精力放在医学图像后处理和可视化研究当中。
物联网即是通过射频识别(RFID)、红外感应器、全球定位系统和激光扫描器等信息传感设备,按约定的协议,把任何物体与互联网相连接,进行信息交换和通信,以实现对物体的智能化识别、定位、跟踪、监控和管理的一种网络。目前,发展物联网是我国国民经济发展的大好机遇,其中一个能广泛发挥作用的领域就是果蔬运输系统。基于物联网的果蔬运输系统会真正实现果蔬运输的信息化、智能化、网络化,极大地提高果蔬运输效率,大大降低果蔬运输成本。
DICOM 文件主要由三部分组成[3],如图1 所示。
焊接现场地理环境复杂,加上昼夜温差,会给管道连头组对、焊接增加了很大的困难。管道连头施工中常见的焊接缺陷为气孔、未熔合、裂纹、内凹及夹渣等,出现几率最高的是未熔合、未焊透和气孔。
图1 DICOM文件结构
//声明像素类型和图像维数,并以此实例化要读取的图像类型
这是苏轼为“东坡饼”写的一首诗,描写了一位美人用纤纤素手搓出颜色均匀的面,放入油中慢慢煎,生动形象的写出了此饼因陋就简的制作过程,以及出锅后金黄的色泽,玲珑剔透的皮相和香甜酥脆的口感。作者巧妙地勾勒出饼的匀称、酥脆、色美、味香的特点。最后一句运用修辞,将饼的形状比喻成美人的钗环,引人遐想,令人回味无穷。从诗中可以看出诗人热爱生活,善于发现生活乐趣的高尚品质。
2. 《山阴陆氏族谱》:陆游“力学不仕,尝至临安,有诗云:‘世味年来薄似纱,谁令骑马客京华,小楼一夜听春雨,深巷明朝卖杏花。矮纸斜行闲作草,晴窗细乳戏分茶。素衣莫起风尘叹,犹及清明可到家。’都人传入禁中,高宗称赏不止,由是名振京师。高宗虽慕公才,为桧所阻,不能用。及桧死,始除敕令所删定官,出赴福州宁德主簿……”④
2)前缀:前缀是DICOM 文件标识符,占用4 个字节,内容是大写字母的字符串“DICM”用来判断是否为DICOM文件;
3)数据集:数据集是数据元素的有序集合。这些数据元素包含了文件元数据、私有数据、患者以及检查数据等。每一个数据元素由标识符(tag)、值表述(value representation)、数据长度(value length)和数据域(value field)四部分组成[4]。
小浪底水利枢纽管理中心坚持服务民生的理念,科学调度小浪底和西霞院工程,在防洪、防凌、减淤、供水、灌溉、发电等方面发挥了显著的综合效益。在管好工程、服务民生的基础上,充分发挥在水利水电工程建设管理方面的技术、人才优势,积极稳妥推进多元化发展,形成了以管好民生工程为基础、水电开发建设为主业,带动相关产业多元化发展的战略格局。
(2)值表述占用两个字节,指明该数据元素的数据类型和格式;
全县近几年来在水稻病虫绿色防控工作中取得了防治效果好、农药用量减的成绩,在防控上也得到了一些经验,主要是:
进行环境测试以确定拉伸强度,模量和弯曲强度,模量和吸水率。已经在不同的湿度和温度下在环境室(Daihan-Brand,DWTH-155)中研究了复合材料的机械性能。表2显示了作为测试矩阵的环境条件。
(3)数据长度规定了数据元素的数据域中数据的长度;
(4)数据域存放真正的数据,包含偶数个字节。
Matlab 是由美国Mathwork 公司推出的具有科学计算、符号运算和图形图像处理等多种功能的软件。尽管DICOM 格式较为复杂,但Matlab 图像处理工具箱提供了相应的读取函数:dicominfo()函数用于读取DICOM 文件的元数据,dicomread()函数用于读取图像数据[5]。前者会返回一个结构体,里面包含了例如患者信息、检查信息等DICOM 文件成像信息,后者返回一个图像数组,表示图像本身的像素信息。
Matlab 图像处理工具箱中提供了多种的图像显示函数,桌面显示图像一般使用imshow()函数。该函数的基本语法为imshow(I,[low high]),其中I即为dicomread()函数返回的图像数组,[low high]表示显示灰度图像的范围,imshow()函数会将所有小于等于low 的值显示为黑色,所有大于等于high的值显示为白色,使用默认数量的灰度级别显示介于low 和high 的中间色调。如果指定空矩阵imshow(I,[]),则默认I 中的最小值作为黑色,最大值作为白色。
VTK 的全称是Visualization Toolkit,即可视化工具包,是一个用于三维计算机图形,图像处理和可视化的开源软件类库[8]。对于不同的数据类型,VTK 提供了相应的类对图像文件进行读取操作。比如类vtkJPEGRReader 用于读取JPG 格式的图像。自VTK5.0 版本新增了vtkDICOMImageRead 类用于对DICOM 文件的读取。因此使用VTK工具包可以直接读取DICOM 图像和部分头文件信息(vtk-DICOMImageReader类只提供了例如患者姓名等部分常用信息提取函数),避免了底层代码的开发。读取关键代码如下:
其中,p(x,y)为原始CT 值,pw(x,y)为映射后灰度值,gm为设备显示最大灰度值,对于8 位的显示设备,gm为255。
DICOM序列图像读取关键代码如下:
VTK 的出现与医学图像可视化息息相关,但VTK 对DICOM 格式文件读取功能却并不完善,比
图2 Matlab显示DICOM图像
通常DICOM 图像都有较高的空间分辨率来满足临床诊断需要,一般DICOM 图像的最大灰度值不低于12bit,而一般的显示设备只可以显示8bit,因此对于医学图像显示时,常通过窗位和窗宽的调节用于显示不同密度的部位,即临床上所称的肺窗、骨窗等[6]。CT 图像的显示中,可以通过调节窗宽和窗位来观察不同的组织结构,若用w表示窗宽,l表示窗位,通过以下映射函数将CT 值转换为灰度值:
VTK 图像可视化的基本过程使用了管线机制(如图3 所示),其中包括两个基本模块:可视化管线和渲染管线。可视化管线主要用于获取或创建数据、处理数据、将数据写入文件或将数据传递到渲染管线进行显示,渲染管道主要负责数据的可视化表达[9]。
图3 VTK图像流水线可视化流程
图4 VTK显示脑部MR图像图4 VTK显示脑部MR图像
图4 VTK显示脑部MR图像图4 VTK显示脑部MR图像
可视化管线中的vtkSource(数据源)是可视化流水线的数据源,负责数据的创建或者获取,vtk-Filter(过滤器)主要负责对数据进行处理,vtkMapper(映射器)是可视化管线的终点,负责将图像数据映射为图形数据,是可视化管线和渲染管线之间的桥梁。
渲染管线中的vtkActor(演员)是渲染场景中的实体数据,vtkRender(绘制器)负责图像的渲染绘制,一个绘制器可以绘制多个数据,vtkRenderwindow(窗口)负责可视化窗口的渲染绘制[10]。VTK显示图像的关键代码如下:
(1)标识符占用四个字节,前两个字节是组号,后两个字节是元素号,组号和元素号组成标识符唯一标识特定的数据元素(例如:0010|0010 代表患者姓名,0008|0015 代表检查部位)。相应的标识符检索出来的数据可以在DICOM数据字典中查询;
VTK 作为一个强大的图像处理和可视化工具包,显示图形不用每次经过如此繁琐的流程。VTK提供了vtkImageViewer2 类实现图像的显示。该类封装了以上所提到的可视化管线和渲染管线,提供了窗位窗宽调节、切片及切片方向选择等设置接口,可以方便的完成图像的显示和交互。尤其适用于医学切片显示。主要代码如下:如不能读取多帧DICOM 图像,而且也没有实现对DICOM 图像的写操作。显然使用VTK 现有的类并不满足实际应用的需求,对DICOM 图像的读写操作支持较好的函数库是GDCM 和DCMITK,而ITK就是封装了GDCM 函数库对DICOM 图像进行读写。ITK是一个使用C++语言,面向对象,采用模板编程技术的跨平台开源软件开发包,是针对医学影像领域开发的图像处理和配准的算法平台[11]。
在ITK 中,读写DICOM 文件的功能是由GDCM函数库提供的。ITK 封装了itk::GDCMImageIO 类对象建立与GDCM 库的连接,从而实现读取DICOM 图像的功能[11]。虽然ITK 在DICOM 图像的读写、后处理方面功能更加全面,但是ITK 没有集成可视化的功能,在实际应用中经常与VTK 结合,以便观察结果和进行交互操作[12]。ITK 和VTK 相结合的流程图如图5 所示,由于ITK 和VTK 使用的是不同编程风格和数据处理方式,所以使用itktovtkImageFiltre 类实现数据的连接和交换,即该类是实现ITK到VTK的桥梁。ITK和VTK的坐标系的Y轴方向是相反的,所以使用vtkImageFlip 类对图像进行翻转。最后将图像送入VTK 可视化管线,完成图像的显示功能[13]。
图5 ITK和VTK结合流程图图5 ITK和VTK结合流程图
图5 ITK和VTK结合流程图图5 ITK和VTK结合流程图
Matlab 读取和显示DICOM 图像关键代码如下。
1)导言:导言是用于存放文件的相关说明,共有128个字节;
由于CT图像的成像信号是转化为灰度值保存在DICOM 文件中,所以用dicominfo 函数读取到截距(Rescal Intrcept)和斜率(Rescale Slope)元素进行线性变换,将原图像像素数据转换为有实际意义的ct值。如图2(a)、(b)所示,两幅图从视觉上没有明显差异,但原始图像的像素值都为正值,没有实际意义,转化ct 值图像像素值有正有负,表示人体不同组织对X 射线的吸收率,一般空气的CT 值为-1000,水的CT 值为0,致密骨的CT 值为1000[7]。没有医学背景的图像处理研究者易在此犯错,把原始图像的像素值直接当作图像的ct 值处理。图2(c)是窗位为60HU、窗宽360HU 腹腔窗口图像(该CT 图像默认的窗口,窗位和窗宽信息在元数据中可以读取)图像。图2(d)窗位为700HU,窗宽为1500HU的肺窗口图像。
PBL教学是将基础理论知识和实践有机结合起来,打破学科界限,以问题为主线、以学生为中心进行小组讨论或教学。PBL教学能够让学生在情景中、在教师指导下思考、分析实际问题,进而解决问题。在整个过程中,学生主动参与,自行收集资料,构建有用的知识框架。这种探索式学习历程不仅使学生学到有用的知识,而且能培养其探索意识,以及发现问题、思考问题和解决问题能力,对科研思维的培养、科研能力的提高至关重要。
VTK 作为一个强大的图像处理和可视化工具包,显示图形不用每次经过如此繁琐的流程。VTK提供了vtkImageViewer2 类实现图像的显示。该类封装了以上所提到的可视化管线和渲染管线,提供了窗位窗宽调节、切片及切片方向选择等设置接口,可以方便的完成图像的显示和交互。尤其适用于医学切片显示。主要代码如下:
VTK 的出现与医学图像可视化息息相关,但VTK 对DICOM 格式文件读取功能却并不完善,比如不能读取多帧DICOM 图像,而且也没有实现对DICOM 图像的写操作。显然使用VTK 现有的类并不满足实际应用的需求,对DICOM 图像的读写操作支持较好的函数库是GDCM 和DCMITK,而ITK就是封装了GDCM 函数库对DICOM 图像进行读写。ITK是一个使用C++语言,面向对象,采用模板编程技术的跨平台开源软件开发包,是针对医学影像领域开发的图像处理和配准的算法平台[11]。
在ITK 中,读写DICOM 文件的功能是由GDCM函数库提供的。ITK 封装了itk::GDCMImageIO 类对象建立与GDCM 库的连接,从而实现读取DICOM 图像的功能[11]。虽然ITK 在DICOM 图像的读写、后处理方面功能更加全面,但是ITK 没有集成可视化的功能,在实际应用中经常与VTK 结合,以便观察结果和进行交互操作[12]。ITK 和VTK 相结合的流程图如图5 所示,由于ITK 和VTK 使用的是不同编程风格和数据处理方式,所以使用itktovtkImageFiltre 类实现数据的连接和交换,即该类是实现ITK到VTK的桥梁。ITK和VTK的坐标系的Y轴方向是相反的,所以使用vtkImageFlip 类对图像进行翻转。最后将图像送入VTK 可视化管线,完成图像的显示功能[13]。
DICOM序列图像读取关键代码如下:
//声明像素类型和图像维数,并以此实例化要读取的图像类型
幼儿的主体意识是在生活中逐渐形成并获得发展的,家庭氛围在宝宝主体意识的发展中起到重要作用。以下是3种类型家庭对宝宝主体意识发展的影响:
由于Python第三方库功能强大,越来越多的学者热衷于Python 语言做医学图像处理研究。本文实验用pydicom 库读取20 张肺部CT 图像,并采用cv 库的Otsu 阈值分割法分割出肺实质,结果如图8和图9所示。pydicom库可以读取DICOM文件的全部头文件信息,由于篇幅限制只给出部分头文件信息,如图10所示。
图8 原始肺部CT序列
图9 分割肺实质序列
图10 pydicom读取的部分头文件信息
Matlab 安装便捷,功能强大,语言简洁,使用图像处理工具箱中的医学图像处理函数可以方便快捷地实现医学图像的读写和简单处理。Dicominfo()可以读取DICOM 文件的全部头文件信息,另外Matlab 可以支持多帧DICOM 图像和压缩格式DICOM 图像的读取。Matlab 内置工具箱可应用领域广泛,功能强大,一直以来都是图像处理应用的主流软件之一。
VTK 和ITK 本来就是针对医学影像领域开发的图像处理和可视化工具,ITK 主要用于图像预处理、分割、配准和分析,而VTK 在图像渲染、交互和三维可视化表现出色。但VTK对于DICOM 图像的读取功能不是特别完善,不支持多帧DICOM 图像和压缩格式DICOM 图像的读取,也不支持DICOM格式图像的写操作。得益于GDCM 函数库,ITK 在DICOM图像的读写功能更加全面,而ITK不支持数据的可视化,所以在实际应用中,经常把VTK 和ITK 结合使用,例如:ITK-SNAP、MITK 等医学图像处理平台的开发。ITK 和VTK 的安装与环境配置过程比较复杂,且两者开发所采用的编程风格差异较大,这对使用者在编程方面有较高的要求。不过,ITK 和VTK 提供了丰富的程序接口(C++、Matlab、JAVA、Python等),使用者可以使用熟悉的语言进行开发。
Python 因其简便易懂的语言和众多软件库的支撑而成为最受欢迎的编程语言之一。pydicom是一个读写DICOM 格式文件方面很成熟的库,可以读写所有标准DICOM 文件,包括嵌套序列,还可以读取全部DICOM 头文件信息,而且读取速度非常快,每百张图片大约需要3s[15]。Python在人工智能和深度学习方面的成就也使得越来越多的研究人员将Python 作为医学图像处理相关应用的开发语言,再结合医疗数据样本量巨大的优势,开发一些辅助医疗的设备和应用。
DICOM 标准作为医学图像文件的国际标准,是部署最广泛的医疗信息标准之一,目前有百亿级符合DICOM 标准的医学图像用于临床,是专业医学图像处理和分析人员必须掌握的一种图像格式。而且不论是做医学图像后处理、可视化还是人工智能,正确读取标准DIOCM 文件信息往往是第一步。本文介绍了目前常用的可以解析DICOM 文件的第三方库和读写方法,在工程中引入它们能够高效地进行项目开发,而不需要使用者了解过多的底层解析操作,把精力可以集中在新技术理论研发上。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!