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_airdragtrack.h
Go to the documentation of this file.
1 /************************************************
2  * added: 05.06.2020 *
3  * author: David Eilenstein *
4  * contact: David.Eilenstein@stud.h-da.de *
5  * project: ImageD *
6  * facility: Hochschule Darmstadt, Ger *
7  ************************************************/
8 
9 #ifndef D_MAKRO_AIRDRAGTRACK_H
10 #define D_MAKRO_AIRDRAGTRACK_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_videoslicer.h>
21 
22 //Qt
23 #include <QMainWindow>
24 #include <QFileDialog>
25 #include <QFileInfo>
26 #include <QDir>
27 #include <QComboBox>
28 
29 //Qt::Charts
30 #include <QChartView>
31 #include <QChart>
32 #include <QGridLayout>
33 
34 //general
35 #include <iostream>
36 #include <vector>
37 #include <algorithm>
38 
39 //openCV
40 #include <opencv2/core/core.hpp>
41 #include <opencv2/highgui/highgui.hpp>
42 #include <opencv2/imgproc/imgproc.hpp>
43 
44 //namespaces
45 using namespace std;
46 //using namespace cv; (prohibited because of abigous names with qtdatavisualization)
47 #include <d_opencv_typedefs.h>
48 
49 namespace Ui {
51 }
52 
53 class D_MAKRO_AirDragTrack : public QMainWindow
54 {
55  Q_OBJECT
56 
57 public:
58  explicit D_MAKRO_AirDragTrack(D_Storage *pStorage, QWidget *parent = nullptr);
60 
61  void closeEvent(QCloseEvent *event);
62  void resizeEvent(QResizeEvent *event);
63  void set_ClosingPossible(bool closeable) {ClosingPossible = closeable;}
64 
65 private slots:
66  void Data_Add();
67  void Data_Clear();
68  void Data_SelectVideo();
69 
70  void Update_Ui();
71  void Update_Views();
72  void Update_Images();
73  void Update_Image_Proc();
74 
75  void Update_ImgProc_All();
76  void Update_ImgProc(int step_start);
77  void Update_ImgProc_Step(int step);
78 
79  void Update_ImgProc_FullVideo();
80  void CalcAll();
81  void PlotAll();
82  void PlotAllVideos();
83 
84  void Populate_CB_Single(QComboBox *CB, QStringList QSL, int index_init);
85  void Populate_CB_Start();
86 
87  void BlockSignals_FrameSelection(bool block);
88 
89  void on_horizontalSlider_T_Frame_valueChanged(int value);
90  void on_spinBox_T_Frame_valueChanged(int arg1);
91  void on_doubleSpinBox_T_Sec_valueChanged(double arg1);
92 
93  void on_comboBox_ProcStep_currentIndexChanged(int index);
94 
95  void on_spinBox_CropStart_valueChanged(int arg1);
96 
97  void on_spinBox_CropEnd_valueChanged(int arg1);
98 
99  void on_pushButton_ProcVideo_clicked();
100 
101  void on_pushButton_ProcAllVideos_clicked();
102 
103  void on_action_View_Results_Big_triggered(bool checked);
104 
105  void on_action_Save_Screenshot_Full_Window_triggered();
106 
107 private:
108  Ui::D_MAKRO_AirDragTrack *ui;
109  bool ClosingPossible = false;
110 
111  //Storage
112  D_Storage *pStore;
113 
114  //states
115  bool state_video_valid = false;
116  bool state_frame_img_proc_ready = false;
117  bool state_video_analysed = false;
118 
119  //Files
120  QFileInfoList FIL_Videos;
121  QStringList QSL_Videos_Names;
122  QStringList QSL_Videos_Paths;
123  QStringList QSL_Videos_Suffix;
124 
125  //Video
126  D_VideoSlicer VS_Video;
127 
128  //Data
129  vector<vector<Point2f>> vv_CentersVF;
130  double F_start = 0;
131  double F_end = 0;
132  vector<vector<vector<double>>> vvv_PositionsVSF;
133 
134  //proc
135  vector<Mat> vMA_ProcSteps;
136 
137  //viewer
138  D_Viewer Viewer_Proc_Crop;
139  D_Viewer Viewer_Proc_Gray;
140  D_Viewer Viewer_Proc_Blur;
141  D_Viewer Viewer_Proc_Thresh;
142  D_Viewer Viewer_Proc_ExBorder;
143 
144  //plot
145  const size_t S_Count = 5; //s and 1st-4th derviate of s (v,a,...)
146  vector<QGridLayout*> vPLot_Grids_S;
147  vector<QChartView*> vPlot_ChartViews_S;
148  QStringList QSL_S_Names = {"location", "speed", "accelaration", "change of acceleration", "change of change of acceleration"};
149  QChartView* Plot_Results;
150 
151  //error handling
152  D_Error_Handler ER;
153  void ERR(int err, QString func = "not specified", QString detail = "not specified");
154 
155  //CONSTANTS
156  enum PROC_STEPS {
157  STEP_LOAD,
158  STEP_CROP,
159  STEP_GRAY,
160  STEP_BLUR,
161  STEP_BINARY,
162  STEP_EXCLUDE_BORDER,
163  STEP_NUMBER_OF
164  };
165  const QStringList QSL_ProcSteps = {
166  "Load Image",
167  "Crop",
168  "Gray",
169  "Blur",
170  "Binary",
171  "Exclude Border"
172  };
173 };
174 
175 #endif // D_MAKRO_AIRDRAGTRACK_H
ER_okay
@ ER_okay
Definition: d_enum.h:133
D_Img_Proc::Crop_Rect_Abs
static int Crop_Rect_Abs(Mat *pMA_Out, Mat *pMA_In, int x, int y, int width, int height)
Definition: d_img_proc.cpp:5514
D_Viewer::Update_View
void Update_View()
D_Viewer::Update_View Starts the workflow to show an image.
Definition: d_viewer.cpp:2096
c_COL2MONO_RED
@ c_COL2MONO_RED
Definition: d_enum.h:654
D_MAKRO_AirDragTrack::closeEvent
void closeEvent(QCloseEvent *event)
Definition: d_makro_airdragtrack.cpp:96
d_viewer.h
d_plot.h
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_VideoSlicer::get_FramePos
Mat get_FramePos(int frame_number)
Definition: d_videoslicer.cpp:95
D_Storage::dir_Save
QDir * dir_Save()
Definition: d_storage.h:69
D_VideoSlicer::get_Height
int get_Height()
Definition: d_videoslicer.h:83
D_Viewer::Update_Image
void Update_Image(Mat *MA_new)
D_Viewer::Update_Image Set and show image.
Definition: d_viewer.cpp:2079
D_Img_Proc::Exclude_BorderConnected
static int Exclude_BorderConnected(Mat *pMA_Out, Mat *pMA_In)
Definition: d_img_proc.cpp:12318
D_Storage::set_dir_Save
void set_dir_Save(QString path)
Definition: d_storage.h:97
D_VideoSlicer
The D_VideoSlicer class Extracts frames from videos as images.
Definition: d_videoslicer.h:54
D_VideoSlicer::set_VideoPath
int set_VideoPath(string S_VideoPath)
Definition: d_videoslicer.cpp:31
D_VideoSlicer::get_Width
int get_Width()
Definition: d_videoslicer.h:82
D_MAKRO_AirDragTrack::resizeEvent
void resizeEvent(QResizeEvent *event)
Definition: d_makro_airdragtrack.cpp:109
D_VideoSlicer::get_FrameRateFps
double get_FrameRateFps()
Definition: d_videoslicer.h:75
D_Storage::set_dir_M_CiliaSphereTracker
void set_dir_M_CiliaSphereTracker(QString path)
Definition: d_storage.h:115
d_img_proc.h
QSL_Color2Mono
const QStringList QSL_Color2Mono
Definition: d_enum.h:667
D_VideoSlicer::get_FrameTimeSec
double get_FrameTimeSec()
Definition: d_videoslicer.h:77
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_MAKRO_AirDragTrack::set_ClosingPossible
void set_ClosingPossible(bool closeable)
Definition: d_makro_airdragtrack.h:63
D_Plot::Plot_Line_XY_Multi
static int Plot_Line_XY_Multi(QChartView *pChartView, vector< vector< double >> vv_XY_Data, QString name_title, QString name_series, QString name_x, QString name_y, int x_trans=c_AXE_TRANS_LIN, int y_trans=c_AXE_TRANS_LIN, bool dots_visible=false, bool heat_color=false, bool heat_color_AllColors=false, Qt::Alignment legend_pos=Qt::AlignTop)
D_MAKRO_AirDragTrack::D_MAKRO_AirDragTrack
D_MAKRO_AirDragTrack(D_Storage *pStorage, QWidget *parent=nullptr)
Definition: d_makro_airdragtrack.cpp:12
D_Viewer::set_GV
void set_GV(QGraphicsView *GV_ui)
Definition: d_viewer.cpp:49
D_Plot::Plot_Empty
static int Plot_Empty(QChartView *pChartView, QString QS_Text="No_Additional_Information")
Definition: d_plot.cpp:16
Ui
Definition: d_analysiswindow.h:58
D_Component_List
The D_Component_List class is a list of D_Component representing the blobs in a binary image.
Definition: d_component_list.h:46
d_storage.h
D_VideoSlicer::get_DurationSec
double get_DurationSec()
Definition: d_videoslicer.h:79
D_Plot::Plot_Line_XY_Single
static int Plot_Line_XY_Single(QChartView *pChartView, vector< double > v_XY_Data, QString name_title, QString name_series, QString name_x, QString name_y, int x_trans=c_AXE_TRANS_LIN, int y_trans=c_AXE_TRANS_LIN, bool dots_visible=false, bool man_axis_style_x=false, bool man_axis_style_y=false, double man_min_x=0, double man_max_x=1, double man_min_y=0, double man_max_y=1, int ticks_x=AXE_TICK_COUNT_MAJOR_DEFAULT, int ticks_y=AXE_TICK_COUNT_MAJOR_DEFAULT)
Definition: d_plot.cpp:3432
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_videoslicer.h
d_opencv_typedefs.h
d_enum.h
d_error_handler.h
BORDER_DEFAULT
const int BORDER_DEFAULT
Definition: d_opencv_typedefs.h:78
D_Storage::dir_M_CiliaSphereTracker
QDir * dir_M_CiliaSphereTracker()
Definition: d_storage.h:87
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_MAKRO_AirDragTrack
Definition: d_makro_airdragtrack.h:54
D_Img_Proc::Convert_Color2Mono
static int Convert_Color2Mono(Mat *pMA_Out, Mat *pMA_In, int col2mono_code)
Definition: d_img_proc.cpp:2662
d_makro_airdragtrack.h
c_FEAT_AREA
@ c_FEAT_AREA
Definition: d_enum.h:1347
D_VideoSlicer::get_FrameCount
long int get_FrameCount()
Definition: d_videoslicer.h:81
d_stat.h
D_MAKRO_AirDragTrack::~D_MAKRO_AirDragTrack
~D_MAKRO_AirDragTrack()
Definition: d_makro_airdragtrack.cpp:91