SimpleITK之Image基础

提纲

SimpleITK简介

SimpleITK在Insight Toolkit (ITK)之上构建的简化层,旨在促进其在快速原型设计、教育和解释语言中的使用。SimpleITK作为图像处理和分析的工具包的独特之处在于,它将图像视为物理对象,占用物理空间中的一个有界区域。此外,图像在每个轴上的像素间距可能不同,而且轴不一定是正交的。下图说明了这些概念。
在这里插入图片描述

Image的四个要素

  • Origin
  • Size
  • Spacing
  • Direction
    这些属性是图像的元数据。从图像索引中计算物理坐标需要所有四个组件。以下代码展示了如何读取和设置四个元数据。
import SimpleITK as sitk
import numpy as np

image = sitk.ReadImage(filepath)#filepath是欲读入的一张图片
print('origin: ' + str(image.GetOrigin()))
print('size: ' + str(image.GetSize()))
print('spacing: ' + str(image.GetSpacing()))
print('direction: ' + str(image.GetDirection()))

除了读取,还可以通过一下语句重新设置这些参数

image.SetOrigin((1,1,1))
image.SetSpacing([0.5,0.5,3.0])

SimpleITK和Numpy的转换

SimpleITK和numpy索引访问是相反的顺序!
SimpleITK: image[x,y,z]
numpy: image_numpy_array[z,y,x]

SimpleITK2Numpy:

GetArrayFromImage():返回图像数据的副本。然后可以自由地修改数据,因为它对原始SimpleITK图像没有影响。
GetArrayViewFromImage():返回图像数据的一个视图,该视图对于以内存有效的方式显示非常有用。您不能修改数据,并且如果原始的SimpleITK图像被删除,视图将是无效的。

nda = sitk.GetArrayFromImage(image)
print(image_3D.GetSize())
print(nda.shape)

Numpy2SimpleITK

GetImageFromArray():返回一个SimpleITK图像,原点设置为0,所有维度的间距设置为1,方向余弦矩阵设置为identity。强度数据从numpy数组中复制。在大多数情况下,您需要设置适当的元数据值。

// 创建一个numpy数组
nda = np.zeros((10,20,3))
#以下语句生成的img应该是一个3D灰度图,image [x=3, y=20, z=10]
img = sitk.GetImageFromArray(nda)
print(img.GetSize())

读取DICOM序列

reader = sitk.ImageSeriesReader()
reader.MetaDataDictionaryArrayUpdateOn()#这一步是加载公开的元信息
reader.LoadPrivateTagsOn()#这一步是加载私有的元信息
series_IDs = sitk.ImageSeriesReader.GetGDCMSeriesIDs(directorypath)#根据文件夹获取序列ID,一个文件夹里面通常是一个病人的所有切片,会分为好几个序列
dicom_names = reader.GetGDCMSeriesFileNames( directorypath,series_ID)#选取其中一个序列ID,获得该序列的若干文件名
reader.SetFileNames(dicom_names)#设置文件名
image3D = reader.Execute()#读取dicom序列

访问像素和切片

可以使用GetPixel和SetPixel函数,也可以使用python的切片操作符。

image_3D = sitk.Image(256, 128, 64, sitk.sitkInt16)
print(image_3D.GetPixel(0, 0, 0))
image_3D.SetPixel(0, 0, 0, 1)
print(image_3D.GetPixel(0, 0, 0))

当然也可以通过python的方式来实现

print(image_3D[0,0,1])
image_3D[0,0,1] = 2
print(image_3D[0,0,1])
  • 11
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值