• 使用SimpleITK批量计算医学图像分割的mask体积,病灶体积


    使用SimpleITK计算如下所示的病灶标注的整体体积。

    可以在该代码的基础上,增加写入excel表的操作,这样就可以把模型推理前的体积和模型推理后的体积都写入excel表,然后进行一系列分析。

    在这里插入图片描述

    1 计算ROI病灶体积

    SimpleITK包进行ROI/病灶体积的计算

    import SimpleITK as sitk
    import numpy as np
    
    def calculate_volume(mask_image_path):
        # 读取分割结果的图像文件
        mask_image = sitk.ReadImage(mask_image_path)
    
        # 获取图像的大小、原点和间距
        size = mask_image.GetSize()
        origin = mask_image.GetOrigin()
        spacing = mask_image.GetSpacing()
    
        # 将 SimpleITK 图像转换为 NumPy 数组
        mask_array = sitk.GetArrayFromImage(mask_image)
    
        # 计算非零像素的数量
        non_zero_voxels = (mask_array > 0).sum()
    
        # 计算像素的体积(以立方毫米为单位)
        voxel_volume_mm3 = spacing[0] * spacing[1] * spacing[2]
    
        # 计算体积(以 mm³ 为单位)
        volume_mm3 = non_zero_voxels * voxel_volume_mm3
    
        # 如果需要以其他单位(例如 cm³)显示,请进行适当的单位转换
        volume_cm3 = volume_mm3 / 1000.0
    
        return size,spacing,non_zero_voxels,volume_cm3
    
    maskFilePath = "./dataset/split_2_41/train/Mask/sub-strokecase0001_ses-0001_msk_reg.nii.gz"
    size,spacing,non_zero_voxels,roi_volume = calculate_volume(maskFilePath)
    
    print("================================")
    print(size,spacing,non_zero_voxels)
    
    print(f'ROI 或病灶的体积为 {roi_volume} cm³')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    测试结果:

    ================================
    (97, 113, 97) (2.0, 2.0, 2.0) 1446
    ROI 或病灶的体积为 11.568 cm³

    2,写入excel中

    写入excel中:表格形式如下:
    在这里插入图片描述
    代码如下:

    
    import SimpleITK as sitk
    import numpy as np
    import os
    import pandas as pd
    import openpyxl
    
    def toexcel(maskfilepath,excelfilepath):
        maskFilePath = maskfilepath
        excel_file_path = excelfilepath
    
        file_names = []
        sizes = []
        spacings = []
        non_zero_voxels = []
        roi_volumes = []
    
        for file_name in os.listdir(maskFilePath):
            if file_name.endswith('.nii.gz'):  # Assuming your files have this extension
                file_path = os.path.join(maskFilePath, file_name)
    
                # Assuming your calculate_volume function returns a tuple (size, spacing, non_zero_voxels, roi_volume)
                size, spacing, non_zero_voxel, roi_volume = calculate_volume(file_path)
    
                file_names.append(file_name)
                sizes.append(size)
                spacings.append(spacing)
                non_zero_voxels.append(non_zero_voxel)
                roi_volumes.append(roi_volume)
    
        print(file_names, spacings, non_zero_voxels, roi_volumes)
    
        # Create a DataFrame from the lists:
        data = {
            'File Name': file_names,
            'Size': sizes,
            'Spacing': spacings,
            'Non-Zero Voxels': non_zero_voxels,
            'ROI Volume': roi_volumes
        }
    
        df = pd.DataFrame(data)
        df.to_excel(excel_file_path, index=False, header=['File Name', 'Size', 'Spacing', 'Non-Zero', 'ROI Volume/Ml'])
        print('完成')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
  • 相关阅读:
    软考 ----- UML设计与分析(下)
    【容器】Podman和常用命令
    【JavaSe笔记】——类和对象、this引用、构造方法、封装、static、代码块
    Anaconda安装+Tensorflow2.0安装配置+Pycharm安装+GCN调试(Window 10)
    程序员过中秋丨用代码制作一个祝福小网页(html+css)
    java-net-php-python-jsp学生党团管理信息系统2020演示录像计算机毕业设计程序
    老年少女测试媛入职感想
    混合开发架构|Android工程集成React Native、Flutter、ReactJs
    Linux——文件描述符(fd)与重定向、dup/dup2
    中国储运杂志中国储运杂志社中国储运编辑部2022年第7期目录
  • 原文地址:https://blog.csdn.net/Alexa_/article/details/132720273