STIR  6.2.0
Public Member Functions | Static Public Attributes | List of all members
stir::BackProjectorByBinUsingInterpolation Class Reference

does backprojection by interpolating between the bins. More...

#include "stir/recon_buildblock/BackProjectorByBinUsingInterpolation.h"

Inheritance diagram for stir::BackProjectorByBinUsingInterpolation:
Inheritance graph
[legend]

Public Member Functions

 BackProjectorByBinUsingInterpolation (const bool use_piecewise_linear_interpolation=true, const bool use_exact_Jacobian=true)
 The constructor defaults to using piecewise linear interpolation and the exact Jacobian.
 
 BackProjectorByBinUsingInterpolation (shared_ptr< const ProjDataInfo > const &, shared_ptr< const DiscretisedDensity< 3, float >> const &image_info_ptr, const bool use_piecewise_linear_interpolation=true, const bool use_exact_Jacobian=true)
 The constructor defaults to using piecewise linear interpolation and the exact Jacobian. More...
 
void set_up (const shared_ptr< const ProjDataInfo > &proj_data_info_ptr, const shared_ptr< const DiscretisedDensity< 3, float >> &density_info_ptr) override
 Stores all necessary geometric info. More...
 
const DataSymmetriesForViewSegmentNumbersget_symmetries_used () const override
 Gets the symmetries used by this backprojector. More...
 
void use_exact_Jacobian (const bool use_exact_Jacobian)
 Use this to switch between the exact Jacobian and an approximate Jacobian (valid for s << R).
 
void use_piecewise_linear_interpolation (const bool use_piecewise_linear_interpolation)
 Use this to switch between ordinary linear interpolation and piece-wise linear interpolation in the axial direction.
 
BackProjectorByBinUsingInterpolationclone () const override
 
- Public Member Functions inherited from stir::RegisteredParsingObject< BackProjectorByBinUsingInterpolation, BackProjectorByBin >
std::string get_registered_name () const override
 Returns Derived::registered_name.
 
std::string parameter_info () override
 Returns a string with all parameters and their values, in a form suitable for parsing again.
 
- Public Member Functions inherited from stir::BackProjectorByBin
 BackProjectorByBin ()
 Default constructor calls reset_timers()
 
void back_project (DiscretisedDensity< 3, float > &, const ProjData &, int subset_num=0, int num_subsets=1)
 project whole proj_data into the volume More...
 
virtual void back_project (const ProjData &, int subset_num=0, int num_subsets=1)
 projects the viewgrams into the volume it adds to the data backprojected since start_accumulating_in_new_target() was last called.
 
void back_project (const RelatedViewgrams< float > &)
 projects the viewgrams into the volume it adds to the data backprojected since start_accumulating_in_new_target() was last called.
 
void back_project (const RelatedViewgrams< float > &, const int min_axial_pos_num, const int max_axial_pos_num)
 projects the specified range of the viewgrams and axial positions into the volume it adds to the data backprojected since start_accumulating_in_new_target() was last called.
 
void back_project (const RelatedViewgrams< float > &, const int min_axial_pos_num, const int max_axial_pos_num, const int min_tangential_pos_num, const int max_tangential_pos_num)
 projects the specified range of the viewgrams, axial positions and tangential positions into the volume it adds to the data backprojected since start_accumulating_in_new_target() was last called.
 
virtual void start_accumulating_in_new_target ()
 tell the back projector to start accumulating into a new target. This function has to be called before any back-projection is initiated.
 
virtual void get_output (DiscretisedDensity< 3, float > &) const
 Get output This will overwrite the array-content of the argument with the result of all backprojections since calling start_accumulating_in_new_target(). Note that the argument has to have the same characteristics as what was used when calling set_up().
 
void set_post_data_processor (shared_ptr< DataProcessor< DiscretisedDensity< 3, float >>> post_data_processor_sptr)
 Set data processor to use after back projection.
 
- Public Member Functions inherited from stir::TimedObject
void reset_timers ()
 reset all timers kept by this object
 
void stop_timers () const
 stop all timers kept by this object More...
 
void start_timers (bool do_reset=false) const
 start all timers kept by this object More...
 
double get_CPU_timer_value () const
 get current value of the CPU timer (since first use or last reset)
 
double get_wall_clock_timer_value () const
 get current value of the wall-clock timer (since first use or last reset)
 
- Public Member Functions inherited from stir::ParsingObject
 ParsingObject (const ParsingObject &)
 
ParsingObjectoperator= (const ParsingObject &)
 
void ask_parameters ()
 
bool parse (std::istream &f)
 
bool parse (const char *const filename)
 

Static Public Attributes

static const char *const registered_name = "Interpolation"
 Name which will be used when parsing a BackProjectorByBin object.
 

Additional Inherited Members

- Static Public Member Functions inherited from stir::RegisteredParsingObject< BackProjectorByBinUsingInterpolation, BackProjectorByBin >
static BackProjectorByBinread_from_stream (std::istream *)
 Construct a new object (of type Derived) by parsing the istream. More...
 
- Static Public Member Functions inherited from stir::RegisteredObject< BackProjectorByBin >
static BackProjectorByBinread_registered_object (std::istream *in, const std::string &registered_name)
 Construct a new object (of a type derived from Root, its actual type determined by the registered_name parameter) by parsing the istream. More...
 
static BackProjectorByBinask_type_and_parameters ()
 ask the user for the type, and then calls read_registered_object(0, type) More...
 
static void list_registered_names (std::ostream &stream)
 List all possible registered names to the stream. More...
 
- Protected Types inherited from stir::RegisteredObject< BackProjectorByBin >
typedef BackProjectorByBin *(* RootFactory) (std::istream *)
 The type of a root factory is a function, taking an istream* as argument, and returning a Root*.
 
typedef FactoryRegistry< std::string, RootFactory, interfile_lessRegistryType
 The type of the registry.
 
- Protected Member Functions inherited from stir::BackProjectorByBin
virtual void actual_back_project (const RelatedViewgrams< float > &, const int min_axial_pos_num, const int max_axial_pos_num, const int min_tangential_pos_num, const int max_tangential_pos_num)
 This actually does the back projection. There are two versions of this code to enable backwards compatibility. More...
 
virtual void check (const ProjDataInfo &proj_data_info) const
 check if the argument is the same as what was used for set_up() More...
 
virtual void check (const ProjDataInfo &proj_data_info, const DiscretisedDensity< 3, float > &density_info) const
 check if the arguments are the same as what was used for set_up() More...
 
- Protected Member Functions inherited from stir::ParsingObject
virtual bool post_processing ()
 This will be called at the end of the parsing. More...
 
virtual void set_key_values ()
 This will be called before parsing or parameter_info is called. More...
 
- Static Protected Member Functions inherited from stir::RegisteredObject< BackProjectorByBin >
static RegistryTyperegistry ()
 Static function returning the registry. More...
 
- Protected Attributes inherited from stir::BackProjectorByBin
bool _already_set_up
 
shared_ptr< DiscretisedDensity< 3, float > > _density_sptr
 Clone of the density sptr set with set_up()
 
shared_ptr< DataProcessor< DiscretisedDensity< 3, float > > > _post_data_processor_sptr
 
shared_ptr< const ProjDataInfo_proj_data_info_sptr
 ProjDataInfo set by set_up()
 
- Protected Attributes inherited from stir::ParsingObject
KeyParser parser
 

Detailed Description

does backprojection by interpolating between the bins.

This implementation uses incremental backprojection

Two versions of interpolation are implemented:

The former is an implementation of "Incremental beamwise backprojection using geometrical symmetries for 3D PET reconstruction in a cylindrical scanner geometry" M L Egger, C Joseph, C Morel, Phys. Med. Biol. (1998) 43 3009-3024 http://dx.doi.org/10.1088/0031-9155/43/10/023

For the latter, see the extended abstract for 3D99 "On various approximations for the projectors in iterative reconstruction algorithms for 3D-PET", K. Thielemans, M.W. Jacobson, D. Belluzzo. Available on the STIR web-site.

The piecewise linear interpolation is only used when the axial voxel size is half the axial_sampling of the projection data (for the segment in question).

Warning
This implementation makes various assumptions (for optimal speed):
  • voxel_size.x() = voxel_size.y()
  • arc-corrected data
  • voxel_size.z() is either equal to or half the axial_sampling of the projection data
When the bin size is not equal to the voxel_size.x(), zoom_viewgrams() is first called to adjust the bin size, then the usual incremental backprojection is used.
Bug:
Currently this implementation has problems on certain processors due to floating point rounding errors. Intel *86 and PowerPC give correct results, SunSparc has a problem at tangential_pos_num==0 (also HP stations give problems).

Constructor & Destructor Documentation

◆ BackProjectorByBinUsingInterpolation()

stir::BackProjectorByBinUsingInterpolation::BackProjectorByBinUsingInterpolation ( shared_ptr< const ProjDataInfo > const &  proj_data_info_ptr,
shared_ptr< const DiscretisedDensity< 3, float >> const &  image_info_ptr,
const bool  use_piecewise_linear_interpolation = true,
const bool  use_exact_Jacobian = true 
)

The constructor defaults to using piecewise linear interpolation and the exact Jacobian.

Deprecated:
Use set_up() instead

References stir::BackProjectorByBin::set_defaults(), and stir::BackProjectorByBin::set_up().

Member Function Documentation

◆ set_up()

void stir::BackProjectorByBinUsingInterpolation::set_up ( const shared_ptr< const ProjDataInfo > &  proj_data_info_ptr,
const shared_ptr< const DiscretisedDensity< 3, float >> &  density_info_ptr 
)
overridevirtual

Stores all necessary geometric info.

Note that the density_info_ptr is not stored in this object. It's only used to get some info on sizes etc.

Implements stir::BackProjectorByBin.

References stir::error(), stir::VoxelsOnCartesianGrid< elemT >::get_voxel_size(), stir::round(), and stir::BackProjectorByBin::set_up().

◆ get_symmetries_used()

const DataSymmetriesForViewSegmentNumbers * stir::BackProjectorByBinUsingInterpolation::get_symmetries_used ( ) const
overridevirtual

Gets the symmetries used by this backprojector.

Warning
This BackProjectorByBin implementation requires that the RelatedViewgrams data are constructed with symmetries corresponding to the current member. Using another DataSymmetriesForViewSegmentNumbers object will likely crash the program.

Implements stir::BackProjectorByBin.

References stir::error().


The documentation for this class was generated from the following files: