You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python实现.mhd格式图像与掩码的相乘操作?

Python实现MHD医学图像与掩码相乘操作

处理MHD格式的医学图像与掩码相乘,推荐用SimpleITK库——专门针对医学影像开发,能很好保留图像的空间元数据(如间距、原点),比通用图像库更适配场景。

步骤与代码实现

  1. 安装依赖
    先安装SimpleITK:

    pip install simpleitk
    
  2. 完整代码

    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 15:35:39