Elastix 3D 注册停止 python 没有任何错误

问题描述

我想注册 2 个 3D 数据集,这些数据集被读入 numpy 数组,然后提供给 registrate() 函数。当我执行代码时,它会打印以下日志:

安装所有组件。 安装组件成功。

ELAStix 版本:5.0.1 来自 ElastixBase 的命令行选项:
-fMask 未指定,因此未使用固定掩码
-mMask 未指定,因此不使用移动掩码
-out D:\...\test/
-priority 未指定,因此 norMAL 进程优先级
-未指定线程,因此使用所有可用线程
TransformBase 中的命令行选项:
-t0 未指定,所以没有使用初始变换

正在阅读图片...
读取图像需要 1 毫秒。

之后就是停止并返回到正常的命令行。它没有到达“step2”。

有没有办法回溯出错的地方和原因?

def registrate(vol1,vol2,log_out_path):
    """

    Parameters
    ----------
    vol1: np.array,fixed image
    vol2: np.array,moving image
    log_out_path: str,path to the directory for the logfile

    Returns
    -------
    None
    """

    fixed_img = itk.GetimageFromArray(vol1)
    moving_img = itk.GetimageFromArray(vol2)

    print(type(moving_img))

    parameter_object_ = itk.ParameterObject.New()
    default_euler_ = parameter_object_.GetDefaultParameterMap("rigid",3)
    parameter_object_.AddParameterMap(default_euler_)
    set_elastix_parameters(parameter_object_,"euler")
    print("step1")
    result_image_,result_transform_parameters_ = itk.elastix_registration_method(fixed_img,# fixed
                                                                                  moving_img,# moving
                                                                                  parameter_object=parameter_object_,log_to_console=True,output_directory=log_out_path,log_file_name=r"log.txt",log_to_file=True,)

    print("step2")
    deformed_image_ = apply_transformix([result_transform_parameters_],moving_img)
    print("Step3")
    save_volume(itk.GetArrayFromImage(deformed_image_),r"D:\...\deformed","de",True)
    save_volume(itk.GetArrayFromImage(result_image_),r"D:\...\result_transformed","re",True)


if __name__ == "__main__":

    moving_img = read_in_volume(r"D:\...\sample1")
    print("moving image read in correctly")
    fixed_img = read_in_volume(r"D:\...\sample2")
    print("fixed image read in correctly")

    registrate(fixed_img,moving_img,r"D:\...\test") 

使用的参数如下:

def set_elastix_parameters(parameters,i,transform):
    # Image types
    parameters.SetParameter(i,"UseDirectionCosines","true")
    # Main components
    parameters.SetParameter(i,"Registration","MultiResolutionRegistration")
    # parameters.SetParameter(i,"Interpolator","BSplineInterpolatorFloat") not avalaible for python
    parameters.SetParameter(i,"LinearInterpolator")
    parameters.SetParameter(i,"ResampleInterpolator","FinalBSplineInterpolator")
    parameters.SetParameter(i,"Resampler","DefaultResampler")
    parameters.SetParameter(i,"FixedImageBSplineInterpolationorder","1")
    parameters.SetParameter(i,"BSplineInterpolationorder","FixedImagePyramid","FixedSmoothingImagePyramid")
    parameters.SetParameter(i,"MovingImagePyramid","MovingSmoothingImagePyramid")
    parameters.SetParameter(i,"Optimizer","AdaptivestochasticGradientDescent")
    parameters.SetParameter(i,"Metric","AdvancedMattesMutualinformation")
    parameters.SetParameter(i,"FixedInternalImagePixelType","float")
    parameters.SetParameter(i,"MovingInternalImagePixelType","float")

    # Transformation
    if transform == "euler":
        parameters.SetParameter(i,"Transform","EulerTransform")
        parameters.SetParameter(i,"AutomaticTransformInitialization","true")
    else:
        parameters.SetParameter(i,"BSplineTransform")
        parameters.SetParameter(i,"BSplineTransformSplineOrder","3")
    parameters.SetParameter(i,"FinalGridSpacingInPhysicalUnits","12")
    parameters.SetParameter(i,"GridSpacingSchedule",["16","8","4","2","1"])
    parameters.SetParameter(i,"HowToCombineTransforms","Compose")
    parameters.SetParameter(i,"UseCyclicTransform","false")
    # Similarity measure
    parameters.SetParameter(i,"NumberOfHistogramBins","64")
    parameters.SetParameter(i,"NumberOfFixedHistogramBins","NumberOfMovingHistogramBins","ShowExactMetricValue","false")
    parameters.SetParameter(i,"CheckNumberOfSamples","true")
    # Multiresolution
    parameters.SetParameter(i,"NumberOfResolutions","5")
    parameters.SetParameter(i,"ImagePyramidSchedule","16","1","1"])
    # Optimizer
    parameters.SetParameter(i,"MaximumNumberOfIterations","2000")
    parameters.SetParameter(i,"FixedLimitRangeRatio","0.01")
    parameters.SetParameter(i,"MovingLimitRangeRatio","FixedKernelBSplineOrder","0")
    parameters.SetParameter(i,"MovingKernelBSplineOrder","UseFastAndLowMemoryVersion","true")
    parameters.SetParameter(i,"UseJacobianPreconditioning","FiniteDifferenceDerivative","SP_A","20")
    parameters.SetParameter(i,"MaximumNumberOfSamplingAttempts","SigmoidInitialTime","MaxBandCovSize","192")
    parameters.SetParameter(i,"NumberOfBandStructureSamples","10")
    parameters.SetParameter(i,"UseAdaptiveStepSizes","AutomaticParameterEstimation","MaximumStepLength","0.976562")
    parameters.SetParameter(i,"NumberOfGradientMeasurements","NumberOfJacobianMeasurements","1000")
    parameters.SetParameter(i,"NumberOfSamplesForExactGradient","100000")
    parameters.SetParameter(i,"SigmoidScaleFactor","0.1")
    parameters.SetParameter(i,"ASGDParameterEstimationMethod","Original")
    # Image sampling
    parameters.SetParameter(i,"UseRandomSampleRegion","NumberOfSpatialSamples","4096")
    parameters.SetParameter(i,"NewSamplesEveryIteration","ImageSampler","RandomCoordinate")
    # Interpolation and resampling
    parameters.SetParameter(i,"FinalBSplineInterpolationorder","DefaultPixelValue","-1000")
    parameters.SetParameter(i,"WriteResultimage","WriteDVFFromCoeff","ResultimageFormat","mhd")

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)