访问DICOM文件中的数据

杰夫·马瑟(Jeff Mather), MathWorks


DICOM(数字成像和医学中的通信)格式描述了如何构图在映像模式之间发送消息(例如。,计算机断层扫描(CT),磁共振(MR)和超声装置),并定义一组用于在网络上传输它们的操作。这些消息也可以写入图片存档系统,CD或其他类型的存储设备上的脱机存储文件。DICOM格式化的消息将图像和元数据组合以创建医学成像过程的丰富描述。这种格式非常详细,规格长度超过2,500页。

MATLAB和图像处理工具箱轻松访问DICOM数据。访问DICOM文件中的数据变得简单,与TIFF或JPEG图像一起使用。本文介绍了使用DICOM的示例,并提供有关该格式的背景信息。

在DICOM之前:混乱

DICOM在医疗设备之间进行了显着改善的沟通,降低了整合硬件和软件解决方案的成本和复杂性。金宝搏官方网站在DICOM之前,每个制造商使用专有的图像格式和通信协议将其硬件解决方案与第三方产品连接。金宝搏官方网站下载188bet金宝搏将医疗硬件和软件从不同的供应商集成到意味着从一个供应商的协议转换为另一个供应商。这个过程是混乱的,充满了困难。山寨行业发展提供数据翻译服务。

随着1993年DICOM作为正式标准的出现,一个协议取代了许多协议和格式。DICOM是一种通用格式,可以方便地集成来自不同供应商的解决方案。金宝搏官方网站例如,可以在不使用翻译设备的情况下,将通用电气医疗系统公司的磁共振扫描仪与爱克发公司的图片存档系统(PACS)和其他供应商的胶片打印机集成在一起。集成不仅仅局限于硬件。支持DICOM的软件(如MATLAB)可以与所有这些设备共金宝app享图像,前提是每个硬件设备都实现了必要的DICOM服务。

一个简单的第一个例子

在医学成像中,患者受到成像研究,其中可能包含多个系列的图像。每个系列都是在一个单独的适用例如磁共振、CT或x光设备,可以有多个相关的图片.假设我们有一项研究由一系列20横向MRI脑图像组成,我们希望将它们读入MATLAB。(这20个图像存储在20个DICOM文件中,其中名称如Brain_017.dcm.,你可以从上面下载Matlab Central.如果您想运行示例。)假设我们知道每个图像是256 × 256的,并且包含有符号的16位数据。我们可以用下面的代码来阅读这个系列:

%预先采用256-×256×1×20图像阵列。x = repmat(Int16(0),[256 256 11 20]);
%读取了一系列图像。对于p = 1:20 filename = sprintf('brain_%03d.dcm',p);x(:,:,1,p)=​​ dicomread(文件名);结尾
%显示图像堆栈。蒙太奇(X,[])

运行此代码后,MATLAB工作区包含一个带有图像数据的4-D阵列,将出现一个MR切片的图。

单击图像以查看放大视图。

您可以使用MATLAB和图像处理工具箱进行此数据执行多个任务。例如,MATLAB提供复杂的卷可视化技术,以从这些切片重建3-D表面,然后施加表面和照明效果。帮助部分中的示例isocaps.函数显示了这个实现。的imtransform.tformarray图像处理工具箱中的功能使其容易从横向数据中提取不同方向的切片。例如,“从三维MRI数据集提取切片“示例示出了如何从类似数据集中提取Saggital切片。您还可以使用图像处理工具箱内的形态函数来执行图像分段,特征提取和图像统计等操作。或者,您可以编写自己的函数来执行卷估计,收缩包装等

访问DICOM元数据

在前面的示例中,我们在预先释放存储阵列时造成了多种假设。所有这些假设都基于DICOM文件中存在的元数据。此外,图像像素的值限制在图像的总可能动态范围内的窄带,因此我们必须将空数组传递为特殊参数剪辑重新缩放数据。让我们使用DICOM文件中的元数据属性(1)智能地预分配数组,(2)重新缩放数据值以填充16位动态范围。

因为系列中的所有图像必须具有相同的维数和位深,所以我们只需要从系列中的一个图像中获取元数据就可以预分配数组。的图像处理工具箱函数dicominfo.返回DICOM文件中的元数据。

如您所见,有许多元数据值或属性.“行”,“列”和“BitsStored”的值究竟需要知道的内容,我们可以重写读取图像堆栈的代码。

nRows = info.Rows;nCols = info.Columns;nPlanes = info.SamplesPerPixel;nFrames = 20;%目录中的文件数
x = repmat(Int16(0),[nrows,ncols,nplanes,nframes]);
对于p = 1:nframes fname = sprintf('brain_%03d.dcm',p);x(:,:,:p)= dicomread(fname);结尾

我们仍然想当然地认为图像包含有signed data,“PixelRepresentation”的值为“1”表示该类型的数据,但是我们需要的其他信息很容易获得。我们可以使用这些元数据和Imlincomb.在图像处理工具箱中的功能,以重新扫描图像数据以填充整个16位动态范围。重新缩短灰度值的线性组合是“y =(x-b)* m”,其中b是最小x值,m是从输入和输出范围导出的恒定比率。

%保持最小和最大像素值。minpixels = repmat(0,[1,nframes]);maxpixels = repmat(0,[1,nframes]);
对于p = 1:nframes fname = sprintf('brain_%03d.dcm',p);info = dicominfo(fname);minpixels(p)= info.smallestimagepixelvalue;maxpixels(p)= info.largestimagepixelvalue;结尾
%重新缩放图像,从0开始。b = min (minPixels);m = 2^16/(max(maxPixels) - b);Y = imlincomb(m, X, -(m * b), 'uint16');

关于DICOM元数据的详细信息

如前一个示例所示,一个典型的DICOM文件包含许多属性。这样做的原因是DICOM消息封装所有关于医学成像过程的信息,包括关于患者,研究,成像模态和图像系列的细节,除了存储在文件中的图像帧之外。一起,所有这些属性都包含一个信息对象。

DICOM规范包含许多信息对象定义(iod),如MR图像、超声多帧图像、放疗计划等。上面示例中的DICOM文件包含MR图像信息对象。Dicomread.了解DICOM规范中列出的大多数IOD。

IOD在较小的功能单位方面定义,或者模块,这对应于特定的现实世界对象,例如患者,成像设备等。DICOM中的百分之一模块描述了可以组合以制作DICOM信息对象的所有内容。例如,下表列出构成MR Image Iod的模块:

MR Image IOD中的模块:

模块描述有关患者的患者细节有关该研究的一般信息,一组成像程序患者研究(U)关于患者的信息,在研究的一般系列一般信息关于一个特定成像过程的一般信息,参考信息的参考信息框架到空间相关图像在一系列通用设备中,关于图像模块的一般信息,其产生了串联图像平面切片厚度/位置/间距和其他方向细节图像像素和关于如何的图像像素和关于如何解释它们对比度/推注(c)细节在对磁共振成像的特定于磁共振成像覆盖平面(U)图形或位图文本的成像时给出的药物的细节,以显示用特定图像VOI LUT(U)信息来转换对比度或图像的强度SOP创建和其他通用DICOM DETAI的公共日期/时间LS.

一些模块,如患者,一般研究,一般设备,和图像像素,在许多iod中都可以找到。其他模块只出现在特定的iod中。例如,MR Image模块只是MR Image IOD的一部分。

IOD包含描述特定医学成像过程的患者,研究,系列和图像的模块。另外,请注意,某些模块在其名称附近具有“(c)”或“(u)”,这意味着对于此IOD,它们是“有条件需要的”或“用户可选”模块;条件和用户可选模块可以在每个MR图像IOD中出现或可能不会出现。例如,如果在成像时给出了药物,则只会出现对比度/推注模块,并且VOI LUT模块不必由写入DICOM文件的设备实现。

所有模块和属性都在DICOM规范的PS 3.3中定义,可在线提供国家电气制造商协会.此外,所有定义的属性都在数据字典中列出。供应商有时会定义特定于其硬件的私有属性。而您不需要执行任何特殊操作来读取私有属性Dicomread.dicominfo.,如果您想提供不属于DICOM规范的属性的附加信息,您可以提供自己的数据字典。

编写DICOM文件

我们现在将创建一个新的DICOM文件。编写新文件需要图像和元数据。我们在上面的一个示例中使用缩放数据创建了一个新图像,dicomwritedicominfo.将帮助我们创建我们需要的元数据。

要编写DICOM文件,只需使用dicomwrite图像处理工具箱.目前,该函数支持创建Secondary Captu金宝appre (SC) Image iod,其中包含正确解释图像所需的所有像素数据和元数据。从本质上讲,SC图像类似于您使用帧捕捉器生成的图像,或者您自己从头或从另一个图像生成的图像(如上面的示例)。将显示关于患者、图像和研究的元数据,但不会显示生成图像的原始硬件的信息。

要使用默认元数据将缩放后的图像的第十帧写入新文件,请使用dicomwrite及其基本语法:

帧= y(::::,10);filename ='brain_scaled_10.dcm';dicomwrite(框架,文件名)

在这个例子中,dicomwrite推断所需的元数据,在适当的地方填充空白值。若要覆盖默认值,请提供dicomwrite使用包含属性的结构:

info = dicominfo('brain_001.dcm');dicomwrite(框架,文件名,信息)

dicomwrite选择适用于辅助捕获IOD的值并忽略其余部分。什么时候dicomwrite创建一个新文件时,它实际上执行了两个操作。首先,它创建一个Secondary Capture信息对象。然后,它对信息对象的属性进行编码,将它们转换为写入输出文件的字节流。最后一步演示了DICOM的概念服务

服务提供了一组要在对象上执行的具体操作。常见的服务包括存储、打印管理、验证和查询/检索。在处理网络消息时,服务是通过向消息添加额外的属性,然后向接收机器或应用程序发送一系列指令来实现的,接收机器或应用程序解码额外的属性,以确定如何处理消息。当使用DICOM文件时,属性被添加到文件中,写入或读取文件将替换指令的传输。

编写包含DICOM数据的文件非常类似于执行存储服务。从本质上讲,IOD的属性加上存储服务的属性以及写入磁盘时的“冻结”。读取文件“解冻”IOD和Service属性,保留了与信息处理的整个上下文。

DICOM标准中的编码规则提供了将属性转换为要传输或存储的一系列字节的算法。在编码过程中可以使用不同的字节排序方案,并且可以使用多种技术来压缩图像像素,例如JPEG或行程长度编码。在对dicomwrite上面,使用所谓的“隐式VR,小endian”样式来编码文件,并且像素未被压缩。

合作

一大堆转移语法明确定义如何解码DICOM消息。其中一种传输语法出现在DICOM网络传输的开头或DICOM文件的开头。如果发送方/写入方和接收方/读取方都支持相同的传输语法,则通信将继续进行。金宝app否则,沟通失败。MATLAB中的DICOM特性和图像处理工具箱支持最常用的传输语法。金宝app

有了所有这些可能性(iod、可选模块、服务和转换语法),就很难确切地知道两种模式之间的相互作用有多好。实现服务需要知道要发送或接收哪些属性。此外,要使服务有用,通常需要知道将什么类型的数据放入属性中,并验证信息是否正确。因此,很少有制造商支持DICOM中可能的全套“服务-对象对”。金宝app此外,不同的应用程序支持不同的传输语法。金宝app

幸运的是,实现DICOM一部分的每个应用程序都应该知道它支持的内容。金宝app制造商发布有关在DICOM中支持的服务,IOD和传输语法的信息金宝app一致性陈述.通过比较来自两个不同供应商的语句,您可以确定两个应用程序是否可以共享信息。

DICOM的无限可能性

DICOM使获取医学图像并将其放入文件变得容易。它在医学领域变得越来越普遍。

许多医疗设备制造商和软件制造商正在为任何可以使用医学图像和数据的产品添加DICOM。

使用MATLAB和图像处理工具箱可以方便地访问DICOM文件中的医学图像、模态元数据和患者信息。它们还提供数值和图像处理算法、gui构建工具和可视化技术。通过MATLAB、图像处理工具箱和DICOM,可以快速查看医学图像,设计和测试新的模式,并创建gui驱动的医学图像分析系统。

2002年出版

下载188bet金宝搏产品使用

查看相关行业的文章