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_huangvisualization.h
Go to the documentation of this file.
1 /****************************************************
2  * added: 10.12.2020 *
3  * author: David Eilenstein *
4  * contact: David.Eilenstein@stud.h-da.de.de *
5  * project: ImageD *
6  * facility: Hochschule Darmstadt, Ger *
7  ****************************************************/
8 
9 #ifndef D_MAKRO_HUANGVISUALIZATION_H
10 #define D_MAKRO_HUANGVISUALIZATION_H
11 
12 //own
13 #include <d_enum.h>
14 #include <d_error_handler.h>
15 #include <d_visdat_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_table.h>
21 #include <d_img_proc.h>
22 
23 //Qt
24 #include <QMainWindow>
25 #include <QFileDialog>
26 #include <QFileInfo>
27 #include <QFileInfoList>
28 #include <QDir>
29 #include <QDateTime>
30 #include <QComboBox>
31 #include <QCloseEvent>
32 #include <QResizeEvent>
33 #include <QInputDialog>
34 #include <QDesktopServices>
35 #include <QUrl>
36 
37 //Qt::Charts
38 #include <QChartView>
39 #include <QChart>
40 
41 //general
42 #include <iostream>
43 #include <sstream>
44 #include <fstream>
45 #include <vector>
46 #include <algorithm>
47 
48 //openCV
49 #include <opencv2/core/core.hpp>
50 #include <opencv2/highgui/highgui.hpp>
51 #include <opencv2/imgproc/imgproc.hpp>
52 
53 //namespaces
54 using namespace std;
55 //using namespace cv; (prohibited because of abigous names with qtdatavisualization)
56 #include <d_opencv_typedefs.h>
57 
58 namespace Ui {
60 }
61 
66 class D_MAKRO_HuangVisualization : public QMainWindow
67 {
68  Q_OBJECT
69 
70 public:
71  explicit D_MAKRO_HuangVisualization(D_Storage *pStorage, QWidget *parent = nullptr);
73 
74  void closeEvent(QCloseEvent *event);
75  void resizeEvent(QResizeEvent *event);
76  void set_ClosingPossible(bool closeable) {ClosingPossible = closeable;}
77 
78 private slots:
79 
80  void Update_Ui();
81  void Update_Image_Out();
82  void Update_Image_In();
83  void Update_Image_Mask();
84 
85  void Update_Plot_Hist();
86  void Update_Plot_Mass();
87 
88  void Load_Image();
89  void Get_Mask();
90  void Load_Mask();
91  void Generate_Mask();
92  void Get_Quantil();
93 
94  void Pad_Image();
95  void Init_ImgOut();
96 
97  void Proc_StepDetail();
98  void Proc_StepValue();
99  void Proc_StepPixel();
100  void Proc_StepLine();
101  void Proc_Full();
102 
103  void Init_Position();
104  void Init_Hist();
105  void Init_Quantile();
106  void Init_Masses();
107  void Init_PointLists();
108  void Init_HistLegend();
109 
110  void Step_SaveLineBegin();
111  void Step_LoadLineBegin();
112 
113  void Step_Pixel_ChangePos();
114  void Step_Pixel_ChangePointLists();
115 
116  void Step_Point_ChangeAddRem();
117  void Step_Point_Change_Hist();
118  void Step_Point_Change_Masses_Add();
119  void Step_Point_Change_Masses_Rem();
120  void Step_Point_Check_Masses();
121 
122  void Step_Point_Quantil_Decrease_Change_Mass_Greater();
123  void Step_Point_Quantil_Decrease_Change_Quantil();
124  void Step_Point_Quantil_Decrease_Change_Mass_Quantil();
125  void Step_Point_Quantil_Decrease_Change_Mass_Smaller();
126 
127  void Step_Point_Quantil_Increase_Change_Mass_Smaller();
128  void Step_Point_Quantil_Increase_Change_Quantil();
129  void Step_Point_Quantil_Increase_Change_Mass_Quantil();
130  void Step_Point_Quantil_Increase_Change_Mass_Greater();
131 
132  void Step_Point_End();
133 
134  void Step_Pixel_WriteOut();
135  void Step_Pixel_Change_Direction();
136 
137  void on_pushButton_VideoGuide_clicked();
138 
139 private:
140  Ui::D_MAKRO_HuangVisualization *ui;
141  bool ClosingPossible = false;
142 
143  //states ------------------------------------------
144 
145  bool state_img_loaded = false;
146  bool state_mask_loaded = false;
147  bool state_quantil_rel_set = false;
148  bool state_img_padded = false;
149  bool state_img_out_init = false;
150 
151  //Storage ----------------------------------------------
152 
153  D_Storage *pStore;
154 
155  //Stuff to show things -----------------------------------
156 
157  D_Viewer Viewer_In;
158  D_Viewer Viewer_Mask_InColor;
159  D_Viewer Viewer_Mask_InGray;
160  D_Viewer Viewer_Mask_Out;
161  D_Viewer Viewer_Mask_Binary;
162  D_Viewer Viewer_Out;
163  D_Viewer Viewer_Hist;
164  D_Viewer Viewer_Hist_Legend;
165  D_Viewer Viewer_Mass;
166 
167  QLabel *pLabelStatus;
168 
169 
170  //Images ------------------------------------------
171 
172  //in
173  Mat MA_ImgIn_Load;
174  Mat MA_ImgIn_Gray;
175  Mat MA_ImgIn_GrayPadded;
176  Mat MA_ImgIn_GrayPadded3Ch;
177  Mat MA_ImgIn_Show;
178  //out
179  Mat MA_ImgOut_Gray;
180  //Mat MA_ImgOut_Show;
181  //Hist and Mass
182  Mat MA_Hist;
183  Mat MA_Hist_Legend;
184  Mat MA_Mass;
185 
186 
187  //mask
188  Mat MA_MaskLoad;
189  Mat MA_MaskBinary;
190  Mat MA_MaskBinary_3C;
191  Mat MA_MaskShow_Binary;
192  Mat MA_MaskShow_In_Color;
193  Mat MA_MaskShow_In_Gray;
194  Mat MA_MaskShow_Out;
195  //image sizes
196  int img_in_sy;
197  int img_in_sx;
198 
199 
200  //parameters and variables for algorithm -------------------------
201 
202  //mask parameters
203  //sizes
204  int mask_sx;
205  int mask_sy;
206  //centers
207  int mask_cx;
208  int mask_cy;
209  //center to border
210  int mask_c2l;
211  int mask_c2r;
212  int mask_c2t;
213  int mask_c2b;
214 
215  //mask to point lists parameters
216  vector<Point> vBorderL;
217  vector<Point> vBorderR;
218  vector<Point> vBorderT;
219  vector<Point> vBorderB;
220  size_t mask_relevant_px_count;
221 
222  //hist
223  vector<size_t> hist;
224  vector<size_t> hist_line_begin;
225 
226  //looping parameters
227  bool at_end = false;
228  int pos_x;
229  int pos_y;
230  int direction = c_DIR2D_R;
231 
232  //masses
233  size_t mass_smaller;
234  size_t mass_smaller_line_begin;
235  size_t mass_smaller_or_median;
236  size_t mass_smaller_or_median_line_begin;
237  size_t mass_quantil;
238  size_t mass_quantil_line_begin;
239  size_t mass_greater;
240  size_t mass_greater_line_begin;
241  size_t mass_greater_or_median;
242  size_t mass_greater_or_median_line_begin;
243 
244  //quantil
245  double quantil_relPos;
246  double quantil_val;
247  double quantil_val_line_begin;
248 
249  //mass check values
250  double mass_smaller_or_equal_needed;
251  double mass_greater_or_equal_needed;
252 
253  //add remove list and step length
254  vector<Point> *vBorderAdd;
255  vector<Point> *vBorderRem;
256  int dx_to_prev_pos;
257  int dy_to_prev_pos;
258 
259  //looping add/remove values
260  size_t i_add_rem = 0;
261 
262  //values to add/remove
263  uchar val_add;
264  uchar val_rem;
265 
266  //mass checks
267  bool check_smaller;
268  bool check_greater;
269 
270  enum PROC_STEP {
271  STEP_INIT_POSITION,
272  STEP_INIT_QUANTILE,
273  STEP_INIT_HIST,
274  STEP_INIT_MASSES,
275  STEP_INIT_POINT_LISTS,
276 
277  STEP_SAVE_LINE_BEGIN,
278  STEP_LOAD_LINE_BEGIN,
279 
280  STEP_PIXEL_CHANGE_POS,
281  STEP_PIXEL_CHANGE_POINT_LISTS,
282 
283  STEP_POINT_CHANGE_ADD_REM,
284  STEP_POINT_CHANGE_HIST,
285  STEP_POINT_CHANGE_MASSES_ADD,
286  STEP_POINT_CHANGE_MASSES_REM,
287  STEP_POINT_CHECK_MASSES,
288  STEP_POINT_QUANTIL_DECREASE_CHANGE_MASS_GREATER,
289  STEP_POINT_QUANTIL_DECREASE_CHANGE_QUANTIL,
290  STEP_POINT_QUANTIL_DECREASE_CHANGE_MASS_QUANTIL,
291  STEP_POINT_QUANTIL_DECREASE_CHANGE_MASS_SMALLER,
292 
293  STEP_POINT_QUANTIL_INCREASE_CHANGE_MASS_SMALLER,
294  STEP_POINT_QUANTIL_INCREASE_CHANGE_MASS_QUANTILE,
295  STEP_POINT_QUANTIL_INCREASE_CHANGE_QUANTIL,
296  STEP_POINT_QUANTIL_INCREASE_CHANGE_MASS_GREATER,
297 
298  STEP_POINT_END,
299 
300  STEP_PIXEL_WRITE_OUT,
301  STEP_PIXEL_CHANGE_DIRECTION,
302 
303  STEP_END,
304 
305  STEP_NUMBER_OF
306  };
307  size_t step_next = STEP_INIT_POSITION;
308 };
309 
310 #endif // D_MAKRO_HUANGVISUALIZATION_H
Mat
cv::Mat Mat
Definition: d_opencv_typedefs.h:28
ER_okay
@ ER_okay
Definition: d_enum.h:133
BORDER_CONSTANT
const int BORDER_CONSTANT
Definition: d_opencv_typedefs.h:77
D_Math::Function_2D_to_1D
static function< double(double x, double y)> Function_2D_to_1D(int type, double a=1, double b=0, double c=1, double d=0, double e=0, double f=0, double nan_val=0, double inf_val=0)
Definition: d_math.cpp:88
c_MATH_2D_TO_1D_ELLIPSE
@ c_MATH_2D_TO_1D_ELLIPSE
Definition: d_enum.h:1065
D_Storage::set_dir_M_Huang
void set_dir_M_Huang(QString path)
Definition: d_storage.h:120
d_viewer.h
d_plot.h
D_Viewer::Set_Aspect_Mode
void Set_Aspect_Mode(bool keep)
D_Viewer::Set_Aspect_Mode Set aspect ratio handling mode to fit an image to a viewer of different siz...
Definition: d_viewer.cpp:2227
D_Img_Proc::Convert_8UC1
static int Convert_8UC1(Mat *pMA_Out, Mat *pMA_In)
Definition: d_img_proc.cpp:3406
D_Viewer
The D_Viewer class Display images (Mat) in QGraphicsView in the user interface.
Definition: d_viewer.h:58
D_Storage
The D_Storage class Used for storing data. There is only one instance in D_MainWindow .
Definition: d_storage.h:49
D_MAKRO_HuangVisualization::resizeEvent
void resizeEvent(QResizeEvent *event)
Definition: d_makro_huangvisualization.cpp:93
Vec3b
cv::Vec3b Vec3b
Definition: d_opencv_typedefs.h:51
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_Viewer::Set_Transformation_Mode
void Set_Transformation_Mode(bool smooth)
D_Viewer::Set_Transformation_Mode Set transformation mode to fit an image to a viewer of different si...
Definition: d_viewer.cpp:2213
c_DIR2D_R
@ c_DIR2D_R
Definition: d_enum.h:2112
Point
cv::Point Point
Definition: d_opencv_typedefs.h:35
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::Padding
static int Padding(Mat *pMA_Out, Mat *pMA_In, int size_x, int size_y, int type=BORDER_CONSTANT)
Definition: d_img_proc.cpp:5708
D_Img_Proc::Load_From_Path_Gray
static int Load_From_Path_Gray(Mat *pMA_Out, QFileInfo FI_path)
Definition: d_img_proc.cpp:51
d_img_proc.h
BORDER_REPLICATE
const int BORDER_REPLICATE
Definition: d_opencv_typedefs.h:82
D_MAKRO_HuangVisualization::set_ClosingPossible
void set_ClosingPossible(bool closeable)
Definition: d_makro_huangvisualization.h:76
Scalar
cv::Scalar Scalar
Definition: d_opencv_typedefs.h:30
D_MAKRO_HuangVisualization::~D_MAKRO_HuangVisualization
~D_MAKRO_HuangVisualization()
Definition: d_makro_huangvisualization.cpp:74
D_Viewer::set_GV
void set_GV(QGraphicsView *GV_ui)
Definition: d_viewer.cpp:49
Ui
Definition: d_analysiswindow.h:58
d_storage.h
c_DIR2D_D
@ c_DIR2D_D
Definition: d_enum.h:2114
D_MAKRO_HuangVisualization::closeEvent
void closeEvent(QCloseEvent *event)
Definition: d_makro_huangvisualization.cpp:79
D_Storage::dir_M_Huang
QDir * dir_M_Huang()
Definition: d_storage.h:92
D_MAKRO_HuangVisualization::D_MAKRO_HuangVisualization
D_MAKRO_HuangVisualization(D_Storage *pStorage, QWidget *parent=nullptr)
Definition: d_makro_huangvisualization.cpp:13
d_opencv_typedefs.h
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_enum.h
d_error_handler.h
D_MAKRO_HuangVisualization
The D_MAKRO_HuangVisualization class visualization of huangs rank order filtering.
Definition: d_makro_huangvisualization.h:67
d_makro_huangvisualization.h
d_visdat_proc.h
D_Img_Proc::Generate_byValueFunction
static int Generate_byValueFunction(Mat *pMA_Out, int width, int height, function< double(double x, double y)> value_function)
Definition: d_img_proc.cpp:332
d_stat.h