醫療影像跟自然場景下圖像的區別之一就是“像素”範圍不一樣,在將label覆蓋到原圖上時也略微不同,但是必須要將圖像歸一化到。
我們使用SimpleITK的相關API來解決這個問題。
涉及到的API:
- sitk.ReadImage
- sitk.Cast
- sitk.RescaleIntensity
- sitk.LabelOverlay
數據爲BraTS2019的數據,label 有4個,[0,1,2,4]。
from __future__ import print_function
%matplotlib inline
import matplotlib.pyplot as plt
from ipywidgets import interact, FloatSlider
import SimpleITK as sitk
from myshow import myshow, myshow3d
data:
img_T1 = 'MICCAI_BraTS_2019_Data_Training/HGG/BraTS19_CBICA_ATV_1/BraTS19_CBICA_ATV_1_t1.nii.gz'
seg = 'MICCAI_BraTS_2019_Data_Training/HGG/BraTS19_CBICA_ATV_1/BraTS19_CBICA_ATV_1_seg.nii.gz'
img_T1 = sitk.ReadImage(img_T1)
# To visualize the labels image in RGB with needs a image with 0-255 range
img_T1_255 = sitk.Cast(sitk.RescaleIntensity(img_T1), sitk.sitkUInt8)
myshow3d(img_T1)
覆蓋label:
seg = sitk.ReadImage(seg)
myshow(sitk.LabelOverlay(img_T1_255, seg), "Brain tumor label")
完美~賊方便~