BraTs数据集处理及python读取.nii文件
Posted JWangwen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BraTs数据集处理及python读取.nii文件相关的知识,希望对你有一定的参考价值。
导师让做一个关于脑肿瘤分割的小项目,今天开始学习图像分割和MRI相关知识!(md从分类到检测再到分割,从遥感图到脑部图,我真的会谢…生气)
数据集
BraTS 是MICCAI脑肿瘤分割比赛的数据集,BraTs 2018中的训练集( training set) 有285个病例
每个病例有四个模态(t1、t2、flair、t1ce),需要分割三个部分:whole tumor(WT), enhance tumor(ET), and tumor core(TC),相当于三个label。
每例病例中包含4种模态的MRI序列和1个seg文件,所有序列尺寸全部为(240, 240, 155),如下图:
MR图像属性信息:(240x240x155)一个MR序列有155张图片,每张图片的大小为240x240
HGG、LGG
BraTs训练集( training set) 又划分为HGG和LGG,他们分别表示:
HGG :高级别胶质瘤(WHO3~4级) 为低分化胶质瘤;这类肿瘤为恶性肿瘤,患者预后较差。
LGG :低级别胶质瘤(WHO1~2级) 为分化良好的胶质瘤;虽然这类肿瘤在生物上并不属于良性肿瘤,但是患者的预后相对较好。
Domain shift 域转移
即试图将学习的模型应用于与训练数据(源域)分布不同的测试数据(目标域)上,其性能会下降。由于医学图像多模态,数据域偏移的情况更加自然和严重。如下图所示,不同的医学图像(核磁共振(MR)成像和计算机断层扫描(CT))可以看到两幅图像的心脏区域在视觉上明显不同。毫无疑问的是,网络在MR图像上进行训练后不能用于CT图像上的测试。
多模态
多模态通俗地讲就是一个东西可以有多种不同的形态表现,个人理解四个模态就相当于channels。BraTs数据集中有t1、t2、t1ce、flair四个模态,而在医学界,把像 t1、t2、t1ce、flair这样的称为序列,一个病例的可以有多个序列,每个序列由许多切片组成, 此外,获得每种序列的方式不同,例如t1、t2是由于测量电磁波的物理量不同而产生的两种不同的序列,再例如t1ce序列要在做MR之前往血液打造影剂.
nii格式数据
标准NIFTI图像的扩展名是.nii,也包含了头文件及图像资料,NIFTI格式也可使用独立的图像文件(.img)和头文件(.hdr)。
nii图像为三维图像,进行切片后分别表示
矢量面Median sagittal section (人体从前向后切开)
冠状面coronal section (人体沿左向右切开)
水平面Transverse section
读取nii文件方法
1.NII文件可以直接用软件ITK-SNAP 打开
2.利用代码进行解析
2.1 安装torchio
pip install torchio
读取文件并显示图片(以下仅读取t1):
import torchio as tio
t1_path = 'BraTS19_2013_2_1_t1.nii.gz'
t1_img = tio.ScalarImage(t1_path)
t1_img.plot()
t1显示如下:
2.2 安装nibabel:
pip install nibabel
读取文件并显示图片(以下仅读取t1):
import nibabel as nib
import matplotlib.pyplot as plt
import numpy as np
img = nib.load('BraTS19_2013_2_1_flair.nii.gz')
print(img.shape) # shape(240, 240, 155)
print(img.header['db_name'])
width, height, queue = img.dataobj.shape # 由文件本身维度确定,可能是3维,也可能是4维
#print("width",width) # 240
#print("height",height) # 240
#print("queue",queue) # 155
nib.viewers.OrthoSlicer3D(img.dataobj).show()
num = 1
for i in range(0,queue,10):
img_arr = img.dataobj[:,:,i]
plt.subplot(5,4,num)
plt.imshow(img_arr,cmap='gray')
num +=1
plt.show()
显示图片如下:(如果是黑色,鼠标拖动一下图片或者动一下滚轮,可能是坐标在原点)
两种方式好像第二种会显示的的是3D的,更多态化一点,光是看一下数据长什么样子的话,两种方式都能用
T1加权、T2加权
MRI扫描方式可以简单的划分为常规扫描和功能扫描两大类。常规扫描主要反映解剖形态;功能扫描则以不同方式反映人体新陈代谢、血液流动等功能信息。
T1加权(T1 Weighted)和T2加权(T2 Weighted)是最常用,也是最基础的常规扫描。几乎所有的临床MRI检查都会包含T1加权和T2加权扫描。这里的“加权”,就是突出的意思。
T1看结构
T1图像的整体感官跟“临床图像”的“习惯配色风格”非常接近,你看白质是白的,灰质是灰的,脑脊液是黑的.所以T1图像就可以看出各种断层解剖图.于是“T1看解剖结构”的说法就这么来了.
T2看病变
T2信号跟水含量有关(而Flair是结合水)很多病灶的T2信号要强于周围的正常组织.而很多病变都伴随组织水肿.从下图中可以看到,非常白的是水肿,然后比较白的那块影影约约的就是病变(红色)的地方了.
如下图所示,左:T1加权图像 右:T2加权图像
T1加权突出显示解剖结构,T2加权则能够突出显示病灶
T1CE
t1ce序列要在做MR之前往血液打造影剂(颜料),亮的地方血供丰富,强化明显说明血流很丰富,什么地方需要血流很快呢?肿瘤嘛~它们不断分裂需要大量的营养.
下图所示, 蓝色区域是增强瘤(enhancing tumor),它环绕的里面绿色那些是坏疽(ju)(necrotic components),坏疽就是细胞坏死然后液化.所以这些坏疽还被被称为非增强瘤(non-enhancing tumor).
Flair
FLAIR序列是核磁共振(MR)的一种常用的序列,全称是液体衰减反转回复序列,也称为水抑制成像技术. 通俗地说,它是压水像。在该序列上,脑脊液呈现低信号(暗一些),实质性病灶和含有结合水的病灶显示为明显的高信号(亮一些)
分割部分WT、ET、TC
下图是Brats的数据集的一个序列的病例[颜色标签和上面那些图无关],我通过ITK-SNAP导入flair序列以及对应的分割标签, 需要分割有三个部分,分别是WT、ET、TC.
数据集规定, 图中绿色为浮肿区域(ED,peritumoral edema) (标签2)、黄色为增强肿瘤区域(ET,enhancing tumor)(标签4)、红色为坏疽(NET,non-enhancing tumor)(标签1)、背景(标签0)
然后这些标签合并为3个嵌套的子区域:
whole tumor (WT) --------包含所有labels(红+黄+绿)
tumor core (TC) --------- 红色+黄色label
enhancing tumor (ET) -------黄色label
即 WT = ED + ET + NET
TC = ET+NET
ET
Related
1.MICCAI+BraTS+多模态+t1,t2,flair,t1c+HGG,LGG+WT,ET,TC
2.python读取.nii.gz文件并展示医学图片
3.如何读取NIFTI格式图像
加载 nii.zip(压缩)3d 分割文件
【中文标题】加载 nii.zip(压缩)3d 分割文件【英文标题】:Loading nii.zip (compressed) 3d segmentation files 【发布时间】:2019-08-27 13:55:31 【问题描述】:我知道 SimpleITK 可以读取 Nifty (.nii) 格式的 3d 图像,并且它支持 nii.gz 压缩版本。但是,我无法加载 nii.zip 文件。如果我尝试直接解压缩/提取这些文件,这些文件会引发错误,而且 SimpleITK 也不会将它们识别为可读格式之一。
可供参考的数据集位于:https://academictorrents.com/details/27772adef6f563a1ecc0ae19a528b956e6c803ce
【问题讨论】:
【参考方案1】:前段时间我下载了相同的数据集,我没有彻底试验过,但这是我的经验:
我能够成功解压 nii.zip 文件
我使用的是 Linux Ubuntu 18.04,并从 GUI 预安装了解压缩实用程序 您遇到的问题可能是由于使用了不同的存档管理器,或者数据集在下载过程中已损坏 解决方案 - 尝试不同的存档管理器并再次下载数据集我正在使用 Aliza 来查看解压缩的扫描文件
根据我快速检查医学图像格式的经验,Aliza viewer 是最好的程序,可以导出为不同的格式读取压缩文件的解决方案
如果您使用 SimpleITK 或(我在 python 中最喜欢的)Nibabel 并想直接读取压缩文件,您可以参考这些答案如何解决读取压缩档案中的文件的问题 - Stack overflow question 1 和Stack overflow question 2【讨论】:
以上是关于BraTs数据集处理及python读取.nii文件的主要内容,如果未能解决你的问题,请参考以下文章