Hi. I want achieve NMAR algorithm recently, need to use the rtk.CudaBackProjectionImageFilter and rtk.CudaForwardProjectionImageFilter in 2 d image respectively. But there seems to be some issues with the image dimensions at the moment, so here’s my code:
class RTKWrapper:
def __init__(self, proj_data, geometry, origin, spacing):
self.projections_source = itk.GetImageFromArray(proj_data, is_vector=False)
self.projections_source.SetOrigin(origin)
self.projections_source.SetSpacing(spacing)
self.projections_source.Allocate()
extractor = itk.ExtractImageFilter[image_type, image_type].New(Input=self.projections_source)
extracted_region = self.projections_source.GetLargestPossibleRegion()
extracted_region.SetSize(2, 1)
extracted_region.SetIndex(2, 1)
extractor.SetExtractionRegion(extracted_region)
extractor.UpdateLargestPossibleRegion()
self.cuda_input = cuda_type.New()
self.cuda_input.SetPixelContainer(extractor.GetOutput().GetPixelContainer())
self.cuda_input.CopyInformation(extractor.GetOutput())
self.cuda_input.SetBufferedRegion(extractor.GetOutput().GetBufferedRegion())
self.cuda_input.SetRequestedRegion(extractor.GetOutput().GetRequestedRegion())
self.reconstruction_source = rtk.ConstantImageSource[cuda_type].New(Origin=origin_tomo, Spacing=spacing_tomo, Size=size_tomo)
self.geometry_rec = rtk.ThreeDCircularProjectionGeometry.New()
self.geometry_rec.AddProjection(geometry['sid'], geometry['sdd'], geometry['gantry_angle'],
geometry['proj_offset_x'], geometry['proj_offset_y'], geometry['out_plane_angle'],
geometry['in_plane_angle'], geometry['source_offset_x'], geometry['source_offset_y'])
self.back = rtk.CudaBackProjectionImageFilter.New(Geometry=self.geometry_rec)
self.forward = rtk.CudaForwardProjectionImageFilter.New(Geometry=self.geometry_rec)
def back_projection(self):
self.back.SetInput(self.reconstruction_source)
self.back.SetInput(1, self.cuda_input)
self.back.Update()
result = itk.GetArrayFromImage(self.back.GetOutput())
return result
An error occurred:
File “main-test.py”, line 125, in init
extractor = itk.ExtractImageFilter[image_type, image_type].New(Input=self.projections_source)
TypeError: Expecting argument of type itkImageF3 or itkImageSourceIF3.
Additional information:
Wrong number or type of arguments for overloaded function ‘itkImageToImageFilterIF3IF3_SetInput’.
Possible C/C++ prototypes are:
itkImageToImageFilterIF3IF3::SetInput(itkImageF3 const *)
itkImageToImageFilterIF3IF3::SetInput(unsigned int,itkImageF3 const *)
What should I do about it? The shape of proj_data is 【 512,512 】