ddt  0.1
imageCoords.hpp
Go to the documentation of this file.
1 // @copyright
2 // (c) Copyright ESO 2020
3 // All Rights Reserved
4 // ESO (eso.org) is an Intergovernmental Organization, and therefore special
5 // legal conditions apply.
6 //
7 // @file imageCoords.hpp
8 // @brief Image Handling class, offers access to coordinate conversion
9 // functions.
10 //
11 // This file is part of the DDT Image Handling Library and
12 // provides functions for coordinate conversion purposes.
13 //
14 // @author Christoph Bortlisz, CGI
15 // @since 2020/09/07
16 //
17 
18 #ifndef IMAGECOORDS_HPP
19 #define IMAGECOORDS_HPP
20 
21 #include <cpl.h>
22 #include <sys/stat.h>
23 
24 #include <algorithm>
25 #include <cctype>
26 #undef I
27 #undef arg
28 
29 #include "ddt/dataAcquisition.hpp"
30 #include "ddt/dataFile.hpp"
31 #include "ddt/ddtLogger.hpp"
32 #include "ddt/imageError.hpp"
33 #include "ddt/imageIO.hpp"
34 #include "ddt/imageProc.hpp"
35 #include "ddt/imageStats.hpp"
36 
37 const double DEG_PER_HOUR = 360.0 / 24.0;
38 const double DEG_PER_MINUTE = 15.0 / 60.0;
39 const double DEG_PER_SECOND = 0.25 / 60.0;
40 
41 namespace ddt {
42 
51 class ImageCoords {
52  public:
57  ImageCoords(int image_width, int image_height, bool rotate_flag,
58  bool flip_x_flag, bool flip_y_flag);
59 
63  virtual ~ImageCoords() = default;
64 
70 
80  bool WorldCoordinatesDegreesFromCanvas(cpl_wcs* wcs, const double x_canvas,
81  const double y_canvas, double* alpha,
82  double* delta);
83 
94  bool WorldCoordinatesDegreesFromImage(const cpl_wcs* wcs,
95  const double x_image,
96  const double y_image, double* alpha,
97  double* delta);
98 
104  const cpl_matrix* WorldCoordinatesCdMatrix(const cpl_wcs* wcs);
105 
113  void ConvertCanvasToImage(const double x_canvas, const double y_canvas,
114  double* x_image, double* y_image);
115 
123  void ConvertImageToCanvas(const double x_image, const double y_image,
124  double* x_canvas, double* y_canvas);
125 
130  void set_RotateFlag(const bool rot_flag);
131 
136  bool get_RotateFlag();
137 
142  void set_FlipXFlag(const bool flip_flag);
143 
149  bool get_FlipXFlag();
150 
155  void set_FlipYFlag(const bool flip_flag);
156 
162  bool get_FlipYFlag();
163 
167  int get_ImageWidth();
168 
173  void set_ImageWidth(const int image_width);
174 
178  int get_ImageHeight();
179 
184  void set_ImageHeight(const int image_height);
185 
192  static std::string RaDegToHMS(double deg);
193 
200  static std::string DecDegToDMS(double deg);
201 
202  protected:
207 
208  private:
212  int image_width;
213 
217  int image_height;
218 
222  bool rotate_flag;
223 
227  bool flip_x_flag;
228 
232  bool flip_y_flag;
233 
239  bool isNotFlippedNotRotated();
240 
246  bool isNotFlippedRotated();
247 
253  bool isXFlippedNotRotated();
254 
259  bool isXFlippedRotated();
260 
266  bool isYFlippedNotRotated();
267 
272  bool isYFlippedRotated();
273 
279  bool isXYFlippedNotRotated();
280 
286  bool isXYFlippedRotated();
287 };
288 
289 } // namespace ddt
290 
291 #endif /* IMAGECOORDS_HPP */
ddt::ImageCoords::set_ImageHeight
void set_ImageHeight(const int image_height)
Definition: imageCoords.cpp:267
imageProc.hpp
ddt::ImageCoords::get_ImageWidth
int get_ImageWidth()
Definition: imageCoords.cpp:259
ddt::DdtLogger
Definition: ddtLogger.hpp:71
ddt
Definition: ddtClient.hpp:36
ddt::ImageCoords::set_FlipXFlag
void set_FlipXFlag(const bool flip_flag)
Definition: imageCoords.cpp:245
ddt::ImageCoords::set_logger
void set_logger(ddt::DdtLogger *logger)
Definition: imageCoords.cpp:33
imageIO.hpp
ddt::ImageCoords::set_ImageWidth
void set_ImageWidth(const int image_width)
Definition: imageCoords.cpp:261
ddt::ImageCoords::WorldCoordinatesCdMatrix
const cpl_matrix * WorldCoordinatesCdMatrix(const cpl_wcs *wcs)
Definition: imageCoords.cpp:112
DEG_PER_HOUR
const double DEG_PER_HOUR
Definition: imageCoords.hpp:37
imageError.hpp
ddt::ImageCoords::logger
ddt::DdtLogger * logger
Definition: imageCoords.hpp:206
ddt::ImageCoords::get_RotateFlag
bool get_RotateFlag()
Definition: imageCoords.cpp:253
ddt::ImageCoords::DecDegToDMS
static std::string DecDegToDMS(double deg)
Definition: imageCoords.cpp:143
dataAcquisition.hpp
ddt::ImageCoords::get_ImageHeight
int get_ImageHeight()
Definition: imageCoords.cpp:265
ddt::ImageCoords::ImageCoords
ImageCoords(int image_width, int image_height, bool rotate_flag, bool flip_x_flag, bool flip_y_flag)
Definition: imageCoords.cpp:22
imageStats.hpp
ddtLogger.hpp
ddt::ImageCoords::RaDegToHMS
static std::string RaDegToHMS(double deg)
Definition: imageCoords.cpp:118
DEG_PER_MINUTE
const double DEG_PER_MINUTE
Definition: imageCoords.hpp:38
ddt::ImageCoords
Definition: imageCoords.hpp:51
ddt::ImageCoords::WorldCoordinatesDegreesFromCanvas
bool WorldCoordinatesDegreesFromCanvas(cpl_wcs *wcs, const double x_canvas, const double y_canvas, double *alpha, double *delta)
Definition: imageCoords.cpp:35
dataFile.hpp
ddt::ImageCoords::set_RotateFlag
void set_RotateFlag(const bool rot_flag)
Definition: imageCoords.cpp:241
ddt::ImageCoords::set_FlipYFlag
void set_FlipYFlag(const bool flip_flag)
Definition: imageCoords.cpp:249
ddt::ImageCoords::get_FlipYFlag
bool get_FlipYFlag()
Definition: imageCoords.cpp:257
ddt::ImageCoords::WorldCoordinatesDegreesFromImage
bool WorldCoordinatesDegreesFromImage(const cpl_wcs *wcs, const double x_image, const double y_image, double *alpha, double *delta)
Definition: imageCoords.cpp:71
ddt::ImageCoords::ConvertCanvasToImage
void ConvertCanvasToImage(const double x_canvas, const double y_canvas, double *x_image, double *y_image)
Definition: imageCoords.cpp:171
DEG_PER_SECOND
const double DEG_PER_SECOND
Definition: imageCoords.hpp:39
ddt::ImageCoords::~ImageCoords
virtual ~ImageCoords()=default
ddt::ImageCoords::get_FlipXFlag
bool get_FlipXFlag()
Definition: imageCoords.cpp:255
ddt::ImageCoords::ConvertImageToCanvas
void ConvertImageToCanvas(const double x_image, const double y_image, double *x_canvas, double *y_canvas)
Definition: imageCoords.cpp:206