STIR
6.2.0
|
A class for finding the coordinate transformation between tracker and scanner coordinate systems. More...
#include "stir_experimental/motion/MatchTrackerAndScanner.h"
Public Member Functions | |
MatchTrackerAndScanner (const char *const par_filename) | |
Succeeded | run () |
finds the match when all parameters have been set More... | |
const TimeFrameDefinitions & | get_time_frame_defs () const |
double | get_frame_start_time (unsigned frame_num) const |
double | get_frame_end_time (unsigned frame_num) const |
const std::string & | get_image_filename_prefix () const |
const RigidObject3DMotion & | get_motion () const |
const RigidObject3DTransformation & | get_transformation_from_scanner_coords () const |
Public Member Functions inherited from stir::ParsingObject | |
ParsingObject (const ParsingObject &) | |
ParsingObject & | operator= (const ParsingObject &) |
void | ask_parameters () |
virtual std::string | parameter_info () |
bool | parse (std::istream &f) |
bool | parse (const char *const filename) |
Protected Member Functions | |
void | set_defaults () override |
parsing functions | |
void | initialise_keymap () override |
Initialise all keywords. | |
bool | post_processing () override |
This will be called at the end of the parsing. More... | |
Protected Member Functions inherited from stir::ParsingObject | |
virtual void | set_key_values () |
This will be called before parsing or parameter_info is called. More... | |
Protected Attributes | |
TimeFrameDefinitions | frame_defs |
int | scan_start_time_secs_since_1970_UTC |
double | _current_frame_end_time |
double | _current_frame_start_time |
std::string | frame_definition_filename |
parsing variables | |
double | scan_start_time |
std::string | _image_filename_prefix |
float | relative_threshold |
Protected Attributes inherited from stir::ParsingObject | |
KeyParser | parser |
A class for finding the coordinate transformation between tracker and scanner coordinate systems.
You need to have performed a scan where the '0' marker of the tracker is filled with some radioactive material, and the marker is then moved to various stationary positions inside the scanner, while performing a (list-mode) scan, while the tracker is running. Remember: discrete movements.
Then you need to make a frame-definition file where all non-stationary parts are skipped. Then you sort the list mode data into sinograms, and reconstruct images (preferably with large zoom) for each of these discrete positions.
This implements Horn's method, as discussed in detail in Roger Fulton's thesis. Briefly:
Note that if you have movement within a time frame, the diagnostics will tell you, but your fit will be wrong.
MoveImage Parameters:= ; see TimeFrameDefinitions time frame_definition filename := frame_definition_filename ; next parameter is optional (and not normally necessary) ; it can be used if the frame definitions are relative to another scan as what ; is used to for the rigid object motion (i.e. currently the list mode data used ; for the Polaris synchronisation) ; scan_start_time_secs_since_1970_UTC ; specify motion, see stir::RigidObject3DMotion Rigid Object 3D Motion Type := type ; optional field to determine relative threshold to apply to ; the image before taking the centre of gravity ; it is relative to the maximum in each image (i.e. .5 would be at half the maximum) ; default is .1 relative threshold := .2 ; prefix for finding the images ; filenames will be constructed by appending _f#g1d0b0 (and the extension .hv) image_filename_prefix := END :=
Succeeded stir::MatchTrackerAndScanner::run | ( | ) |
finds the match when all parameters have been set
will store the transformation as part of this object, but also write it to stdout
References stir::error(), stir::find_centre_of_gravity_in_mm(), stir::DiscretisedDensityOnCartesianGrid< num_dimensions, elemT >::get_grid_spacing(), stir::indices_at_maximum(), stir::read_from_file(), stir::square(), stir::threshold_lower(), and stir::warning().
|
overrideprotectedvirtual |
This will be called at the end of the parsing.
Reimplemented from stir::ParsingObject.
References stir::warning().