醫學影像預處理之標注


標注工具

標注工具推薦使用ITK-SNAP,windows、linux和MacOS平台都支持。

標注的讀取

通過ITK-SNAP加載數據和label文件,我們可以看到用不同顏色區分的標注,如下圖:

圖中有兩個label,分別為Label1和Label2,對應圖中紅色和綠色部分。
下面我們用程序讀取label文件,看看具體的數據結構是怎樣的。

import numpy as np
import SimpleITK as sitk

label_path = "./hippocampus_001_label.nii.gz"

if __name__ == "__main__":

    img_itk = sitk.ReadImage(label_path)
    img_npy = sitk.GetArrayFromImage(seg_itk)
    print("=======label shape=======")
    print(img_npy.shape)
    print("=======label value=======")
    print(img_npy[img_npy != 0])

結果如下:

=======label shape=======
(35, 51, 35)
=======label value=======
[1 1 1 ... 2 2 2]

程序中我們首先通過itk讀取圖像,並轉換為numpy數組,之后打印了數組的shape,以及數組中不為0的其余的數值,從以上結果我們可以看到,標注部分的具體的數值等於Label的數值。

標注的修改

有時我們會涉及到對Label的修改,比如我們想將Label1刪除,將Label2的Value改為1。代碼如下:

img_npy[img_npy == 1] = 0
img_npy[img_npy == 2] = 1
img_itk = sitk.GetImageFromArray(img_npy)
sitk.WriteImage(img_itk, label_path)
print("=======changed label value=======")
print(img_npy[img_npy != 0])

結果如下:

=======label value=======
[1 1 1 ... 1 1 1]

我們用ITK-SNAP加載修改后的圖像,如下圖,與本文第一張圖對比,可以看到標注部分已經修改成功。

其它實現方式

采用nibabel代替SimpleITK的另一種實現Label讀取和修改的方式,也能完成相同的工作。

# encoding = utf-8

import nibabel as nib
import numpy as np

label_path = "./hippocampus_001_label.nii.gz"

if __name__ == "__main__":

    img_nib = nib.load(label_path)
    img_npy = img_nib.get_fdata()
    print("=======label shape=======")
    print(img_npy.shape)
    print("=======label value=======")
    print(img_npy[img_npy != 0])

    img_npy[img_npy == 1] = 0
    img_npy[img_npy == 2] = 1
    
    nib.save(nib.Nifti1Image(img_npy.astype('uint8'), affine=img_nib.affine), label_path)
    print("=======changed label value=======")
    print(img_npy[img_npy != 0])


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM