Python中三维模型体积的计算

Python中三维模型体积的计算,python,vtk,image-segmentation,itk,Python,Vtk,Image Segmentation,Itk,我有一个肾脏的nii文件,我用Python上传了它。itk或vtk中是否有计算肾脏体积的功能?我与您分享SimpleTk的解决方案 你需要一个肾脏的面具图像。遮罩是一个二值图像,其中器官为1,否则为0。如果您还没有此功能,可以使用3DSlicer分割图像,请参见此处:。在此之后,您将拥有一个renty_mask.nii(或nrrd,默认格式)文件 您可以使用以下脚本来计算体积 # script file image_volume.py import argparse

我有一个肾脏的nii文件,我用Python上传了它。itk或vtk中是否有计算肾脏体积的功能?

我与您分享SimpleTk的解决方案

你需要一个肾脏的面具图像。遮罩是一个二值图像,其中器官为1,否则为0。如果您还没有此功能,可以使用3DSlicer分割图像,请参见此处:。在此之后,您将拥有一个renty_mask.nii(或nrrd,默认格式)文件

您可以使用以下脚本来计算体积

# script file image_volume.py
import argparse                 # argument parser
import numpy as np
import SimpleITK as sitk

def volume( mask_image ):
    # Input:
    # image = sitk.Image, mask or binary image (1 values where organ, 0 values otherwise)
    # Output:
    # vol = float, volume in mm3 
    space = mask_image.GetSpacing()         # image spacing
    voxel = np.prod(space)                  # voxel volume
    img = sitk.GetArrayFromImage(mask_image)
    vol = voxel*np.sum(img)
    return vol

def main():
    # Arguments details
    parser = argparse.ArgumentParser(description='Compute volume of a mask image')
    parser.add_argument("input", type=str, 
                        help='Input file name')

    # Parse arguments
    args = parser.parse_args()
    image_file = args.input

    # Read the image
    try:
        image = sitk.ReadImage(image_file)
    except:
        print('Unable to read input image file.')

    # Calculate the volume
    print('Volume: {:f} [mm3]'.format(volume(image)))
    print('Volume: {:f} [cm3]'.format(volume(image)/1000.0))

    return
    
if __name__ == "__main__":
    # execute only if run as a script
    main()
将脚本称为:

python image_volume.py'/path/folder/rendy_mask.nii'


以下是如何在SimpleTk中完成此操作(另一个答案使用numpy进行体素计数)


使用这段代码,我有一个错误“Execute()缺少1个必需的位置参数:'labelImage'”,它引用stats.Execute(img)抱歉,我使用了错误的筛选器。我已经将代码更新为使用StatsticsImageFilter,而不是LabelStatisticsImageFilter。
import SimpleITK as sitk

stats = sitk.StatisticsImageFilter()

# img is a SimpleITK image
stats.Execute(img)

# get the number of voxels with label 1
nvoxels = stats.GetCount(1)

spacing = img.GetSpacing()
voxvol = spacing[0]*spacing[1]*spacing[2]

volume = nvoxels * voxvol