SimpleITK的使用介绍

本文介绍了SimpleITK库在图像处理中的应用,包括物理空间的图像属性、元数据、图像创建、像素访问、图像操作、与Numpy的交互、读写操作、元数据获取、窗口级宽度设置和重采样。重点强调了元数据的重要性以及SimpleITK与Numpy索引的区别。
摘要由CSDN通过智能技术生成


总结:

  1. 物理空间上的图像有以下属性:

    • Origin:原点
    • Size:大小–每一维度的像素数
    • Spacing:像素之间的实际距离(nm、mm、km)
    • Direction cosine matrix:物理空间上的轴线方向

    这些属性是图像的元数据(meta-data)。从图像索引计算物理坐标需要所有四个组件。

  2. 图像可以包含元数据字典(meta-data)。这种补充信息通常包括图像模态(如CT)、患者姓名和与图像采集有关的信息。

  3. 图像初始化: 用户指定的像素类型,用户指定的维度(2,3),原点为零,所有维度的单位间距和单位方向余弦矩阵,强度设置为零。

  4. Data transfer to/from numpy: GetArrayFromImage(copy),GetArrayViewFromImage(immutable),GetImageFromArray (copy) +set the meta-data yourself.

  5. resampling导致全黑图像的一个常见问题是由于(a)对期望输出图像的空间域(元数据)的不正确规范;或者(b)使用从输出空间域到重新采样图像的转换映射的逆。

1. 物理空间上的图像

在这里插入图片描述

2. 像素值类型

像素类型表示为枚举类型,如下表:
在这里插入图片描述

3. 图像制造

制作一张图片,要求具备以下元素:

Pixel type Size Origin Spacing Direction matrix

例如:

image_3D = sitk.Image(256,128,64,sitk.sitkInt16)

4. 基础图像属性命令(Meta-Data)

你可以改变图像的原点,间距和方向。应该谨慎地对已经包含数据的图像进行此类更改。
在这里插入图片描述

5. 访问像素和切片

访问像素或者改变像素值可以使用GetPixel和SetPixel函数,访问切片可以使用python的切片操作符。访问函数和图像切片操作符的顺序为[x,y,z]。
在这里插入图片描述

6. 图像操作

SimpleITK支持图像之间的基本算术操作,同时考虑到元数据。图像必须在物理上(逐像素)重叠。
物理属性(元数据值)需要多接近才能被认为是等价的?
在这里插入图片描述
还支持比较运算符(>,>=,<,<=,==),用于返回二进制图像。
在这里插入图片描述

7. SimpleITK、Numpy的索引区别

SimpleITK和numpy对应的索引下标是相反的!

SimpleITK: image[x,y,z]
numpy: image_numpy_array[z,y,x]

8. SimpleITK2Numpy和Numpy2SimpleITK

  1. GetImageFromArray(): 返回图像数据的副本。然后,你可以自由地修改数据,因为它对原始的SimpleITK图像没有影响。
  2. GetArrayViewFromImage():返回对以内存有效方式显示有用的图像数据的视图。如果原始SimpleITK图像被删除,你将无法修改数据,视图将无效。
  3. GetImageFromArray():返回一个简单的图像,原点设置为零,所有维度的间距设置为1,方向余弦矩阵设置为单位矩阵。强度数据从numpy数组中复制。在大多数情况下,您需要设置适当的元数据值。

9. Reading 与 Writing 操作

SimpleITK可以读写存储在单个文件或一组文件(如DICOM系列)中的图像。该工具包提供了面向对象和过程接口。主要的区别是,面向对象的方法提供了更多的控制,而过程接口更方便。

我们以DICOM图像为例来说明这一差异。以DICOM格式存储的图像有一个与之关联的元数据字典,该字典由DICOM标记填充。当将DICOM映像系列作为单个映像卷读取时,不会填充结果映像的元数据字典,因为DICOM标记特定于该系列中的每个文件。如果使用过程式方法阅读本系列,则无法访问与每个文件关联的元数据字典集。要获得每个字典,您必须分别访问每个文件。另一方面,如果使用面向对象接口,则可以从用于读取DICOM系列的ImageSeriesReader访问词典集。

如果是读取一份图像,例如“file.nrrd",则可以通过以下方式:

image = sitk.ReadImage('file.nrrd')

对于‘.dcm’格式的文件,往往一份图像对应一系列的‘.dcm’文件,每一份‘.dcm’文件对应该图像的一张切片。你仍旧可以使用ReadImage读取一张切片,即一份‘.dcm’文件,但是大多数情况下你需要读取一份完整的图像,这个时候就需要ImageSeriesReader帮你完成操作。

seriesReader = sitk.ImageSeriesReader()
seriesIds = seriesReader.GetGDCMSeriesIDs
  • 9
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值