ddt  0.1
imageHandling.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 imageHandling.hpp
8 // @brief Image Handling class, offers access to image handling functions.
9 //
10 // This file is part of the DDT Image Handling Library and
11 // provides a class that offers access to the image handling functions for the
12 // CPL library.
13 //
14 // @author Christoph Bortlisz, CGI
15 // @since 2020/08/14
16 //
17 
18 #ifndef IMAGEHANDLING_HPP
19 #define IMAGEHANDLING_HPP
20 
21 #include <sys/stat.h>
22 
23 #include <cpl.h>
24 #include <algorithm>
25 #include <cctype>
26 #undef I
27 #undef arg
28 
29 #include "ddt/biasBuffer.hpp"
31 #include "ddt/dataAcquisition.hpp"
32 #include "ddt/dataFile.hpp"
34 #include "ddt/ddtLogger.hpp"
35 #include "ddt/imageBuffer.hpp"
36 #include "ddt/imageColor.hpp"
37 #include "ddt/imageCoords.hpp"
38 #include "ddt/imageError.hpp"
39 #include "ddt/imageIO.hpp"
40 #include "ddt/imageProc.hpp"
41 #include "ddt/imageStats.hpp"
42 
43 namespace ddt {
44 
54  public:
59  ImageHandling();
60 
64  virtual ~ImageHandling();
65 
69  enum CutLevelType {
84  };
85 
107  SQRT_SCALE
108  };
109 
115 
125  bool LoadFile(const std::string& file_name, int position = 0);
126 
127  bool LoadImageExtensionsAsOne(const std::string& file_name);
128 
132  void set_CutLevelType(const CutLevelType cut_level_type);
133 
139 
144  std::string get_CutLevelTypeStr();
145 
150  bool ApplyCutLevelsMinMax();
151 
156  bool ApplyCutLevelsAuto();
157 
162  bool ApplyCutLevelsManual(const double min_value, const double max_value);
163 
168  bool ResetCutLevels();
169 
180  bool LoadColorMaps(std::string color_map_folder,
181  std::string color_map_name = "standard");
182 
189  bool LoadActualColorMap(std::string color_map_name);
190 
197  bool LoadActualConfigurationMap(std::string configuration_map_name);
198 
203  bool LoadConfigurationMaps(std::string configuration_map_source);
204 
214  int StoreActualImageAsBias(const std::string slot_name = "");
215 
222  int LoadFileAsBias(const std::string file_name);
223 
230  bool LoadFileAsBiasInSlot(const std::string file_name, const int slot);
231 
238  std::string GetBiasSlotName(const int slot);
239 
243  bool GetBiasEnabled() const;
244 
250  void EnableBias(const bool enable_bias);
251 
256  void ApplyBias(const int slot);
257 
262  int GetCurrentSelectedBiasSlot() const;
263 
267  void ClearAllBiasImages();
268 
273  void ClearSelectedBiasImage(const int slot);
274 
279  void DisplaySelectedBiasImage(const int slot);
280 
284  void set_RotateFlag(const bool rot_flag);
285 
290  bool get_RotateFlag();
291 
295  void set_FlipXFlag(const bool flip_flag);
296 
302  bool get_FlipXFlag();
303 
307  void set_FlipYFlag(const bool flip_flag);
308 
314  bool get_FlipYFlag();
315 
319  void* get_ImageData();
320 
324  cpl_image* get_Image();
325 
329  cpl_table* get_BinaryTable();
330 
334  int get_ImageWidth();
335 
339  int get_ImageHeight();
340 
344  int get_NumberExtensions();
345 
349  int get_NumberAxis() const;
350 
354  bool get_LastSegment() const;
355 
362  FitsExtension* get_FitsExtensionInfo(const int extension_number);
363 
369 
373  void set_CutLevelMin(const double min_value);
374 
378  void set_CutLevelMax(const double max_value);
379 
383  double get_CutLevelMin();
384 
388  double get_CutLevelMax();
389 
393  double get_ImagePixelMin();
394 
398  double get_ImagePixelMax();
399 
404  std::list<std::string> get_ColorMaps();
405 
411 
417 
422  std::string get_ActualColorMapName();
423 
429 
435 
441 
447 
453 
458 
463 
468 
473  void set_ColorScalingType(ColorScalingType scaling_type);
474 
479  std::string get_ColorScalingTypeStr();
480 
487  double ImagePixelFromImage(const double x_image, double y_image);
488 
497  double ImagePixelFromCanvas(const double x_canvas, const double y_canvas,
498  double* x_image, double* y_image);
499 
507  void ConvertCanvasToImage(const double x_canvas, const double y_canvas,
508  double* x_image, double* y_image);
509 
517  void ConvertImageToCanvas(const double x_image, const double y_image,
518  double* x_canvas, double* y_canvas);
519 
528  bool WorldCoordinatesDegreesFromImage(const double x_image,
529  const double y_image, double* alpha,
530  double* delta);
531 
540  bool WorldCoordinatesDegreesFromCanvas(const double x_canvas,
541  const double y_canvas, double* alpha,
542  double* delta);
543 
554  CplStatistics* GetStatisticsCplImageWindow(int llx, int lly, int urx,
555  int ury);
556 
562  bool get_AttachedToStream();
563 
567  bool ReprossImage();
568 
569  void GetHistogramFromImage(int min_value, int max_value,
570  std::vector<int>& distribution);
571 
572  void GetHistogramBinsFromImage(int min_value, int max_value,
573  std::vector<int>& distribution);
574 
575  void GetCutValuesPercentageFromImage(const double percentage,
576  double* min_value, double* max_value);
581  void AttachDataStream(std::string data_stream_id);
582 
587  void DetachDataStream(std::string data_stream_id);
588 
594  cpl_apertures* GetCircularObjects(double sigma);
595 
606  bool GetObjectCentroidPos(cpl_apertures* apertures, double x_image,
607  double y_image, double* x_centroid,
608  double* y_centroid);
609 
623  bool GetObjectInformation(double x_image, double y_image, int size,
624  double* x_axis_angle, double* background,
625  double* peak_above_background, double* fwhm_x,
626  double* fwhm_y);
627 
642  bool GetGaussianParameters(double x_image, double y_image, int size,
643  double* background, double* gaussian_volume,
644  double* correlation, double* gaussian_coord_x,
645  double* gaussian_coord_y, double* sigma_x,
646  double* sigma_y);
647 
652  std::string GetEquinox();
653 
658 
663 
668  std::vector<std::string> GetFITSHeader();
669 
677 
678  protected:
683 
684  private:
688  void initialize();
689 
693  bool process_image();
694 
698  bool process_temp_image();
699 
704  bool apply_bias_image();
705 
709  boost::signals2::connection connect(
710  const signal_t::slot_type& event_listener);
711 
715  void DataAvailable();
716 
717  std::string readHeaderItem(const cpl_property* const property) const;
718 
719  void readPropertyValue(std::string& header_item,
720  const cpl_property* const property) const;
721 
725  ddt::ImageBuffer* image_buffer;
726 
730  ddt::BiasBuffer* bias_buffer;
731 
735  ddt::ImageColor* image_color;
736 
740  ddt::ImageCoords* image_coords;
741 
745  boost::signals2::connection connection;
746 
751  signal_t image_available_in_buffer;
752 
757  signal_t cut_level_changed;
758 
762  cpl_image* internal_image;
763 
767  cpl_image* temp_image;
768 
772  cpl_vector* internal_vector;
773 
777  cpl_table* internal_binary_table;
778 
782  int number_axis;
783 
787  int number_planes;
788 
792  int number_extensions;
793 
797  int image_width;
798 
802  int image_height;
803 
807  CutLevelType cut_level_type;
808 
812  double cut_level_min;
813 
817  double cut_level_max;
818 
822  double median_filter_size;
826  double image_pixel_min;
827 
831  double image_pixel_max;
832 
836  bool rotate_flag;
837 
841  bool flip_x_flag;
842 
846  bool flip_y_flag;
847 
851  int actual_plane;
852 
856  void* internal_image_buffer;
857 
861  double* internal_vector_buffer;
862 
866  cpl_wcs* wcs;
867 
871  std::list<std::string> color_maps;
872 
876  ddt::colorMap_t* actual_color_map;
877 
881  ddt::colorMapARGB_t* actual_color_map_argb;
882 
886  std::string actual_color_map_name;
887 
891  ColorScalingType color_scaling_type;
892 
897  bool cut_levels_determined;
898 
903  bool last_segment;
904 
913  bool first_segment_received;
914 
918  int current_bias_selected;
919 
924  bool bias_enabled;
925 
929  bool apply_bias;
930 };
931 
932 } // namespace ddt
933 
934 #endif /* IMAGEHANDLING_HPP */
ddt::ImageHandling::WorldCoordinatesDegreesFromImage
bool WorldCoordinatesDegreesFromImage(const double x_image, const double y_image, double *alpha, double *delta)
Definition: imageHandling.cpp:1211
ddt::ImageHandling::LoadActualConfigurationMap
bool LoadActualConfigurationMap(std::string configuration_map_name)
Definition: imageHandling.cpp:387
imageProc.hpp
ddt::ImageHandling::set_ColorScalingTypeLogarithmic
void set_ColorScalingTypeLogarithmic()
Definition: imageHandling.cpp:1153
ddt::ImageHandling::GetHistogramBinsFromImage
void GetHistogramBinsFromImage(int min_value, int max_value, std::vector< int > &distribution)
Definition: imageHandling.cpp:1397
biasBuffer.hpp
ddt::ImageHandling::USERDEFINED
@ USERDEFINED
Definition: imageHandling.hpp:83
ddt::ImageHandling::GetCutValuesPercentageFromImage
void GetCutValuesPercentageFromImage(const double percentage, double *min_value, double *max_value)
Definition: imageHandling.cpp:1404
ddt::ImageHandling::get_ImageWidth
int get_ImageWidth()
Definition: imageHandling.cpp:1071
signal_t
boost::signals2::signal< void()> signal_t
Definition: ddtMemoryAccessor.hpp:79
ddt::ImageHandling::GetHistogramFromImage
void GetHistogramFromImage(int min_value, int max_value, std::vector< int > &distribution)
Definition: imageHandling.cpp:1390
ddt::ImageHandling::ApplyCutLevelsAuto
bool ApplyCutLevelsAuto()
Definition: imageHandling.cpp:239
ddt::ImageHandling::ApplyCutLevelsMinMax
bool ApplyCutLevelsMinMax()
Definition: imageHandling.cpp:220
ddt::ImageHandling::get_FlipYFlag
bool get_FlipYFlag()
Definition: imageHandling.cpp:558
ddt::ImageHandling::ImageHandling
ImageHandling()
Definition: imageHandling.cpp:30
ddt::ImageHandling::get_NumberAxis
int get_NumberAxis() const
Definition: imageHandling.cpp:1077
ddt::ImageHandling::StoreActualImageAsBias
int StoreActualImageAsBias(const std::string slot_name="")
Definition: imageHandling.cpp:397
ddt::scalingLut_t
Definition: imageColor.hpp:72
ddt::ImageHandling::set_FlipYFlag
void set_FlipYFlag(const bool flip_flag)
Definition: imageHandling.cpp:548
ddt::ImageHandling::get_CutLevelMax
double get_CutLevelMax()
Definition: imageHandling.cpp:1093
ddt::ImageHandling::get_PrimaryHDUInfo
FitsExtension get_PrimaryHDUInfo() const
Definition: imageHandling.cpp:146
ddt::DdtLogger
Definition: ddtLogger.hpp:71
ddt::ImageHandling::ApplyCutLevelsManual
bool ApplyCutLevelsManual(const double min_value, const double max_value)
Definition: imageHandling.cpp:258
ddt::ImageHandling::AUTO
@ AUTO
Definition: imageHandling.hpp:74
ddt::ImageHandling::WorldCoordinatesDegreesFromCanvas
bool WorldCoordinatesDegreesFromCanvas(const double x_canvas, const double y_canvas, double *alpha, double *delta)
Definition: imageHandling.cpp:1219
ddt::ImageHandling::CutLevelChangedSignal
signal_t * CutLevelChangedSignal()
Definition: imageHandling.cpp:188
ddt::ImageHandling::ReprossImage
bool ReprossImage()
Definition: imageHandling.cpp:1388
ddt
Definition: ddtClient.hpp:36
ddt::ImageHandling::LINEAR_SCALE
@ LINEAR_SCALE
Definition: imageHandling.hpp:95
ddt::ImageColor
Definition: imageColor.hpp:95
ddt::ImageHandling::LoadActualColorMap
bool LoadActualColorMap(std::string color_map_name)
Definition: imageHandling.cpp:345
ddt::colorMapARGB_t
std::array< unsigned int, MAX_COLOR_MAP_ENTRIES > colorMapARGB_t
Definition: imageColor.hpp:62
ddt::ImageHandling::get_CutLevelTypeStr
std::string get_CutLevelTypeStr()
Definition: imageHandling.cpp:200
ddt::ImageHandling::ClearSelectedBiasImage
void ClearSelectedBiasImage(const int slot)
Definition: imageHandling.cpp:476
ddt::FitsExtension
Definition: dataFile.hpp:41
ddt::ImageHandling::LoadConfigurationMaps
bool LoadConfigurationMaps(std::string configuration_map_source)
Definition: imageHandling.cpp:392
ddt::ImageHandling::get_AttachedToStream
bool get_AttachedToStream()
Definition: imageHandling.cpp:577
ddt::ImageHandling::get_ImagePixelMax
double get_ImagePixelMax()
Definition: imageHandling.cpp:1097
ddt::ImageHandling::get_FitsExtensionInfo
FitsExtension * get_FitsExtensionInfo(const int extension_number)
Definition: imageHandling.cpp:141
imageIO.hpp
imageColor.hpp
ddt::ImageHandling::GetPixelToDegreesScalingFactor
double GetPixelToDegreesScalingFactor()
Definition: imageHandling.cpp:1364
ddt::ImageHandling::GetStatisticsCplImageWindow
CplStatistics * GetStatisticsCplImageWindow(int llx, int lly, int urx, int ury)
Definition: imageHandling.cpp:1239
imageBuffer.hpp
ddt::ImageHandling::get_ImageData
void * get_ImageData()
Definition: imageHandling.cpp:1065
ddt::ImageHandling::ApplyBias
void ApplyBias(const int slot)
Definition: imageHandling.cpp:521
ddt::ImageHandling::LoadFileAsBiasInSlot
bool LoadFileAsBiasInSlot(const std::string file_name, const int slot)
Definition: imageHandling.cpp:417
ddt::ImageHandling::LoadImageExtensionsAsOne
bool LoadImageExtensionsAsOne(const std::string &file_name)
Definition: imageHandling.cpp:168
imageError.hpp
ddt::ImageHandling::get_FlipXFlag
bool get_FlipXFlag()
Definition: imageHandling.cpp:556
ddt::ImageHandling::ImagePixelFromImage
double ImagePixelFromImage(const double x_image, double y_image)
Definition: imageHandling.cpp:1185
ddt::ImageHandling::CutLevelType
CutLevelType
Definition: imageHandling.hpp:69
ddt::ImageHandling::get_LinearScalingLut
ddt::scalingLut_t * get_LinearScalingLut()
Definition: imageHandling.cpp:1133
ddt::ImageHandling::EnableBias
void EnableBias(const bool enable_bias)
Definition: imageHandling.cpp:462
ddt::BiasBuffer
Definition: biasBuffer.hpp:51
ddt::ImageHandling::GetFITSHeader
std::vector< std::string > GetFITSHeader()
Definition: imageHandling.cpp:1250
ddt::ImageHandling::get_CutLevelType
CutLevelType get_CutLevelType()
Definition: imageHandling.cpp:196
ddt::ImageHandling::GetBiasEnabled
bool GetBiasEnabled() const
Definition: imageHandling.cpp:460
ddt::ImageHandling::get_Image
cpl_image * get_Image()
Definition: imageHandling.cpp:1067
ddt::ImageHandling::get_ActualColorMapName
std::string get_ActualColorMapName()
Definition: imageHandling.cpp:1105
ddt::ImageHandling::LoadColorMaps
bool LoadColorMaps(std::string color_map_folder, std::string color_map_name="standard")
Definition: imageHandling.cpp:291
ddt::ImageHandling::AttachDataStream
void AttachDataStream(std::string data_stream_id)
Definition: imageHandling.cpp:560
ddt::ImageHandling
Definition: imageHandling.hpp:53
dataAcquisition.hpp
ddt::ImageHandling::LoadFile
bool LoadFile(const std::string &file_name, int position=0)
Definition: imageHandling.cpp:152
ddt::ImageHandling::get_ActualColorMap
ddt::colorMap_t * get_ActualColorMap()
Definition: imageHandling.cpp:1101
ddt::ImageHandling::GetCircularObjects
cpl_apertures * GetCircularObjects(double sigma)
Definition: imageHandling.cpp:581
ddt::ImageHandling::DetachDataStream
void DetachDataStream(std::string data_stream_id)
Definition: imageHandling.cpp:573
ddt::ImageHandling::set_CutLevelType
void set_CutLevelType(const CutLevelType cut_level_type)
Definition: imageHandling.cpp:190
ddt::ImageHandling::get_NumberExtensions
int get_NumberExtensions()
Definition: imageHandling.cpp:1075
ddt::ImageHandling::ImageAvailableInBufferSignal
signal_t * ImageAvailableInBufferSignal()
Definition: imageHandling.cpp:184
ddt::ImageHandling::ResetCutLevels
bool ResetCutLevels()
Definition: imageHandling.cpp:276
ddt::ImageHandling::get_ColorScalingType
ColorScalingType get_ColorScalingType()
Definition: imageHandling.cpp:1145
CplStatistics
Definition: imageStats.hpp:46
imageStats.hpp
ddt::ImageHandling::ImagePixelFromCanvas
double ImagePixelFromCanvas(const double x_canvas, const double y_canvas, double *x_image, double *y_image)
Definition: imageHandling.cpp:1202
ddt::ImageBuffer
Definition: imageBuffer.hpp:50
ddt::ImageHandling::set_CutLevelMin
void set_CutLevelMin(const double min_value)
Definition: imageHandling.cpp:1079
ddt::ImageHandling::SQRT_SCALE
@ SQRT_SCALE
Definition: imageHandling.hpp:107
ddt::ImageHandling::ColorScalingType
ColorScalingType
Definition: imageHandling.hpp:89
ddt::ImageHandling::get_ActualColorMapARGB
ddt::colorMapARGB_t * get_ActualColorMapARGB()
Definition: imageHandling.cpp:1109
ddt::ImageHandling::get_RotateFlag
bool get_RotateFlag()
Definition: imageHandling.cpp:554
ddt::ImageHandling::get_ScalingLut
ddt::scalingLut_t * get_ScalingLut()
Definition: imageHandling.cpp:1113
ddt::ImageHandling::GetCurrentSelectedBiasSlot
int GetCurrentSelectedBiasSlot() const
Definition: imageHandling.cpp:532
ddt::ImageHandling::set_ColorScalingTypeLinear
void set_ColorScalingTypeLinear()
Definition: imageHandling.cpp:1149
ddt::ImageHandling::get_LastSegment
bool get_LastSegment() const
Definition: imageHandling.cpp:150
configurationMaps.hpp
ddt::ImageHandling::GetObjectInformation
bool GetObjectInformation(double x_image, double y_image, int size, double *x_axis_angle, double *background, double *peak_above_background, double *fwhm_x, double *fwhm_y)
Definition: imageHandling.cpp:628
ddt::ImageHandling::set_FlipXFlag
void set_FlipXFlag(const bool flip_flag)
Definition: imageHandling.cpp:542
ddt::ImageHandling::get_BinaryTable
cpl_table * get_BinaryTable()
Definition: imageHandling.cpp:1069
ddt::ImageHandling::logger
ddt::DdtLogger * logger
Definition: imageHandling.hpp:682
ddtLogger.hpp
ddt::ImageHandling::ConvertImageToCanvas
void ConvertImageToCanvas(const double x_image, const double y_image, double *x_canvas, double *y_canvas)
Definition: imageHandling.cpp:1233
ddt::ImageHandling::ClearAllBiasImages
void ClearAllBiasImages()
Definition: imageHandling.cpp:466
ddtEncDecMultiDim.hpp
ddt::ImageHandling::LOG_SCALE
@ LOG_SCALE
Definition: imageHandling.hpp:101
ddt::ImageHandling::set_logger
void set_logger(ddt::DdtLogger *logger)
Definition: imageHandling.cpp:67
ddt::ImageHandling::set_RotateFlag
void set_RotateFlag(const bool rot_flag)
Definition: imageHandling.cpp:536
ddt::ImageCoords
Definition: imageCoords.hpp:51
ddt::ImageHandling::set_ColorScalingTypeSquareRoot
void set_ColorScalingTypeSquareRoot()
Definition: imageHandling.cpp:1157
ddt::colorMap_t
std::array< std::array< float, COLOR_MAP_ENTRY_SIZE >, MAX_COLOR_MAP_ENTRIES > colorMap_t
Definition: imageColor.hpp:52
ddt::ImageHandling::get_ColorScalingTypeStr
std::string get_ColorScalingTypeStr()
Definition: imageHandling.cpp:1165
ddt::ImageHandling::get_ImagePixelMin
double get_ImagePixelMin()
Definition: imageHandling.cpp:1095
ddt::ImageHandling::get_LogarithmicScalingLut
ddt::scalingLut_t * get_LogarithmicScalingLut()
Definition: imageHandling.cpp:1137
dataFile.hpp
ddt::ImageHandling::GetBiasSlotName
std::string GetBiasSlotName(const int slot)
Definition: imageHandling.cpp:456
imageCoords.hpp
ddt::ImageHandling::get_SqrtScalingLut
ddt::scalingLut_t * get_SqrtScalingLut()
Definition: imageHandling.cpp:1141
ddt::ImageHandling::ConvertCanvasToImage
void ConvertCanvasToImage(const double x_canvas, const double y_canvas, double *x_image, double *y_image)
Definition: imageHandling.cpp:1227
ddt::ImageHandling::LoadFileAsBias
int LoadFileAsBias(const std::string file_name)
Definition: imageHandling.cpp:437
ddt::ImageHandling::GetEquinox
std::string GetEquinox()
Definition: imageHandling.cpp:749
ddt::ImageHandling::get_ColorMaps
std::list< std::string > get_ColorMaps()
Definition: imageHandling.cpp:1099
ddt::ImageHandling::DisplaySelectedBiasImage
void DisplaySelectedBiasImage(const int slot)
Definition: imageHandling.cpp:486
ddt::ImageHandling::set_CutLevelMax
void set_CutLevelMax(const double max_value)
Definition: imageHandling.cpp:1085
ddt::ImageHandling::get_ImageHeight
int get_ImageHeight()
Definition: imageHandling.cpp:1073
ddt::ImageHandling::GetObjectCentroidPos
bool GetObjectCentroidPos(cpl_apertures *apertures, double x_image, double y_image, double *x_centroid, double *y_centroid)
Definition: imageHandling.cpp:594
ddt::ImageHandling::~ImageHandling
virtual ~ImageHandling()
Definition: imageHandling.cpp:32
ddt::ImageHandling::MINMAX
@ MINMAX
Definition: imageHandling.hpp:79
ddt::ImageHandling::set_ColorScalingType
void set_ColorScalingType(ColorScalingType scaling_type)
Definition: imageHandling.cpp:1161
ddt::ImageHandling::get_CutLevelMin
double get_CutLevelMin()
Definition: imageHandling.cpp:1091
ddt::ImageHandling::GetGaussianParameters
bool GetGaussianParameters(double x_image, double y_image, int size, double *background, double *gaussian_volume, double *correlation, double *gaussian_coord_x, double *gaussian_coord_y, double *sigma_x, double *sigma_y)
Definition: imageHandling.cpp:708