原文连接https://www.kaggle.com/gzuidhof/full-preprocessing-tutorial/notebook
主要包含以下内容:
- 图像加载
- 像素值转换为HU值
- Resampling(重采样)
- 3D绘图
- 肺分割
- 正则化
- Zero centering
加载图像
def load_scan(path):
slices = [dicom.read_file(path + '/' + s) for s in os.listdir(path)]
slices.sort(key=lambda x: float(x.ImagePositionPatient[2]))
try:
slice_thickness = np.abs(slices[0].ImagePositionPatient[2] - slices[1].ImagePositionPatient[2])
except:
slice_thickness = np.abs(slices[0].SliceLocation - slices[1].SliceLocation)
for s in slices:
s.SliceThickness = slice_thickness
return slices
其中path为文件路径,将path下的文件名拿到后与path拼接,读取结果直接保存在list中。
ImagePositionPatient
表示图像的左上角在空间坐标系中的x,y,z坐标,单位是毫米. 如果在检查中,则指该序列中第一张影像左上角的坐标。SliceLocation
表示实际的相对位置,单位为mm。SliceThicknes
表示层厚,单位为mm。
通过ImagePositionPatient的Z方向上的值推测出Z方向上的像素尺寸,也就是切片的厚度。最后只用一个for循环将所有切片的厚度赋值。
在读取文件时遇到了一个错误: