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_bio_attribute_filter.h
Go to the documentation of this file.
1 /************************************
2  * added: 12.01.2022 *
3  * author: David Eilenstein *
4  * contact: D.Eilenstein@gsi.de *
5  * project: ImageD *
6  * facility: GSI Darmstadt, Ger *
7  ************************************/
8 
9 #ifndef D_BIO_ATTRIBUTE_FILTER_H
10 #define D_BIO_ATTRIBUTE_FILTER_H
11 
12 //own
13 #include <d_enum.h>
14 #include <d_stat.h>
15 #include <d_bio_enum.h>
16 #include <d_bio_focus.h>
17 #include <d_bio_nucleusblob.h>
18 #include <d_bio_nucleuslife.h>
19 #include <d_math.h>
20 
21 //Qt
22 #include <QObject>
23 #include <QFileDialog>
24 #include <QFileInfo>
25 #include <QFileInfoList>
26 #include <QDir>
27 #include <QInputDialog>
28 #include <QTextStream>
29 #include <QLabel>
30 #include <QGridLayout>
31 #include <QVBoxLayout>
32 #include <QHBoxLayout>
33 #include <QPushButton>
34 #include <QSpinBox>
35 #include <QDoubleSpinBox>
36 #include <QFrame>
37 #include <QComboBox>
38 #include <QCheckBox>
39 #include <QGroupBox>
40 #include <QMessageBox>
41 #include <QFileDialog>
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 class D_Bio_Attribute_Filter : public QWidget
61 {
62  Q_OBJECT
63 public:
64  explicit D_Bio_Attribute_Filter();
65  explicit D_Bio_Attribute_Filter(QGroupBox *ui_box);
66 
67  bool set_ui_groupbox(QGroupBox *ui_box);
68  bool set_filter_mode(size_t mode);
69  bool set_channels(QStringList channels_foc, QStringList channels_val);
70  bool set_ScalePx2Um(double scale);
71  bool set_SaveDir(QDir* pDirSave);
72 
73  bool set_filter(size_t i_filt, bool is_active, size_t i_att, size_t i_comp, size_t i_ch, double thres_val);
74 
75  bool filter_is_active(size_t i_filter);
76  size_t filter_inactive_1st();
77 
78  bool accept_Foc(D_Bio_Focus * pFoc);
79  bool accept_NucBlob(D_Bio_NucleusBlob * pNucBlob);
80  bool accept_NucLife(D_Bio_NucleusLife * pNucLife);
81 
82 public slots:
83 
84  void Filters_Info();
85  void Filters_Clear();
86  bool Filters_Save();
87  bool Filters_Load();
88 
89 private slots:
90 
91  void Filter_CurrentToUi();
92  void Filter_CurrentFromUi();
93  void Filter_UpdateUi_CurrentChannelDependency();
94  void Check_ClearButtonPossible();
95 
96 signals:
98 
99 private:
100  bool Populate_CB_Single(QComboBox *CB, QStringList QSL, int index_init = 0);
101 
102  bool Ui_Init();
103  bool Ui_Init_FilterMode();
104 
105  void Filter_Init();
106 
107  //ui elements
108  QGroupBox* ui_grpbox_master;
109  QGridLayout* ui_layout_master;
110  QFrame* ui_line_v;
111  QSpinBox* ui_spinbox_selctedFilter;
112  QSpinBox* ui_spinbox_activeFilters;
113  QPushButton* ui_button_Save;
114  QPushButton* ui_button_Load;
115  QPushButton* ui_button_Clear;
116  QPushButton* ui_button_Info;
117  QComboBox* ui_combobox_Attribute;
118  QCheckBox* ui_checkbox_Active;
119  QComboBox* ui_combobox_Channels;
120  QComboBox* ui_combobox_Comparison;
121  QDoubleSpinBox* ui_doublespinbox_Thres;
122 
123  //sizes
124  const size_t filter_count = 100;
125  double thres_min = -INFINITY;
126  double thres_max = INFINITY;
127  int thres_decimals = 6;
128 
129  //filter struct
130  struct Filter {
131  bool active = false;
132  size_t i_attrib = 0;
133  size_t i_compare = c_COMPARE_EQUAL;
134  size_t i_channel = 0;
135  double thres = 0;
136  };
137 
138  //filters
139  vector<Filter> vFilters;
140  vector<size_t> vFilterIndicesActive;
141 
142  //states
143  bool state_grpbox_set = false;
144  bool state_ui_init = false;
145  bool state_filter_mode_set = false;
146  bool state_filter_mode_2ui = false;
147  bool state_channels_set = false;
148  bool state_save_dir_set = false;
149 
150  //filter mode
151  size_t filter_mode = ATTRIB_FILTER_MODE_FOCI;
152 
153  //channels
154  QStringList QSL_Channels_Val;
155  QStringList QSL_Channels_Foc;
156 
157  //Attribs
158  QStringList QSL_Attributes;
159 
160  //scaling
161  double scale_px2um = 1;
162  double scale_um2px = 1;
163 
164  //save dir
165  QDir* pDIR_Save;
166 };
167 
168 #endif // D_BIO_ATTRIBUTE_FILTER_H
D_Bio_NucleusLife::attribute_is_focus_channel_dependent
static bool attribute_is_focus_channel_dependent(size_t i_attrib)
Definition: d_bio_nucleuslife.cpp:386
D_Bio_Attribute_Filter::Filters_Save
bool Filters_Save()
Definition: d_bio_attribute_filter.cpp:249
D_Bio_Attribute_Filter::set_ScalePx2Um
bool set_ScalePx2Um(double scale)
Definition: d_bio_attribute_filter.cpp:66
QSL_CompareSimple
const QStringList QSL_CompareSimple
Definition: d_enum.h:1243
D_Bio_Attribute_Filter::set_SaveDir
bool set_SaveDir(QDir *pDirSave)
Definition: d_bio_attribute_filter.cpp:77
d_math.h
d_bio_enum.h
D_Bio_Focus::attribute_is_focus_channel_dependent
static bool attribute_is_focus_channel_dependent(size_t i_attrib)
Definition: d_bio_focus.cpp:125
d_bio_nucleuslife.h
ATTRIB_FILTER_MODE_FOCI
@ ATTRIB_FILTER_MODE_FOCI
Definition: d_bio_enum.h:346
c_COMPARE_EQUAL
@ c_COMPARE_EQUAL
Definition: d_enum.h:1235
QSL_Attrib_Nuc
const QStringList QSL_Attrib_Nuc
Definition: d_bio_enum.h:246
D_Bio_Focus
Definition: d_bio_focus.h:48
D_Bio_Attribute_Filter::Filters_Clear
void Filters_Clear()
Definition: d_bio_attribute_filter.cpp:236
D_Bio_Attribute_Filter::Filters_Info
void Filters_Info()
Definition: d_bio_attribute_filter.cpp:187
D_Bio_NucleusBlob::attribute_is_focus_channel_dependent
static bool attribute_is_focus_channel_dependent(size_t i_attrib)
Definition: d_bio_nucleusblob.cpp:244
D_Bio_NucleusLife::attrib_nuclife
double attrib_nuclife(size_t i_attrib_nuclife)
Definition: d_bio_nucleuslife.cpp:332
D_Bio_Attribute_Filter::accept_Foc
bool accept_Foc(D_Bio_Focus *pFoc)
Definition: d_bio_attribute_filter.cpp:126
ATTRIB_FILTER_MODE_NUC_BLOB
@ ATTRIB_FILTER_MODE_NUC_BLOB
Definition: d_bio_enum.h:347
D_Bio_Attribute_Filter::D_Bio_Attribute_Filter
D_Bio_Attribute_Filter()
Definition: d_bio_attribute_filter.cpp:11
D_Bio_NucleusBlob
Definition: d_bio_nucleusblob.h:46
D_Bio_Focus::attribute_is_value_channel_dependent
static bool attribute_is_value_channel_dependent(size_t i_attrib)
Definition: d_bio_focus.cpp:107
D_Bio_Attribute_Filter::set_channels
bool set_channels(QStringList channels_foc, QStringList channels_val)
Definition: d_bio_attribute_filter.cpp:50
QSL_FilterMode
const QStringList QSL_FilterMode
Definition: d_bio_enum.h:351
D_Bio_Attribute_Filter::set_filter
bool set_filter(size_t i_filt, bool is_active, size_t i_att, size_t i_comp, size_t i_ch, double thres_val)
Definition: d_bio_attribute_filter.cpp:89
D_Bio_Attribute_Filter::set_ui_groupbox
bool set_ui_groupbox(QGroupBox *ui_box)
Definition: d_bio_attribute_filter.cpp:22
D_Bio_Focus::attribute
double attribute(size_t i_attrib, size_t ch_val, double scale_px2um)
Definition: d_bio_focus.cpp:72
ATTRIB_FILTER_MODE_NUMBER_OF
@ ATTRIB_FILTER_MODE_NUMBER_OF
Definition: d_bio_enum.h:349
D_Bio_Attribute_Filter::accept_NucBlob
bool accept_NucBlob(D_Bio_NucleusBlob *pNucBlob)
Definition: d_bio_attribute_filter.cpp:147
ATTRIB_FILTER_MODE_NUC_LIFE
@ ATTRIB_FILTER_MODE_NUC_LIFE
Definition: d_bio_enum.h:348
d_bio_focus.h
QSL_Attrib_NucLife
const QStringList QSL_Attrib_NucLife
Definition: d_bio_enum.h:316
D_Bio_Attribute_Filter
Definition: d_bio_attribute_filter.h:61
D_Math::Compare
static bool Compare(size_t compare_index, double v1, double v2)
Definition: d_math.cpp:1395
QSL_Attrib_Foc
const QStringList QSL_Attrib_Foc
Definition: d_bio_enum.h:179
d_opencv_typedefs.h
D_Bio_Attribute_Filter::set_filter_mode
bool set_filter_mode(size_t mode)
Definition: d_bio_attribute_filter.cpp:35
D_Bio_NucleusLife::attribute_is_value_channel_dependent
static bool attribute_is_value_channel_dependent(size_t i_attrib)
Definition: d_bio_nucleuslife.cpp:400
d_enum.h
d_bio_attribute_filter.h
d_bio_nucleusblob.h
D_Bio_Attribute_Filter::accept_NucLife
bool accept_NucLife(D_Bio_NucleusLife *pNucLife)
Definition: d_bio_attribute_filter.cpp:168
D_Bio_NucleusBlob::attribute_is_value_channel_dependent
static bool attribute_is_value_channel_dependent(size_t i_attrib)
Definition: d_bio_nucleusblob.cpp:226
D_Bio_Attribute_Filter::Filters_Load
bool Filters_Load()
Definition: d_bio_attribute_filter.cpp:324
D_Bio_Attribute_Filter::FilterParamsChanged
void FilterParamsChanged()
D_Bio_NucleusLife
Definition: d_bio_nucleuslife.h:45
D_Bio_Attribute_Filter::filter_inactive_1st
size_t filter_inactive_1st()
Definition: d_bio_attribute_filter.cpp:117
D_Bio_NucleusBlob::attribute
double attribute(size_t i_attrib, size_t ch_val, double scale_px2um)
Definition: d_bio_nucleusblob.cpp:116
D_Bio_Attribute_Filter::filter_is_active
bool filter_is_active(size_t i_filter)
Definition: d_bio_attribute_filter.cpp:112
d_stat.h