介紹如何使用 SimpleITK 的 MaskImageFilter
與 MaskNegatedImageFilter
將遮罩套用至影像中,取出原始影像中對應遮罩標示的區域。
MaskImageFilter
套用遮罩
MaskImageFilter
可以將影像套用指定遮罩,將指定遮罩值的區域篩除。
# MaskImageFilter 虛擬碼(pseudocode)
if pixel_from_mask_image != masking_value
pixel_output_image = pixel_input_image
else
pixel_output_image = outside_value
以下是 Allen Mouse Brain CCFv3 平均腦與標註影像的範例。
import SimpleITK as sitk import matplotlib.pyplot as plt # 讀取平均腦影像檔案 image = sitk.ReadImage("average_template/average_template_25.nrrd") # 讀取影像分割遮罩檔案 mask = sitk.ReadImage("annotation/ccf_2017/structure_masks/structure_masks_25/structure_477.nrrd") # 套用遮罩影像 result = sitk.Mask(image, mask, outsideValue=0, maskingValue=0) # 顯示影像切面 nda = sitk.GetArrayViewFromImage(result) fig, axs = plt.subplots(1, 3, figsize=(15, 5)) axs[0].imshow(nda[nda.shape[0]//2,:,:], cmap = 'gray') axs[1].imshow(nda[:,nda.shape[1]//2,:], cmap = 'gray') axs[2].imshow(nda[:,:,nda.shape[2]//2], cmap = 'gray') plt.show()
使用 itkwidgets
顯示套用遮罩之後的立體影像:
# 顯示立體影像 import itkwidgets itkwidgets.view(result)
MaskNegatedImageFilter
反向套用遮罩
MaskNegatedImageFilter
的作用跟 MaskImageFilter
類似,只不過它是以反向的方式套用遮罩值。
# MaskNegatedImageFilter 虛擬碼(pseudocode)
if pixel_from_mask_image != mask_value
pixel_output_image = output_value
else
pixel_output_image = pixel_input_image
以下是 Allen Mouse Brain CCFv3 平均腦與標註影像的範例。
import SimpleITK as sitk import matplotlib.pyplot as plt # 讀取平均腦影像檔案 image = sitk.ReadImage("average_template/average_template_25.nrrd") # 讀取影像分割遮罩檔案 mask = sitk.ReadImage("annotation/ccf_2017/structure_masks/structure_masks_25/structure_477.nrrd") # 反向套用遮罩影像 result = sitk.MaskNegated(image, sitk.Cast(mask, sitk.sitkUInt16), outsideValue=0, maskingValue=1) # 顯示影像切面 nda = sitk.GetArrayViewFromImage(result) fig, axs = plt.subplots(1, 3, figsize=(15, 5)) axs[0].imshow(nda[nda.shape[0]//2,:,:], cmap = 'gray') axs[1].imshow(nda[:,nda.shape[1]//2,:], cmap = 'gray') axs[2].imshow(nda[:,:,nda.shape[2]//2], cmap = 'gray') plt.show()