我有一些脑部核磁共振扫描的3DNiftii数据集(FLAIR,T1,T2,...)。例如,FLAIR扫描是144x512x512,体素大小为1.1,0.5,0.5,我想要从轴向,冠状和矢状图获得2D切片,我将其作为我的CNN的输入。
我想做的是:用nibabel读取.nii文件,将它们保存为Numpy数组,并将轴向、冠状位和矢状位的切片存储为2D-PNG。
我尝试过的:
-Use med2image python库
-wrote自己的带有nibabel,Numpy和image的python脚本
问题:轴向和日冠状图像不知何故在一个方向上拉伸。Sagittal像它应该做的那样工作。
我尝试调试python脚本,并使用Matplotlib显示我得到的数组。
image = nibabel.load(inputfile)
image_array=image.get_fdata()通过使用以下示例:
plt.imshow(image_array[:,:, 250])
plt.show()结果发现,数据已经在那里延伸了。
我可以通过以下命令获得所需的输出
header = image.header
sX=header['pixdim'][1]
sY=header['pixdim'][2]
sZ=header['pixdim'][3]
plt.imshow(image_array[:,:, 250],aspect=sX/sZ)但是当保存我的图像时,我如何应用像"aspect“这样的东西呢?或者有没有可能已经用这样的参数加载了.nii文件,以获得我可以处理的数据?
看起来,当nibabel加载.nii图像时,像素大小没有得到考虑。但不幸的是,我没有办法解决这个问题。
发布于 2021-04-03 22:58:37
我发现,无论图片是否拉伸,对于训练我的ML模型都没有区别,因为我在数据增强中也是这样做的。在Slicer或MRICroGL中打开漂亮的卷显示卷,正如预期的那样,因为这些程序也考虑到了标题。而且预测也是非常好的(尽管当以某种方式以切片方式保存时,图片是“拉伸的”)。
尽管如此,看拉伸的图片还是让我很恼火,我只是用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')结果真的很好,对我来说效果也很好。
https://stackoverflow.com/questions/65363935
复制相似问题