簡體   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