如何使用Python实现.mhd格式图像与掩码的相乘操作?
Python实现MHD医学图像与掩码相乘操作
处理MHD格式的医学图像与掩码相乘,推荐用SimpleITK库——专门针对医学影像开发,能很好保留图像的空间元数据(如间距、原点),比通用图像库更适配场景。
步骤与代码实现
安装依赖
先安装SimpleITK:pip install simpleitk完整代码
import SimpleITK as sitk import numpy as np # 加载MHD图像并转numpy数组 def load_mhd(file_path): itk_img = sitk.ReadImage(file_path) # SimpleITK转numpy后维度顺序为 (Z, Y, X),对应切片、行、列 np_img = sitk.GetArrayFromImage(itk_img) return np_img, itk_img # 加载目标文件 medical_np, medical_itk = load_mhd("path/to/medical_image.mhd") mask_np, mask_itk = load_mhd("path/to/mask.mhd") # 校验尺寸匹配(必须保证维度、大小完全一致) if medical_np.shape != mask_np.shape: raise ValueError(f"图像与掩码尺寸不匹配:图像{medical_np.shape},掩码{mask_np.shape}") # 执行相乘操作,统一数据类型避免溢出/精度损失 result_np = medical_np.astype(np.float32) * mask_np.astype(np.float32) # 保存结果为MHD,保留原医学图像的空间元数据 result_itk = sitk.GetImageFromArray(result_np) result_itk.CopyInformation(medical_itk) # 复制间距、原点、方向等信息 sitk.WriteImage(result_itk, "path/to/save/result.mhd")
关键注意事项
- 维度顺序:SimpleITK读取的图像转numpy后是
(Z, Y, X)顺序,需确保掩码的维度顺序与医学图像一致,否则会出现错位相乘。 - 数据类型:医学图像多为
int16/float32,掩码常为uint8(0/1或多标签),统一转浮点类型可避免整数溢出问题。 - 元数据保留:复制原图像的空间信息是核心,否则保存后的MHD在医学影像软件中打开时,位置、缩放会出现错误。
内容的提问来源于stack exchange,提问作者rezvan.ra
相关产品推荐
相关产品推荐

