![](/img/trans.png)
[英]How can I obtain axial slices of a 3D medical image saved as numpy array in python?
[英]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.