一、BraTS比赛数据概要

BraTS全名是Brain Tumor Segmentation ,即脑部肿瘤分割。世界卫生组织(WHO)按细胞来源和行为对脑肿瘤进行分类:

  • 非恶性脑肿瘤被分类为I级或II级,也被称为低度(low grade, LG)肿瘤,LG肿瘤不会严重影响患者的预期寿命
  • 恶性肿瘤被分类为III级或IV级,被称为高度(high grade, HG),与HG肿瘤的最大预期寿命只有两年不同

从神经影像学方法对脑肿瘤进行分割是改善疾病诊断,治疗计划,监测和临床试验的关键步骤。需要可靠的脑肿瘤分割来检测肿瘤的位置和范围。

然而,脑肿瘤的准确分割极具挑战性,这些肿瘤几乎可以以任何形状和大小出现在不同的位置。另外,它们通常对比度差,并且肿瘤的强度值可能与健康的脑组织的强度值重叠。

因此,将健康组织与肿瘤区分开来并不容易。解决此问题的常用方法是整合从多种MR模态中获取的信息,模态包括:

  • T1加权MRI(T1),
  • 加造影剂的T1加权MRI(T1c)
  • T2加权MRI(T2)
  • 液体衰减反转恢复(FLAIR)MRI。

根据所需的人机交互程度,脑肿瘤分割方法主要分为3类:

  • 手动
  • 半自动
  • 全自动分割。

在MR图像中手动分割脑肿瘤是一项非常艰巨的任务,既耗时又受评估者差异的影响。因此,在过去的二十年中,可靠的脑肿瘤自动和半自动分割技术引起了人们的广泛关注,并产生了数百种不同的算法。

这些算法中有许多是在私有数据集上实现和评估的。私有数据集在输入数据(使用的成像方式),脑肿瘤的类型和疾病状态(治疗前或治疗后)方面差异很大,以至于很难比较所提出的分割方法的性能。

为了解决这个问题,自2012年以来,医学影像计算和计算机辅助干预协会(MICCAI)发起了多模态脑肿瘤影像分割挑战(BRATS)。BraTS数据库包含大量的多模态脑部扫描,可公开获取,并用于开发和测试最新的脑肿瘤分割算法。

BraTS 比赛官方网址:http://www.braintumorsegmentation.org/
BraTS 2015下载地址:https://aistudio.baidu.com/aistudio/datasetdetail/26367

下面,我们就可以从上面的网址中,下载到我们需要的脑肿瘤数据了。若要查看下载下来的图像,我们可以使用标注软件ITK-SNAP进行查看。其中每一个病例的文件夹下面,都是由这5个文件组成的,(除测试集外,测试集无标签文件),分别是:

  • XXX.Flair 液体衰减反转恢复MRI
  • XXX.T1 加权MRI
  • XXX.T1c 加造影剂的T1加权MRI
  • XXX.T2 T2加权MRI
  • XXX.OT label,标签内容0,1,2,3,4 背景+4类

文件格式都是.mha,直接拖动mha文件到ITK-SNAP进行查看,记得需要拖动模态文件和OT标签文件,如下展示:


你可能会比较好奇其中的五颜六色的标签,各个颜色代表不同的标签,后面我们会对标签进行数据可视化处理,便于处理。这里可以先看如下描述:
注释:带有手动注释的三种成像模式(A = FLAIR,B = T2,C = T1c)上的肿瘤外观,以及右侧的三个标签的融合(D)。从左到右:

  • 全肿瘤(黄色)
  • 肿瘤核心(红色)
  • 增强肿瘤核心(浅蓝色)
  • 核心的囊性坏死成分(绿色))

二、图层图像处理

医学影像中的数据,大多就那么几个行业标准的数据形式。比如dicom、nii、npz、mhd等其他格式,尤其是以上述几种数据格式为多。

有些是可以存储二维数据的,例如x光,有些是存储三维数据的,例如ct、mri等断层扫描数据。当然在处理这些数据的时候,python也有专门的第三方库。

  • pydicom是专门处理dicom的库
  • SimpleITK可以处理nii、npz、mhd这些三维数组

更多关于医学数据处理的部分,比如图像转换等等,可以参考这里:nii、npz、npy、dcm 的数据处理,及多目标分割处理汇总

本数据的处理,主要遵循下面步骤:

  • 读取mhd文件
  • 逐层获取单层标签图像
  • 查看会发现很多像素值是超过255 的。所以直接保存图像就会产生截断,使得图像偏白,像素丢失。
  • 先归一化到0-255,再保存
  • 保持为图像

完整代码如下:

import random
from PIL import Image
import SimpleITK as sitkdef load_mha_as_array(img_name):"""get the numpy array of brain mha image:param img_name: absolute directory of 3D mha images:return:nda  type: numpy    size: 150 * 240 * 240"""img = sitk.ReadImage(img_name)nda = sitk.GetArrayFromImage(img)return ndadef get_subject():# **************** get file ****************path = r'F:\data_sample\HGG\brats_2013_pat0001_1\VSD.Brain.XX.O.MR_Flair.54512.mha'img = load_mha_as_array(path)print(img.shape)for i in range(img.shape[0]):oneImg_arr = img[i]print(oneImg_arr.shape)print(set(oneImg_arr[oneImg_arr != 0]))np.savetxt(r"img.txt", oneImg_arr, delimiter=',', fmt='%5s')max_pix = np.amax(oneImg_arr)label_train = oneImg_arr / max_pix  # 归一化image = Image.fromarray(label_train * 255)image = image.convert("L")image.save("./data/Flair/" + "image_" + str(i) + ".png")if __name__=='__main__':get_subject()

保存好图像的截图如下:


同理,标签部分的保存同样如此,后面就是

三、标注标签处理

标签文件就是那个带OT字样的,这里记录了断层扫描每一层的类别标记情况。根据我们从前面用ITK_SNAP软件可以猜想下,这个标签文件记录的应该是个三维数据,层数据x每一层的宽x每一层的高。

下面把这个标签文件单独处理下,直观的看看是什么样子的,代码部分和对上面图像处理的差不多,主要步骤如下:

  • 读取mhd文件
  • 逐层获取单层标签图像
  • 查看发现标签数组是0、1、2、3、4,不利于显示
  • 归一化,从0-4,拉伸到0-255(这里仅仅作为展示方便的处理)
  • 保持为图像

直接看下面代码吧:

import random
from PIL import Image
import SimpleITK as sitk
def load_mha_as_array(img_name):"""get the numpy array of brain mha image:param img_name: absolute directory of 3D mha images:return:nda  type: numpy    size: 150 * 240 * 240"""img = sitk.ReadImage(img_name)nda = sitk.GetArrayFromImage(img)return ndadef get_subject():"""label   4D numpy    155 * 240 * 240"""# **************** get file ****************path = r'F:\data_sample\HGG\brats_2013_pat0001_1\VSD.Brain_3more.XX.O.OT.54517\VSD.Brain_3more.XX.O.OT.54517.mha'img = load_mha_as_array(path)print(img.shape)for i in range(img.shape[0]):oneImg_arr = img[i]print(oneImg_arr.shape)if oneImg_arr[oneImg_arr != 0].size > 0:print(set(oneImg_arr[oneImg_arr != 0]))np.savetxt(r"img.txt", oneImg_arr, delimiter=',', fmt='%5s')max_pix = np.amax(oneImg_arr)label_train = oneImg_arr / max_pix  # 归一化image = Image.fromarray(label_train * 255)# image = Image.fromarray(oneImg_arr)image = image.convert("L")image.save("./data/ot/" + "image_" + str(i) + ".png")if __name__=='__main__':get_subject()

生成标签存储到本地的结果:

关于上述生成标签的数据处理详细部分,参考这里:nii、npz、npy、dcm 的数据处理,及多目标分割处理汇总

四、总结

对医学数据了解多了,你就会发现。医学数据的存储形式、标签存储形式几乎都是大同小异,甚至可以说就是一样的。

本文中的脑补肿瘤分割挑战赛的数据不一样的地方就是,它是多模态的,光输入数据就是4个模态,每一个模态都是一个三维的断层扫描数据。

这也就意味着,输入数据更复杂了。4个模态输入,对应预测1个输出。一般的断层数据,比如CT数据预测肺癌结节的LIDC数据,是1个三维数据,对应到1个输出,就简单了很多。

到这里,了解了一些基本的数据结构和内容,包括:

  • Brats比赛的数据,是有4个模态的
  • 每一个模态的大小都是155*240*240,150层240*240的断层扫描
  • 4个模态预测一个分割任务,分割的目标有4个类别+1个背景
  • 如何将4个模态的信息给综合利用起来?是本分割任务的重中之重,也是模型设计的出彩点

由上面的不一样,自然也就成了后面设计网络时候的创新点。思考两个问题:

  • 综合各个模态的信息:如何把4个模态给并联的作为输入?
  • 综合单模态上下层三维信息:如何考虑MRI的三维断层,层与层之间的联系?

本系列接下来的几篇文章,就是对上述问题进行拆解。有训练和测试的代码?关注不迷路,敬请期待。

参考文章:
1.使用多模态脑部扫描数据的自动脑肿瘤分割
2. lstm_multi_modal_UNet
3.医学影像数据集集锦

Brain Tumor Segmentation (BraTS) 脑部肿瘤分割1--数据篇相关推荐

  1. Brain Tumor Segmentation (BraTS) 脑部肿瘤分割2--二维UNet的复现与数据准备篇

    医学领域采集的图像,一般都是灰白色的,相比于现实空间中的彩色图像,存储的信息简单了很多.一个是1个维度的灰度信息,一个是3个维度组合到一起的彩色信息. 脑部肿瘤分割的这批数据,相较于其他的数据,有一个 ...

  2. 【BraTS】Brain Tumor Segmentation 脑部肿瘤分割3--构建数据流

    往期回顾: [BraTS]Brain Tumor Segmentation 脑部肿瘤分割1–数据篇 [BraTS]Brain Tumor Segmentation 脑部肿瘤分割2–UNet的复现 在上 ...

  3. 【脑肿瘤分割论文】:TransBTS: Multimodal Brain Tumor Segmentation Using Transformer

    标题:TransBTS: Multimodal Brain Tumor Segmentation Using Transformer(TransBTS:使用多模态的脑肿瘤分割) published i ...

  4. Extending nn-UNet for brain tumor Segmentation 扩展nn-UNet用于脑肿瘤分割

    Extending nn-UNet for brain tumor Segmentation 扩展nn-UNet用于脑肿瘤分割 Pattern Recognition on November 01, ...

  5. Brain tumor segmentation using deep learning +HybridResUnet脑胶质瘤分割BraTs +论文解读

    Brain tumor segmentation using deep learning 下载地址 摘要 Brain tumor is one of the deadliest forms of ca ...

  6. [论文翻译]测试时数据增强(TTA):Automatic Brain Tumor Segmentation using Convolutional Neural Networks with TTA

    论文下载: 地址 Automatic Brain Tumor Segmentation using Convolutional Neural Networks with Test-Time Augme ...

  7. [论文翻译]Brats18 NO.1:3D MRI brain tumor segmentation using autoencoder regularization

    论文下载: 链接 3D MRI brain tumor segmentation using autoencoder regularization 采用自编码正规化的三维MRI脑肿瘤分割方法 Abst ...

  8. [深度学习论文笔记]Multimodal CNN Networks for Brain Tumor Segmentation in MRI

    Multimodal CNN Networks for Brain Tumor Segmentation in MRI: A BraTS 2022 Challenge Solution MRI中用于脑 ...

  9. One-Pass Multi-task Convolutional Neural Networks for Efficient Brain Tumor Segmentation

    method: 首先:用三个网络来训练,分别针对comlete区域,core区域,和enhancing区域(使用网络OM-net) 1.使用随机采样从MRI大脑图像中采块,训练,分类器分为5类,最后测 ...

最新文章

  1. php 比较字符串差,PHP字符串比较函数strcmp()和strcasecmp()使用总结
  2. ESXi6.7安装流程和bug处理
  3. benet 3.0的构建企业网络视频第二章地址
  4. VC++ 坐标问题总结,控件大小随窗口变化
  5. 我对分布式多中心架构的几点看法
  6. element 密码输入框用*显示_用 Java 实现天天酷跑,这个真的有点强了
  7. JQuery中的.attr()与.removeAttr()
  8. DevIL真是好用得想哭
  9. Linux下environ环境变量操作函数
  10. hive mysql命令,Hive数据库常用命令
  11. leetcode 730 Count Different Palindromic Subsequences
  12. 点到线段的距离 计算几何
  13. GTX1060 Windows10 旧版显卡驱动下载链接
  14. java 方法详解(有参无参,有返回值无返回值) 局部变量
  15. python transforms_2.2 图像预处理——transforms(笔记)
  16. 只能写作文?那必须安排一条龙服务[ChatGPT的应用场景初探]
  17. WIFI性能测试二 --- wifi的ANI功能
  18. pic单片机配置字c语言,PIC单片机配置字说明及使用.pdf
  19. 细粒度视觉分析综述TPAMI2021
  20. 2022年区块链安全领域8成以上损失集中在DeFi和跨链桥

热门文章

  1. 服务器没有此伴奏文件,yy开直播,播放伴奏就一卡一卡的,不放伴奏就不卡,。是为什么...
  2. MySQL SQL分组查询
  3. 最新出炉!《看漫画学Python 第2版》电子书火爆来袭,300页全新版PDF开放下载,零基础小白入门首选!
  4. vue页面自适应屏幕宽高_Vue 实现大屏页面的屏幕自适应
  5. 积木机器人拼装图恐龙图纸_乐高10698恐龙拼装图纸 | 手游网游页游攻略大全
  6. glibc 知:官方
  7. 腾讯大数据平台构建之道
  8. 七日杀服务器修改采集倍数,哪位大佬可以告诉我怎么修改采集倍数啊,
  9. linux网络编程 ppt,LINUX网络编程.ppt
  10. python1.常见基础数据结构