Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion applications/rtkamsterdamshroud/rtkamsterdamshroud.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,9 @@ def process(args_info: argparse.Namespace):
rtk.SetProjectionsReaderFromArgParse(reader, args_info)

# Amsterdam Shroud
shroudFilter = rtk.AmsterdamShroudImageFilter[OutputImageType].New()
shroudFilter = rtk.AmsterdamShroudImageFilter[
OutputImageType, OutputImageType
].New()
shroudFilter.SetInput(reader.GetOutput())
shroudFilter.SetUnsharpMaskSize(args_info.unsharp)

Expand Down
4 changes: 2 additions & 2 deletions applications/rtkconjugategradient/rtkconjugategradient.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ def process(args_info: argparse.Namespace):
if hasattr(itk, "CudaImage"):
OutputCudaImageType = itk.CudaImage[OutputPixelType, Dimension]
ConjugateGradientFilterType = rtk.ConjugateGradientConeBeamReconstructionFilter[
OutputCudaImageType
OutputCudaImageType, OutputCudaImageType, OutputCudaImageType
]
conjugategradient = ConjugateGradientFilterType.New()
conjugategradient.SetInput(itk.cuda_image_from_image(inputFilter.GetOutput()))
Expand All @@ -114,7 +114,7 @@ def process(args_info: argparse.Namespace):
conjugategradient.SetSupportMask(itk.cuda_image_from_image(supportmask))
else:
ConjugateGradientFilterType = rtk.ConjugateGradientConeBeamReconstructionFilter[
OutputImageType
OutputImageType, OutputImageType, OutputImageType
]
conjugategradient = ConjugateGradientFilterType.New()
conjugategradient.SetInput(inputFilter.GetOutput())
Expand Down
8 changes: 5 additions & 3 deletions applications/rtkfdk/rtkfdk.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,10 +123,10 @@ def process(args_info: argparse.Namespace):
pssf = rtk.CudaParkerShortScanImageFilter.New()
else:
ddf = rtk.DisplacedDetectorForOffsetFieldOfViewImageFilter[
OutputImageType
OutputImageType, OutputImageType
].New()
ddf.SetInput(reader.GetOutput())
pssf = rtk.ParkerShortScanImageFilter[OutputImageType].New()
pssf = rtk.ParkerShortScanImageFilter[OutputImageType, OutputImageType].New()

# Displaced detector weighting
ddf.SetGeometry(geometry)
Expand Down Expand Up @@ -169,7 +169,9 @@ def process(args_info: argparse.Namespace):
feldkamp = rtk.CudaFDKConeBeamReconstructionFilter.New()
feldkamp.SetInput(0, itk.cuda_image_from_image(constantImageSource.GetOutput()))
else:
feldkamp = rtk.FDKConeBeamReconstructionFilter[OutputImageType].New()
feldkamp = rtk.FDKConeBeamReconstructionFilter[
OutputImageType, OutputImageType, OutputPixelType
].New()
feldkamp.SetInput(0, constantImageSource.GetOutput())

# Set inputs and options for the FDK filter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ def process(args_info):
elif args_info.fp == "CudaRayCast":
if hasattr(itk, "CudaImage"):
forwardProjection = rtk.CudaForwardProjectionImageFilter[
OutputCudaImageType
OutputCudaImageType, OutputCudaImageType
].New()
forwardProjection.SetStepSize(args_info.step)
else:
Expand Down
2 changes: 1 addition & 1 deletion applications/rtksart/rtksart.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ def process(args_info: argparse.Namespace):
geometry = rtk.read_geometry(args_info.geometry)

# Phase gating weights reader
phaseGating = rtk.PhaseGatingImageFilter[OutputImageType].New()
phaseGating = rtk.PhaseGatingImageFilter[OutputImageType, OutputImageType].New()
if args_info.signal:
phaseGating.SetPhasesFileName(args_info.signal)
phaseGating.SetGatingWindowWidth(args_info.windowwidth)
Expand Down
20 changes: 20 additions & 0 deletions documentation/docs/rtk_3_migration_guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,26 @@ git branch -u origin/main main
git remote set-head origin -a
```

## Python class instantiations: required explicit template arguments

RTK requires callers to provide the full template argument list in Python. You must explicitly supply every template parameter the wrapped C++ class expects (for example `Filter[InputImageType, OutputImageType]`). The single-argument shorthand `Filter[InputImageType]` is no longer supported in RTK and should not be used.

Affected classes:

- `ADMMTotalVariationConeBeamReconstructionFilter`
- `AmsterdamShroudImageFilter`
- `BoellaardScatterCorrectionImageFilter`
- `ConjugateGradientConeBeamReconstructionFilter`
- `CudaForwardProjectionImageFilter`
- `DisplacedDetectorForOffsetFieldOfViewImageFilter`
- `DisplacedDetectorImageFilter`
- `FDKConeBeamReconstructionFilter`
- `FDKVarianceReconstructionFilter`
- `FDKWeightProjectionFilter`
- `IterativeConeBeamReconstructionFilter`
- `ParkerShortScanImageFilter`
- `PhaseGatingImageFilter`

## Removed `m_Normalize` from `rtk::CudaRayCastBackProjectionImageFilter`

Most users intuitively expect this for the backprojector matched to `rtk::CudaForwardProjectionFilter`. The filter was originally implemented with the normalization for SART and OSEM reconstruction but the normalization is now done in the reconstruction filters so it can be removed.
Expand Down
4 changes: 2 additions & 2 deletions examples/ConjugateGradient/ConjugateGradient.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
if hasattr(itk, "CudaImage"):
OutputCudaImageType = itk.CudaImage[itk.F, Dimension]
ConjugateGradientFilterType = rtk.ConjugateGradientConeBeamReconstructionFilter[
OutputCudaImageType
OutputCudaImageType, OutputCudaImageType, OutputCudaImageType
]
conjugategradient = ConjugateGradientFilterType.New()
conjugategradient.SetCudaConjugateGradient(True)
Expand All @@ -60,7 +60,7 @@

else:
ConjugateGradientFilterType = rtk.ConjugateGradientConeBeamReconstructionFilter[
OutputImageType
OutputImageType, OutputImageType, OutputImageType
]
conjugategradient = ConjugateGradientFilterType.New()
conjugategradient.SetInput(conjugate_gradient_source)
Expand Down
2 changes: 1 addition & 1 deletion examples/FirstReconstruction/FirstReconstruction.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@

# FDK reconstruction
print("Reconstructing...")
FDKCPUType = rtk.FDKConeBeamReconstructionFilter[ImageType]
FDKCPUType = rtk.FDKConeBeamReconstructionFilter[ImageType, ImageType, itk.F]
feldkamp = FDKCPUType.New()
feldkamp.SetInput(0, constantImageSource2.GetOutput())
feldkamp.SetInput(1, rei.GetOutput())
Expand Down
6 changes: 4 additions & 2 deletions examples/InlineReconstruction/InlineReconstruction.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,15 +69,17 @@ def acquisition():
)
fdk = rtk.CudaFDKConeBeamReconstructionFilter.New(Geometry=geometry_rec)
else:
parker = rtk.ParkerShortScanImageFilter[image_type].New(
parker = rtk.ParkerShortScanImageFilter[image_type, image_type].New(
Input=extractor.GetOutput(), Geometry=geometry_rec
)
reconstruction_source = rtk.ConstantImageSource[image_type].New(
Origin=[origin * sid / sdd] * 3,
Spacing=[spacing * sid / sdd] * 3,
Size=[size] * 3,
)
fdk = rtk.FDKConeBeamReconstructionFilter[image_type].New(Geometry=geometry_rec)
fdk = rtk.FDKConeBeamReconstructionFilter[image_type, image_type, itk.F].New(
Geometry=geometry_rec
)
fdk.SetInput(0, reconstruction_source.GetOutput())
fdk.SetInput(1, parker.GetOutput())

Expand Down
4 changes: 2 additions & 2 deletions wrapping/itkCudaInPlaceImageFilterRTK.wrap
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ if(RTK_USE_CUDA)
endforeach()

itk_wrap_template("CIF3CIF3PSCIF3"
"itk::CudaImage<float, 3>, itk::CudaImage<float, 3>, rtk::ParkerShortScanImageFilter< itk::CudaImage<float, 3>>")
"itk::CudaImage<float, 3>, itk::CudaImage<float, 3>, rtk::ParkerShortScanImageFilter< itk::CudaImage<float, 3>, itk::CudaImage<float, 3> >")
itk_end_wrap_class()

itk_wrap_class("itk::CudaImageToImageFilter" POINTER)
Expand All @@ -39,7 +39,7 @@ if(RTK_USE_CUDA)
endforeach()

itk_wrap_template("CIF3CIF3PSCIF3"
"itk::CudaImage<float, 3>, itk::CudaImage<float, 3>, rtk::ParkerShortScanImageFilter< itk::CudaImage<float, 3>>")
"itk::CudaImage<float, 3>, itk::CudaImage<float, 3>, rtk::ParkerShortScanImageFilter< itk::CudaImage<float, 3>, itk::CudaImage<float, 3> >")
itk_end_wrap_class()

endif()
2 changes: 1 addition & 1 deletion wrapping/rtkBoellaardScatterCorrectionImageFilter.wrap
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
itk_wrap_class("rtk::BoellaardScatterCorrectionImageFilter" POINTER)
itk_wrap_image_filter("${WRAP_ITK_REAL}" 1 3)
itk_wrap_image_filter("${WRAP_ITK_REAL}" 2 3)
itk_end_wrap_class()
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
itk_wrap_class("rtk::ConjugateGradientConeBeamReconstructionFilter" POINTER)

if(RTK_USE_CUDA)
itk_wrap_template("CIF3" "itk::CudaImage<${ITKT_F}, 3>")
itk_wrap_template("CIF3CIF3CIF3" "itk::CudaImage<${ITKT_F}, 3>,itk::CudaImage<${ITKT_F}, 3>,itk::CudaImage<${ITKT_F}, 3>")
endif()
itk_wrap_image_filter("${WRAP_ITK_REAL}" 1 3)
itk_wrap_image_filter("${WRAP_ITK_REAL}" 3 3)

itk_end_wrap_class()
4 changes: 2 additions & 2 deletions wrapping/rtkCudaForwardProjectionImageFilter.wrap
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,12 @@ if(RTK_USE_CUDA)

itk_wrap_class("rtk::CudaForwardProjectionImageFilter" POINTER)

itk_wrap_template("CIF3" "itk::CudaImage<float, 3>")
itk_wrap_template("CIF3CIF3" "itk::CudaImage<float, 3>, itk::CudaImage<float, 3>")

# Force VECTOR_COMPONENTS to "2;3;4;5"
set(vectorComponents 2 3 4 5)
foreach(component ${vectorComponents})
itk_wrap_template("CI${ITKM_VF${component}}3" "itk::CudaImage<${ITKT_VF${component}}, 3>")
itk_wrap_template("CI${ITKM_VF${component}}3CI${ITKM_VF${component}}3" "itk::CudaImage<${ITKT_VF${component}}, 3>, itk::CudaImage<${ITKT_VF${component}}, 3>")
endforeach()

itk_end_wrap_class()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
itk_wrap_class("rtk::DisplacedDetectorForOffsetFieldOfViewImageFilter" POINTER)
itk_wrap_image_filter("${WRAP_ITK_REAL}" 1 3)
itk_wrap_image_filter("${WRAP_ITK_REAL}" 2 3)
itk_end_wrap_class()
17 changes: 7 additions & 10 deletions wrapping/rtkDisplacedDetectorImageFilter.wrap
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,19 @@ if(RTK_USE_CUDA)
endif()

itk_wrap_class("rtk::DisplacedDetectorImageFilter" POINTER)
itk_wrap_image_filter("${WRAP_ITK_REAL}" 1 3;4)

if(RTK_USE_CUDA)
foreach(d ${ITK_WRAP_IMAGE_DIMS})
itk_wrap_template("CI${ITKM_F}${d}" "itk::CudaImage<${ITKT_F}, ${d}>")
endforeach()
endif()

itk_wrap_image_filter("${WRAP_ITK_REAL}" 2 3;4)
itk_end_wrap_class()

if(RTK_USE_CUDA)
foreach(d ${ITK_WRAP_IMAGE_DIMS})
itk_wrap_template("CI${ITKM_F}${d}" "itk::CudaImage<${ITKT_F}, ${d}>, itk::CudaImage<${ITKT_F}, ${d}>")
endforeach()

itk_wrap_class("itk::CudaImageToImageFilter" POINTER)
itk_wrap_template("CIF3CIF3DDCIF3" "itk::CudaImage<${ITKT_F}, 3>, itk::CudaImage<${ITKT_F}, 3>, rtk::DisplacedDetectorImageFilter< itk::CudaImage<${ITKT_F}, 3> >")
itk_wrap_template("CIF3CIF3DDCIF3CIF3" "itk::CudaImage<${ITKT_F}, 3>, itk::CudaImage<${ITKT_F}, 3>, rtk::DisplacedDetectorImageFilter< itk::CudaImage<${ITKT_F}, 3>, itk::CudaImage<${ITKT_F}, 3> >")
itk_end_wrap_class()

itk_wrap_class("itk::CudaInPlaceImageFilter" POINTER)
itk_wrap_template("CIF3CIF3DDCIF3" "itk::CudaImage<${ITKT_F}, 3>, itk::CudaImage<${ITKT_F}, 3>, rtk::DisplacedDetectorImageFilter< itk::CudaImage<${ITKT_F}, 3> >")
itk_wrap_template("CIF3CIF3DDCIF3CIF3" "itk::CudaImage<${ITKT_F}, 3>, itk::CudaImage<${ITKT_F}, 3>, rtk::DisplacedDetectorImageFilter< itk::CudaImage<${ITKT_F}, 3>, itk::CudaImage<${ITKT_F}, 3> >")
itk_end_wrap_class()
endif()
2 changes: 1 addition & 1 deletion wrapping/rtkFDKConeBeamReconstructionFilter.wrap
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ endif()

itk_wrap_class("rtk::FDKConeBeamReconstructionFilter" POINTER)
foreach(t ${WRAP_ITK_REAL})
itk_wrap_template("I${ITKM_${t}}3" "itk::Image<${ITKT_${t}}, 3>")
itk_wrap_template("I${ITKM_${t}}3I${ITKM_${t}}3${ITKM_F}" "itk::Image<${ITKT_${t}}, 3>, itk::Image<${ITKT_${t}}, 3>, float")
endforeach()
if(RTK_USE_CUDA)
itk_wrap_template("CIF3CIF3F" "itk::CudaImage<${ITKT_F}, 3>, itk::CudaImage<${ITKT_F}, 3>, float")
Expand Down
2 changes: 1 addition & 1 deletion wrapping/rtkFDKVarianceReconstructionFilter.wrap
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ endif()

itk_wrap_class("rtk::FDKVarianceReconstructionFilter" POINTER)
foreach(t ${WRAP_ITK_REAL})
itk_wrap_template("I${ITKM_${t}}3" "itk::Image<${ITKT_${t}}, 3>")
itk_wrap_template("I${ITKM_${t}}3I${ITKM_${t}}3" "itk::Image<${ITKT_${t}}, 3>, itk::Image<${ITKT_${t}}, 3>, float")
endforeach()
if(RTK_USE_CUDA)
itk_wrap_template("CIF3CIF3F" "itk::CudaImage<${ITKT_F}, 3>, itk::CudaImage<${ITKT_F}, 3>, float")
Expand Down
3 changes: 1 addition & 2 deletions wrapping/rtkFDKWeightProjectionFilter.wrap
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ if(RTK_USE_CUDA)
endif()

itk_wrap_class("rtk::FDKWeightProjectionFilter" POINTER)
#WARNING: Only wrapping one image template because TInputImage == TOutputImage
itk_wrap_image_filter("${WRAP_ITK_REAL}" 1)
itk_wrap_image_filter("${WRAP_ITK_REAL}" 2)
if(RTK_USE_CUDA)
itk_wrap_template("CIF3CIF3F" "itk::CudaImage<${ITKT_F}, 3>" "itk::CudaImage<${ITKT_F}, 3>" "${ITKT_F}")
endif()
Expand Down
2 changes: 1 addition & 1 deletion wrapping/rtkFFTRampImageFilter.wrap
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ endif()

itk_wrap_class("rtk::FFTRampImageFilter" POINTER)
foreach(t ${WRAP_ITK_REAL})
itk_wrap_template("I${ITKM_${t}}3I${ITKM_${t}}3${ITKM_D}" "itk::Image<${ITKT_${t}}, 3>, itk::Image<${ITKT_${t}}, 3>, ${ITKT_D}")
itk_wrap_template("I${ITKM_${t}}3I${ITKM_${t}}3${ITKM_${t}}" "itk::Image<${ITKT_${t}}, 3>, itk::Image<${ITKT_${t}}, 3>, ${ITKT_${t}}")
endforeach()
if(RTK_USE_CUDA)
itk_wrap_template("CI${ITKM_F}3CI${ITKM_F}3${ITKM_F}" "itk::CudaImage<${ITKT_F}, 3>, itk::CudaImage<${ITKT_F}, 3>, ${ITKT_F}")
Expand Down
2 changes: 1 addition & 1 deletion wrapping/rtkFFTVarianceRampImageFilter.wrap
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ endif()

itk_wrap_class("rtk::FFTVarianceRampImageFilter" POINTER)
foreach(t ${WRAP_ITK_REAL})
itk_wrap_template("I${ITKM_${t}}3I${ITKM_${t}}3${ITKM_D}" "itk::Image<${ITKT_${t}}, 3>, itk::Image<${ITKT_${t}}, 3>, ${ITKT_D}")
itk_wrap_template("I${ITKM_${t}}3I${ITKM_${t}}3${ITKM_D}" "itk::Image<${ITKT_${t}}, 3>, itk::Image<${ITKT_${t}}, 3>, ${ITKT_${t}}")
endforeach()
if(RTK_USE_CUDA)
itk_wrap_template("CI${ITKM_F}3CI${ITKM_F}3${ITKM_F}" "itk::CudaImage<${ITKT_F}, 3>, itk::CudaImage<${ITKT_F}, 3>, ${ITKT_F}")
Expand Down
2 changes: 1 addition & 1 deletion wrapping/rtkIterativeConeBeamReconstructionFilter.wrap
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ itk_wrap_class("rtk::IterativeConeBeamReconstructionFilter" POINTER)
itk_wrap_template("CIF3CIF3" "itk::CudaImage<float, 3>, itk::CudaImage<float, 3>")
itk_wrap_template("CIF4CIF3" "itk::CudaImage<float, 4>, itk::CudaImage<float, 3>")
endif()
itk_wrap_image_filter("${WRAP_ITK_REAL}" 1 3)
itk_wrap_image_filter("${WRAP_ITK_REAL}" 2 3)
#-------------------------------------------------------------------------
# Wrap template :
# -rtk::IterativeConeBeamReconstructionFilter< itk::Image< float,4 >,itk::Image< float,3 > >
Expand Down
4 changes: 2 additions & 2 deletions wrapping/rtkParkerShortScanImageFilter.wrap
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ if(RTK_USE_CUDA)
endif()

itk_wrap_class("rtk::ParkerShortScanImageFilter" POINTER)
itk_wrap_image_filter("${WRAP_ITK_REAL}" 1)
itk_wrap_image_filter("${WRAP_ITK_REAL}" 2)
if(RTK_USE_CUDA)
itk_wrap_template("CIF3" "itk::CudaImage<float, 3>")
itk_wrap_template("CIF3" "itk::CudaImage<float, 3>, itk::CudaImage<float, 3>")
endif()
itk_end_wrap_class()
Loading