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_focus.h
Go to the documentation of this file.
1 /************************************
2  * added: 04.01.2021 *
3  * author: David Eilenstein *
4  * contact: D.Eilenstein@gsi.de *
5  * project: ImageD *
6  * facility: GSI Darmstadt, Ger *
7  ************************************/
8 
9 #ifndef D_BIO_FOCUS_H
10 #define D_BIO_FOCUS_H
11 
12 //own
13 #include <d_enum.h>
14 #include <d_stat.h>
15 #include <d_bio_enum.h>
16 #include <d_math.h>
17 
18 //Qt
19 #include <QFileDialog>
20 #include <QFileInfo>
21 #include <QFileInfoList>
22 #include <QDir>
23 #include <QDateTime>
24 #include <QInputDialog>
25 #include <QTextStream>
26 
27 //general
28 #include <iostream>
29 #include <sstream>
30 #include <fstream>
31 #include <vector>
32 #include <algorithm>
33 
34 //openCV
35 #include <opencv2/core/core.hpp>
36 #include <opencv2/highgui/highgui.hpp>
37 #include <opencv2/imgproc/imgproc.hpp>
38 
39 //namespaces
40 using namespace std;
41 //using namespace cv; (prohibited because of abigous names with qtdatavisualization)
42 #include <d_opencv_typedefs.h>
43 
44 //forward declaration of nuc (needed for some attrib calculation)
45 class D_Bio_NucleusBlob;
46 
48 {
49 public:
50  D_Bio_Focus();
51  //D_Bio_Focus(QString QS_PathLoad);
52  D_Bio_Focus(vector<Point> contour_points, Point Offset = Point(0, 0));
53  D_Bio_Focus(vector<Point> contour_points, vector<vector<double>> SignalStats_StatChannel, Point Offset = Point(0, 0));
54  D_Bio_Focus(Point2f centroid, double area, double compactness, double convexity, vector<vector<double>> SignalStats_StatChannel, size_t ch_detected_in);
55 
56  void set_detected_in_channel(size_t ch_detected) {m_channel_detected_in = ch_detected;}
57  void set_value_channels(size_t channels) {vvSignalStats_StatChannel.resize(VAL_STAT_NUMBER_OF, vector<double>(channels, 0));}
58  //void set_values_stat(size_t stat_local_id, vector<double> vSignals_Stat);
59  //void set_values_medians(vector<double> vMedian) {vvSignalStats[VAL_STAT_MEDIAN] = vMedian;}
60  //void set_values_devs2med(vector<double> vMedDev) {vSignalMedDevs = vMedDev;}
61  //void set_value_median(size_t channel, double Median) {if(channel < vSignalMedians.size()) vSignalMedians[channel] = Median;}
62  //void set_value_dev2med(size_t channel, double MedDev){if(channel < vSignalMedDevs.size()) vSignalMedDevs[channel] = MedDev;}
63 
64  void set_pNucOwner(D_Bio_NucleusBlob* owner) {pNucOwner = owner;}
65  D_Bio_NucleusBlob* get_pNucOwner() {return pNucOwner;}
66 
67  double attribute(size_t i_attrib, size_t ch_val, double scale_px2um);
68  static bool attribute_is_value_channel_dependent(size_t i_attrib);
69  static bool attribute_is_focus_channel_dependent(size_t i_attrib);
70 
71  Point2f centroid() {return m_centroid;}
72  double area() {return m_area;}
73  double compactness() {return m_compactness;}
74  double convexity() {return m_convexity;}
75  double radius_circle_equivalent() {return sqrt(m_area / PI);}
76 
77  double overlap_area(D_Bio_Focus* pFocOther);
78  double overlap_area_any_focus(size_t ch_foc);
79  double overlap_area_any_focus();
80 
81  double dist2centroid(Point2f point) {return norm(point - m_centroid);}
82  double dist2contour_circle_equivalent(Point2f point) {return dist2centroid(point) - radius_circle_equivalent();}
83  bool contains_point(Point P, double margin = 0) {return dist2contour_circle_equivalent(P) <= margin;}
84 
85  size_t channels();
86  double signal_stat(size_t channel, size_t stat_local_id);
87  double signal_median(size_t channel) {return signal_stat(channel, VAL_STAT_MEDIAN);}
88  double signal_dev2med(size_t channel) {return signal_stat(channel, VAL_STAT_MEDIAN_DEVIATION);}
89 
90  //int save(QString path);
91 
92 private:
93 
94  //bool load(QString QS_PathLoad);
95 
96  bool state_feats_calced = false;
97  void CalcFeats(vector<Point> contour);
98 
99  Point2f m_centroid = Point2f(0, 0);
100  double m_area = 0;
101  double m_compactness = 0;
102  double m_convexity = 0;
103 
104  size_t m_channel_detected_in = 0;
105 
106  vector<vector<double>> vvSignalStats_StatChannel = vector<vector<double>>(VAL_STAT_NUMBER_OF, vector<double>(1, 0));
107 
108  D_Bio_NucleusBlob* pNucOwner = nullptr;
109 };
110 
111 #endif // D_BIO_FOCUS_H
ATTRIB_FOC_DETECTED_IN_CH
@ ATTRIB_FOC_DETECTED_IN_CH
Definition: d_bio_enum.h:176
D_Bio_Focus::signal_stat
double signal_stat(size_t channel, size_t stat_local_id)
Definition: d_bio_focus.cpp:219
VAL_STAT_STD
@ VAL_STAT_STD
Definition: d_bio_enum.h:79
ATTRIB_FOC_OVERLAP_FOCI_CHANNELS_OTHER_REL
@ ATTRIB_FOC_OVERLAP_FOCI_CHANNELS_OTHER_REL
Definition: d_bio_enum.h:175
D_Math::Distance
static double Distance(Point pt1, Point pt2)
Definition: d_math.cpp:1511
d_math.h
Point2f
cv::Point2f Point2f
Definition: d_opencv_typedefs.h:37
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_Focus::area
double area()
Definition: d_bio_focus.h:72
D_Bio_NucleusBlob::get_FociChannels
size_t get_FociChannels()
Definition: d_bio_nucleusblob.h:67
ATTRIB_FOC_ABSDEVMED_CHX
@ ATTRIB_FOC_ABSDEVMED_CHX
Definition: d_bio_enum.h:169
ATTRIB_FOC_OVERLAP_FOCI_CHANNEL_PX
@ ATTRIB_FOC_OVERLAP_FOCI_CHANNEL_PX
Definition: d_bio_enum.h:170
D_Bio_Focus::signal_dev2med
double signal_dev2med(size_t channel)
Definition: d_bio_focus.h:88
ATTRIB_FOC_MEAN_CHX
@ ATTRIB_FOC_MEAN_CHX
Definition: d_bio_enum.h:164
PI
const double PI
Definition: d_enum.h:2534
ATTRIB_FOC_COMPACTNESS
@ ATTRIB_FOC_COMPACTNESS
Definition: d_bio_enum.h:162
D_Bio_NucleusBlob::get_pFocus
D_Bio_Focus * get_pFocus(size_t channel, size_t index)
Definition: d_bio_nucleusblob.h:72
D_Bio_Focus
Definition: d_bio_focus.h:48
D_Bio_Focus::signal_median
double signal_median(size_t channel)
Definition: d_bio_focus.h:87
D_Bio_Focus::D_Bio_Focus
D_Bio_Focus()
Definition: d_bio_focus.cpp:13
ATTRIB_FOC_AREA_UM
@ ATTRIB_FOC_AREA_UM
Definition: d_bio_enum.h:160
ATTRIB_FOC_CENTER_X_PX
@ ATTRIB_FOC_CENTER_X_PX
Definition: d_bio_enum.h:155
ATTRIB_FOC_OVERLAP_FOCI_CHANNEL_REL
@ ATTRIB_FOC_OVERLAP_FOCI_CHANNEL_REL
Definition: d_bio_enum.h:172
VAL_STAT_NUMBER_OF
@ VAL_STAT_NUMBER_OF
Definition: d_bio_enum.h:84
D_Bio_NucleusBlob::get_FociCount
size_t get_FociCount(size_t channel)
Definition: d_bio_nucleusblob.h:69
ATTRIB_FOC_CENTER_Y_UM
@ ATTRIB_FOC_CENTER_Y_UM
Definition: d_bio_enum.h:158
VAL_STAT_SKEW
@ VAL_STAT_SKEW
Definition: d_bio_enum.h:80
ATTRIB_FOC_CENTER_X_UM
@ ATTRIB_FOC_CENTER_X_UM
Definition: d_bio_enum.h:156
D_Bio_Focus::radius_circle_equivalent
double radius_circle_equivalent()
Definition: d_bio_focus.h:75
Point
cv::Point Point
Definition: d_opencv_typedefs.h:35
VAL_STAT_COUNT
@ VAL_STAT_COUNT
Definition: d_bio_enum.h:77
Moments
cv::Moments Moments
Definition: d_opencv_typedefs.h:72
D_Bio_Focus::convexity
double convexity()
Definition: d_bio_focus.h:74
D_Bio_Focus::centroid
Point2f centroid()
Definition: d_bio_focus.h:71
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_Focus::set_pNucOwner
void set_pNucOwner(D_Bio_NucleusBlob *owner)
Definition: d_bio_focus.h:64
VAL_STAT_MEAN
@ VAL_STAT_MEAN
Definition: d_bio_enum.h:78
ATTRIB_FOC_MEDIAN_CHX
@ ATTRIB_FOC_MEDIAN_CHX
Definition: d_bio_enum.h:168
D_Math::AreaOverlapCircles
static double AreaOverlapCircles(double r1, double r2, double d)
D_Math::AreaOverlapCircles.
Definition: d_math.cpp:1653
D_Bio_Focus::overlap_area
double overlap_area(D_Bio_Focus *pFocOther)
Definition: d_bio_focus.cpp:139
D_Bio_Focus::attribute
double attribute(size_t i_attrib, size_t ch_val, double scale_px2um)
Definition: d_bio_focus.cpp:72
ATTRIB_FOC_CONVEXITY
@ ATTRIB_FOC_CONVEXITY
Definition: d_bio_enum.h:161
VAL_STAT_KURTOSIS
@ VAL_STAT_KURTOSIS
Definition: d_bio_enum.h:81
D_Bio_Focus::overlap_area_any_focus
double overlap_area_any_focus()
Definition: d_bio_focus.cpp:199
D_Bio_Focus::D_Bio_Focus
D_Bio_Focus(vector< Point > contour_points, vector< vector< double >> SignalStats_StatChannel, Point Offset=Point(0, 0))
d_bio_focus.h
ATTRIB_FOC_CENTER_Y_PX
@ ATTRIB_FOC_CENTER_Y_PX
Definition: d_bio_enum.h:157
ATTRIB_FOC_COUNT_CHX
@ ATTRIB_FOC_COUNT_CHX
Definition: d_bio_enum.h:163
PI_4_0
const double PI_4_0
Definition: d_enum.h:2536
D_Bio_Focus::channels
size_t channels()
Definition: d_bio_focus.cpp:211
D_Bio_Focus::contains_point
bool contains_point(Point P, double margin=0)
Definition: d_bio_focus.h:83
ATTRIB_FOC_AREA_PX
@ ATTRIB_FOC_AREA_PX
Definition: d_bio_enum.h:159
VAL_STAT_MEDIAN_DEVIATION
@ VAL_STAT_MEDIAN_DEVIATION
Definition: d_bio_enum.h:83
ATTRIB_FOC_NUMBER_OF
@ ATTRIB_FOC_NUMBER_OF
Definition: d_bio_enum.h:177
ATTRIB_FOC_OVERLAP_FOCI_CHANNELS_OTHER_UM
@ ATTRIB_FOC_OVERLAP_FOCI_CHANNELS_OTHER_UM
Definition: d_bio_enum.h:174
ATTRIB_FOC_KURTOSIS_CHX
@ ATTRIB_FOC_KURTOSIS_CHX
Definition: d_bio_enum.h:167
d_opencv_typedefs.h
ATTRIB_FOC_SKEWNESS_CHX
@ ATTRIB_FOC_SKEWNESS_CHX
Definition: d_bio_enum.h:166
D_Bio_Focus::get_pNucOwner
D_Bio_NucleusBlob * get_pNucOwner()
Definition: d_bio_focus.h:65
d_enum.h
d_bio_nucleusblob.h
VAL_STAT_MEDIAN
@ VAL_STAT_MEDIAN
Definition: d_bio_enum.h:82
ATTRIB_FOC_STD_CHX
@ ATTRIB_FOC_STD_CHX
Definition: d_bio_enum.h:165
ATTRIB_FOC_OVERLAP_FOCI_CHANNEL_UM
@ ATTRIB_FOC_OVERLAP_FOCI_CHANNEL_UM
Definition: d_bio_enum.h:171
D_Bio_Focus::dist2centroid
double dist2centroid(Point2f point)
Definition: d_bio_focus.h:81
D_Bio_Focus::set_value_channels
void set_value_channels(size_t channels)
Definition: d_bio_focus.h:57
D_Bio_Focus::dist2contour_circle_equivalent
double dist2contour_circle_equivalent(Point2f point)
Definition: d_bio_focus.h:82
ATTRIB_FOC_OVERLAP_FOCI_CHANNELS_OTHER_PX
@ ATTRIB_FOC_OVERLAP_FOCI_CHANNELS_OTHER_PX
Definition: d_bio_enum.h:173
d_stat.h
D_Bio_Focus::compactness
double compactness()
Definition: d_bio_focus.h:73
D_Bio_Focus::set_detected_in_channel
void set_detected_in_channel(size_t ch_detected)
Definition: d_bio_focus.h:56