ImageD  v2_7_5 (24.06.22)
ImageD is an image processing software designed for rapid prototyping and implementing algorithms and solutions for science, research and teaching.
d_makro_visualization.h
Go to the documentation of this file.
1 /************************************
2  * added: 30.01.2019 *
3  * author: David Eilenstein *
4  * contact: D.Eilenstein@gsi.de *
5  * project: ImageD *
6  * facility: GSI Darmstadt, Ger *
7  ************************************/
8 
9 #ifndef D_MAKRO_VISUALIZATION_H
10 #define D_MAKRO_VISUALIZATION_H
11 
12 //own
13 #include <d_enum.h>
14 #include <d_error_handler.h>
15 #include <d_img_proc.h>
16 #include <d_plot.h>
17 #include <d_stat.h>
18 #include <d_viewer.h>
19 #include <d_storage.h>
20 #include <d_component.h>
21 #include <d_component_list.h>
23 #include <d_table.h>
24 
25 //Qt
26 #include <QMainWindow>
27 #include <QFileDialog>
28 #include <QFileInfo>
29 #include <QFileInfoList>
30 #include <QDir>
31 #include <QDateTime>
32 #include <QComboBox>
33 #include <QCloseEvent>
34 #include <QResizeEvent>
35 #include <QInputDialog>
36 #include <QColorDialog>
37 #include <QMouseEvent>
38 
39 //Qt::Charts
40 #include <QChartView>
41 #include <QChart>
42 
43 //general
44 #include <iostream>
45 #include <sstream>
46 #include <fstream>
47 #include <vector>
48 #include <algorithm>
49 
50 //openCV
51 #include <opencv2/core/core.hpp>
52 #include <opencv2/highgui/highgui.hpp>
53 #include <opencv2/imgproc/imgproc.hpp>
54 
55 //namespaces
56 using namespace std;
57 //using namespace cv; (prohibited because of abigous names with qtdatavisualization)
58 #include <d_opencv_typedefs.h>
59 
60 namespace Ui {
62 }
63 
64 class D_MAKRO_Visualization : public QMainWindow
65 {
66  Q_OBJECT
67 
68 public:
69  explicit D_MAKRO_Visualization(D_Storage *pStorage, QWidget *parent = 0);
71  void resizeEvent(QResizeEvent *event);
72  void mousePressEvent(QMouseEvent *event);
73  void closeEvent(QCloseEvent *event);
74  void set_ClosingPossible(bool closeable) {ClosingPossible = closeable;}
75 
76 private slots:
77 
78  void Images_Add();
79  void Images_Clear();
80  void Images_DefineDialog();
81 
82  void Save_Single();
83  void Save_Stack();
84 
85  void Populate_All();
86  void Populate_Single(QComboBox *CB, QStringList QSL);
87  void Populate_Images();
88  void Populate_Pages();
89  void Populate_Proc();
90  void Populate_ViewImgType();
91  void Populate_Geometrics();
92  void Populate_Paint();
93 
94  void BlockSignals_Ui(bool block);
95  void ProcSet_SetToUi();
96  void GammaSpread_MinMax();
97 
98  void Parameters_Init();
99  void Images_Init();
100 
101  void Paint_GetClickPos(int x, int y);
102  void Paint_Init();
103  void Paint_Export();
104  void Paint_Line();
105  void Paint_Fill();
106  void Paint_Reset();
107 
108  void Update_Views();
109  void Update_ImgProc();
110  void Update_ImageInfo();
111  void Update_ColorPreview();
112  void Update_Ui();
113 
114  void ColorDialog();
115 
116  void ImgProc_Load();
117  void ImgProc_PageProc(int page);
118  void ImgProc_PseudoColor(int page);
119  void ImgProc_Merge_Output();
120  void ImgProc_Scalebar();
121 
122 
123 
124  void on_comboBox_Image_currentIndexChanged(int index);
125  void on_comboBox_Page_currentIndexChanged(int index);
126  void on_comboBox_Processing_currentIndexChanged(int index);
127 
128  void on_groupBox_Bin_Smooth_clicked(bool checked);
129  void on_spinBox_Bin_Size_valueChanged(int arg1);
130  void on_doubleSpinBox_Bin_Sigma_valueChanged(double arg1);
131  void on_doubleSpinBox_Bin_Threshold_valueChanged(double arg1);
132  void on_groupBox_Bin_Segmentation_clicked(bool checked);
133  void on_doubleSpinBox_Bin_Distance_valueChanged(double arg1);
134  void on_checkBox_Bin_InclNonSeed_clicked(bool checked);
135  void on_checkBox_Bin_InclBorder_clicked(bool checked);
136  void on_groupBox_Reduce_clicked(bool checked);
137  void on_comboBox_Bin_Geometric_currentIndexChanged(int index);
138 
139  void on_spinBox_Color_Red_valueChanged(int arg1);
140  void on_spinBox_Color_Green_valueChanged(int arg1);
141  void on_spinBox_Color_Blue_valueChanged(int arg1);
142  void on_spinBox_Color_Alpha_valueChanged(int arg1);
143 
144  void on_doubleSpinBox_Val_Gamma_valueChanged(double arg1);
145  void on_doubleSpinBox_Val_In_Min_valueChanged(double arg1);
146  void on_doubleSpinBox_Val_In_Max_valueChanged(double arg1);
147  void on_doubleSpinBox_Val_Out_Min_valueChanged(double arg1);
148  void on_doubleSpinBox_Val_Out_Max_valueChanged(double arg1);
149 
150  void on_comboBox_ViewImgType_currentIndexChanged(int index);
151 
152  void on_groupBox_Bin_Paint_clicked(bool checked);
153  void on_comboBox_Bin_Paint_Type_currentIndexChanged(int index);
154  void on_comboBox_Bin_Paint_FG_BG_currentIndexChanged(int index);
155  void on_spinBox_Bin_Paint_Width_valueChanged(int arg1);
156  void on_pushButton_Bin_Paint_Reset_clicked();
157 
158  void on_lineEdit_Scalebar_Unit_textChanged(const QString &arg1);
159  void on_doubleSpinBox_Scalebar_Pixelsize_valueChanged(double arg1);
160  void on_doubleSpinBox_Scalebar_Barsize_valueChanged(double arg1);
161 
162  void on_groupBox_Scalebar_clicked();
163 
164 private:
165  Ui::D_MAKRO_Visualization *ui;
166 
167  bool ClosingPossible = false;
168 
169  //Storage
170  D_Storage *pStore;
171 
172  //Data
173  //images
174  QStringList QSL_Images_Path;
175  QStringList QSL_Images_FileNames;
176  QStringList QSL_Images_BaseNames;
177  QFileInfoList FIL_Images;
178  vector<Mat> vMA_Image_Pages_In;
179  vector<Mat> vMA_Image_Pages_Out_Gray;
180  vector<Mat> vMA_Image_Pages_Out_Color;
181  Mat MA_Output;
182  bool firstRealImages = true;
183  //pages
184  bool defined_dataSet = false;
185  int pages_number = 1;
186  QStringList QSL_Pages;
187  int current_page = 0;
188  int current_image = 0;
189 
190  //Paint
191  bool paint_initialized = false;
192  QDir DIR_Settings;
193  QFileInfo FI_Paint_FG;
194  QFileInfo FI_Paint_BG;
195  Mat MA_Paint_FG;
196  Mat MA_Paint_BG;
197  bool Paint_NewLine = true;
198  Point Paint_PtCurr;
199  Point Paint_PtLast;
200 
201  //Scalebar
202  QString Scalebar_Unit = "px";
203  double Scalebar_Pixelsize = 1.0;
204  double Scalebar_Barsize = 100.0;
205 
206  //Save
207  bool stackProcActive = false;
208  QDir DIR_SaveMaster;
209  QDir DIR_SaveStack;
210  QDir DIR_SaveImages;
211  QDir DIR_SaveCurrentImage;
212 
213  //PARAMETERS
214  vector<vector<double>> vvd_Parameter_PagePar;
215  bool block_parameter_update = false;
216 
217 
218  //View
219  D_Viewer View_Page;
220  D_Viewer View_Output;
221 
222  //Error handler
223  D_Error_Handler ER;
224  void ERR(int err, QString func = "not specified", QString detail = "not specified");
225 
226  //CONSTANTS
227  enum Parameters
228  {
229  c_PAR_TYPE,
230  c_PAR_BIN_BLUR_DO,
231  c_PAR_BIN_BLUR_SIZE,
232  c_PAR_BIN_BLUR_SIGMA,
233  c_PAR_BIN_BIN_THRES,
234  c_PAR_BIN_SEG_DO,
235  c_PAR_BIN_SEG_DISTANCE,
236  c_PAR_BIN_SEG_INCLNONSEED,
237  c_PAR_BIN_SEG_INCLBORDER,
238  c_PAR_BIN_GEO_DO,
239  c_PAR_BIN_GEO_GEOMETRIC,
240  c_PAR_VAL_IN_MIN,
241  c_PAR_VAL_IN_MAX,
242  c_PAR_VAL_OUT_MIN,
243  c_PAR_VAL_OUT_MAX,
244  c_PAR_VAL_GAMMA,
245  c_PAR_COL_RED,
246  c_PAR_COL_GREEN,
247  c_PAR_COL_BLUE,
248  c_PAR_COL_ALPHA,
249  c_PAR_PAINT_DO,
250  c_PAR_PAINT_TYPE,
251  c_PAR_PAINT_COLOR,
252  c_PAR_PAINT_WIDTH,
253  c_PAR_NUMBER_OF
254  };
255 
256  enum ProcTypes
257  {
258  c_PROC_SKIP,
259  c_PROC_COPY,
260  c_PROC_BINARY,
261  c_PROC_VALUES
262  };
263  QStringList QSL_ProcTypes =
264  {
265  "Ignore",
266  "Copy",
267  "Binary",
268  "Values"
269  };
270 
271  enum ImgType
272  {
273  c_IMG_IN,
274  c_IMG_OUT_GRAY,
275  c_IMG_OUT_COLOR,
276  c_IMG_NUMBER_OF
277  };
278  QStringList QSL_ImgType =
279  {
280  "View: In",
281  "View: Out Gray",
282  "View: Out Color"
283  };
284 
285  enum Paint_Color
286  {
287  c_PAINT_FG,
288  c_PAINT_BG
289  };
290  QStringList QSL_Paint_Color =
291  {
292  "Foreground",
293  "Background"
294  };
295 
296  enum Paint_Type
297  {
298  c_PAINT_LINE,
299  c_PAINT_FILL
300  };
301  QStringList QSL_Paint_Type =
302  {
303  "Line",
304  "Fill"
305  };
306 };
307 
308 #endif // D_MAKRO_VISUALIZATION_H
Mat
cv::Mat Mat
Definition: d_opencv_typedefs.h:28
D_Img_Proc::Draw_Line
static int Draw_Line(Mat *pMA_Target, unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2, unsigned int thickness=1, double value=255)
Definition: d_img_proc.cpp:17134
d_component.h
D_Img_Proc::Math_ImgImg_Diff
static int Math_ImgImg_Diff(Mat *pMA_Out, Mat *pMA_In1, Mat *pMA_In2)
Definition: d_img_proc.cpp:13125
d_viewer.h
d_plot.h
D_Img_Proc::Load_From_Path
static int Load_From_Path(Mat *pMA_Out, QFileInfo FI_path)
Definition: d_img_proc.cpp:16
D_Viewer
The D_Viewer class Display images (Mat) in QGraphicsView in the user interface.
Definition: d_viewer.h:58
d_value_distribution_list.h
D_Storage
The D_Storage class Used for storing data. There is only one instance in D_MainWindow .
Definition: d_storage.h:49
D_Storage::set_dir_M_Visualization
void set_dir_M_Visualization(QString path)
Definition: d_storage.h:108
D_Viewer::Update_Image
void Update_Image(Mat *MA_new)
D_Viewer::Update_Image Set and show image.
Definition: d_viewer.cpp:2079
d_table.h
D_Img_Proc::Draw_Text
static int Draw_Text(QImage *pQI_Target, QString text_tl, QString text_tr, QString text_bl, QString text_br, unsigned int size, QColor color)
Definition: d_img_proc.cpp:18588
D_Error_Handler::ERR
void ERR(int err, QString sender, QString func, QString detail)
D_Error_Handler::ERR pops an error message if an error occured and/or streams it to a csv file.
Definition: d_error_handler.cpp:23
D_Storage::dir_M_Visualization
QDir * dir_M_Visualization()
Definition: d_storage.h:80
D_MAKRO_Visualization::~D_MAKRO_Visualization
~D_MAKRO_Visualization()
Definition: d_makro_visualization.cpp:56
D_Img_Proc::Duplicate
static int Duplicate(Mat *pMA_Out, Mat *pMA_In)
Definition: d_img_proc.cpp:2397
Point
cv::Point Point
Definition: d_opencv_typedefs.h:35
D_MAKRO_Visualization::closeEvent
void closeEvent(QCloseEvent *event)
Definition: d_makro_visualization.cpp:75
D_Img_Proc::Threshold_Relative_1C
static int Threshold_Relative_1C(Mat *pMA_Out, Mat *pMA_In, double max_val, double thres_rel)
Definition: d_img_proc.cpp:6352
d_img_proc.h
D_Error_Handler
The D_Error_Handler class takes error codes from D_ERROR_ENUM and shows a popup if an error occures.
Definition: d_error_handler.h:38
D_Img_Proc::MinMax_of_Mat
static int MinMax_of_Mat(Mat *pMA_In, double *min_ext, double *max_ext)
Definition: d_img_proc.cpp:2052
D_Img_Proc::Transformation_Watershed_Auto
static int Transformation_Watershed_Auto(Mat *pMA_Out, Mat *pMA_In, Mat *pMA_Marker, bool include_not_seeded, bool conv_8bit, bool exclude_border)
Definition: d_img_proc.cpp:7573
D_MAKRO_Visualization::set_ClosingPossible
void set_ClosingPossible(bool closeable)
Definition: d_makro_visualization.h:74
D_Img_Proc::GammaSpread_1C
static int GammaSpread_1C(Mat *pMA_Out, Mat *pMA_In, double gamma, double in_min, double in_max, double out_min=0, double out_max=255, bool force_8bit=false)
Definition: d_img_proc.cpp:4649
d_component_list.h
D_Viewer::set_GV
void set_GV(QGraphicsView *GV_ui)
Definition: d_viewer.cpp:49
D_Img_Proc::Floodfill
static int Floodfill(Mat *pMA_Out, Mat *pMA_In, unsigned int seed_x, unsigned int seed_y, double new_val)
Definition: d_img_proc.cpp:16690
Ui
Definition: d_analysiswindow.h:58
D_MAKRO_Visualization
Definition: d_makro_visualization.h:65
d_storage.h
D_Img_Proc::Threshold_Absolute_1C
static int Threshold_Absolute_1C(Mat *pMA_Out, Mat *pMA_In, double thres_abs)
Definition: d_img_proc.cpp:6553
D_Img_Proc::Load_From_Path_Multi
static int Load_From_Path_Multi(Mat *pMA_Out, QString path, unsigned int page)
Definition: d_img_proc.cpp:315
d_opencv_typedefs.h
c_GEO_CONTOUR
@ c_GEO_CONTOUR
Definition: d_enum.h:2052
D_Img_Proc::Convert_Color
static int Convert_Color(Mat *pMA_Out, Mat *pMA_In, int cvt_mode)
Definition: d_img_proc.cpp:2524
D_Viewer::connect_Zoom
void connect_Zoom(D_Viewer *viewer)
Definition: d_viewer.cpp:128
D_MAKRO_Visualization::D_MAKRO_Visualization
D_MAKRO_Visualization(D_Storage *pStorage, QWidget *parent=0)
Definition: d_makro_visualization.cpp:12
D_Img_Proc::Convert_Mat_to_QImage
static int Convert_Mat_to_QImage(QImage *pQI_Out, Mat *pMA_In, bool use_custom_range_for_spread_non_8bit=false, double in_min=0, double in_max=1)
Definition: d_img_proc.cpp:973
d_enum.h
D_Img_Proc::Reduce_Geometric
static int Reduce_Geometric(Mat *pMA_Out, Mat *pMA_In, int geometric, int connectivity=8, int thickness=1, uchar value=255)
Definition: d_img_proc.cpp:16215
D_Viewer::Save_Image
QString Save_Image()
D_Viewer::Save_Image Saves the image at FI_LastSaved.
Definition: d_viewer.cpp:2157
d_error_handler.h
D_Img_Proc::Math_ImgImg_Add
static int Math_ImgImg_Add(Mat *pMA_Out, Mat *pMA_In1, Mat *pMA_In2)
Definition: d_img_proc.cpp:13092
D_Img_Proc::Merge
static int Merge(Mat *pMA_Out, Mat *pMA_In0, Mat *pMA_In1, Mat *pMA_In2, Mat *pMA_In3, unsigned int channels, bool channel_use[4])
Definition: d_img_proc.cpp:4060
D_MAKRO_Visualization::resizeEvent
void resizeEvent(QResizeEvent *event)
Definition: d_makro_visualization.cpp:61
BORDER_DEFAULT
const int BORDER_DEFAULT
Definition: d_opencv_typedefs.h:78
D_Img_Proc::Convert_Depth_NoScaling
static int Convert_Depth_NoScaling(Mat *pMA_Out, Mat *pMA_In, int depth)
Definition: d_img_proc.cpp:2777
d_makro_visualization.h
D_Storage::get_Adress
Mat * get_Adress(size_t pos)
Definition: d_storage.h:54
D_Img_Proc::Filter_Gauss
static int Filter_Gauss(Mat *pMA_Out, Mat *pMA_In, int size_x, int size_y, int border, double sigma_x, double sigma_y)
Definition: d_img_proc.cpp:9083
D_Img_Proc::Convert_Color_RGBA
static int Convert_Color_RGBA(Mat *pMA_Out, Mat *pMA_In, double r, double g, double b, double a, double range_rgba=255.0)
Definition: d_img_proc.cpp:2552
d_stat.h
D_MAKRO_Visualization::mousePressEvent
void mousePressEvent(QMouseEvent *event)
Definition: d_makro_visualization.cpp:67