访问DICOM文件中的数据

作者:杰夫·马瑟

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

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

在DICOM之前:混乱

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

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

一个简单的第一个例子

在医学成像中,患者需要进行成像学习,其中可能包含多个系列图像。每个系列在单个模式例如MR、CT或X射线设备,并且可以有多个相关的图片。假设我们有一项由20幅横向MRI大脑图像组成的研究,我们希望将其读入MATLAB。(这20幅图像存储在20个DICOM文件中,文件名如下brain_017.dcm,你可以从MATLAB中心如果您想运行示例。)假设我们知道每个图像是256×256的,并且包含有符号的16位数据。我们可以使用以下代码读取该系列:

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

运行此代码后,MATLAB工作区包含一个包含图像数据的4-D阵列,并显示MR切片图。

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

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

访问DICOM元数据

在上一个示例中,我们在预分配存储阵列时做了几个假设。所有这些假设都基于DICOM文件中存在的元数据。此外,图像像素的值被限制在图像总可能动态范围内的窄带内,因此我们必须将空数组作为特殊参数t传递o蒙太奇重新缩放数据。让我们使用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:n帧fname=sprintf('brain_%03d.dcm',p);X(:,:,:,p)=dicomread(fname);结束

我们仍然必须想当然地认为图像包含签名数据&msdash;值为“1”的“PixelRepresentation”表示该类型的数据,但我们需要的其他信息很容易获得。我们可以将此元数据与伊姆林科姆函数,用于重新缩放图像数据以填充整个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=最小(最小像素);m=2^16/(最大像素数)-b;Y=imlincomb(m,X,-(m*b),‘uint16’;

有关DICOM元数据的详细信息

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

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

IOD在较小的功能单元方面定义,或者模块,对应于特定的真实对象,如患者、成像设备等。DICOM中的大约一百个模块描述了可以组合成DICOM信息对象的所有内容。例如,下表列出了构成MR图像IOD的模块:

MR图像IOD中的模块:

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

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

IOD包含描述特定医疗成像程序的患者、研究、系列和图像的模块。另外,请注意,一些模块的名称附近有一个“(C)”或“(U)”,这意味着对于这个IOD,它们是“有条件地需要”或“用户可选”模块;条件和用户可选模块可能出现在每个MR图像IOD中,也可能不出现。例如,仅当成像时给予药物时,对比度/团注模块才会出现,并且VOI LUT模块不必由写入DICOM文件的设备实现。

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

编写DICOM文件

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

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

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

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

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

info=dicominfo('brain_001.dcm');dicomwrite(帧、文件名、信息)

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

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

写入包含DICOM数据的文件非常类似于执行存储服务。本质上,IOD的属性加上存储服务的属性在写入磁盘时被组合并“冻结”。读取文件将“解冻”IOD和服务属性,并保留处理信息的整个上下文。

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

合作

许多转移语法明确定义如何解码DICOM消息。其中一个传输语法出现在DICOM网络传输的开头或DICOM文件的开头。如果发送方/写入方和接收方/读取器都支持相同的传输语法,则通信将继续进行。否则,通信就会失败。MATLAB中的DICOM功能和图像处理工具箱支持最常用的传输语法。万博1manbetx

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

幸运的是,每个实现DICOM一部分的应用程序都应该知道它支持什么。制造商在DICOM中发布他们支持的服务、IOD和传输语法的信息万博1manbetx一致性声明.通过比较来自两个不同供应商的语句,您可以确定两个应用程序是否可以共享信息。

DICOM的无限可能性

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

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

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

2002年出版


s manbetx 845使用的产品

查看相关行业的文章