python - 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_, 0, "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, "Interpolator", "LinearInterpolator")
parameters.SetParameter(i, "ResampleInterpolator", "FinalBSplineInterpolator")
parameters.SetParameter(i, "Resampler", "DefaultResampler")
parameters.SetParameter(i, "FixedImageBSplineInterpolationOrder", "1")
parameters.SetParameter(i, "BSplineInterpolationOrder", "1")
parameters.SetParameter(i, "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, "Transform", "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", "64")
parameters.SetParameter(i, "NumberOfMovingHistogramBins", "64")
parameters.SetParameter(i, "ShowExactMetricValue", "false")
parameters.SetParameter(i, "CheckNumberOfSamples", "true")
# Multiresolution
parameters.SetParameter(i, "NumberOfResolutions", "5")
parameters.SetParameter(i, "ImagePyramidSchedule",
["16", "16", "8", "8", "8", "4", "4", "4", "2", "2", "2", "2", "1", "1", "1"])
# Optimizer
parameters.SetParameter(i, "MaximumNumberOfIterations", "2000")
parameters.SetParameter(i, "FixedLimitRangeRatio", "0.01")
parameters.SetParameter(i, "MovingLimitRangeRatio", "0.01")
parameters.SetParameter(i, "FixedKernelBSplineOrder", "0")
parameters.SetParameter(i, "MovingKernelBSplineOrder", "3")
parameters.SetParameter(i, "UseFastAndLowMemoryVersion", "true")
parameters.SetParameter(i, "UseJacobianPreconditioning", "false")
parameters.SetParameter(i, "FiniteDifferenceDerivative", "false")
parameters.SetParameter(i, "SP_A", "20")
parameters.SetParameter(i, "MaximumNumberOfSamplingAttempts", "0")
parameters.SetParameter(i, "SigmoidInitialTime", "0")
parameters.SetParameter(i, "MaxBandCovSize", "192")
parameters.SetParameter(i, "NumberOfBandStructureSamples", "10")
parameters.SetParameter(i, "UseAdaptiveStepSizes", "true")
parameters.SetParameter(i, "AutomaticParameterEstimation", "true")
parameters.SetParameter(i, "MaximumStepLength", "0.976562")
parameters.SetParameter(i, "NumberOfGradientMeasurements", "0")
parameters.SetParameter(i, "NumberOfJacobianMeasurements", "1000")
parameters.SetParameter(i, "NumberOfSamplesForExactGradient", "100000")
parameters.SetParameter(i, "SigmoidScaleFactor", "0.1")
parameters.SetParameter(i, "ASGDParameterEstimationMethod", "Original")
# Image sampling
parameters.SetParameter(i, "UseRandomSampleRegion", "false")
parameters.SetParameter(i, "NumberOfSpatialSamples", "4096")
parameters.SetParameter(i, "NewSamplesEveryIteration", "true")
parameters.SetParameter(i, "ImageSampler", "RandomCoordinate")
# Interpolation and Resampling
parameters.SetParameter(i, "FinalBSplineInterpolationOrder", "3")
parameters.SetParameter(i, "DefaultPixelValue", "-1000")
parameters.SetParameter(i, "WriteResultImage", "true")
parameters.SetParameter(i, "WriteDVFFromCoeff", "true")
parameters.SetParameter(i, "ResultImageFormat", "mhd")
解决方案
推荐阅读
- python - 仅包含前 n 个类别的 sns stripplot
- python - 填充列表 Python 时出现 IndexOutOfRange 错误
- python - 在 if 子句中使用 numpy.float32 值的问题
- go - Gin 框架无法从 Postman 获取数据
- python - 抑制来自导入的打印调用
- r - 在 data.table 计算中引用之前的值
- ms-access-2007 - 非常基本的问题关于多对多查询 MS-Access
- r - 用平均值和 SD 绘制 R 中的纵向数据
- javascript - 为什么我应该在 Typescript 中使用接口
- php - 从 PHP PDO 调用 SQL 存储过程