# backprojection and forwardprojection about 2D image

**URL:** <https://discourse.itk.org/t/backprojection-and-forwardprojection-about-2d-image/7445>\
**Category:** Beginner Questions\
**Created:** [February 21, 2025, 1:12am UTC](https://discourse.itk.org/t/backprojection-and-forwardprojection-about-2d-image/7445 "2025-02-21T01:12:37Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![langzhizhen](https://discourse.itk.org/user_avatar/discourse.itk.org/langzhizhen/32/4468_2.png) [@langzhizhen](https://discourse.itk.org/u/langzhizhen)\
**Post date:** [February 21, 2025, 1:12am UTC](https://discourse.itk.org/t/backprojection-and-forwardprojection-about-2d-image/7445/1 "2025-02-21T01:12:37Z")

</div>

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:

```auto
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 】

---

<div class="post-metadata">

**Author:** ![simon.rit](https://discourse.itk.org/letter_avatar_proxy/v4/letter/s/f08c70/32.png) [@simon.rit](https://discourse.itk.org/u/simon.rit)\
**Post date:** [February 22, 2025, 8:31am UTC](https://discourse.itk.org/t/backprojection-and-forwardprojection-about-2d-image/7445/2 "2025-02-22T08:31:37Z")

</div>

RTK is only implemented for 3D reconstruction. You can do 2D by working on a single slice but, depending on the forward or back projector, you need to add adjacent slices or detector lines as linear interpolation is used. This has been illustrated [here](https://docs.openrtk.org/en/latest/applications/rtkfdk/README.html) and [here](https://docs.openrtk.org/en/latest/applications/rtkconjugategradient/README.html).
