了解DICOM图像属性以获得轴向/冠状/矢状切割

时间:2016-01-14 05:38:43

标签: dicom

我必须在c#中编写一个程序,能够解析DICOM并显示轴向,冠状和矢状切口。

似乎这是很多工作,但我必须这样做!

重要的第一步是了解DICOM文件。

我一直在阅读本教程http://dicomiseasy.blogspot.ru/,但他正在使用这个我不允许购买的RZDCX库。

关于DICOM属性还有一些很好的解释,我也一直在阅读标准的某些部分(首先是第3部分)

但是我很难理解它们。有那些图像属性:像素表示,像素数据,平面配置...我想理解它们是非常重要的是能够显示图像,我想我应该更多地了解像素实际如何工作以更好地理解

但仍有一件事我无法弄明白:

我想如何或在哪里进行这三种不同的削减? (轴向/冠状/矢状)。我一直在寻找标准中关于它们的属性,但我没有找到任何属性。所以我们可能会通过某种计算找到它们,但我不知道哪个变量应该用哪个公式?

4 个答案:

答案 0 :(得分:7)

你是对的,这是一项相当大的任务!你可能不会在这里找到能为你提供分步教程的人,但有些提示:

  1. DICOM标准很尴尬,一开始需要陡峭的学习曲线。 DICOM Cookbook帮助我熟悉文档的术语和结构。
  2. 还有很多其他工具包,其中一些是免费的,并附带非常自由的许可证,例如DCMTK。这些消除了学习如何以各种二进制格式编码信息的负担,这些格式略有不同,并提供了一个统一的API来轻松访问信息。我强烈建议不要从头开始编写自己的DICOM实现。
  3. 定义切片或帧的3D位置和方向的DICOM属性为ImagePositionPatient(0020,0032),ImageOrientationPatient(0020,0037)和PixelSpacing(0028,0030) )。这些可用于正确排序切片并计算插值交叉切片。
  4. 确保查看增强型CT / MR信息对象定义。通常,有两种方法可以在DICOM中存储图像堆栈:单帧(每个图像一个文件)和多帧(一个文件用于一个或多个图像堆栈)。它们在获取上述信息方面有所不同。
  5. HTH祝你好运!

答案 1 :(得分:1)

这是一个用于查找IMA文件平面的python实现。 参考: http://dicomiseasy.blogspot.com/2013/06/getting-oriented-using-image-plane.html

import pydicom # for gettind information out of the IMA files
import numpy as np

"""
This function takes IOP of an image and returns its plane (Sagittal, Coronal, Transverse)
"""

def file_plane(IOP):
    IOP_round = [round(x) for x in IOP]
    plane = np.cross(IOP_round[0:3], IOP_round[3:6])
    plane = [abs(x) for x in plane]
    if plane[0] == 1:
        return "Sagittal"
    elif plane[1] == 1:
        return "Coronal"
    elif plane[2] == 1:
        return "Transverse"

a=pydicom.read_file("path\to\your\DICOM\file.IMA")
IOP = a.ImageOrientationPatient
plane = file_plane(IOP)

答案 2 :(得分:0)

有时您必须构建不同的视图。例如,如果您有一个与主体成轴向的CT图像集,那么您可以通过适当地采样图像集来为冠状和矢状视图创建自己的切片。我首先编写代码来简单地显示您拥有的数据作为起点。在工作的时候,你将对这些问题有更深入的了解。

答案 3 :(得分:0)

这个问题已经是3年了,但也许我的回答会对某人有所帮助。

@ user6867490已经引用了罗尼·扎哈里亚(Roni Zaharia)美丽的article

我唯一要添加的是: 您只需通过书写即可访问图像方向(患者),标签(0020,0037)

f = dicom.read_file(dicom_file_name)
f.ImageOrientationPatient

如果您能获得:

['1','0','0','0','0','-1']您正在处理矢状平面视图

['1','0','0','0','1','0']您正在处理的是轴向平面视图

在我的情况下,有一个包含一些Saggital图像和许多Axial视图(我实际上需要)的数据集。因此,我只是简单地遍历整个数据集,并进行了简单的逻辑比较,以过滤掉所有下陷。