CTL  0.6.1
Computed Tomography Library
geometrydecoder.h
Go to the documentation of this file.
1 #ifndef CTL_GEOMETRYDECODER_H
2 #define CTL_GEOMETRYDECODER_H
3 
4 #include "acquisitionsetup.h"
5 #include "viewgeometry.h"
6 #include "mat/mat.h"
7 #include <QSizeF>
8 #include <QPair>
9 
10 namespace CTL {
11 
26 {
27 public:
28  enum PhysicalDimension { PixelWidth, PixelHeight, SourceDetectorDistance };
29 
30  GeometryDecoder(const QSize& pixelPerModule, const QSizeF& pixelSize);
31  GeometryDecoder(const QSize& pixelPerModule,
32  PhysicalDimension physicalDimension = PixelWidth,
33  double mm = 1.0);
34 
35  AcquisitionSetup decodeFullGeometry(const FullGeometry& geometry) const;
36 
37  const QPair<PhysicalDimension, double>& dimensionReference() const;
38  const QSize& pixelPerModule() const;
39  Q_DECL_DEPRECATED_X("Within the CTL 'dimension' is use for a count of something, use pixelSize() instead.")
40  const QSizeF& pixelDimensions() const;
41  const QSizeF& pixelSize() const;
42  void setDimensionReference(PhysicalDimension physicalDimension, double mm);
43  void setPixelPerModule(const QSize& value);
44  Q_DECL_DEPRECATED_X("Within the CTL 'dimension' is use for a count of something, use setPixelSize() instead.")
45  void setPixelDimensions(const QSizeF& value);
46  void setPixelSize(const QSizeF& value);
47  void setReferenceModuleID(int moduleID);
48 
49  static SimpleCTSystem decodeSingleViewGeometry(const SingleViewGeometry& singleViewGeometry,
50  const QSize& pixelPerModule,
51  PhysicalDimension physicalDimension = PixelWidth,
52  double mm = 1.0,
53  int referenceModuleID = -1);
54 
55  static AcquisitionSetup decodeFullGeometry(const FullGeometry& geometry,
56  const QSize& pixelPerModule,
57  const QSizeF& pixelSize,
58  int referenceModuleID = -1);
59 
60  static AcquisitionSetup decodeFullGeometry(const FullGeometry& geometry,
61  const QSize& pixelPerModule,
62  PhysicalDimension physicalDimension = PixelWidth,
63  double mm = 1.0,
64  int referenceModuleID = -1);
65 
66 private:
68  QSizeF _pixelSize;
69  QPair<PhysicalDimension, double> _physicalDimensionReference = { PixelWidth, 1.0 };
70  int _referenceModule = -1;
71 
72  static QSizeF computePixelSize(const mat::ProjectionMatrix& pMat,
73  PhysicalDimension physicalDimension,
74  double mm);
75 
76  static QVector<mat::Location> computeModuleLocations(const SingleViewGeometry& singleViewGeometry,
77  const Vector3x1& sourcePosition,
78  const QSize& pixelPerModule,
79  double pixelWidth);
80 
81  static Matrix3x3 computeSourceRotation(const QVector<mat::Location>& moduleLocations,
82  const Vector3x1& sourcePosition);
83  static mat::Location referenceModuleLocation(const QVector<mat::Location>& moduleLocations,
84  int referenceModuleID);
85  static void adaptModuleLocationsToReference(QVector<mat::Location>& moduleLocations,
86  const mat::Location& referenceLocation);
87 };
88 
89 } // namespace CTL
90 
93 #endif // CTL_GEOMETRYDECODER_H
Specialized sub-class of Matrix<3, 4> to represent a projection matrix.
Definition: projectionmatrix.h:96
QSize _pixelPerModule
Number of pixels of the assumed detector.
Definition: geometrydecoder.h:67
const QSizeF & pixelDimensions() const
Definition: geometrydecoder.cpp:374
const QSize & pixelPerModule() const
Definition: geometrydecoder.cpp:366
GeometryDecoder(const QSize &pixelPerModule, const QSizeF &pixelSize)
Definition: geometrydecoder.cpp:10
void setPixelSize(const QSizeF &value)
Definition: geometrydecoder.cpp:409
Holds a list of projection matrices corresponding to the detector modules of a single view.
Definition: viewgeometry.h:21
Holds a CTSystem together with the information about the system settings for all views from which pro...
Definition: acquisitionsetup.h:175
Holds a list of SingleViewGeometry instances to represent the acquisition geometry of a full CT scan.
Definition: viewgeometry.h:71
The GeometryDecoder class provides the functionality to extract the system configuration from a set o...
Definition: geometrydecoder.h:25
void setPixelPerModule(const QSize &value)
Definition: geometrydecoder.cpp:392
Definition: matrix_utils.h:27
static Matrix3x3 computeSourceRotation(const QVector< mat::Location > &moduleLocations, const Vector3x1 &sourcePosition)
Definition: geometrydecoder.cpp:74
QSizeF _pixelSize
Pixel size of the assumed detector.
Definition: geometrydecoder.h:68
const QSizeF & pixelSize() const
Definition: geometrydecoder.cpp:383
void setReferenceModuleID(int moduleID)
Definition: geometrydecoder.cpp:422
void setPixelDimensions(const QSizeF &value)
Definition: geometrydecoder.cpp:400
The SimpleCTSystem class is a specialized sub-class of CTSystem for simple systems (i....
Definition: simplectsystem.h:95
static QVector< mat::Location > computeModuleLocations(const SingleViewGeometry &singleViewGeometry, const Vector3x1 &sourcePosition, const QSize &pixelPerModule, double pixelWidth)
Definition: geometrydecoder.cpp:336
AcquisitionSetup decodeFullGeometry(const FullGeometry &geometry) const
Definition: geometrydecoder.cpp:28