Skip to content

Commit

Permalink
ENH: Wrap ResampleFilter for 3D CurvilinearArraySpecialCoordinatesImage
Browse files Browse the repository at this point in the history
This is needed by refactoring of https://github.com/KitwareMedical/SlicerITKUltrasound

Bump version number to 0.6.1
  • Loading branch information
dzenanz committed Apr 19, 2023
1 parent 07f3e41 commit cff669e
Show file tree
Hide file tree
Showing 4 changed files with 92 additions and 8 deletions.
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

setup(
name='itk-ultrasound',
version='0.6.0',
version='0.6.1',
author='Matthew McCormick',
author_email='[email protected]',
packages=['itk'],
Expand Down
81 changes: 75 additions & 6 deletions wrapping/itkCurvilinearArraySpecialCoordinatesImageFilters.wrap
Original file line number Diff line number Diff line change
Expand Up @@ -92,12 +92,6 @@ itk_wrap_class("itk::RescaleIntensityImageFilter" POINTER_WITH_2_SUPERCLASSES)
endforeach()
itk_end_wrap_class()

itk_wrap_include("itkResampleImageFilter.h")
itk_wrap_class("itk::ResampleImageFilter" POINTER)
itk_wrap_template("CASCIF2IF2"
"itk::CurvilinearArraySpecialCoordinatesImage< float, 2 >, itk::Image< float, 2 >")
itk_end_wrap_class()

itk_wrap_include("itkSpectra1DSupportWindowToMaskImageFilter.h")
itk_wrap_class("itk::Spectra1DSupportWindowToMaskImageFilter" POINTER_WITH_2_SUPERCLASSES)
foreach(d ${ITK_WRAP_IMAGE_DIMS})
Expand All @@ -107,3 +101,78 @@ itk_wrap_class("itk::Spectra1DSupportWindowToMaskImageFilter" POINTER_WITH_2_SUP
endforeach()
endforeach()
itk_end_wrap_class()

# The rest is needed for ResampleImageFilter and interpolator functions
set(resample_filter_dimensions 2 3)
set(resample_filter_pixel_types "F")
if(ITK_WRAP_unsigned_char)
list(APPEND resample_filter_pixel_types "UC")
endif()
itk_wrap_include("itkResampleImageFilter.h")
itk_wrap_class("itk::ResampleImageFilter" POINTER)
foreach(d ${resample_filter_dimensions})
foreach(t ${resample_filter_pixel_types})
itk_wrap_template("CASCI${ITKM_${t}}${d}I${ITKM_${t}}${d}"
"itk::CurvilinearArraySpecialCoordinatesImage< ${ITKT_${t}}, ${d} >, itk::Image< ${ITKT_${t}}, ${d} >")
endforeach()
endforeach()
itk_end_wrap_class()

itk_wrap_class("itk::ImageFunction" POINTER)
foreach(d ${resample_filter_dimensions})
foreach(t ${resample_filter_pixel_types})
itk_wrap_template("CASCI${ITKM_${t}}${d}${ITKM_D}"
"itk::CurvilinearArraySpecialCoordinatesImage< ${ITKT_${t}}, ${d} >, ${ITKT_D}, ${ITKT_D}")
endforeach()
endforeach()
itk_end_wrap_class()

itk_wrap_class("itk::InterpolateImageFunction" POINTER)
foreach(d ${resample_filter_dimensions})
foreach(t ${resample_filter_pixel_types})
itk_wrap_template("CASCI${ITKM_${t}}${d}${ITKM_D}" "itk::CurvilinearArraySpecialCoordinatesImage< ${ITKT_${t}}, ${d} >, ${ITKT_D}")
endforeach()
endforeach()
itk_end_wrap_class()

itk_wrap_class("itk::NearestNeighborInterpolateImageFunction" POINTER)
foreach(d ${resample_filter_dimensions})
foreach(t ${resample_filter_pixel_types})
itk_wrap_template("CASCI${ITKM_${t}}${d}${ITKM_D}"
"itk::CurvilinearArraySpecialCoordinatesImage< ${ITKT_${t}}, ${d} >, ${ITKT_D}")
endforeach()
endforeach()
itk_end_wrap_class()

itk_wrap_class("itk::LinearInterpolateImageFunction" POINTER)
foreach(d ${resample_filter_dimensions})
foreach(t ${resample_filter_pixel_types})
itk_wrap_template("CASCI${ITKM_${t}}${d}${ITKM_D}"
"itk::CurvilinearArraySpecialCoordinatesImage< ${ITKT_${t}}, ${d} >, ${ITKT_D}")
endforeach()
endforeach()
itk_end_wrap_class()

itk_wrap_class("itk::GaussianInterpolateImageFunction" POINTER)
foreach(d ${resample_filter_dimensions})
foreach(t ${resample_filter_pixel_types})
itk_wrap_template("CASCI${ITKM_${t}}${d}${ITKM_D}"
"itk::CurvilinearArraySpecialCoordinatesImage< ${ITKT_${t}}, ${d} >, ${ITKT_D}")
endforeach()
endforeach()
itk_end_wrap_class()

itk_wrap_include("itkWindowedSincInterpolateImageFunction.h")
set(window_functions "Hamming" "Cosine" "Welch" "Lanczos")
set(radii 2 3)
itk_wrap_class("itk::WindowedSincInterpolateImageFunction" POINTER)
foreach(d ${resample_filter_dimensions})
foreach(t ${resample_filter_pixel_types})
foreach(r ${radii}) # radius
foreach(function ${window_functions})
itk_wrap_template("CASCI${ITKM_${t}}${d}${r}${function}" "itk::CurvilinearArraySpecialCoordinatesImage< ${ITKT_${t}}, ${d} >, ${r}, itk::Function::${function}WindowFunction< ${r} >")
endforeach()
endforeach()
endforeach()
endforeach()
itk_end_wrap_class()
4 changes: 4 additions & 0 deletions wrapping/test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@ itk_python_add_test(NAME PythonCurvilinearArraySpecialCoordinatesImageTemplateMe
COMMAND PythonCurvilinearArraySpecialCoordinatesImageTemplateMethodsTest.py
)

itk_python_expression_add_test(NAME PythonInstantiateGaussianInterpolateImageFunction
EXPRESSION "iFunc = itk.GaussianInterpolateImageFunction[itk.CurvilinearArraySpecialCoordinatesImage[itk.UC, 2], itk.D].New()"
)

itk_python_add_test(NAME PythonBackscatterImageFilterTest0
TEST_DRIVER_ARGS
--compareIntensityTolerance 0.01
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,20 @@
print(f'Transformed continuous index: {continuous_index}')
assert transformed_continuous_index == continuous_index, f'Output {transformed_continuous_index} differs from expectation {continuous_index}'

# Verify resampling works with curvilinear image input
print("Verify resampling works with curvilinear image input")
output_size = [800] * dimension
output_spacing = [0.15] * dimension
output_origin = [output_size[0] * output_spacing[0] / -2.0,
radius_start * math.cos(math.pi / 4.0)]
_ = itk.resample_image_filter(image, size=output_size, output_spacing=output_spacing, output_origin=output_origin)

print("Verify resampling works with curvilinear image and GaussianInterpolateImageFunction")
interpolator = itk.GaussianInterpolateImageFunction[image_type, itk.D].New()
interpolator.SetSigma( output_spacing );
interpolator.SetAlpha( 3.0 * max(output_spacing) );
_ = itk.resample_image_filter(image, size=output_size, output_spacing=output_spacing, output_origin=output_origin, interpolator=interpolator)

print("Verify resampling works with curvilinear image and WindowedSincInterpolateImageFunction")
WindowType = itk.LanczosWindowFunction[dimension]
interpolator = itk.WindowedSincInterpolateImageFunction[image_type, dimension, WindowType].New()
_ = itk.resample_image_filter(image, size=output_size, output_spacing=output_spacing, output_origin=output_origin, interpolator=interpolator)

0 comments on commit cff669e

Please sign in to comment.