53 lines
2.2 KiB
Python
53 lines
2.2 KiB
Python
import SimpleITK as sitk
|
|
|
|
|
|
def command_iteration(method):
|
|
print(f"{method.GetOptimizerIteration()} = {method.GetMetricValue():.5f} {method.GetOptimizerPosition()}")
|
|
|
|
|
|
def registration(fixed_image_path, moving_image_path, new_image_path):
|
|
fixed_image = sitk.ReadImage(fixed_image_path, sitk.sitkFloat32)
|
|
moving_image = sitk.ReadImage(moving_image_path, sitk.sitkFloat32)
|
|
|
|
registration_method = sitk.ImageRegistrationMethod()
|
|
|
|
registration_method.SetMetricAsJointHistogramMutualInformation(numberOfHistogramBins=50)
|
|
registration_method.SetMetricSamplingStrategy(registration_method.REGULAR)
|
|
registration_method.SetMetricSamplingPercentage(0.2, 42)
|
|
registration_method.SetGlobalDefaultNumberOfThreads(1)
|
|
registration_method.SetOptimizerScalesFromPhysicalShift()
|
|
|
|
registration_method.SetInterpolator(sitk.sitkLinear)
|
|
registration_method.AddCommand(sitk.sitkIterationEvent, lambda: command_iteration(registration_method))
|
|
|
|
registration_method.SetOptimizerAsRegularStepGradientDescent(minStep=0.0001,
|
|
learningRate=1.0,
|
|
numberOfIterations=400,
|
|
gradientMagnitudeTolerance=1e-8)
|
|
|
|
initial_transform = sitk.CenteredTransformInitializer(fixed_image, moving_image, sitk.Euler3DTransform())
|
|
registration_method.SetInitialTransform(initial_transform, inPlace=True)
|
|
|
|
# 进行配准
|
|
final_transform_v4 = registration_method.Execute(fixed_image, moving_image)
|
|
|
|
# 打印结束条件
|
|
stop_condition = registration_method.GetOptimizerStopConditionDescription()
|
|
print(stop_condition)
|
|
|
|
# 重采样新的图像
|
|
moving_resampled = sitk.Resample(moving_image, fixed_image, final_transform_v4, sitk.sitkLinear, 0.0,
|
|
moving_image.GetPixelID())
|
|
|
|
sitk.WriteImage(moving_resampled, new_image_path)
|
|
|
|
|
|
def main():
|
|
fixed_image_path = r"..\Data\registration\t1.nii.gz"
|
|
moving_image_path = r"..\Data\registration\t2 flair.nii.gz"
|
|
new_image_path = r"..\Data\registration\t2 flair_resampled.nii.gz"
|
|
|
|
registration(fixed_image_path, moving_image_path, new_image_path)
|
|
|
|
|
|
main()
|