MONAI-如何加载图像

使用默认图像阅读器加载 Nifti 图像

MONAI 根据支持的后缀并按以下顺序自动选择阅读器:

  • 调用此加载程序时,用户在运行时指定的读取器。
  • 注册读者从最新到列表中的第一个。
  • 默认阅读器:(nii, nii.gz -> NibabelReader), (png, jpg, bmp -> PILReader), (npz, npy -> NumpyReader), (others -> ITKReader)。

API说明如下图:
MONAI-如何加载图像_第1张图片

#导入用到得module
import os
import shutil
import numpy as np
import itk
from PIL import Image
import tempfile
from monai.data import ITKReader, PILReader
from monai.transforms import (
    LoadImage, LoadImaged, EnsureChannelFirstd,
    Resized, EnsureTyped, Compose
)
from monai.config import print_config

print_config()
  1. 生成示例图像
tempdir = tempfile.mkdtemp()
test_image = np.random.rand(64, 128, 96)
filename = os.path.join(tempdir, "test_image.nii.gz")
itk_np_view = itk.image_view_from_array(test_image)
itk.imwrite(itk_np_view, filename)
  1. 加载图像文件

data, meta = LoadImage()(filename)
print(f"image data shape:{data.shape}")
print(f"meta data:{meta}")

MONAI-如何加载图像_第2张图片

加载多个Nifti图像列表形成多通道图像

加载文件列表,将它们堆叠在一起并添加一个新维度作为第一维度。
并使用第一张图像的元数据来表示堆叠结果。

  1. 生成一些示例图像
filenames = ["test_image.nii.gz", "test_image2.nii.gz", "test_image3.nii.gz"]
for i, name in enumerate(filenames):
    filenames[i] = os.path.join(tempdir, name)
    itk_np_view = itk.image_view_from_array(test_image)
    itk.imwrite(itk_np_view, filenames[i])

请注意,输出数据形状为 (3, 96, 128, 64),表示三通道图像。

data, meta = LoadImage()(filenames)

print(f"image data shape:{data.shape}")
print(f"meta data:{meta}")

MONAI-如何加载图像_第3张图片

加载 DICOM 格式的 3D 图像

  1. 创建一个示例图像
filename = os.path.join(tempdir, "test_image.dcm")
dcm_image = np.random.randint(256, size=(64, 128, 96)).astype(np.uint8)
itk_np_view = itk.image_view_from_array(dcm_image)
itk.imwrite(itk_np_view, filename)
  1. 加载图像
data, meta = LoadImage()(filename)

print(f"image data shape:{data.shape}")
print(f"meta data:{meta}")

MONAI-如何加载图像_第4张图片

加载 DICOM 图像列表并将它们堆叠为多通道图像

加载文件列表,将它们堆叠在一起并添加一个新维度作为第一维度。
并使用第一张图像的元数据来表示堆叠结果。

  1. 创建示例图像
filenames = ["test_image-1.dcm", "test_image-2.dcm", "test_image-3.dcm"]
for i, name in enumerate(filenames):
    filenames[i] = os.path.join(tempdir, name)
    dcm_image = np.random.randint(256, size=(64, 128, 96)).astype(np.uint8)
    itk_np_view = itk.image_view_from_array(dcm_image)
    itk.imwrite(itk_np_view, filenames[i])
  1. 加载图像
data, meta = LoadImage()(filenames)

print(f"image data shape:{data.shape}")
print(f"meta data:{meta}")

MONAI-如何加载图像_第5张图片

加载 PNG 格式的 2D 图像

#Generate an image
test_image = np.random.randint(0, 256, size=[128, 256])
filename = os.path.join(tempdir, "test_image.png")
Image.fromarray(test_image.astype("uint8")).save(filename)

#Load the image
data, meta = LoadImage()(filename)

print(f"image data shape:{data.shape}")
print(f"meta data:{meta}")

在这里插入图片描述

使用指定的图像阅读器加载图像

并且我们可以为图像阅读器设置额外的参数,例如,为 ITKReader 设置 c_order_axis_indexing=True,此参数稍后将传递给 ITK read() 函数。


loader = LoadImage()
loader.register(ITKReader())
data, meta = loader(filename)

print(f"image data shape:{data.shape}")
print(f"meta data:{meta}")

在这里插入图片描述

加载图像并执行其他操作

一些图像阅读器可以在从文件中读取图像后支持额外的操作。

例如,我们可以为 PILReader 设置一个转换器:PILReader(converter=lambda image: image.convert(“LA”))。

loader = LoadImage(PILReader(converter=lambda image: image.convert("LA")))
data, meta = loader(filename)

print(f"image data shape:{data.shape}")
print(f"meta data:{meta}")

在这里插入图片描述

将 LoadImage 与其他Transform结合使用

transform = Compose([
    LoadImaged(keys="image"),
    EnsureChannelFirstd(keys="image"),
    Resized(keys="image", spatial_size=[64, 64]),
    EnsureTyped("image"),
])
test_data = {"image": filename}
result = transform(test_data)
print(f"image data shape:{result['image'].shape}")
print(f"meta data:{result['image_meta_dict']}")

在这里插入图片描述

官方参考文档
MONAI API 文档

你可能感兴趣的:(MONAI,python,深度学习,神经网络,MONAI,图像处理)