From 9ed0f1409a97b00684ef8aae6ead4082b3e82572 Mon Sep 17 00:00:00 2001 From: Evert de Man Date: Fri, 22 Nov 2024 19:59:38 +0100 Subject: [PATCH 1/5] Add single precision to registration --- ants/registration/registration.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/ants/registration/registration.py b/ants/registration/registration.py index 9ee0fece..384319ad 100644 --- a/ants/registration/registration.py +++ b/ants/registration/registration.py @@ -42,6 +42,7 @@ def registration( multivariate_extras=None, restrict_transformation=None, smoothing_in_mm=False, + singleprecision=False, **kwargs ): """ @@ -152,6 +153,10 @@ def registration( smoothing_in_mm : boolean ; currently only impacts low dimensional registration + singleprecision : boolean + if True, use float32 for computations. This is useful for reducing memory + usage for large datasets, at the cost of precision. + kwargs : keyword args extra arguments @@ -409,13 +414,13 @@ def registration( # initx = invertAntsrTransform( initx ) # writeAntsrTransform( initx, tempTXfilename ) # initx = tempTXfilename - moving = moving.clone("float") - fixed = fixed.clone("float") + output_pixel_type = 'float' if singleprecision else 'double' + # NOTE: this may be better for general purpose applications: TBD # moving = ants.iMath( moving.clone("float"), "Normalize" ) # fixed = ants.iMath( fixed.clone("float"), "Normalize" ) - warpedfixout = moving.clone() - warpedmovout = fixed.clone() + warpedfixout = moving.clone(output_pixel_type) + warpedmovout = fixed.clone(output_pixel_type) f = get_pointer_string(fixed) m = get_pointer_string(moving) wfo = get_pointer_string(warpedfixout) @@ -1348,7 +1353,7 @@ def registration( args.append("-g") args.append(restrict_transformationchar) - args.append("--float") + args.append('--float', str(int(singleprecision))) args.append("1") args.append("--write-composite-transform") args.append(write_composite_transform * 1) From e550c15ba1384967366c624147317e2e7ff148a9 Mon Sep 17 00:00:00 2001 From: Evert de Man Date: Fri, 22 Nov 2024 20:06:47 +0100 Subject: [PATCH 2/5] Add number correctly --- ants/registration/registration.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ants/registration/registration.py b/ants/registration/registration.py index 384319ad..4d2dcea6 100644 --- a/ants/registration/registration.py +++ b/ants/registration/registration.py @@ -1353,8 +1353,8 @@ def registration( args.append("-g") args.append(restrict_transformationchar) - args.append('--float', str(int(singleprecision))) - args.append("1") + args.append('--float') + args.append(str(int(singleprecision))) args.append("--write-composite-transform") args.append(write_composite_transform * 1) if verbose: From c36c2b548fb9f99a3ea7123b6c0ed222d082c997 Mon Sep 17 00:00:00 2001 From: Evert de Man Date: Fri, 22 Nov 2024 20:24:23 +0100 Subject: [PATCH 3/5] Fix default --- ants/registration/registration.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ants/registration/registration.py b/ants/registration/registration.py index 4d2dcea6..9ba20ca1 100644 --- a/ants/registration/registration.py +++ b/ants/registration/registration.py @@ -42,7 +42,7 @@ def registration( multivariate_extras=None, restrict_transformation=None, smoothing_in_mm=False, - singleprecision=False, + singleprecision=True, **kwargs ): """ @@ -356,6 +356,8 @@ def registration( synits = "x".join([str(ri) for ri in reg_iterations]) inpixeltype = fixed.pixeltype + output_pixel_type = 'float' if singleprecision else 'double' + tvTypes = [ "TV[1]", "TV[2]", @@ -414,7 +416,6 @@ def registration( # initx = invertAntsrTransform( initx ) # writeAntsrTransform( initx, tempTXfilename ) # initx = tempTXfilename - output_pixel_type = 'float' if singleprecision else 'double' # NOTE: this may be better for general purpose applications: TBD # moving = ants.iMath( moving.clone("float"), "Normalize" ) From 577520a724da083d612c1553bc65369311649da8 Mon Sep 17 00:00:00 2001 From: Evert de Man Date: Fri, 22 Nov 2024 20:34:19 +0100 Subject: [PATCH 4/5] Use double quotes --- ants/registration/registration.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ants/registration/registration.py b/ants/registration/registration.py index 9ba20ca1..a2be237a 100644 --- a/ants/registration/registration.py +++ b/ants/registration/registration.py @@ -1354,7 +1354,7 @@ def registration( args.append("-g") args.append(restrict_transformationchar) - args.append('--float') + args.append("--float") args.append(str(int(singleprecision))) args.append("--write-composite-transform") args.append(write_composite_transform * 1) From 107b61147d7029233c856dbfce508a1965c5bc50 Mon Sep 17 00:00:00 2001 From: Evert de Man Date: Fri, 22 Nov 2024 21:23:43 +0100 Subject: [PATCH 5/5] Cast moving/fixed to output pixel type --- ants/registration/registration.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/ants/registration/registration.py b/ants/registration/registration.py index a2be237a..de943ee8 100644 --- a/ants/registration/registration.py +++ b/ants/registration/registration.py @@ -416,12 +416,13 @@ def registration( # initx = invertAntsrTransform( initx ) # writeAntsrTransform( initx, tempTXfilename ) # initx = tempTXfilename - + moving = moving.clone(output_pixel_type) + fixed = fixed.clone(output_pixel_type) # NOTE: this may be better for general purpose applications: TBD # moving = ants.iMath( moving.clone("float"), "Normalize" ) # fixed = ants.iMath( fixed.clone("float"), "Normalize" ) - warpedfixout = moving.clone(output_pixel_type) - warpedmovout = fixed.clone(output_pixel_type) + warpedfixout = moving.clone() + warpedmovout = fixed.clone() f = get_pointer_string(fixed) m = get_pointer_string(moving) wfo = get_pointer_string(warpedfixout)