SimpleITK
是一个用于医学图像处理的库,基于 ITK(Insight Segmentation and Registration Toolkit)构建,提供了一些简化的 API,便于用户进行医学图像的读写、处理、分析和可视化。SimpleITK
可以处理多维度的图像(如 2D、3D、甚至更高维度),并广泛应用于医学影像学、计算机视觉、计算生物学等领域。
SimpleITK
(通常以 import SimpleITK as sitk
导入)主要的功能和特点如下:
1. 图像读写
SimpleITK
支持多种医学影像格式的读写,常见的格式有 DICOM、NIfTI、MetaImage、PNG、JPEG 等。- 使用
sitk.ReadImage()
来读取图像,使用sitk.WriteImage()
来保存图像。
import SimpleITK as sitk
image = sitk.ReadImage('example.mha') # 读取MetaImage格式的图像
sitk.WriteImage(image, 'output.nii') # 保存为NIfTI格式
2. 图像处理
- 提供了丰富的图像处理函数,包括滤波、阈值处理、形态学操作(如膨胀、腐蚀)、图像平滑、重采样、裁剪、旋转等。
- 可以方便地对图像进行各种操作,如对比度增强、噪声去除、边缘检测等。
smoothed_image = sitk.SmoothingRecursiveGaussian(image, sigma=2.0) # 高斯平滑
threshold_image = sitk.BinaryThreshold(image, lowerThreshold=50, upperThreshold=255, insideValue=1, outsideValue=0) # 二值化处理
3. 图像变换与配准
SimpleITK
提供了用于图像配准(图像对齐)的工具,支持基于强度的配准、基于特征的配准等。- 支持图像的几何变换,如仿射变换、刚性变换、非刚性变换等。
transform = sitk.AffineTransform(3) # 3D 仿射变换
resampler = sitk.Resample(image, transform) # 对图像应用变换
4. 图像分析
- 提供了图像分析工具,如计算图像的统计量(均值、方差、最大值、最小值等),提取图像的特征(如纹理、形状等)。
- 可以提取连通区域、标记不同的区域,进行分割、特征提取等任务。
label_shape_statistics = sitk.LabelShapeStatisticsImageFilter()
label_shape_statistics.Execute(image) # 计算标签区域的形状特征
5. 支持多维数据
SimpleITK
支持对多维图像进行处理,如 2D、3D 图像,甚至 4D 数据(如时间序列数据)。- 在 3D 医学影像分析中,
SimpleITK
提供了强大的工具来处理体积图像,如 CT 或 MRI 扫描。
6. Pythonic 接口
SimpleITK
提供了一个简洁易用的 Python 接口,相比 ITK 的原始接口,SimpleITK
具有更为友好的 API。- 它允许用户使用标准的 NumPy 数组操作,同时对图像的访问和处理也更加直观。
np_image = sitk.GetArrayFromImage(image) # 将SimpleITK图像转换为NumPy数组
image_back = sitk.GetImageFromArray(np_image) # 将NumPy数组转换回SimpleITK图像
SimpleITK
常见用途
-
医学图像读取与预处理:读取 DICOM、NIfTI 或 MetaImage 格式的医学影像数据,并对其进行去噪、平滑、裁剪等预处理操作。
-
图像配准与融合:将来自不同成像模态(如 CT 和 MRI)的图像进行配准,使得它们具有相同的空间坐标,便于比较和分析。
-
图像分割:对医学影像中的感兴趣区域(ROI)进行分割,常用于肿瘤检测、器官分割等任务。
-
图像变换与重采样:对图像进行旋转、平移、缩放等几何变换,或者对图像进行分辨率的重采样。
-
多维数据处理:处理 3D 或 4D 数据,常见于处理体积数据或时间序列数据(如动态图像分析)。
示例:读取和显示医学影像
import SimpleITK as sitk
import matplotlib.pyplot as plt
# 读取图像
image = sitk.ReadImage('example.dcm')
# 将 SimpleITK 图像转换为 NumPy 数组
image_array = sitk.GetArrayFromImage(image)
# 显示其中的一张切片(假设是3D数据)
plt.imshow(image_array[50, :, :], cmap='gray')
plt.show()
总结
SimpleITK
是一个功能强大的图像处理库,尤其适用于医学图像的处理。它通过简化 ITK 的 API,使得用户能够快速而高效地进行图像的读取、处理、分析和配准。无论是在图像分割、配准还是变换方面,SimpleITK
都提供了简便的工具,适合医学影像学研究、临床应用、以及其他相关领域的图像分析任务。