【TorchIO】基本介绍、图像数据读取、图像数据结构、仿射变换、数据集

TorchIO

背景介绍

深度学习用于医学图像分析,如MRI、CT等面临着多种挑战:

  1. 计算量巨大;2. 数据量少; 3. 需考虑空间数据。

基本介绍

开源Python库,沿用Pytorch风格,开拓Pytorch的应用至医学图像计算领域

TorchIO:https://torchio.readthedocs.io/
TorchIO-github:https://github.com/fepegar/torchio/
Pytorch:https://pytorch.org/

Image图像数据

参考:Torchio学习随笔(1)-Image

Image类存储医学影像: 4D张量(信号强度、分割标签)+仿射变换
子类:ScalarImage和LabelMap

  • ScalarImage包含一个shape为(4,128,128,94)的4D张量、一个仿射矩阵、梯度强度和梯度方向,代表一个dMRI;
  • LableMap包含ScalarImage中同一受试者的大脑剖析图、仿射矩阵、大脑结构标签和颜色

参考:Torchio的图像数据结构

数据读取

数据读取方式:

  1. 直接读取图像文件路径;
  2. pytorch张量:从torch.tensor中转换;
  3. numpy张量:从numpy.array中转换。

附:

  1. 张量的理解:一个多维数组,形成更高维度的矩阵、向量。
    参考:什么是张量(tensor)& 深度学习
  2. 仿射变换的理解:“线性变换”+“平移”
    参考:如何通俗地讲解「仿射变换」?

读取数据集

读取nii数据集示例

ScalarImage标量图像

  • 像素值代表标量
  • 无论是以何种方式读取,转换成ScalarImage后,需要从ScalarImage.data中获取图像实际矩阵的内容。

ScalarImage.affine

ScalarImage类封装的affine对象是一个4x4的仿射矩阵,表示从图像坐标转换成世界坐标的变换矩阵。

  1. 如果是从文件中读取ScalarImage,通常图像文件在获取时会包含这个affine矩阵;
  2. 如果是从tensor或array中转换,则affine矩阵默认会被置为4x4的单位阵。

举例

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))

#直接输出实例信息,包含shape,spacing,orientation,type,memory信息
print(smri)
#实例的仿射矩阵
smri.affine
#实例的数据
smri.data

LabelMap标签图像

  • 像素值代表分类标签
  1. 在分割任务中,通常ScalarImage和LabelMap是成对组成一个对象并进行预处理变换
  2. 所有强度变换对LabelMap均无效
  3. 对于插值操作,尽管在变换过程中用户可能指定其他插值方式,但对于LabelMap插值方式一定被置为最近邻插值
#定义一个布尔值张量
booltensor = torch.rand(1, 128, 128, 68) > 0.5
#从张量中创建
labels = tio.LabelMap(tensor=booltensor)
#实例的调用
labels.affine
labels.data

随机仿射变换

随机仿射变换命令解析

数据集

https://github.com/TorchIO-project/torchio-data

你可能感兴趣的:(医学图像处理,python,笔记,图像处理)