Skip to content
This repository was archived by the owner on May 27, 2026. It is now read-only.

Commit 3176be6

Browse files
committed
ENH: Fix Python wrapping for all VariationalRegistration classes
Correct the template arguments in 7 .wrap files that previously used itk_wrap_image_filter with wrong argument counts: - Regularizer + 4 derived classes (Curvature, Diffusion, Elastic, Gaussian): take 1 param TDisplacementField = Image<Vector<float,D>,D>. Changed from itk_wrap_image_filter (2 scalar images) to itk_wrap_template with displacement field type. - MultiResolutionFilter: takes <TFixedImage, TMovingImage, TDisplacementField, TRealType=float>. Same 3-param pattern as VariationalRegistrationFilter with TRealType defaulting. - StopCriterion: takes <TRegistrationFilter, TMRFilter>. Wrap with concrete VariationalRegistrationFilter and VariationalRegistrationMultiResolutionFilter types. Re-enable all 7 classes in wrapping/CMakeLists.txt with correct dependency ordering (base before derived, filters before StopCriterion).
1 parent 9e42b76 commit 3176be6

8 files changed

Lines changed: 59 additions & 51 deletions

wrapping/CMakeLists.txt

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,27 @@
11
itk_wrap_module(VariationalRegistration)
22

33
set(WRAPPER_SUBMODULE_ORDER
4-
# 3-parameter filters (InputImage, OutputImage/MovingImage, DisplacementField)
5-
# — wrapping uses itk_wrap_image_filter_combinations correctly.
4+
# Base regularizer (1-param: TDisplacementField)
5+
itkVariationalRegistrationRegularizer
6+
# Derived regularizers (1-param: TDisplacementField)
7+
itkVariationalRegistrationCurvatureRegularizer
8+
itkVariationalRegistrationDiffusionRegularizer
9+
itkVariationalRegistrationElasticRegularizer
10+
itkVariationalRegistrationGaussianRegularizer
11+
# 3-parameter filters (TFixedImage, TMovingImage, TDisplacementField)
612
itkContinuousBorderWarpImageFilter
7-
itkVariationalDiffeomorphicRegistrationFilter
13+
itkVariationalRegistrationFunction
814
itkVariationalRegistrationDemonsFunction
915
itkVariationalRegistrationFastNCCFunction
10-
itkVariationalRegistrationFilter
11-
itkVariationalRegistrationFunction
1216
itkVariationalRegistrationNCCFunction
1317
itkVariationalRegistrationSSDFunction
18+
itkVariationalRegistrationFilter
19+
itkVariationalDiffeomorphicRegistrationFilter
1420
itkVariationalSymmetricDiffeomorphicRegistrationFilter
15-
#
16-
# The following are DISABLED because their .wrap files pass the wrong
17-
# number of template arguments (they use itk_wrap_image_filter with 2
18-
# image types but the classes take 1 non-image or N != 2 params):
19-
#
20-
# itkVariationalRegistrationRegularizer — 1 param (TDisplacementField)
21-
# itkVariationalRegistrationCurvatureRegularizer — 1 param + FFTW guard
22-
# itkVariationalRegistrationDiffusionRegularizer — 1 param
23-
# itkVariationalRegistrationElasticRegularizer — 1 param
24-
# itkVariationalRegistrationGaussianRegularizer — 1 param
25-
# itkVariationalRegistrationStopCriterion — 2 params (TRegistrationFilter, TMRFilter)
26-
# itkVariationalRegistrationMultiResolutionFilter — 4 params
27-
#
28-
# These have never had working Python wrapping. Correct .wrap files
29-
# for single-param displacement-field classes need direct
30-
# itk_wrap_template calls. See ITK's itkDisplacementFieldTransform.wrap
31-
# for the canonical pattern. Left as future work for the module maintainer.
21+
# Multi-resolution (3-param + TRealType=float default)
22+
itkVariationalRegistrationMultiResolutionFilter
23+
# StopCriterion (depends on Filter + MultiResolutionFilter types)
24+
itkVariationalRegistrationStopCriterion
3225
)
3326

3427
itk_auto_load_submodules()
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
itk_wrap_class("itk::VariationalRegistrationCurvatureRegularizer" POINTER)
2-
# itk_wrap_image_filter("${WRAP_ITK_USIGN_INT}" 2)
3-
# itk_wrap_image_filter("${WRAP_ITK_SIGN_INT}" 2)
4-
itk_wrap_image_filter("${WRAP_ITK_REAL}" 2)
5-
itk_wrap_image_filter("${WRAP_ITK_VECTOR_REAL}" 2)
6-
itk_wrap_image_filter("${WRAP_ITK_COV_VECTOR_REAL}" 2)
2+
# Single template parameter: TDisplacementField = Image<Vector<float,D>,D>
3+
foreach(d ${ITK_WRAP_IMAGE_DIMS})
4+
itk_wrap_template("${ITKM_IVF${d}${d}}"
5+
"${ITKT_IVF${d}${d}}")
6+
endforeach()
77
itk_end_wrap_class()
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
itk_wrap_class("itk::VariationalRegistrationDiffusionRegularizer" POINTER)
2-
# itk_wrap_image_filter("${WRAP_ITK_USIGN_INT}" 2)
3-
# itk_wrap_image_filter("${WRAP_ITK_SIGN_INT}" 2)
4-
itk_wrap_image_filter("${WRAP_ITK_REAL}" 2)
5-
itk_wrap_image_filter("${WRAP_ITK_VECTOR_REAL}" 2)
6-
itk_wrap_image_filter("${WRAP_ITK_COV_VECTOR_REAL}" 2)
2+
# Single template parameter: TDisplacementField = Image<Vector<float,D>,D>
3+
foreach(d ${ITK_WRAP_IMAGE_DIMS})
4+
itk_wrap_template("${ITKM_IVF${d}${d}}"
5+
"${ITKT_IVF${d}${d}}")
6+
endforeach()
77
itk_end_wrap_class()
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
itk_wrap_class("itk::VariationalRegistrationElasticRegularizer" POINTER)
2-
# itk_wrap_image_filter("${WRAP_ITK_USIGN_INT}" 2)
3-
# itk_wrap_image_filter("${WRAP_ITK_SIGN_INT}" 2)
4-
itk_wrap_image_filter("${WRAP_ITK_REAL}" 2)
5-
itk_wrap_image_filter("${WRAP_ITK_VECTOR_REAL}" 2)
6-
itk_wrap_image_filter("${WRAP_ITK_COV_VECTOR_REAL}" 2)
2+
# Single template parameter: TDisplacementField = Image<Vector<float,D>,D>
3+
foreach(d ${ITK_WRAP_IMAGE_DIMS})
4+
itk_wrap_template("${ITKM_IVF${d}${d}}"
5+
"${ITKT_IVF${d}${d}}")
6+
endforeach()
77
itk_end_wrap_class()
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
itk_wrap_class("itk::VariationalRegistrationGaussianRegularizer" POINTER)
2-
# itk_wrap_image_filter("${WRAP_ITK_USIGN_INT}" 2)
3-
# itk_wrap_image_filter("${WRAP_ITK_SIGN_INT}" 2)
4-
itk_wrap_image_filter("${WRAP_ITK_REAL}" 2)
5-
itk_wrap_image_filter("${WRAP_ITK_VECTOR_REAL}" 2)
6-
itk_wrap_image_filter("${WRAP_ITK_COV_VECTOR_REAL}" 2)
2+
# Single template parameter: TDisplacementField = Image<Vector<float,D>,D>
3+
foreach(d ${ITK_WRAP_IMAGE_DIMS})
4+
itk_wrap_template("${ITKM_IVF${d}${d}}"
5+
"${ITKT_IVF${d}${d}}")
6+
endforeach()
77
itk_end_wrap_class()
Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
11
itk_wrap_class("itk::VariationalRegistrationMultiResolutionFilter" POINTER)
2-
itk_wrap_image_filter("${WRAP_ITK_SCALAR}" 2)
2+
# template <TFixedImage, TMovingImage, TDisplacementField, TRealType=float>
3+
# TRealType defaults to float, so wrap with 3 explicit params
4+
foreach(d ${ITK_WRAP_IMAGE_DIMS})
5+
foreach(t ${WRAP_ITK_REAL})
6+
itk_wrap_template("${ITKM_I${t}${d}}${ITKM_I${t}${d}}${ITKM_IVF${d}${d}}"
7+
"${ITKT_I${t}${d}},${ITKT_I${t}${d}},${ITKT_IVF${d}${d}}")
8+
endforeach()
9+
endforeach()
310
itk_end_wrap_class()
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
itk_wrap_class("itk::VariationalRegistrationRegularizer" POINTER_WITH_SUPERCLASS)
2-
# itk_wrap_image_filter("${WRAP_ITK_USIGN_INT}" 2)
3-
# itk_wrap_image_filter("${WRAP_ITK_SIGN_INT}" 2)
4-
itk_wrap_image_filter("${WRAP_ITK_REAL}" 2)
5-
itk_wrap_image_filter("${WRAP_ITK_VECTOR_REAL}" 2)
6-
itk_wrap_image_filter("${WRAP_ITK_COV_VECTOR_REAL}" 2)
2+
# Single template parameter: TDisplacementField = Image<Vector<float,D>,D>
3+
foreach(d ${ITK_WRAP_IMAGE_DIMS})
4+
itk_wrap_template("${ITKM_IVF${d}${d}}"
5+
"${ITKT_IVF${d}${d}}")
6+
endforeach()
77
itk_end_wrap_class()
Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
itk_wrap_class("itk::VariationalRegistrationStopCriterion" POINTER)
2-
# itk_wrap_image_filter("${WRAP_ITK_USIGN_INT}" 2)
3-
# itk_wrap_image_filter("${WRAP_ITK_SIGN_INT}" 2)
4-
itk_wrap_image_filter("${WRAP_ITK_REAL}" 2)
2+
# template <TRegistrationFilter, TMRFilter>
3+
# TRegistrationFilter = VariationalRegistrationFilter<IF,IF,IVF>
4+
# TMRFilter = VariationalRegistrationMultiResolutionFilter<IF,IF,IVF>
5+
foreach(d ${ITK_WRAP_IMAGE_DIMS})
6+
foreach(t ${WRAP_ITK_REAL})
7+
set(_reg "itk::VariationalRegistrationFilter< ${ITKT_I${t}${d}}, ${ITKT_I${t}${d}}, ${ITKT_IVF${d}${d}} >")
8+
set(_mr "itk::VariationalRegistrationMultiResolutionFilter< ${ITKT_I${t}${d}}, ${ITKT_I${t}${d}}, ${ITKT_IVF${d}${d}} >")
9+
itk_wrap_template("VRF${ITKM_I${t}${d}}${ITKM_I${t}${d}}${ITKM_IVF${d}${d}}VRMRF${ITKM_I${t}${d}}${ITKM_I${t}${d}}${ITKM_IVF${d}${d}}"
10+
"${_reg},${_mr}")
11+
endforeach()
12+
endforeach()
513
itk_end_wrap_class()

0 commit comments

Comments
 (0)