(3D网络)医学三维数据且又多模态多标签该如何预处理

本章以BraTS数据为例子,此数据为四个模态三个标签的三维医学数据,关于此数据的更多的信息,可以阅读下面文章。

玖零猴:MICCAI+BraTS+多模态+t1,t2,flair,t1c+HGG,LGG+WT,ET,TC

前面,我已经讲解过对于2D网络来讲,该数据应该如何处理,当然预处理的方法不是唯一,文章也是如此,仅供参考,如有误请指出。

玖零猴:(2D网络)医学三维数据且又多模态多标签该如何预处理

之前我们利用2D全卷积神经网络的分割算法实现对脑肿瘤的图像分割,尽管改进后的算法有很大的提升,但是分割依然存在一个问题,MRI脑肿瘤本身是一个三维数据结构,精确的3D模型对于医生临床诊断治疗有重要意义,而基于2D网络的分割算法需要将其进行切片,切片后的数据为2D数据,这使得算法无法学习到数据的层与层间的结构关系,导致网络模型学习不足。并且,后期单纯对2D切片分割结果堆叠可能会形成锯齿或断层现象,缺失了肿瘤的空间特征表达。因此,利用3D全卷积神经网络来解决这类问题是非常有必要的。

还是一样,首先需要对数据进行预处理,其实和2D时候的差不多,不一样的就是数据的shape不同,另外由于内存显卡资源大小的限制还应该需要对数据进行分块处理。

预处理步骤

1、人工加入5个黑色的切片。将四个模态图像(155,240,240)以及相应的Mask(155,240,240)的前面加入3个黑色切片后面加入2个,最后都变为(160,240,240)。为什么要这样做,因为在分块的时候有好处。其实也就是让黑色的背景多一点点。

2、标准化。BraTS采用了T1,T2,flair,T1ce这四个序列的MR图像,这四个序列是不同模态的图像,因此图像对比度也不一样,所以采用z-score方式来对每个模态图像分别进行标准化,图像减去均值除以标准差。

2、裁剪。BraTS MR图像灰色部分为脑部区域,黑色则为背景,背景信息在整幅图像中的比例较大,而且背景对于分割没有任何帮助。从医生角度来看这个MR图像,会自动过滤掉这个背景信息,把所有目光集中在脑部区域,因此去除脑部区域周围的背景信息是必要的。同时,裁剪后使得网络变得更小一点,提升网络的性能。我这里将原来大小为(160,240,240)裁剪为(160,160,160)。

3、分块处理。由于内存显卡资源大小的限制图像不能完整地输入网络,所以需要对图像和相应的Mask进行分块处理。裁剪后的图像和Mask大小为(160,160,160),这里我的分块大小是(32,160,160),即从Axial方向上分了5个(32,160,160)大小的分块。刚刚好分,这也就是为什么前面要人工加入切片的原因。此外,分块的分辨率一般为偶数,这样才能适应池化下采样的时候能够被整除。

分出的5块最后舍弃掉没有病灶的图像和相应Mask分块。分块的方式也可以自己定义怎么分,没有唯一的标准。如果内存显卡牛逼,最好就不要分了,分块是没有办法的办法才弄的。另外,我这里的每个分块之间是没有重叠部分的,并且块的大小和裁剪后的大小又是整数倍的关系,所以后期预测完的结果直接拼接起来就可以回到裁剪后的大小了。虽然这种分块方式很简单,但是我认为这种分块方式存在一个问题。在2D预处理的时候,切片使得网络无法学习层与层间的结构关系,而这里的块和块之间虽然有学习到层与层的结构关系,但不是所有的层,因为我分的块是(32,160,160)所以这里只是学习了32层之间的结构关系。然而块与块之间是断开的,所以说无法学习到完整的结构。所以为什么内存显卡牛逼的就不要分块就是这个原因了。如果内存显卡没那么牛逼那该怎么办,这里我提供一种方案,不过我还需要进一步验证,就是分块的时候让块与块之间有重叠的部分,这样就可以将块之间联系起来了,如下图操作所示。块的大小不变,移动的步长小于块的大小,这样就可以使得块之间有一定的关联了。

v2-b906787d7c86e4aa17e972b9a9e00b21_b.jpg

4、合并数据并保存。将标准化和分块后的四个模态合并成四个通道,保存后的shape为(32,160,160,4),dtype为float64。然后对相应的Mask也是分块后的,将三个标签合并三个嵌套的子区域,最后合并成三个通道,分别为WT、TC、ET,数值为0或1 ,保存后的shape为(32,160,160,3),dtype为uint8。

环境

使用Anaconda进行环境的配置

        conda create -n brats3dpreprocess python=3.6
conda activate brats3dpreprocess
pip install numpy simpleitk opencv-python pandas scipy scikit-learn scikit-image
conda install jupyter notebook
      

代码下载

https://github.com/Merofine/BraTS3Dpreprocessing

猜你喜欢

转载自blog.csdn.net/weixin_40519315/article/details/105969581