20190605
这是一批胃癌脉管侵犯的数据,可用病例数254例
清洗数据:
-
利用python的
set()
类,进行集合运算,将没有mask勾画的影像数据删掉 -
将dicom格式和hdr格式转化为nii(会有meta-data的丢失,以后准备转为nrrd,目前不知道什么区别/会不会保留metadata)
-
发现mask沿着y轴镜像了(真的是啥bug都有),写了个函数,利用
mask = sitk.Flip(mask, sitk.VectorBool([False, True, False]))
将mask沿y轴翻转 -
防止有误翻转情况,将带有mask标记的img保存为jpg检查,其中用到了
img = exposure.equalize_hist(img)
进行直方图均衡、自定义渐变透明度的colormap(已经记录到简书)
提取特征:
发现有77例病例报错“ROI BoundBox is larger than image size”,然后进行排除bug,发现:
-
对这部分病例
mask.GetDirection()
,发现他们的direction为[1, 0, 0, 0, -1, 0, 0, 0, 1]
,于是执行mask.SetDirection([1, 0, 0, 0, 1, 0, 0, 0, 1])
-
对这部分病例执行
img.GetOrigin()
,mask.GetOrigin()
,发现这部分病例的mask与img的origin不一致,于是执行mask.SetOrigin(img.GetOrigin())
-
经过上述步骤后,这部分病例可以正常提取特征。
-
总结:以后清洗数据时/提取特征前,加入检查img和mask的步骤
收获的知识:
- MRI/CT的图像,每个体素都有其三维的空间大小(spacing),可以换算到物理世界的长、宽、高,每个病例的体素大小不一定相同(一般不同)。利用
sitk.GetArrayFromImage(img)
获得numpy格式数据后,虽然像素点数和体素点数相同,但是丢失了体素大小这种信息。 - CT比MRI更简单一些,因为CT受参数影响较少,审稿时收到的质疑比较少
- 预处理中,对病例的重采样,一般会采样到一个稍小的分辨率,以分辨更大的纹理
疑问:
- 为何img长和宽本来体素数相同,利用pyradiomics重采样后,体素数变得不同:
Applying resampling from spacing [0.97460938 0.97460938 1.25 ] and size [512 512 341] to spacing [1. 1. 1.] and size [116, 87, 82]
网友评论