first commit
This commit is contained in:
parent
abc6526143
commit
26631f9b48
24 changed files with 1089 additions and 1 deletions
53
Code/10-registration.py
Normal file
53
Code/10-registration.py
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
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()
|
||||
Loading…
Add table
Add a link
Reference in a new issue