繁体   English   中英

加载 3D Niftii 图像并保存轴向、冠状、矢状的所有切片?

[英]Load 3D Niftii images and save all slices for axial, coronal, saggital?

我有一些 3D Niftii 脑 MRI 扫描数据集(FLAIR、T1、T2、..)。 例如,FLAIR 扫描为 144x512x512,体素大小为 1.1、0.5、0.5,我想从轴向、冠状和矢状视图中获得 2D 切片,我将其用作 CNN 的输入。

我想做的事:用 nibabel 读取 in.nii 文件,将它们保存为 Numpy 数组,并将轴向、冠状和矢状切片存储为 2D-PNG。

我尝试了什么:

- 使用 med2image python 库

- 使用 nibabel、Numpy 和图像编写了自己的 python 脚本

问题:轴向和冠状图像以某种方式向一个方向拉伸。 矢状面的效果应该很好。

我尝试调试 python 脚本并使用 Matplotlib 来显示我得到的数组,之后

image = nibabel.load(inputfile)
image_array=image.get_fdata()

通过使用例如:

plt.imshow(image_array[:,:, 250])
plt.show()

并发现,数据已经延伸到那里。

我可以想办法得到所需的 output

header = image.header
sX=header['pixdim'][1]
sY=header['pixdim'][2]
sZ=header['pixdim'][3]
plt.imshow(image_array[:,:, 250],aspect=sX/sZ)

但是如何在保存图像时应用“方面”之类的东西? 或者是否有可能已经加载带有类似参数的.nii文件,以获得我可以使用的数据?

看起来,当nibabel加载.nii图像时,像素尺寸没有得到照顾。 但不幸的是,我没有办法解决这个问题..

我发现,无论图片是否拉伸,训练我的 ML Model 并没有什么不同,因为我也在数据增强中这样做。 正如预期的那样,在 Slicer 或 MRICroGL 中打开漂亮的卷显示了卷,因为这些程序还考虑了 Header。 而且预测也非常好(即使图片被“拉伸”,当以某种方式保存切片时)

尽管如此,看拉伸的图片还是让我很恼火,我只是用cv2实现了一些调整大小:

def saveSlice(img, fname, path):
    img=numpy.uint8(img*255)
    fout=os.path.join(path, f'{fname}.png')
    img = cv2.resize(img, dsize=(IMAGE_WIDTH, IMAGE_HEIGTH), interpolation=cv2.INTER_LINEAR)
    cv2.imwrite(fout, img)
    print(f'[+] Slice saved: {fout}', end='\r')

结果非常好,对我来说效果很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM