SIRF  3.4.0
AffineTransformation.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 
29 #pragma once
30 
31 #include <vector>
32 #include <nifti1_io.h>
34 #include <array>
35 
36 namespace sirf {
37 
38 // Forward declarations
39 template<class dataType> class Quaternion;
40 
47 template<class dataType>
48 class AffineTransformation : public Transformation<dataType>
49 {
50 public:
51 
53  static void print(const std::vector<AffineTransformation<dataType> > &mats);
54  static std::string get(const std::vector<AffineTransformation<dataType> > &mats);
55 
58 
60  AffineTransformation(const dataType tm[4][4]);
61 
63  AffineTransformation(const std::string &filename);
64 
66  AffineTransformation(const mat44 &tm);
67 
70  AffineTransformation(const std::array<dataType,3> &trans, const Quaternion<dataType> &quat);
71 
73  AffineTransformation(const std::array<dataType,3> &trans, const std::array<dataType,3> &euler, const bool degrees = true);
74 
76  AffineTransformation(const AffineTransformation& to_copy);
77 
79  AffineTransformation& operator=(const AffineTransformation& to_copy);
80 
82  bool operator==(const AffineTransformation &other) const;
83 
85  bool operator!=(const AffineTransformation &other) const;
86 
88  AffineTransformation operator* (const AffineTransformation &other) const;
89 
91  dataType const *operator [](unsigned i) const { return _tm[i]; }
92 
94  dataType *operator [](unsigned i) { return _tm[i]; }
95 
97  mat44 get_as_mat44() const;
98 
101 
107  virtual NiftiImageData3DDeformation<dataType> get_as_deformation_field(const NiftiImageData<dataType> &ref, const bool use_ref = true) const;
108 
110  virtual AffineTransformation deep_copy() const;
111 
113  virtual void write(const std::string &filename) const;
114 
116  dataType get_determinant() const;
117 
119  void print() const;
120 
122  AffineTransformation get_inverse() const;
123 
125  const std::array<dataType,3> get_Euler_angles() const;
126 
129 
131  bool is_rigid() const;
132 
134  static AffineTransformation get_average(const std::vector<AffineTransformation<dataType> > &mats);
135 
136 protected:
137  dataType _tm[4][4];
138 };
139 }
virtual AffineTransformation deep_copy() const
Deep copy.
Definition: AffineTransformation.cpp:295
virtual void write(const std::string &filename) const
Save to file.
Definition: AffineTransformation.cpp:306
AffineTransformation & operator=(const AffineTransformation &to_copy)
Assignment.
Definition: AffineTransformation.cpp:68
Base class for transformations.
bool operator==(const AffineTransformation &other) const
Equality operator.
Definition: AffineTransformation.cpp:237
bool operator!=(const AffineTransformation &other) const
Equality operator.
Definition: AffineTransformation.cpp:251
virtual ~AffineTransformation()
Destructor.
Definition: AffineTransformation.h:100
dataType get_determinant() const
Get determinant.
Definition: AffineTransformation.cpp:328
Class for affine transformations.
Definition: AffineTransformation.h:48
virtual NiftiImageData3DDeformation< dataType > get_as_deformation_field(const NiftiImageData< dataType > &ref, const bool use_ref=true) const
Definition: AffineTransformation.cpp:284
AffineTransformation get_inverse() const
Get inverse.
Definition: AffineTransformation.cpp:342
bool is_rigid() const
Is rigid? If so, determinant will be +/- 1.
Definition: AffineTransformation.cpp:378
Forward declarations.
Definition: Registration.h:39
Quaternion< dataType > get_quaternion() const
Get quaternion.
Definition: AffineTransformation.cpp:372
Abstract data container.
Definition: GeometricalInfo.cpp:141
void print() const
Print.
Definition: AffineTransformation.cpp:336
AffineTransformation operator*(const AffineTransformation &other) const
Multiplication operator.
Definition: AffineTransformation.cpp:258
const std::array< dataType, 3 > get_Euler_angles() const
Get Euler angles (XYZ)
Definition: AffineTransformation.cpp:349
Definition: ImageWeightedMean.h:38
mat44 get_as_mat44() const
Get raw mat44.
Definition: AffineTransformation.cpp:274
static AffineTransformation get_average(const std::vector< AffineTransformation< dataType > > &mats)
Average transformation matrices (using quaternions for rotation component)
Definition: AffineTransformation.cpp:384
Class for deformation SIRF image data.
Definition: NiftiImageData3DDeformation.h:54
dataType const * operator[](unsigned i) const
Overload [] operator (const)
Definition: AffineTransformation.h:91
Class for quaternions.
Definition: AffineTransformation.h:39
AffineTransformation()
Default constructor - identity matrix.
Definition: AffineTransformation.cpp:118