RSNA 2023 腹部创伤检测 分割数据集预处理部分

RSNA 2023 腹部创伤检测 分割数据集预处理部分

腹部创伤检测数据集简介

该数据集共有460G大小,目录如下:

segmentation

官方提供的一些患者的器官分割标签,其中的id是系列id。为了方便,下载别人制作的分割数据集。

每个分割标签用”患者id_系列id“分开,里面是.nii(NIFTI)文件。

我们只需要左上角的切片,因为模型的输入只有这个角度的。我们去该患者id的系列id原数据集下即可看到相应的CT文件夹。

由于nii文件有多个方向的切片,而我们只要x方向的,所以通过SimpleITK库进行切片处理,得到z方向的png图片。

处理分割标签nii文件为png图片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import numpy as np
import os
import imageio
import nibabel as nib
import SimpleITK as sitk
import pydicom
if __name__ == '__main__':
filepath = 'segregate_data/'
filename = os.listdir(filepath)
slice_trans = []
for f in filename:
img_path = os.path.join(filepath, f)
img = nib.load(img_path)
#加载nii文件的相关信息
img_data = sitk.ReadImage(img_path)
#读取nii文件为Image格式
img_fdata = sitk.GetArrayFromImage(img_data)
#将Image文件转化为np矩阵,size为()
fname = f.replace('.nii', "")
#nii文件名去除后缀即新建文件夹的名字
imgfile = "./segregate_data_png"
img_f_path = os.path.join(imgfile, fname)
os.mkdir(img_f_path)
#建立同名文件夹

(x, y, z) = img.shape
print(z)
#nii文件会有xyz三轴,这里主要取z轴切片
for i in range(z):
silce = img_fdata[i, :, :]
#读取该轴切片
imageio.imwrite(os.path.join(img_f_path, '{}.png'.format(i + 1)), silce)
#写入该同名文件夹下

上述代码,将分割数据集下的每一个nii文件转为一整个文件夹下的png图片。图片上不同像素值对应着不同的器官,后续更新会解析相应的像素值对应何种器官。

注:有些分割标签图像看起来黑乎乎一片什么都没有,但其实只是标签很暗,可以通过拉高曝光,对比度等方式来查看。

读取每个dcm为张量作为分割网络的输入

png图像是8位图像,而dcm图像是12位图像。

png取值范围是0-255,dcm是0-4096。如果强行将dcm转化为png,则会有很大信息损失。如果后续需要进行多种图像增强的手段进行处理,不如不进行转化,直接读取一整个12位图像。

下图是读取一个dcm图像为矩阵,并以图像形式输出。

下图是该dcm图像以专业CT软件查看的结果,会发现细节和亮度都有很大差别,上图明显更加模糊,不利于网络进行器官区域分割。如果直接读取dcm为矩阵,这样每一个元素都是无损失地存储在矩阵中,最后对每一个元素除以4096来归一化,从而得到一个2d的tensor作为分割网络的输入。

image-20230922163207618
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2020-2023 YYz
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信