SIRF  3.4.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 }
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
Base class for all NIfTI-based registrations.
std::vector< std::string > _filenames_to_delete
Filenames to potentially delete.
Definition: SPMRegistration.h:107
void set_delete_temp_files(const bool delete_temp_files)
Delete temporary files.
Definition: SPMRegistration.h:64
std::vector< std::shared_ptr< AffineTransformation< float > > > _TMs_inv
Inverse transformation matrix.
Definition: SPMRegistration.h:102
std::vector< std::shared_ptr< AffineTransformation< float > > > _TMs_fwd
Forwards transformation matrix.
Definition: SPMRegistration.h:100
void set_working_folder_file_overwrite(const bool working_folder_overwrite)
Set file overwrite in working folder.
Definition: SPMRegistration.h:61
std::unique_ptr< matlab::engine::MATLABEngine > _matlab_uptr
Matlab instance.
Definition: SPMRegistration.h:104
virtual ~SPMRegistration()
Destructor.
Definition: SPMRegistration.cpp:53
virtual const std::shared_ptr< const ImageData > get_output_sptr(const unsigned idx=0) const
Get registered image.
Definition: SPMRegistration.cpp:80
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
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
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_forward_sptr(const unsigned idx=0) const
Get forward deformation field image.
Definition: SPMRegistration.cpp:91
std::string _working_folder
working folder
Definition: SPMRegistration.h:93
Wrapper around SPM&#39;s registration class.
Definition: SPMRegistration.h:47
void process()
Process.
Definition: SPMRegistration.cpp:116
bool _delete_temp_files
Delete temp files.
Definition: SPMRegistration.h:97
void set_working_folder(const std::string &working_folder)
Set working folder.
Definition: SPMRegistration.cpp:71
virtual void set_parameters()
Set any extra parameters.
Definition: SPMRegistration.h:90
bool _working_folder_overwrite
Overwrite files already in working folder.
Definition: SPMRegistration.h:95
Base class for all NIfTI-based registrations.
Definition: NiftiBasedRegistration.h:47
std::vector< std::string > _folders_to_delete
Folders to potentially delete.
Definition: SPMRegistration.h:109
virtual void parse_parameter_file()
Parse parameter file.
Definition: SPMRegistration.h:84