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_nucleusimage.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_NUCLEUSIMAGE_H
10 #define D_BIO_NUCLEUSIMAGE_H
11 
12 //own
13 #include <d_enum.h>
14 #include <d_stat.h>
15 #include <d_math.h>
16 #include <d_bio_nucleusblob.h>
17 #include <d_bio_focus.h>
18 #include <d_visdat_obj.h>
19 #include <d_visdat_proc.h>
20 #include <d_component_list.h>
21 #include <d_bio_enum.h>
22 #include <d_contour.h>
23 
24 //Qt
25 #include <QFileDialog>
26 #include <QFileInfo>
27 #include <QFileInfoList>
28 #include <QDir>
29 #include <QDateTime>
30 #include <QInputDialog>
31 
32 //general
33 #include <iostream>
34 #include <sstream>
35 #include <fstream>
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 
50 {
51 public:
53  D_Bio_NucleusImage(vector<D_Bio_NucleusImage> vNucImgs2Merge, Point P_Offset_coordinates, Point P_Offset_mosaicgrid, size_t time);
54  D_Bio_NucleusImage(Point P_Offset_coordinates, Point P_Offset_mosaicgrid, size_t time);
55  D_Bio_NucleusImage(Mat *pMA_NucleiBinary, vector<Mat> *pvMA_FociBinary, vector<Mat> *pvMA_Values, Point P_Offset_coordinates = Point(0, 0), Point P_Offset_mosaicgrid = Point(0, 0), size_t time = 0, int neighborhood = 4, bool blockSave_StichBorder_BottomRight = false, size_t block_x_right = INFINITY, size_t block_y_bottom = INFINITY);
56  D_Bio_NucleusImage(D_VisDat_Obj *pVD_NucleiBinary, vector<D_VisDat_Obj> *pvVD_FociBinary, vector<D_VisDat_Obj> *pvVD_Values, Point P_Offset_coordinates = Point(0, 0), Point P_Offset_mosaicgrid = Point(0, 0), size_t time = 0, int neighborhood = 4, bool blockSave_StichBorder_BottomRight = false, size_t block_x_right = INFINITY, size_t block_y_bottom = INFINITY);
57  D_Bio_NucleusImage(vector<D_VisDat_Obj> *pvVD_Images, size_t index_NucleiBinary, vector<size_t> vIndices_FociBinary, vector<size_t> vIndices_Values, Point P_Offset_coordinates = Point(0, 0), Point P_Offset_mosaicgrid = Point(0, 0), size_t time = 0, int neighborhood = 4, bool blockSave_StichBorder_BottomRight = false, size_t block_x_right = INFINITY, size_t block_y_bottom = INFINITY);
58 
59  int calc_NucleiDecomposition(D_VisDat_Obj *pVD_NucleiBinary, vector<D_VisDat_Obj> *pvVD_FociBinary, vector<D_VisDat_Obj> *pvVD_Values, Point P_Offset_coordinates = Point(0, 0), Point P_Offset_mosaicgrid = Point(0, 0), size_t time = 0, int neighborhood = 4, bool blockSave_StichBorder_BottomRight = false, size_t block_x_right = INFINITY, size_t block_y_bottom = INFINITY);
60  int calc_NucleiDecomposition(vector<D_VisDat_Obj> *pvVD_Images, size_t index_NucleiBinary, vector<size_t> vIndices_FociBinary, vector<size_t> vIndices_Values, Point P_Offset_coordinates = Point(0, 0), Point P_Offset_mosaicgrid = Point(0, 0), size_t time = 0, int neighborhood = 4, bool blockSave_StichBorder_BottomRight = false, size_t block_x_right = INFINITY, size_t block_y_bottom = INFINITY);
61  int calc_NucleiDecomposition(Mat *pMA_NucleiBinary, vector<Mat> *pvMA_FociBinary, vector<Mat> *pvMA_Values, Point P_Offset_coordinates = Point(0, 0), Point P_Offset_mosaicgrid = Point(0, 0), size_t time = 0, int neighborhood = 4, bool blockSave_StichBorder_BottomRight = false, size_t block_x_right = INFINITY, size_t block_y_bottom = INFINITY);
62 
63  int load(QString path, bool foci_are_part_of_nuc_files);
64  int load_foci(QFileInfoList FIL_foci);
65  int save(QString path, bool save_foci_in_nuclei, bool save_foci_separate, bool save_name_mosaic_not_coordiante);
66  int save_PathExactDir(QString path, bool save_foci_in_nuclei, bool save_foci_separate, size_t x, size_t y, size_t t);
67 
68  void set_OffsetMosaicGrid(Point OffsetMosaicGrid) {m_Offset_Grid = OffsetMosaicGrid;}
69  void set_OffsetPixels(Point OffsetPixels) {m_Offset_Coord = OffsetPixels;}
70 
71  int get_Contours_append(vector<vector<Point>> *pvScaledContours, double scale);
72  vector<Point2f> get_Centroids(double scale, Point2f scaled_offset);
73  int get_Centroids_append(vector<Point2f> *pvScaledCentroids, double scale);
74  QStringList get_FociCounts();
75  int get_FociCount_append(QStringList *pQSL_FociCounts);
76  int get_ShapeInfo_append(QStringList *pQSL_ShapeInfo);
77  int get_ChannelStat_append(QStringList *pQSL_Stat, size_t stat_index_bio_enum);
78 
79  vector<D_Contour> get_nuclei_contour_objects();
80  void get_nuclei_contour_objects_append(vector<D_Contour> *pvContours);
81 
82  size_t get_nuclei_count() {return vNuclei.size();}
83  size_t get_foci_channel_count() {return vvFoci.size();}
84  size_t get_foci_count(size_t foci_channel) {return foci_channel < get_foci_channel_count() ? vvFoci[foci_channel].size() : 0;}
85 
86  vector<vector<Point>> get_nuclei_contours(double scale = 1, Point scaled_offset = Point(0, 0));
87  vector<Point2f> get_nuclei_centers(double scale = 1, Point scaled_offset = Point(0, 0));
88  vector<Point2f> get_foci_centers(size_t channel, double scale = 1, Point scaled_offset = Point(0, 0));
89  vector<double> get_foci_radii(size_t channel, double scale = 1);
90  vector<double> get_foci_diameters(size_t channel, double scale = 1);
91 
92  vector<D_Bio_NucleusBlob> get_nuclei() {return vNuclei;}
93  D_Bio_NucleusBlob get_nucleus(size_t nuc) {return nuc < vNuclei.size() ? vNuclei[nuc] : D_Bio_NucleusBlob();}
94  D_Bio_Focus get_focus(size_t ch, size_t foc) {return ch < vvFoci.size() ? (foc < vvFoci[ch].size() ? (vvFoci[ch][foc]) : (D_Bio_Focus())) : (D_Bio_Focus());}
95 
96  QString info();
97 
98  void add_focus (size_t channel, D_Bio_Focus Foc);
99  void add_foci (size_t channel, vector<D_Bio_Focus> vFoc);
100  void add_nucleus (D_Bio_NucleusBlob Nuc);
101  void add_nuclei (vector<D_Bio_NucleusBlob> vNuc);
102 
103  bool remove_focus (Point P, size_t channel, double margin = 0);
104  void remove_foci (vector<Point> vP, size_t channel, double margin = 0);
105  bool remove_nucleus (Point P, double margin = 0);
106  void remove_nuclei (vector<Point> vP, double margin = 0);
107  void remove_nuclei_foci_all ();
108  void remove_foci_all ();
109  void remove_nuclei_all ();
110  void remove_nuclei_dulicates (vector<D_Bio_NucleusImage> vNucImgOther, double min_rel_intersection_for_remove = 0.5);
111 
112 private:
113 
114  bool load_focus(D_Bio_Focus *FocusLoad, QTextStream *pTS_FociChannel);
115 
116  size_t m_time = 0;
117  Point m_Offset_Coord = Point(0, 0);
118  Point m_Offset_Grid = Point(0, 0);
119  vector<D_Bio_NucleusBlob> vNuclei;
120  vector<vector<D_Bio_Focus>> vvFoci;
121 };
122 
123 #endif // D_BIO_NUCLEUSIMAGE_H
Mat
cv::Mat Mat
Definition: d_opencv_typedefs.h:28
QSL_Errors
const QStringList QSL_Errors
Definition: d_enum.h:183
ER_okay
@ ER_okay
Definition: d_enum.h:133
QSL_FileSubsections
const QStringList QSL_FileSubsections
Definition: d_bio_enum.h:34
D_Bio_NucleusImage::get_foci_count
size_t get_foci_count(size_t foci_channel)
Definition: d_bio_nucleusimage.h:84
D_Bio_NucleusImage::get_nuclei_centers
vector< Point2f > get_nuclei_centers(double scale=1, Point scaled_offset=Point(0, 0))
Definition: d_bio_nucleusimage.cpp:888
D_Bio_Focus::signal_stat
double signal_stat(size_t channel, size_t stat_local_id)
Definition: d_bio_focus.cpp:219
FILE_SUBSECTION_MEAN
@ FILE_SUBSECTION_MEAN
Definition: d_bio_enum.h:55
VAL_STAT_STD
@ VAL_STAT_STD
Definition: d_bio_enum.h:79
D_Bio_NucleusImage::remove_nuclei_all
void remove_nuclei_all()
Definition: d_bio_nucleusimage.cpp:1059
D_Bio_NucleusImage::get_foci_radii
vector< double > get_foci_radii(size_t channel, double scale=1)
Definition: d_bio_nucleusimage.cpp:925
d_math.h
D_Bio_NucleusImage::remove_foci
void remove_foci(vector< Point > vP, size_t channel, double margin=0)
Definition: d_bio_nucleusimage.cpp:1009
Point2f
cv::Point2f Point2f
Definition: d_opencv_typedefs.h:37
D_Bio_NucleusImage::get_nuclei
vector< D_Bio_NucleusBlob > get_nuclei()
Definition: d_bio_nucleusimage.h:92
d_bio_enum.h
D_Component_List::size
size_t size()
Definition: d_component_list.h:94
FILE_SUBSECTION_POSITION
@ FILE_SUBSECTION_POSITION
Definition: d_bio_enum.h:61
D_Bio_Focus::area
double area()
Definition: d_bio_focus.h:72
ER_size_missmatch
@ ER_size_missmatch
Definition: d_enum.h:141
D_Bio_NucleusImage::get_focus
D_Bio_Focus get_focus(size_t ch, size_t foc)
Definition: d_bio_nucleusimage.h:94
D_Bio_NucleusImage::get_nuclei_contour_objects_append
void get_nuclei_contour_objects_append(vector< D_Contour > *pvContours)
Definition: d_bio_nucleusimage.cpp:859
D_Bio_NucleusImage::calc_NucleiDecomposition
int calc_NucleiDecomposition(D_VisDat_Obj *pVD_NucleiBinary, vector< D_VisDat_Obj > *pvVD_FociBinary, vector< D_VisDat_Obj > *pvVD_Values, Point P_Offset_coordinates=Point(0, 0), Point P_Offset_mosaicgrid=Point(0, 0), size_t time=0, int neighborhood=4, bool blockSave_StichBorder_BottomRight=false, size_t block_x_right=INFINITY, size_t block_y_bottom=INFINITY)
Definition: d_bio_nucleusimage.cpp:52
c_STAT_ABS_DEV_MED
@ c_STAT_ABS_DEV_MED
Definition: d_enum.h:775
ER_file_not_exist
@ ER_file_not_exist
Definition: d_enum.h:161
D_VisDat_Proc::Read_2D_Plane
static int Read_2D_Plane(Mat *pMA_Out, D_VisDat_Obj *pVD_In, D_VisDat_Slice_2D InPlane)
Definition: d_visdat_proc.cpp:2946
D_Bio_NucleusImage::get_Contours_append
int get_Contours_append(vector< vector< Point >> *pvScaledContours, double scale)
Definition: d_bio_nucleusimage.cpp:783
D_Bio_NucleusImage::get_nuclei_contour_objects
vector< D_Contour > get_nuclei_contour_objects()
Definition: d_bio_nucleusimage.cpp:849
D_Bio_NucleusBlob::set_FociChannels
void set_FociChannels(size_t channels)
Definition: d_bio_nucleusblob.h:56
D_Bio_NucleusImage::get_Centroids_append
int get_Centroids_append(vector< Point2f > *pvScaledCentroids, double scale)
Definition: d_bio_nucleusimage.cpp:840
D_Bio_Focus
Definition: d_bio_focus.h:48
D_Bio_NucleusImage::remove_nuclei
void remove_nuclei(vector< Point > vP, double margin=0)
Definition: d_bio_nucleusimage.cpp:1041
D_Bio_NucleusImage::remove_foci_all
void remove_foci_all()
Definition: d_bio_nucleusimage.cpp:1053
D_Bio_NucleusImage::add_focus
void add_focus(size_t channel, D_Bio_Focus Foc)
Definition: d_bio_nucleusimage.cpp:953
D_Bio_NucleusImage::get_foci_channel_count
size_t get_foci_channel_count()
Definition: d_bio_nucleusimage.h:83
FILE_SUBSECTION_MEDIAN_DEVIATION
@ FILE_SUBSECTION_MEDIAN_DEVIATION
Definition: d_bio_enum.h:60
FILE_SUBSECTION_FOCUS_END
@ FILE_SUBSECTION_FOCUS_END
Definition: d_bio_enum.h:53
FILE_SECTION_NUMBER_OF
@ FILE_SECTION_NUMBER_OF
Definition: d_bio_enum.h:30
D_Component_List::get_pMatLabels
Mat * get_pMatLabels()
Definition: d_component_list.h:67
FILE_SUBSECTION_SKEW
@ FILE_SUBSECTION_SKEW
Definition: d_bio_enum.h:57
D_Bio_NucleusImage::remove_nucleus
bool remove_nucleus(Point P, double margin=0)
Definition: d_bio_nucleusimage.cpp:1016
D_Bio_NucleusImage::get_FociCount_append
int get_FociCount_append(QStringList *pQSL_FociCounts)
Definition: d_bio_nucleusimage.cpp:801
FILE_SUBSECTION_KURTOSIS
@ FILE_SUBSECTION_KURTOSIS
Definition: d_bio_enum.h:58
VAL_STAT_NUMBER_OF
@ VAL_STAT_NUMBER_OF
Definition: d_bio_enum.h:84
D_VisDat_Obj
The D_VisDat_Obj class Represents a 6D image.
Definition: d_visdat_obj.h:51
FILE_SUBSECTION_SHAPE
@ FILE_SUBSECTION_SHAPE
Definition: d_bio_enum.h:62
D_Bio_NucleusImage::get_nuclei_count
size_t get_nuclei_count()
Definition: d_bio_nucleusimage.h:82
c_STAT_COUNT
@ c_STAT_COUNT
Definition: d_enum.h:734
VAL_STAT_SKEW
@ VAL_STAT_SKEW
Definition: d_bio_enum.h:80
D_Bio_NucleusImage::info
QString info()
Definition: d_bio_nucleusimage.cpp:943
D_Bio_NucleusImage::get_nucleus
D_Bio_NucleusBlob get_nucleus(size_t nuc)
Definition: d_bio_nucleusimage.h:93
Point
cv::Point Point
Definition: d_opencv_typedefs.h:35
ER_bitdepth_bad
@ ER_bitdepth_bad
Definition: d_enum.h:138
VAL_STAT_COUNT
@ VAL_STAT_COUNT
Definition: d_bio_enum.h:77
D_Bio_NucleusImage::load
int load(QString path, bool foci_are_part_of_nuc_files)
Definition: d_bio_nucleusimage.cpp:486
D_Bio_NucleusImage::get_nuclei_contours
vector< vector< Point > > get_nuclei_contours(double scale=1, Point scaled_offset=Point(0, 0))
Definition: d_bio_nucleusimage.cpp:866
D_Bio_NucleusImage::get_foci_diameters
vector< double > get_foci_diameters(size_t channel, double scale=1)
Definition: d_bio_nucleusimage.cpp:938
FILE_SUBSECTION_VAL_COUNT
@ FILE_SUBSECTION_VAL_COUNT
Definition: d_bio_enum.h:54
D_Bio_Focus::convexity
double convexity()
Definition: d_bio_focus.h:74
FILE_SUBSECTION_NEW_FOCI_CHANNEL
@ FILE_SUBSECTION_NEW_FOCI_CHANNEL
Definition: d_bio_enum.h:51
c_STAT_MEDIAN
@ c_STAT_MEDIAN
Definition: d_enum.h:764
D_Bio_NucleusImage::get_foci_centers
vector< Point2f > get_foci_centers(size_t channel, double scale=1, Point scaled_offset=Point(0, 0))
Definition: d_bio_nucleusimage.cpp:905
ER_type_bad
@ ER_type_bad
Definition: d_enum.h:136
D_Bio_NucleusImage
Definition: d_bio_nucleusimage.h:50
D_Bio_Focus::centroid
Point2f centroid()
Definition: d_bio_focus.h:71
FILE_SUBSECTION_MEDIAN
@ FILE_SUBSECTION_MEDIAN
Definition: d_bio_enum.h:59
D_Bio_NucleusBlob
Definition: d_bio_nucleusblob.h:46
ER_channel_bad
@ ER_channel_bad
Definition: d_enum.h:144
D_Component_List::get_Component
D_Component get_Component(size_t index)
Definition: d_component_list.h:56
D_Bio_NucleusImage::save_PathExactDir
int save_PathExactDir(QString path, bool save_foci_in_nuclei, bool save_foci_separate, size_t x, size_t y, size_t t)
Definition: d_bio_nucleusimage.cpp:684
VAL_STAT_MEAN
@ VAL_STAT_MEAN
Definition: d_bio_enum.h:78
D_Bio_NucleusImage::get_Centroids
vector< Point2f > get_Centroids(double scale, Point2f scaled_offset)
Definition: d_bio_nucleusimage.cpp:828
D_Bio_NucleusImage::get_FociCounts
QStringList get_FociCounts()
Definition: d_bio_nucleusimage.cpp:791
D_Bio_NucleusImage::get_ChannelStat_append
int get_ChannelStat_append(QStringList *pQSL_Stat, size_t stat_index_bio_enum)
Definition: d_bio_nucleusimage.cpp:817
D_Bio_NucleusBlob::block_save_StitchingBorder_BottomRight
void block_save_StitchingBorder_BottomRight(size_t x, size_t y)
Definition: d_bio_nucleusblob.h:80
D_Bio_NucleusImage::add_nuclei
void add_nuclei(vector< D_Bio_NucleusBlob > vNuc)
Definition: d_bio_nucleusimage.cpp:975
c_STAT_KURTOSIS_SAMPLE
@ c_STAT_KURTOSIS_SAMPLE
Definition: d_enum.h:749
FILE_SUBSECTION_DEFAULT
@ FILE_SUBSECTION_DEFAULT
Definition: d_bio_enum.h:50
FILE_SUBSECTION_FOCUS_BEGIN
@ FILE_SUBSECTION_FOCUS_BEGIN
Definition: d_bio_enum.h:52
D_VisDat_Slice_2D
The D_VisDat_Slice_2D class Represents a 2D slice through a D_VisDat_Obj.
Definition: d_visdat_slice_2d.h:18
FILE_SUBSECTION_STD
@ FILE_SUBSECTION_STD
Definition: d_bio_enum.h:56
ER_StreamNotOpen
@ ER_StreamNotOpen
Definition: d_enum.h:174
d_component_list.h
VAL_STAT_KURTOSIS
@ VAL_STAT_KURTOSIS
Definition: d_bio_enum.h:81
D_Component_List::set_Mat
int set_Mat(Mat *pMA_BinaryOrLabel, int connectivity=8)
Definition: d_component_list.cpp:22
D_Bio_NucleusImage::D_Bio_NucleusImage
D_Bio_NucleusImage()
Definition: d_bio_nucleusimage.cpp:11
d_contour.h
D_Bio_NucleusImage::remove_nuclei_dulicates
void remove_nuclei_dulicates(vector< D_Bio_NucleusImage > vNucImgOther, double min_rel_intersection_for_remove=0.5)
Definition: d_bio_nucleusimage.cpp:1064
d_bio_focus.h
D_Component::get_Contour
vector< Point > get_Contour()
Definition: d_component.h:67
D_Bio_NucleusBlob::load_simple
bool load_simple(QString nucleus_file, bool load_foci_from_file)
Definition: d_bio_nucleusblob.cpp:536
D_Bio_Focus::channels
size_t channels()
Definition: d_bio_focus.cpp:211
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
c_STAT_STAN_DEV_SAMPLE
@ c_STAT_STAN_DEV_SAMPLE
Definition: d_enum.h:751
VAL_STAT_MEDIAN_DEVIATION
@ VAL_STAT_MEDIAN_DEVIATION
Definition: d_bio_enum.h:83
D_Bio_NucleusImage::load_foci
int load_foci(QFileInfoList FIL_foci)
Definition: d_bio_nucleusimage.cpp:535
D_Bio_NucleusImage::add_foci
void add_foci(size_t channel, vector< D_Bio_Focus > vFoc)
Definition: d_bio_nucleusimage.cpp:961
D_Bio_NucleusImage::remove_focus
bool remove_focus(Point P, size_t channel, double margin=0)
Definition: d_bio_nucleusimage.cpp:981
d_opencv_typedefs.h
FILE_SUBSECTION_NUMBER_OF
@ FILE_SUBSECTION_NUMBER_OF
Definition: d_bio_enum.h:63
D_Bio_NucleusImage::set_OffsetMosaicGrid
void set_OffsetMosaicGrid(Point OffsetMosaicGrid)
Definition: d_bio_nucleusimage.h:68
d_visdat_obj.h
d_enum.h
d_bio_nucleusblob.h
ER_parameter_bad
@ ER_parameter_bad
Definition: d_enum.h:142
D_Bio_NucleusImage::get_ShapeInfo_append
int get_ShapeInfo_append(QStringList *pQSL_ShapeInfo)
Definition: d_bio_nucleusimage.cpp:809
VAL_STAT_MEDIAN
@ VAL_STAT_MEDIAN
Definition: d_bio_enum.h:82
D_Bio_NucleusImage::add_nucleus
void add_nucleus(D_Bio_NucleusBlob Nuc)
Definition: d_bio_nucleusimage.cpp:970
D_Bio_NucleusImage::remove_nuclei_foci_all
void remove_nuclei_foci_all()
Definition: d_bio_nucleusimage.cpp:1047
D_Bio_NucleusImage::save
int save(QString path, bool save_foci_in_nuclei, bool save_foci_separate, bool save_name_mosaic_not_coordiante)
Definition: d_bio_nucleusimage.cpp:657
c_STAT_SKEWNESS_SAMPLE
@ c_STAT_SKEWNESS_SAMPLE
Definition: d_enum.h:747
QSL_ValueStat_Subsection
const QStringList QSL_ValueStat_Subsection
Definition: d_bio_enum.h:67
d_visdat_proc.h
D_Bio_NucleusImage::set_OffsetPixels
void set_OffsetPixels(Point OffsetPixels)
Definition: d_bio_nucleusimage.h:69
D_Stat::Calc_Stats
static int Calc_Stats(vector< double > *v_stats, vector< double > v_data, bool calc_sorted)
Definition: d_stat.cpp:16
d_bio_nucleusimage.h
c_STAT_MEAN_ARITMETIC
@ c_STAT_MEAN_ARITMETIC
Definition: d_enum.h:740
ER_index_out_of_range
@ ER_index_out_of_range
Definition: d_enum.h:146
d_stat.h
D_Bio_Focus::compactness
double compactness()
Definition: d_bio_focus.h:73
ER_empty
@ ER_empty
Definition: d_enum.h:135
D_Bio_Focus::set_detected_in_channel
void set_detected_in_channel(size_t ch_detected)
Definition: d_bio_focus.h:56