固定遮罩必须为sitkUInt8“SimpleTk”像素类型

2024-10-01 15:48:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我对SimpleTk的图像注册相当陌生,我已经从源代码安装了Python3上的SimpleTk包

这是我的密码:


import SimpleITK as sitk

FIXED_IMAGE_NAME = '/data/fixedImage.nii'
MOVING_IMAGE_NAME = '/data/movingImage.nii'
THIRD_IMAGE_NAME = '/data/thirdImage.nii'
FIXED_IMAGE_MASK_NAME = '/data/fixedImage_roi.nii'
OUTPUT_IMG_NAME = '/data/moving_registered.nii'
OUTPUT_THRID_IMG_NAME = '/data/third_registered.nii'

OUTPUT_LOG_NAME = '/data/MR_CT_thirdPET_LOG.txt'


## Load fixed and moving image data
fixedImage = sitk.ReadImage(FIXED_IMAGE_NAME,sitk.sitkInt16)
movingImage = sitk.ReadImage(MOVING_IMAGE_NAME,sitk.sitkInt16)

 
# Execute elastix registration
elastixImageFilter = sitk.ElastixImageFilter()
elastixImageFilter.SetFixedImage(fixedImage)
elastixImageFilter.SetMovingImage(movingImage)
try:
    if FIXED_IMAGE_MASK_NAME != None and FIXED_IMAGE_MASK_NAME != "":
        elastixImageFilter.SetFixedMask(sitk.ReadImage(FIXED_IMAGE_MASK_NAME,sitk.sitkInt16))
except:
    print("NO FIXED_IMAGE_MASK: there is no fixedImage_roi.nii in the /data folder.") 
elastixImageFilter.SetParameterMap(parameterMap_rigid)


elastixImageFilter.AddParameterMap(parameterMap_bslpine) 


print("Performing registration using SimpleElastix...")
elastixImageFilter.LogToFileOn() 
#elastixImageFilter.SetLogFileName(OUTPUT_LOG_NAME)
elastixImageFilter.LogToConsoleOn()
elastixImageFilter.Execute()

resultImage = elastixImageFilter.GetResultImage()
sitk.WriteImage(resultImage, OUTPUT_IMG_NAME)

#    Get transform parameter map
transformParameterMap = elastixImageFilter.GetTransformParameterMap()

try:
    thirdImage = sitk.ReadImage(THIRD_IMAGE_NAME,sitk.sitkInt16)

    transformix = sitk.TransformixImageFilter()
    transformix.SetTransformParameterMap(transformParameterMap)
    transformix.SetMovingImage(thirdImage)

    transformix.Execute()

    resultThird = transformix.GetResultImage()
    sitk.WriteImage(resultThird, OUTPUT_THRID_IMG_NAME)
except:
    print("NO THIRD_IMAGE: there is no thirdImage.nii in the /data folder.") 


sitk::错误:固定掩码必须为像素类型sitkUInt8,但固定掩码0的类型为“16位有符号整数”。用SimpleITK.Cast(mask, sitk.sitkUInt8)进行强制转换。

你能告诉我哪里是我的问题吗


Tags: nameimageimgoutputdatamaskfixednii
1条回答
网友
1楼 · 发布于 2024-10-01 15:48:38

看起来elastixImageFilter.SetFixedMask的掩码图像必须是sitkUInt8类型,但您对sitk.ReadImage的调用告诉它使用sitkInt16类型。将该行更改为以下行,它应该可以工作:

    elastixImageFilter.SetFixedMask(sitk.ReadImage(FIXED_IMAGE_MASK_NAME,sitk.sitkUInt8))

相关问题 更多 >

    热门问题