医学图像相关

发布于 2021 年 03 月 19 日 | 更新于 2022 年 01 月 13 日

图像格式

目前遇到过的格式:

The NIFTI file format

用python读入医学图像

python ,matlab 读取NIFTI(.nii)格式图像、FSL安装

符号:

nii文件中的方向理解

Orientation and Voxel-Order Terminology: RAS, LAS, LPI, RPI, XYZ and All That

SimpleITK

reference

>>> import SimpleITK
>>> img = SimpleITK.ReadImage(img_path)
>>> img_np = SimpleITK.GetArrayFromImage(img)
>>> img.GetSize()
(144, 192, 256)
>>> img_np.shape
(256, 192, 144)

关于Analyze格式:新版本的SimpleITK(2.0.1)会显示弃用警告:

 WARNING: In /usr/share/miniconda/envs/bld/conda-bld/simpleitk_1602768442566/work/build/ITK/Modules/IO/NIFTI/src/itkNiftiImageIO.cxx, line 1009
NiftiImageIO (0x564c43e95320): .../dataset/iseg2017/subject-0-label.img is Analyze file and it's deprecated

解决方案,在读入图像前,执行:

SimpleITK.ProcessObject_SetGlobalWarningDisplay(False)

关于MINC格式,SimpleITK好像无法读取

RuntimeError:
Exception thrown in SimpleITK ImageFileReader_Execute: /tmp/SimpleITK/Code/IO/src/sitkImageReaderBase.cxx:105:
sitk::ERROR: Unable to determine ImageIO reader for "BrainWeb/slice_thickness/t1_icbm_normal_9mm_pn0_rf0.mnc.gz"

scikit-image

>>> import skimage.io
>>> img_np = skimage.io.imread(img_path, plugin='simpleitk')
>>> img_np.shape  # 图像ndarray的形状为 (T, C, S)
(256, 192, 144)

这种方法底层还是调用的SimpleITK包(需要另外安装SimpleITK),也会出现上述弃用警告

NiBabel

>>> import nibabel
>>> import numpy
>>> img = nibabel.load(img_path)
>>> img_np = img.get_fdata()  # 可以指定dtype,默认float64
>>> img.shape
(144, 192, 256)
>>> img_np.shape
(144, 192, 256)

以上三种方法读入的图像数据(ndarray)是完全一致的(每个像素都相同):

import skimage.io as io
import SimpleITK as sitk
import nibabel as nib

filename = 'xxx'
plugin = 'simpleitk'

img1 = io.imread(filename, plugin=plugin)
img2 = sitk.ReadImage(filename)
img3 = nib.load(filename)

img2 = sitk.GetArrayFromImage(img2)
img3 = img3.get_fdata().transpose(2, 1, 0)

print((img1 == img2).all())  # True
print((img2 == img3).all())  # True
print((img1 == img3).all())  # True

Convert3D

安装ITK-SNAP会附带这个工具,位于ITK-SNAP安装目录的bin文件夹下 (Windows)

Convert3D (unix name c3d) is a command-line image processing tool that offers complementary features to ITK-SNAP.

Convert3D Documentation

设置数据类型(dtype):-type: Specify pixel type for image output

# -type < char | uchar | short | ushort | int | uint | float | double >
c3d input.img -type uchar out.img

设置体素大小(spacing):-spacing: Set voxel spacing

c3d input.nii -spacing 1x1x1mm -o out.img

设置图像方向(spacing):-orient: Change image orientation

c3d input.img -orient LPI -o out.img

设置图像原点(spacing):-origin: Set image origin

c3d input.img -origin 100x100x100mm -o out.img