SIRF  3.6.0
SPMRegistration.h
Go to the documentation of this file.
1 /*
2 SyneRBI Synergistic Image Reconstruction Framework (SIRF)
3 Copyright 2017 - 2020 University College London
4 
5 This is software developed for the Collaborative Computational
6 Project in Synergistic Reconstruction for Biomedical Imaging (formerly CCP PETMR)
7 (http://www.ccpsynerbi.ac.uk/).
8 
9 Licensed under the Apache License, Version 2.0 (the "License");
10 you may not use this file except in compliance with the License.
11 You may obtain a copy of the License at
12 http://www.apache.org/licenses/LICENSE-2.0
13 Unless required by applicable law or agreed to in writing, software
14 distributed under the License is distributed on an "AS IS" BASIS,
15 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 See the License for the specific language governing permissions and
17 limitations under the License.
18 
19 */
20 
30 #pragma once
31 
33 #include <MatlabEngine.hpp>
34 
35 namespace sirf {
36 
38 template<class dataType> class AffineTransformation;
39 
47 template<class dataType> class SPMRegistration : public NiftiBasedRegistration<dataType>
48 {
49 public:
50 
52  virtual ~SPMRegistration();
53 
55  void process();
56 
58  void set_working_folder(const std::string &working_folder);
59 
61  void set_working_folder_file_overwrite(const bool working_folder_overwrite) { _working_folder_overwrite = working_folder_overwrite; }
62 
64  void set_delete_temp_files(const bool delete_temp_files) { _delete_temp_files = delete_temp_files; }
65 
67  virtual const std::shared_ptr<const ImageData> get_output_sptr(const unsigned idx = 0) const;
68 
70  virtual const std::shared_ptr<const AffineTransformation<float> > get_transformation_matrix_forward_sptr(const unsigned idx = 0) const { return _TMs_fwd.at(idx); }
71 
73  virtual const std::shared_ptr<const AffineTransformation<float> > get_transformation_matrix_inverse_sptr(const unsigned idx = 0) const { return _TMs_inv.at(idx); }
74 
76  virtual const std::shared_ptr<const Transformation<dataType> > get_deformation_field_forward_sptr(const unsigned idx = 0) const;
77 
79  virtual const std::shared_ptr<const Transformation<dataType> > get_deformation_field_inverse_sptr(const unsigned idx = 0) const;
80 
81 protected:
82 
84  virtual void parse_parameter_file() {}
85 
87  virtual void check_parameters() const;
88 
90  virtual void set_parameters() {}
91 
93  std::string _working_folder = "";
97  bool _delete_temp_files = false;
98 
100  std::vector<std::shared_ptr<AffineTransformation<float> > > _TMs_fwd;
102  std::vector<std::shared_ptr<AffineTransformation<float> > > _TMs_inv;
104  std::unique_ptr<matlab::engine::MATLABEngine> _matlab_uptr;
105 
107  std::vector<std::string> _filenames_to_delete;
109  std::vector<std::string> _folders_to_delete;
111  std::vector<std::string> _resliced_filenames;
112 
113 };
114 }
Base class for all NIfTI-based registrations.
Base class for all NIfTI-based registrations.
Definition: NiftiBasedRegistration.h:48
Wrapper around SPM's registration class.
Definition: SPMRegistration.h:48
virtual ~SPMRegistration()
Destructor.
Definition: SPMRegistration.cpp:53
virtual const std::shared_ptr< const AffineTransformation< float > > get_transformation_matrix_forward_sptr(const unsigned idx=0) const
Get forwards transformation matrix.
Definition: SPMRegistration.h:70
bool _working_folder_overwrite
Overwrite files already in working folder.
Definition: SPMRegistration.h:95
void set_working_folder(const std::string &working_folder)
Set working folder.
Definition: SPMRegistration.cpp:71
std::string _working_folder
working folder
Definition: SPMRegistration.h:93
void set_delete_temp_files(const bool delete_temp_files)
Delete temporary files.
Definition: SPMRegistration.h:64
std::vector< std::string > _folders_to_delete
Folders to potentially delete.
Definition: SPMRegistration.h:109
void set_working_folder_file_overwrite(const bool working_folder_overwrite)
Set file overwrite in working folder.
Definition: SPMRegistration.h:61
std::vector< std::shared_ptr< AffineTransformation< float > > > _TMs_inv
Inverse transformation matrix.
Definition: SPMRegistration.h:102
void process()
Process.
Definition: SPMRegistration.cpp:116
virtual void check_parameters() const
Check parameters.
Definition: SPMRegistration.cpp:231
std::vector< std::string > _resliced_filenames
Resliced images.
Definition: SPMRegistration.h:111
virtual const std::shared_ptr< const Transformation< dataType > > get_deformation_field_inverse_sptr(const unsigned idx=0) const
Get inverse deformation field image.
Definition: SPMRegistration.cpp:104
virtual const std::shared_ptr< const Transformation< dataType > > get_deformation_field_forward_sptr(const unsigned idx=0) const
Get forward deformation field image.
Definition: SPMRegistration.cpp:91
virtual void parse_parameter_file()
Parse parameter file.
Definition: SPMRegistration.h:84
bool _delete_temp_files
Delete temp files.
Definition: SPMRegistration.h:97
std::unique_ptr< matlab::engine::MATLABEngine > _matlab_uptr
Matlab instance.
Definition: SPMRegistration.h:104
virtual const std::shared_ptr< const ImageData > get_output_sptr(const unsigned idx=0) const
Get registered image.
Definition: SPMRegistration.cpp:80
virtual void set_parameters()
Set any extra parameters.
Definition: SPMRegistration.h:90
std::vector< std::shared_ptr< AffineTransformation< float > > > _TMs_fwd
Forwards transformation matrix.
Definition: SPMRegistration.h:100
std::vector< std::string > _filenames_to_delete
Filenames to potentially delete.
Definition: SPMRegistration.h:107
virtual const std::shared_ptr< const AffineTransformation< float > > get_transformation_matrix_inverse_sptr(const unsigned idx=0) const
Get inverse transformation matrix.
Definition: SPMRegistration.h:73
Abstract data container.
Definition: GeometricalInfo.cpp:141