Torchio学习随笔(1)-Image
1.Image
Image类,代表一个储存着
- 4D张量(信号强度,分割标签)
- 仿射变换
的医学影像
Image类有两种子类:ScalarImage和LabelMap

上图显示了Image的两个子类的实例,其中ScalarImage包含了一个shape为(4,128,128,94)的4D张量、一个仿射矩阵、梯度强度和梯度方向,代表一个dMRI;而下面LableMap包含了ScalarImage中同一受试者的大脑剖析图、仿射矩阵、大脑结构标签和颜色。
Image的实例可以通过
1.文件路径
2.Pytorch张量
3.Numpy张量来创建
1.1 torchio.ScalarImage类
一种图像,其像素值代表标量
1.1.1 实例的创建
import numpy as np
import torch
import torchio as tio
#从文件中创建ScalarImage实例
smri = tio.ScalarImage('../数据/someones_anatomy.nii.gz')
#从张量中创建实例
dmri = tio.ScalarImage(tensor=torch.rand(32, 128, 128, 88))
#从numpy中创建实例
test = tio.ScalarImage(tensor = np.random.rand(32, 128, 128, 88))
1.1.2 实例的调用
上面提到过每个ScalarImage包含了多种信息
#直接输出实例信息,包含了shape,spacing,orientation,type,memory信息
print(smri)
#实例的仿射矩阵
smri.affine
#实例的数据
smri.data
1.2 torchio.LabelMap类
一种图像,其像素值代表分类标签
1.2.1 实例的创建
#定义一个布尔值张量
booltensor = torch.rand(1, 128, 128, 68) > 0.5
#从张量中创建
labels = tio.LabelMap(tensor=booltensor)
1.2.2 实例的调用
labels.affine
labels.data
1.3 torchio.Image类
1.3.1 参数
- path - SimpleITK 或 nibabel 可以读取的文件路径或文件路径序列,或包含 DICOM 文件的目录。如果给定tensor,则不会读取路径中的数据。如果给出了一系列路径,则数据将在通道维匹配
- type - 图像的类型,torchio.INTENSITY or torchio.LABEL等
- tensor - 4D torch.Tensor或Numpy array shape为 (C,W,H,D)
- affine - 4x4的仿射矩阵,将体素坐标转换至标准参考空间
1.3.2 方法
#转换为PIL实例
#转换为sitk实例
smri_sitk = smri.as_sitk
#获取图像中心坐标
smri.get_center()
(-1.0, -0.25, -15.375)
#from_sitk()从sitk图像中创建
import torchio as tio
import SimpleITK as sitk
sitk_image = sitk.Image(20, 30, 40, sitk.sitkUInt16)
i1 = tio.LabelMap.from_sitk(sitk_image)
sitk_image = sitk.Image((224, 224), sitk.sitkVectorFloat32, 3)
i2 = tio.ScalarImage.from_sitk(sitk_image)
#save()保存一个image
data = dmri.data*2
two_dmri = tio.ScalarImage(tensor=data)
two_dmri.save('two_test.nii.gz')
#获得包含图像数据的numpy 数组
dmri.numpy()
#获取影像的方向
dmri.orientation
('R', 'A', 'S')
#获取图像的通道数
dmri.num_channels
32
#展示图像
smri.plot()

#返回图像尺寸(C,W,H,D)
dmri.shape
(32, 128, 128, 88)
#返回(W,H,D)
dmri.spatial_shape
(128, 128, 88)
#每个体素素的物理长度(mm)
smri.spacing
(2.75, 2.75, 2.75)

浙公网安备 33010602011771号