10 #define M_MAKRO_FOCI_H
29 #include <QMainWindow>
32 #include <QGraphicsScene>
36 #include <QStringList>
38 #include <QMessageBox>
39 #include <QFileDialog>
42 #include <QSpacerItem>
43 #include <QElapsedTimer>
44 #include <QDesktopServices>
45 #include <QRubberBand>
46 #include <QApplication>
49 #include <opencv2/core/core.hpp>
50 #include <opencv2/highgui/highgui.hpp>
51 #include <opencv2/imgproc/imgproc.hpp>
59 #include <QMainWindow>
73 void closeEvent(QCloseEvent *event);
78 void Update_ImgProc_Results();
79 void Update_Step_Results_all(
int step);
80 void Update_Step_Results_av(
int step);
81 void Update_Step_Results_feature();
90 void Update_SimpleOrMulti_Page();
93 void Update_nb_interval();
94 void Update_time_interval_values();
95 void Update_ComboBox_index_changes();
96 void Update_Time_scale();
97 void Ititialise_time_interval();
107 int draw_circle(
Mat *pMA_out,
Mat *pMA_int);
108 int draw_circle(
Mat *pMA_out,
Mat *pMA_Out2,
Mat *pMA_int,
Mat *pMA_label);
109 int draw_circle_2(
Mat *pMA_out,
Mat *pMA_Out2,
Mat *pMA_int,
Mat *pMA_label,
int t);
111 void Update_selected_centroid();
112 void Circled_selected_centroid();
119 int Image_average(vector<Mat> pvMA_In,
Mat *pMA_Out);
121 int Image_proj_max_intensity(vector<Mat> pvMA_In,
Mat *pMA_Out);
122 int Image_proj_max_intensity_t_positif(vector<Mat> pvMA_In,
Mat *pMA_Out);
127 void Unselect_occasional_detected_foci();
128 void Interpolation_Feature_Foci();
129 void Normalization_Feature_Foci();
130 void Get_Average_Feature_Foci();
131 void Select_pertinent_Foci();
132 void Select_pertinent_Foci_Std_dev();
133 void Select_pertinent_Foci_to_unify();
134 void Select_pertinent_Foci_first_images();
135 void Unselect_decreasing_curves();
136 void Unselect_non_pertinent_Foci_User();
137 void Update_selected_Foci_array();
139 void Swap_foci_to_sort_label(
int labelIn,
int labelOut,
int t);
141 void Condition_emergence_time();
142 void Set_emergence_time_by_user();
143 void Vector_2_Mat(vector<vector<double>> *p_vvIn,
Mat *pM_Out);
144 void Mat_2_vector(
Mat *pM_In, vector<vector<double>> *p_vvOut);
146 void Variance_in_time_window();
148 void Filter_Intensity_values();
149 void Mean_Filter_intensity();
154 void Label_Foci_in_time();
155 int Check_Foci_in_Circle(
Mat * pIn,
int* CoordX_In,
int* CoordY_In,
int* CoordX_Out,
int* CoordY_Out,
int* label_Out);
156 void Single_Circled_Focus(
int label);
157 void Assigne_label_to_Foci(
Mat * pIn,
int label,
int t,
int* CoordX,
int* CoordY);
158 void Update_label_state(
int label,
int t,
const int state);
161 int Plot_Curves_Single_Classes(QChartView *pChartView, vector<double> *v_histx,vector<double> *v_histy,
double min,
double step,
double time,
double time_cursor,QString name_title, QString name_series, QString name_x, QString name_y,
bool ignore_first);
163 void Update_Curves();
164 void Update_detail_Values();
167 int Save_csv_file_full();
168 void Save_info_full();
169 void Stream_Open_foci_in_time_full();
170 void Stream_Init_foci_in_time_full();
171 void Stream_End_foci_in_time_full();
175 void Save_Parameters();
176 void Save_emergence_time();
177 void Save_Picture_of_Circled_Foci();
178 void Stream_Open_foci_in_time();
179 void Stream_Init_foci_in_time();
180 void Stream_End_foci_in_time();
183 void Enable_disable_select_area();
184 void Select_bckgd_area(
int,
int );
185 void Delete_bckgd_area();
186 void Confirm_bckgd_area();
187 void Set_MA_area_bckgd();
188 void Get_values_backgd();
189 void Enable_Foci_Features_Tab();
192 void Add_focus_user(
int x,
int y);
193 void Confirm_Added_focus_user();
194 void Init_add_focus_user();
195 void Delete_added_foci_user();
198 void on_pushButton_02_default_values_clicked();
201 void Dilatation_centroid_labeled();
202 void Black_Bckgd_2_white(
int step);
204 void Update_displayed_time();
207 void Nucleus_edges();
208 int Feature_biggest_area(
Mat *pMA_Out,
Mat *pMA_In,
int feature);
211 void Threshold_parameters_changed();
212 void Settings_parameters_changed();
213 void Foci_tracking_parameters_changed();
214 void Foci_feature_parameters_changed();
216 void on_comboBox_step_av_currentIndexChanged(
int index);
218 void resize_array(vector<double> *v_value,
int size);
219 void resize_array(vector<vector<double>> *vv_value,
int size1,
int size2);
220 void resize_array(vector<vector<vector<double>>> *vvv_value,
int size1,
int size2,
int size3);
223 Ui::m_makro_foci *ui;
225 bool ClosingPossible =
false;
227 int Size_image_in_time;
231 void ERR(
int err, QString func =
"no specified", QString detail =
"no specified");
234 int nb_time_interval;
235 int nb_combo_time_interval=0;
236 vector<vector<int>> vv_Interval_info;
237 vector<int> v_Time_scale;
238 QStringList Time_interval_List;
241 bool Flag_loaded_image =
false;
246 vector<Mat> vMA_Nuclei;
247 vector<Mat> vMA_temp;
248 vector<Mat> vMA_Average;
249 Mat MA_Average_area,MA_Average_area_without_bckgd;
250 Mat MA_Max_proj_add_focus;
251 vector<vector<Mat>> vvMA_Nuclei;
252 vector<Mat> vMA_Circled_Focus;
255 unsigned int pos_dest;
263 vector<vector<vector<double>>> vvvFeatureFoci;
264 vector<vector<vector<double>>> vvvFeatureFoci_selected;
265 int FeatureFoci_nb_label=0;
266 int FeatureFoci_nb_label_selected=0;
267 vector<int> LabelFociSelected_To_LabelFoci;
268 vector<int> LabelFoci_To_LabelFociSelected;
270 vector<int> vEmergence_time;
274 float IntensityMax=0,IntensityMin=0;
275 float Intensity_filter_Max=0,Intensity_filter_Min=0;
276 Mat M_foci_intensity, M_foci_intensity_filtered;
277 vector<vector<double>> vv_intensity, vv_intensity_filtered;
281 vector<vector<double>> vv_intensity_std_dev;
284 Mat M_foci_intensity_filter_1st_deriv, M_foci_intensity_filter_2nd_deriv;
285 vector<vector<double>> vv_intensity_filter_1st_deriv, vv_intensity_filter_2nd_deriv;
289 vector<vector<vector<double>>> vvvv_stat_intensity;
292 vector<double> v_labels , v_temps;
293 vector<vector<char>> vv_label_state;
295 vector<vector<float>> vvFeatureFoci_Average;
298 vector<int> Foci_unselect_by_user;
299 int nb_Foci_unselect_by_user=0;
301 vector<vector<int>> Foci_added_by_user;
302 int nb_Foci_added_by_user=0;
303 vector<int> vFoci_added;
306 QFileInfoList FIL_Input_Images;
310 QFileInfo FI_Load_File;
311 QFileInfoList FIL_Examples;
315 bool Stream_Open_Foci =
false;
316 ofstream OS_Stream_Foci_Info;
318 QDir DIR_Stream_Foci;
330 QChartView *ChartView_Hist;
334 QLabel *L_SB_ValAtPos;
340 bool Flag_selected_Bckgd;
341 QRubberBand* rubberBand;
342 vector<vector<int>> vv_Feature_area_bckgd;
343 int nb_area_bckgd = 0;
344 vector<double> Bckgd_in_nuclei,Bckgd_out_nuclei;
345 vector<double> v_stats_bckgd_in, v_stats_bckgd_out;
362 e_AV_IMG_AVERAGE_IMAGE,
364 e_AV_IMG_REDUCE_CENTROID,
372 e_IMG_PROC_THRESHOLD,
378 unsigned static const int
395 static const unsigned int
396 c_ST_single_page = 0,
404 enum M_NUCLEI_STEP_PROCESS {
406 c_ST_N_INPUT_CONV_8BIT ,
409 c_sT_N_DILATATION_WITHOUT_LABEL,
410 c_sT_N_FOCI_NO_BKGRD,
411 c_sT_N_AVERAGE_INTENSITY_FOCI,
412 c_sT_N_Label_in_time ,
413 c_sT_N_CENTROID_SELECTED,
414 c_sT_N_Label_in_time_dilated,
415 c_sT_N_Label_in_time_CIRCLED_without_labels,
416 c_sT_N_Label_in_time_CIRCLED_with_labels,
417 c_sT_N_Label_interpoled_centroid,
418 c_ST_N_INPUT_CONV_8BIT_bigger_DIM,
419 c_ST_N_INPUT_CONV_16BIT,
421 c_ST_N_Otsu_threshold,
423 c_ST_N_Contour_nuclei
427 enum M_AVERAGE_STEP {
429 c_sT_Max_Proj_T_positives,
430 c_sT_Max_Proj_Threshold,
431 c_sT_Max_Proj_Reducted,
432 c_sT_Max_Proj_Watershed
436 static const unsigned int
437 c_sT_thickness_centroid =1;
440 static const unsigned int
441 c_sT_N_AVERAGE_IMAGE = 2,
442 c_sT_N_THRESHOLD_AVERAGE_IMG = 3,
443 c_sT_N_REDUCTION_AVERAGE_IMG = 4,
444 c_sT_N_WATERSHED_AVERAGE_IMG = 5,
445 c_sT_N_AVERAGE_INTENSITY = 6;
448 static const unsigned int
449 c_ST_N_INPUT_CONV_8BIT_VIEW = 0,
450 c_sT_N_THRESHOLD_VIEW = 1,
451 c_sT_N_REDUCTION_VIEW = 2,
452 c_sT_N_CIRCLED_NUCLEUS = 3;
455 static const unsigned int
456 c_sT_N_CIRCLED_FOCI_VIEW =0,
462 c_sT_interval_info_number =3,
464 c_sT_Interval_info_From =0,
465 c_sT_Interval_info_To =1,
466 c_sT_Interval_info_Value =2;
476 static const unsigned int
477 c_sT_N_FEATURE_AVERAGE_IMG = 0;
480 const int c_nb_Array_intensity= 4;
482 static const unsigned int
483 c_sT_Array_intensity_normalized =0,
484 c_sT_Array_intensity_normalized_filter =1,
485 c_sT_Array_intensity_normalized_filter_1st_deriv =2,
486 c_sT_Array_intensity_normalized_filter_2nd_deriv =3;
492 c_sT_Nb_label_max =10000;
496 c_sT_Value_bckgd_centroid =0,
497 c_sT_Value_centroid =255,
499 c_sT_Value_bckgd_foci_labeled =0;
505 c_sT_Feature_Foci =8,
507 c_sT_Feature_Foci_state =0,
508 c_sT_state_unassigned =0,
509 c_sT_state_assigned =1,
511 c_sT_state_interpolated =3,
512 c_sT_Feature_Foci_coordX =1,
513 c_sT_Feature_Foci_coordY =2,
514 c_ST_Feature_Foci_Nb_pixels =3,
515 c_ST_Feature_Foci_Intensity =4,
516 c_ST_Feature_Foci_Intensity_norm=5,
517 c_sT_Feature_Foci_label =6,
518 c_sT_Feature_Foci_selected =7;
522 c_ST_interval_time =10,
525 c_sT_Minimum_count_foci =3,
526 c_sT_Minimum_average_dist =7;
530 c_sT_variance_min =1;
535 c_sT_Feature_Foci_Average =5,
537 c_sT_Feature_Foci_Average_intensity =0,
538 c_sT_Feature_Foci_Average_min_value =1,
539 c_sT_Feature_Foci_Average_max_value =2,
540 c_sT_Feature_Foci_Average_variance =3,
541 c_sT_Feature_Foci_Average_appear_time =4;
545 c_sT_nb_Feature_area_bckgd =4,
547 c_sT_area_bckgd_label =0,
548 c_sT_label_bckgd_foci =255,
549 c_sT_label_bckgd_nuclei =125,
550 c_sT_area_bckgd_coord_X =1,
551 c_sT_area_bckgd_coord_Y =2,
552 c_sT_area_bckgd_radius =3;
556 #endif // M_MAKRO_FOCI_H