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_img_proc_3d.h
Go to the documentation of this file.
1 /************************************
2  * added: 05.07.2019 *
3  * author: David Eilenstein *
4  * contact: D.Eilenstein@gsi.de *
5  * project: ImageD *
6  * facility: GSI Darmstadt, Ger *
7  ************************************/
8 
9 
10 #ifndef D_IMG_PROC_3D_H
11 #define D_IMG_PROC_3D_H
12 
13 //own
14 #include <d_enum.h>
15 #include <d_stat.h>
16 #include <d_math.h>
17 #include <d_img_proc.h>
18 #include <d_physics.h>
19 
20 //general
21 #include <iostream>
22 #include <vector>
23 #include <fstream>
24 #include <sstream>
25 #include <iterator>
26 #include <thread>
27 
28 //Qt
29 #include <QMainWindow>
30 #include <QImage>
31 #include <QPainter>
32 #include <QPen>
33 #include <QColor>
34 #include <QFileInfo>
35 #include <QDir>
36 #include <QString>
37 #include <QDebug>
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 
55 {
56 public:
57  D_Img_Proc_3D();
58 
59  static int Duplicate (Mat *pMA_Out, Mat *pMA_In);
60 
61  static int Convert_Uchar_1C (Mat *pMA_Out, Mat *pMA_In);
62  static int Convert_Double_1C (Mat *pMA_Out, Mat *pMA_In);
63  static int Convert_Double (Mat *pMA_Out, Mat *pMA_In);
64 
65  static int Pad_Border (Mat *pMA_Out, Mat *pMA_In, int border_size_x, int border_size_y, int border_size_z, int border_type = BORDER_CONSTANT, double border_val = 0);
66 
67  static int Filter_Function (Mat *pMA_Out, Mat *pMA_In, Mat *pMA_Mask, function<double (double cur, double nei)> F1_CenterImage, function<double (double f1r, double msk)> F2_f1mask, function<double (vector<double> vf2r)> F3_Combine, function<double (double f3r, double cen)> F4_f3center, int border_type = BORDER_CONSTANT, bool DoNonZeroMaskOnly = false);
68  static int Filter_Function_1C (Mat *pMA_Out, Mat *pMA_In, Mat *pMA_Mask, function<double (double cur, double nei)> F1_CenterImage, function<double (double f1r, double msk)> F2_f1mask, function<double (vector<double> vf2r)> F3_Combine, function<double (double f3r, double cen)> F4_f3center, int border_type = BORDER_CONSTANT, int thread_number = 8, bool DoNonZeroMaskOnly = false);
69  static int Filter_Function_1C_Thread (Mat *pMA_Out, Mat *pMA_In, Mat *pMA_Mask, function<double (double cur, double nei)> F1_CenterImage, function<double (double f1r, double msk)> F2_f1mask, function<double (vector<double> vf2r)> F3_Combine, function<double (double f3r, double cen)> F4_f3center, int z_start, int z_end, int y_start, int y_end, int x_start, int x_end, bool DoNonZeroMaskOnly = false);
70  static int Filter_Function_8bit (Mat *pMA_Out, Mat *pMA_In, Mat *pMA_Mask, function<uchar (double cur, double nei)> F1_CenterImage, function<uchar (double f1r, double msk)> F2_f1mask, function<uchar (vector<double> vf2r)> F3_Combine, function<uchar (double f3r, double cen)> F4_f3center, int border_type = BORDER_CONSTANT, bool DoNonZeroMaskOnly = false);
71  static int Filter_Function_8bit_1C (Mat *pMA_Out, Mat *pMA_In, Mat *pMA_Mask, function<uchar (double cur, double nei)> F1_CenterImage, function<uchar (double f1r, double msk)> F2_f1mask, function<uchar (vector<double> vf2r)> F3_Combine, function<uchar (double f3r, double cen)> F4_f3center, int border_type = BORDER_CONSTANT, int thread_number = 8, bool DoNonZeroMaskOnly = false);
72  static int Filter_Function_8bit_1C_Thread (Mat *pMA_Out, Mat *pMA_In, Mat *pMA_Mask, function<uchar (double cur, double nei)> F1_CenterImage, function<uchar (double f1r, double msk)> F2_f1mask, function<uchar (vector<double> vf2r)> F3_Combine, function<uchar (double f3r, double cen)> F4_f3center, int z_start, int z_end, int y_start, int y_end, int x_start, int x_end, bool DoNonZeroMaskOnly = false);
73 
74  static int Filter_Median (Mat *pMA_Out, Mat *pMA_In, int size_x = 3, int size_y = 3, int size_z = 3);
75  static int Filter_Eilenstein_Greater_Sum (Mat *pMA_Out, Mat *pMA_In, int size_x = 3, int size_y = 3, int size_z = 3);
76 
77  static int Morphology_Dilation (Mat *pMA_Out, Mat *pMA_In, int size_x = 3, int size_y = 3, int size_z = 3);
78  static int Morphology_Erosion (Mat *pMA_Out, Mat *pMA_In, int size_x = 3, int size_y = 3, int size_z = 3);
79 
80  static int Neighborhood_Configs (Mat *pMA_Out, Mat *pMA_In);
81 
82  static int Distance_Transformation_EDT (Mat *pMA_Out, Mat *pMA_In, double spacing_x = 1, double spacing_y = 1, double spacing_z = 1);
83 
84  static int EulerNumber (double *euler_number, Mat *pMA_In);
85  static int EulerNumber (double *euler_number, Mat *pMA_Out, Mat *pMA_In);
86 
87  static int Calc_Hist_8bit_1C (vector<double> *v_hist, Mat *pMA_In, bool uniform, bool accum);
88 
89  static int InterferometerMichelson (Mat *pMA_Out, int scene_size_x_px, int scene_size_y_px, int scene_size_z_px, double scale_px2um, double wavelength_um, double dist_source_um, double dist_detector_um, double dist_mirror1_um, double dist_mirror2_um, double angle_mirror1_x, double angle_mirror1_y, double angle_mirror2_x, double angle_mirror2_y, bool intensity_notfield, bool beam_atSO_SO, bool beam_atSO_M1_SO, bool beam_atSO_SP_M2_SP_SO, bool beam_atM1_SO, bool beam_atM1_M1_SO, bool beam_atM2_SP_SO, bool beam_atM2_M2_SP_SO, bool beam_atDE_SP_M1_SO, bool beam_atDE_M2_SP_SO);
90 
91 };
92 
93 #endif // D_IMG_PROC_3D_H
Mat
cv::Mat Mat
Definition: d_opencv_typedefs.h:28
ER_okay
@ ER_okay
Definition: d_enum.h:133
D_Img_Proc::Type_of_Mat
static QString Type_of_Mat(Mat *pMA_In)
Definition: d_img_proc.cpp:363
D_Math::Function_2D_to_1D_8bit
static function< uchar(double x, double y)> Function_2D_to_1D_8bit(int type, double a=1, double b=0, double c=1, double d=0, double e=0, double f=0, uchar nan_val=0, uchar inf_val=0)
Definition: d_math.cpp:527
BORDER_CONSTANT
const int BORDER_CONSTANT
Definition: d_opencv_typedefs.h:77
D_Img_Proc_3D::Convert_Uchar_1C
static int Convert_Uchar_1C(Mat *pMA_Out, Mat *pMA_In)
Definition: d_img_proc_3d.cpp:26
D_Math::Function_2D_to_1D
static function< double(double x, double y)> Function_2D_to_1D(int type, double a=1, double b=0, double c=1, double d=0, double e=0, double f=0, double nan_val=0, double inf_val=0)
Definition: d_math.cpp:88
D_Math::Shift_3D_h
static Mat Shift_3D_h(double shift_x, double shift_y, double shift_z)
Definition: d_math.cpp:2417
d_math.h
D_Img_Proc_3D::Filter_Function_8bit_1C
static int Filter_Function_8bit_1C(Mat *pMA_Out, Mat *pMA_In, Mat *pMA_Mask, function< uchar(double cur, double nei)> F1_CenterImage, function< uchar(double f1r, double msk)> F2_f1mask, function< uchar(vector< double > vf2r)> F3_Combine, function< uchar(double f3r, double cen)> F4_f3center, int border_type=BORDER_CONSTANT, int thread_number=8, bool DoNonZeroMaskOnly=false)
Definition: d_img_proc_3d.cpp:1297
D_Img_Proc_3D::Filter_Function_8bit_1C_Thread
static int Filter_Function_8bit_1C_Thread(Mat *pMA_Out, Mat *pMA_In, Mat *pMA_Mask, function< uchar(double cur, double nei)> F1_CenterImage, function< uchar(double f1r, double msk)> F2_f1mask, function< uchar(vector< double > vf2r)> F3_Combine, function< uchar(double f3r, double cen)> F4_f3center, int z_start, int z_end, int y_start, int y_end, int x_start, int x_end, bool DoNonZeroMaskOnly=false)
Definition: d_img_proc_3d.cpp:1414
c_STAT_MINIMUM
@ c_STAT_MINIMUM
Definition: d_enum.h:754
ER_channel_missmatch
@ ER_channel_missmatch
Definition: d_enum.h:145
c_MATH_2D_TO_1D_X_times_Y
@ c_MATH_2D_TO_1D_X_times_Y
Definition: d_enum.h:1037
ER_size_missmatch
@ ER_size_missmatch
Definition: d_enum.h:141
D_Math::Rotation_3D_h_rad
static Mat Rotation_3D_h_rad(double angle_x, double angle_y, double angle_z)
Definition: d_math.cpp:2512
D_Img_Proc_3D::Neighborhood_Configs
static int Neighborhood_Configs(Mat *pMA_Out, Mat *pMA_In)
Definition: d_img_proc_3d.cpp:1821
D_Img_Proc_3D::Morphology_Erosion
static int Morphology_Erosion(Mat *pMA_Out, Mat *pMA_In, int size_x=3, int size_y=3, int size_z=3)
Definition: d_img_proc_3d.cpp:1748
c_MATH_2D_TO_1D_Y
@ c_MATH_2D_TO_1D_Y
Definition: d_enum.h:1033
PI
const double PI
Definition: d_enum.h:2534
D_Math::Distance_Transformation_1D
static int Distance_Transformation_1D(vector< double > *v_edt, vector< double > v_line, double spacing=1)
Definition: d_math.cpp:1260
PI_0_5
const double PI_0_5
Definition: d_enum.h:2538
c_STAT_MAXIMUM
@ c_STAT_MAXIMUM
Definition: d_enum.h:774
D_Stat::Function_SingleStat
static function< double(vector< double >)> Function_SingleStat(int stat)
Definition: d_stat.cpp:683
d_physics.h
D_Math::Homogenious_3D
static Mat Homogenious_3D(double x, double y, double z)
Definition: d_math.cpp:2283
D_Img_Proc_3D::Filter_Function_1C_Thread
static int Filter_Function_1C_Thread(Mat *pMA_Out, Mat *pMA_In, Mat *pMA_Mask, function< double(double cur, double nei)> F1_CenterImage, function< double(double f1r, double msk)> F2_f1mask, function< double(vector< double > vf2r)> F3_Combine, function< double(double f3r, double cen)> F4_f3center, int z_start, int z_end, int y_start, int y_end, int x_start, int x_end, bool DoNonZeroMaskOnly=false)
Definition: d_img_proc_3d.cpp:977
D_Img_Proc_3D
The D_Img_Proc_3D class static 3D image processing functions.
Definition: d_img_proc_3d.h:55
ER_bitdepth_bad
@ ER_bitdepth_bad
Definition: d_enum.h:138
c_MATH_2D_TO_1D_X
@ c_MATH_2D_TO_1D_X
Definition: d_enum.h:1032
ER_parameter_missmatch
@ ER_parameter_missmatch
Definition: d_enum.h:143
D_Math::Inhomogenious_3D
static Mat Inhomogenious_3D(double x, double y, double z)
Definition: d_math.cpp:2364
D_Img_Proc_3D::InterferometerMichelson
static int InterferometerMichelson(Mat *pMA_Out, int scene_size_x_px, int scene_size_y_px, int scene_size_z_px, double scale_px2um, double wavelength_um, double dist_source_um, double dist_detector_um, double dist_mirror1_um, double dist_mirror2_um, double angle_mirror1_x, double angle_mirror1_y, double angle_mirror2_x, double angle_mirror2_y, bool intensity_notfield, bool beam_atSO_SO, bool beam_atSO_M1_SO, bool beam_atSO_SP_M2_SP_SO, bool beam_atM1_SO, bool beam_atM1_M1_SO, bool beam_atM2_SP_SO, bool beam_atM2_M2_SP_SO, bool beam_atDE_SP_M1_SO, bool beam_atDE_M2_SP_SO)
Definition: d_img_proc_3d.cpp:2217
c_STAT_MEDIAN
@ c_STAT_MEDIAN
Definition: d_enum.h:764
ER_type_bad
@ ER_type_bad
Definition: d_enum.h:136
d_img_proc.h
BORDER_REPLICATE
const int BORDER_REPLICATE
Definition: d_opencv_typedefs.h:82
ER_channel_bad
@ ER_channel_bad
Definition: d_enum.h:144
D_Img_Proc_3D::Filter_Function
static int Filter_Function(Mat *pMA_Out, Mat *pMA_In, Mat *pMA_Mask, function< double(double cur, double nei)> F1_CenterImage, function< double(double f1r, double msk)> F2_f1mask, function< double(vector< double > vf2r)> F3_Combine, function< double(double f3r, double cen)> F4_f3center, int border_type=BORDER_CONSTANT, bool DoNonZeroMaskOnly=false)
Definition: d_img_proc_3d.cpp:656
D_Img_Proc_3D::Pad_Border
static int Pad_Border(Mat *pMA_Out, Mat *pMA_In, int border_size_x, int border_size_y, int border_size_z, int border_type=BORDER_CONSTANT, double border_val=0)
Definition: d_img_proc_3d.cpp:312
Scalar
cv::Scalar Scalar
Definition: d_opencv_typedefs.h:30
D_Stat::Function_SingleStat_8bit
static function< uchar(vector< double >)> Function_SingleStat_8bit(int stat)
Definition: d_stat.cpp:1779
c_STAT_SUM
@ c_STAT_SUM
Definition: d_enum.h:737
D_Img_Proc_3D::Convert_Double
static int Convert_Double(Mat *pMA_Out, Mat *pMA_In)
Definition: d_img_proc_3d.cpp:202
ER_size_bad
@ ER_size_bad
Definition: d_enum.h:140
D_Img_Proc_3D::Duplicate
static int Duplicate(Mat *pMA_Out, Mat *pMA_In)
Definition: d_img_proc_3d.cpp:16
c_MATH_2D_TO_1D_X_greater_Y
@ c_MATH_2D_TO_1D_X_greater_Y
Definition: d_enum.h:1041
D_Img_Proc_3D::Distance_Transformation_EDT
static int Distance_Transformation_EDT(Mat *pMA_Out, Mat *pMA_In, double spacing_x=1, double spacing_y=1, double spacing_z=1)
Definition: d_img_proc_3d.cpp:1884
D_Img_Proc_3D::Calc_Hist_8bit_1C
static int Calc_Hist_8bit_1C(vector< double > *v_hist, Mat *pMA_In, bool uniform, bool accum)
Definition: d_img_proc_3d.cpp:2187
D_Img_Proc_3D::Filter_Function_8bit
static int Filter_Function_8bit(Mat *pMA_Out, Mat *pMA_In, Mat *pMA_Mask, function< uchar(double cur, double nei)> F1_CenterImage, function< uchar(double f1r, double msk)> F2_f1mask, function< uchar(vector< double > vf2r)> F3_Combine, function< uchar(double f3r, double cen)> F4_f3center, int border_type=BORDER_CONSTANT, bool DoNonZeroMaskOnly=false)
Definition: d_img_proc_3d.cpp:1109
D_Img_Proc_3D::Filter_Median
static int Filter_Median(Mat *pMA_Out, Mat *pMA_In, int size_x=3, int size_y=3, int size_z=3)
Definition: d_img_proc_3d.cpp:1547
D_Img_Proc_3D::EulerNumber
static int EulerNumber(double *euler_number, Mat *pMA_In)
Definition: d_img_proc_3d.cpp:2028
D_Physics::FieldStrength
static double FieldStrength(Mat Position, Mat Source, double fieldstrength, double phaseoffset_rad, double wavelength_m)
Definition: d_physics.cpp:8
d_opencv_typedefs.h
D_Img_Proc_3D::Filter_Function_1C
static int Filter_Function_1C(Mat *pMA_Out, Mat *pMA_In, Mat *pMA_Mask, function< double(double cur, double nei)> F1_CenterImage, function< double(double f1r, double msk)> F2_f1mask, function< double(vector< double > vf2r)> F3_Combine, function< double(double f3r, double cen)> F4_f3center, int border_type=BORDER_CONSTANT, int thread_number=8, bool DoNonZeroMaskOnly=false)
Definition: d_img_proc_3d.cpp:863
d_enum.h
Vec
cv::Vec< T, N > Vec
Definition: d_opencv_typedefs.h:44
ER_parameter_bad
@ ER_parameter_bad
Definition: d_enum.h:142
BORDER_DEFAULT
const int BORDER_DEFAULT
Definition: d_opencv_typedefs.h:78
D_Img_Proc_3D::D_Img_Proc_3D
D_Img_Proc_3D()
Definition: d_img_proc_3d.cpp:11
D_Img_Proc_3D::Morphology_Dilation
static int Morphology_Dilation(Mat *pMA_Out, Mat *pMA_In, int size_x=3, int size_y=3, int size_z=3)
Definition: d_img_proc_3d.cpp:1675
ER_dim_3D_only
@ ER_dim_3D_only
Definition: d_enum.h:165
D_Img_Proc_3D::Filter_Eilenstein_Greater_Sum
static int Filter_Eilenstein_Greater_Sum(Mat *pMA_Out, Mat *pMA_In, int size_x=3, int size_y=3, int size_z=3)
Definition: d_img_proc_3d.cpp:1629
d_img_proc_3d.h
D_Img_Proc_3D::Convert_Double_1C
static int Convert_Double_1C(Mat *pMA_Out, Mat *pMA_In)
Definition: d_img_proc_3d.cpp:114
d_stat.h
ER_empty
@ ER_empty
Definition: d_enum.h:135