88 @Description: This file contains the MatchingResampled transform.
99"""
1010
11- from typing import Dict , Hashable
11+ from typing import Callable , Dict , Hashable
1212
1313import SimpleITK as sitk
1414
15- from delia .transforms .physical_space .transform import PhysicalSpaceTransform , ImageData , KeysCollection
15+ from delia .transforms .physical_space .transform import PhysicalSpaceTransform , ImageData , KeysCollection , Mode
1616
1717
1818class MatchingResampled (PhysicalSpaceTransform ):
@@ -24,6 +24,7 @@ def __init__(
2424 self ,
2525 reference_image_key : str ,
2626 matching_keys : KeysCollection ,
27+ interpolator : Callable = sitk .sitkBSpline ,
2728 ):
2829 """
2930 Initializes images.
@@ -37,10 +38,13 @@ def __init__(
3738 for foreground on the image. Image keys are assumed to be arbitrary series keys defined in
3839 'series_descriptions'. For the label maps, the keys are organ names. Note that if 'series_descriptions' is
3940 None, the image keys are assumed to be modality names.
41+ interpolator : Callable
42+ The interpolator to be used for resampling the images. Default = sitk.sitkBSpline.
4043 """
4144 keys = [key for key in matching_keys ] + [reference_image_key ]
4245 super ().__init__ (keys = keys )
4346 self ._reference_image_key = reference_image_key
47+ self ._interpolator = interpolator
4448
4549 def __call__ (self , data : Dict [str , ImageData ]) -> Dict [Hashable , sitk .Image ]:
4650 """
@@ -65,7 +69,21 @@ def __call__(self, data: Dict[str, ImageData]) -> Dict[Hashable, sitk.Image]:
6569
6670 for key in self .key_iterator (d ):
6771 if key != self ._reference_image_key :
68- d [key ] = sitk .Resample (d [key ].simple_itk_image , reference_image )
72+
73+ if self ._mode == Mode .NONE :
74+ raise AssertionError ("Transform mode must be set before __call__." )
75+ elif self ._mode == Mode .IMAGE :
76+ interpolator = self ._interpolator
77+ elif self ._mode == Mode .SEGMENTATION :
78+ interpolator = sitk .sitkNearestNeighbor
79+ else :
80+ raise ValueError ("Unknown transform mode." )
81+
82+ d [key ] = sitk .Resample (
83+ image1 = d [key ].simple_itk_image ,
84+ referenceImage = reference_image ,
85+ interpolator = interpolator
86+ )
6987
7088 return d
7189
0 commit comments