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(const int image_width, const int image_height,
58  const bool rotate_flag, const bool flip_x_flag,
59  const bool flip_y_flag);
60 
64  virtual ~ImageCoords() = default;
65 
70  void set_logger(ddt::DdtLogger* const in_logger);
71 
81  bool WorldCoordinatesDegreesFromCanvas(const cpl_wcs* const wcs,
82  const double x_canvas,
83  const double y_canvas, double* alpha,
84  double* delta);
85 
95  bool CanvasCoordinatesFromWorldCoordinatesDegrees(const cpl_wcs* const wcs,
96  const double alpha,
97  const double delta,
98  double* const x_canvas,
99  double* const y_canvas);
100 
111  bool WorldCoordinatesDegreesFromImage(const cpl_wcs* const wcs,
112  const double x_image,
113  const double y_image,
114  double* const alpha,
115  double* const delta) const;
116 
127  bool ImageCoordinatesFromWorldCoordinatesDegrees(const cpl_wcs* const wcs,
128  const double alpha,
129  const double delta,
130  double* const x_image,
131  double* const y_image) const;
132 
138  const cpl_matrix* WorldCoordinatesCdMatrix(const cpl_wcs* const wcs) const;
139 
147  void ConvertCanvasToImage(const double x_canvas, const double y_canvas,
148  double* const x_image, double* const y_image) const;
149 
157  void ConvertImageToCanvas(const double x_image, const double y_image,
158  double* const x_canvas,
159  double* const y_canvas) const;
160 
165  void set_RotateFlag(const bool rot_flag);
166 
171  bool get_RotateFlag() const;
172 
177  void set_FlipXFlag(const bool flip_flag);
178 
184  bool get_FlipXFlag() const;
185 
190  void set_FlipYFlag(const bool flip_flag);
191 
197  bool get_FlipYFlag() const;
198 
202  int get_ImageWidth() const;
203 
208  void set_ImageWidth(const int in_image_width);
209 
213  int get_ImageHeight() const;
214 
219  void set_ImageHeight(const int in_image_height);
220 
227  static std::string RaDegToHMS(double deg);
228 
235  static double HMSToRaDeg(const std::string hms);
236 
243  static std::string DecDegToDMS(double deg);
244 
251  static double DMSToDecDeg(const std::string dms);
252 
253  protected:
258 
259  private:
263  int image_width;
264 
268  int image_height;
269 
273  bool rotate_flag;
274 
278  bool flip_x_flag;
279 
283  bool flip_y_flag;
284 
290  bool isNotFlippedNotRotated() const;
291 
297  bool isNotFlippedRotated() const;
298 
304  bool isXFlippedNotRotated() const;
305 
310  bool isXFlippedRotated() const;
311 
317  bool isYFlippedNotRotated() const;
318 
323  bool isYFlippedRotated() const;
324 
330  bool isXYFlippedNotRotated() const;
331 
337  bool isXYFlippedRotated() const;
338 
342  void Init();
343 };
344 
345 } // namespace ddt
346 
347 #endif /* IMAGECOORDS_HPP */
imageProc.hpp
ddt::ImageCoords::set_ImageHeight
void set_ImageHeight(const int in_image_height)
Definition: imageCoords.cpp:428
ddt::ImageCoords::ConvertCanvasToImage
void ConvertCanvasToImage(const double x_canvas, const double y_canvas, double *const x_image, double *const y_image) const
Definition: imageCoords.cpp:318
ddt::ImageCoords::get_ImageHeight
int get_ImageHeight() const
Definition: imageCoords.cpp:425
ddt::ImageCoords::WorldCoordinatesCdMatrix
const cpl_matrix * WorldCoordinatesCdMatrix(const cpl_wcs *const wcs) const
Definition: imageCoords.cpp:205
ddt::ImageCoords::set_logger
void set_logger(ddt::DdtLogger *const in_logger)
Definition: imageCoords.cpp:35
ddt::DdtLogger
Definition: ddtLogger.hpp:48
ddt
Definition: ddtClient.hpp:36
ddt::ImageCoords::DMSToDecDeg
static double DMSToDecDeg(const std::string dms)
Definition: imageCoords.cpp:294
ddt::ImageCoords::set_FlipXFlag
void set_FlipXFlag(const bool flip_flag)
Definition: imageCoords.cpp:398
ddt::ImageCoords::get_RotateFlag
bool get_RotateFlag() const
Definition: imageCoords.cpp:408
ddt::ImageCoords::get_FlipXFlag
bool get_FlipXFlag() const
Definition: imageCoords.cpp:411
ddt::ImageCoords::CanvasCoordinatesFromWorldCoordinatesDegrees
bool CanvasCoordinatesFromWorldCoordinatesDegrees(const cpl_wcs *const wcs, const double alpha, const double delta, double *const x_canvas, double *const y_canvas)
Definition: imageCoords.cpp:79
imageIO.hpp
DEG_PER_HOUR
const double DEG_PER_HOUR
Definition: imageCoords.hpp:37
ddt::ImageCoords::get_ImageWidth
int get_ImageWidth() const
Definition: imageCoords.cpp:417
imageError.hpp
ddt::ImageCoords::logger
ddt::DdtLogger * logger
Definition: imageCoords.hpp:257
ddt::ImageCoords::DecDegToDMS
static std::string DecDegToDMS(double deg)
Definition: imageCoords.cpp:266
ddt::ImageCoords::ConvertImageToCanvas
void ConvertImageToCanvas(const double x_image, const double y_image, double *const x_canvas, double *const y_canvas) const
Definition: imageCoords.cpp:356
ddt::ImageCoords::ImageCoordinatesFromWorldCoordinatesDegrees
bool ImageCoordinatesFromWorldCoordinatesDegrees(const cpl_wcs *const wcs, const double alpha, const double delta, double *const x_image, double *const y_image) const
Definition: imageCoords.cpp:165
ddt::ImageCoords::ImageCoords
ImageCoords(const int image_width, const int image_height, const bool rotate_flag, const bool flip_x_flag, const bool flip_y_flag)
Definition: imageCoords.cpp:22
dataAcquisition.hpp
ddt::ImageCoords::WorldCoordinatesDegreesFromImage
bool WorldCoordinatesDegreesFromImage(const cpl_wcs *const wcs, const double x_image, const double y_image, double *const alpha, double *const delta) const
Definition: imageCoords.cpp:122
ddt::ImageCoords::set_ImageWidth
void set_ImageWidth(const int in_image_width)
Definition: imageCoords.cpp:420
imageStats.hpp
ddtLogger.hpp
ddt::ImageCoords::RaDegToHMS
static std::string RaDegToHMS(double deg)
Definition: imageCoords.cpp:214
DEG_PER_MINUTE
const double DEG_PER_MINUTE
Definition: imageCoords.hpp:38
ddt::ImageCoords
Definition: imageCoords.hpp:51
dataFile.hpp
ddt::ImageCoords::set_RotateFlag
void set_RotateFlag(const bool rot_flag)
Definition: imageCoords.cpp:393
ddt::ImageCoords::HMSToRaDeg
static double HMSToRaDeg(const std::string hms)
Definition: imageCoords.cpp:239
ddt::ImageCoords::set_FlipYFlag
void set_FlipYFlag(const bool flip_flag)
Definition: imageCoords.cpp:403
DEG_PER_SECOND
const double DEG_PER_SECOND
Definition: imageCoords.hpp:39
ddt::ImageCoords::~ImageCoords
virtual ~ImageCoords()=default
ddt::ImageCoords::get_FlipYFlag
bool get_FlipYFlag() const
Definition: imageCoords.cpp:414
ddt::ImageCoords::WorldCoordinatesDegreesFromCanvas
bool WorldCoordinatesDegreesFromCanvas(const cpl_wcs *const wcs, const double x_canvas, const double y_canvas, double *alpha, double *delta)
Definition: imageCoords.cpp:41