MONAI 根据支持的后缀并按以下顺序自动选择阅读器:
#导入用到得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()
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)
data, meta = LoadImage()(filename)
print(f"image data shape:{data.shape}")
print(f"meta data:{meta}")
加载文件列表,将它们堆叠在一起并添加一个新维度作为第一维度。
并使用第一张图像的元数据来表示堆叠结果。
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}")
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)
data, meta = LoadImage()(filename)
print(f"image data shape:{data.shape}")
print(f"meta data:{meta}")
加载文件列表,将它们堆叠在一起并添加一个新维度作为第一维度。
并使用第一张图像的元数据来表示堆叠结果。
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])
data, meta = LoadImage()(filenames)
print(f"image data shape:{data.shape}")
print(f"meta data:{meta}")
#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}")
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 文档