欢迎访问宙启技术站
智能推送

使用SimpleITK库在Python中进行医学影像处理

发布时间:2023-12-29 01:37:14

SimpleITK是用于医学影像处理的开源库,是ITK(Insight Segmentation and Registration Toolkit)的简化接口。它提供了方便易用的API,可用于读取、处理和保存医学图像数据。

使用SimpleITK进行医学影像处理的一般流程如下:

1. 导入SimpleITK库和其他所需的库:

import SimpleITK as sitk
import numpy as np
import matplotlib.pyplot as plt

2. 读取医学图像数据:

image_path = "path/to/image.nii.gz"
image = sitk.ReadImage(image_path)

3. 获取图像的基本信息:

size = image.GetSize()  # 获取图像尺寸
spacing = image.GetSpacing()  # 获取图像间隔
origin = image.GetOrigin()  # 获取图像原点
direction = image.GetDirection()  # 获取图像方向

4. 将SimpleITK图像转为NumPy数组进行处理:

array = sitk.GetArrayFromImage(image)

5. 对图像进行预处理和增强:

# 高斯平滑
array_smoothed = sitk.SmoothingRecursiveGaussian(image, 0.5)
# 直方图均衡化
array_equalized = sitk.AdaptiveHistogramEqualization(image)
# 重采样
new_spacing = (1.0, 1.0, 1.0)  # 新的间隔
resampler = sitk.ResampleImageFilter()
resampler.SetOutputSpacing(new_spacing)
resampled_image = resampler.Execute(image)

6. 将处理好的NumPy数组转为SimpleITK图像:

processed_image = sitk.GetImageFromArray(processed_array)
processed_image.CopyInformation(image)

7. 可视化处理结果:

plt.imshow(sitk.GetArrayViewFromImage(processed_image))
plt.axis('off')
plt.show()

下面给出一个使用SimpleITK进行医学图像处理的例子,演示如何对CT图像进行平滑处理和阈值分割:

import SimpleITK as sitk
import numpy as np
import matplotlib.pyplot as plt

# 读取CT图像
ct_path = "path/to/ct.nii.gz"
ct_image = sitk.ReadImage(ct_path)

# 平滑处理
smoothed_image = sitk.SmoothingRecursiveGaussian(ct_image, 1.0)

# 阈值分割
threshold_filter = sitk.BinaryThresholdImageFilter()
threshold_filter.SetLowerThreshold(-500)  # 设置阈值范围
threshold_filter.SetUpperThreshold(200)
threshold_filter.SetInsideValue(0)
threshold_filter.SetOutsideValue(1)
segmented_image = threshold_filter.Execute(smoothed_image)

# 可视化处理结果
plt.subplot(121)
plt.imshow(sitk.GetArrayViewFromImage(ct_image), cmap='gray')
plt.axis('off')
plt.title('Original CT Image')
plt.subplot(122)
plt.imshow(sitk.GetArrayViewFromImage(segmented_image), cmap='gray')
plt.axis('off')
plt.title('Segmented Image')
plt.show()

在上述示例中,我们首先读取了CT图像,然后对图像进行了平滑处理和阈值分割,最后使用matplotlib库将原始CT图像和分割结果进行可视化展示。

这只是SimpleITK库的一个简单例子,SimpleITK还提供了更多功能和算法,可以根据具体需求进行更复杂的医学影像处理。