 |
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.
|
Go to the documentation of this file.
29 #include <QMessageBox>
30 #include <QFileDialog>
31 #include <QColorDialog>
33 #include <QInputDialog>
35 #include <QElapsedTimer>
37 #include <QGridLayout>
38 #include <QVBoxLayout>
39 #include <QHBoxLayout>
40 #include <QPushButton>
44 #include <QGraphicsView>
47 #include <QDoubleSpinBox>
48 #include <QSpacerItem>
50 #include <QtCore/qmath.h>
51 #include <QtCore/qrandom.h>
52 #include <QtWidgets/QComboBox>
58 #include <QtDataVisualization>
59 #include <QtDataVisualization/q3dscatter.h>
60 #include <QtDataVisualization/qabstract3dseries.h>
61 #include <QtDataVisualization/qscatterdataproxy.h>
62 #include <QtDataVisualization/qvalue3daxis.h>
63 #include <QtDataVisualization/q3dscene.h>
64 #include <QtDataVisualization/q3dcamera.h>
65 #include <QtDataVisualization/qscatter3dseries.h>
66 #include <QtDataVisualization/q3dtheme.h>
67 #include <QtDataVisualization/QSurface3DSeries>
68 #include <QtDataVisualization/Q3DSurface>
69 #include <QtDataVisualization/QSurfaceDataProxy>
70 #include <QtDataVisualization/QSurfaceDataArray>
71 #include <QtDataVisualization/QCustom3DVolume>
74 #include <opencv2/core/core.hpp>
75 #include <opencv2/highgui/highgui.hpp>
76 #include <opencv2/imgproc/imgproc.hpp>
82 using namespace QtDataVisualization;
94 void init(QGridLayout *target_layout);
130 int Volume() {
return volume_index_current;}
131 int Dim_extended0() {
return v_dims_extended.size() == 3 ? v_dims_extended[0] : -1;}
132 int Dim_extended1() {
return v_dims_extended.size() == 3 ? v_dims_extended[1] : -1;}
133 int Dim_extended2() {
return v_dims_extended.size() == 3 ? v_dims_extended[2] : -1;}
135 bool Dim_is_extended(
int d) {
return (d == Dim_extended0()) || (d == Dim_extended1()) || (d == Dim_extended2());}
136 int Dim_fix0() {
return v_dims_fix.size() == 3 ? v_dims_fix[0] : -1;}
137 int Dim_fix1() {
return v_dims_fix.size() == 3 ? v_dims_fix[1] : -1;}
138 int Dim_fix2() {
return v_dims_fix.size() == 3 ? v_dims_fix[2] : -1;}
145 int Save(QString QS_Save);
146 int SaveVideo_SliceDim();
147 int SaveVideo_CameraRotationFull();
148 int TakeFrames_CameraRotationFull(vector<Mat> *pvMA_ViewsOut,
size_t n_frames = 360);
149 int TakeFrames_SliceDim(vector<Mat> *pvMA_ViewsOut,
int dim2loop);
155 void on_VolumeCurrent_Changed(
int vol);
158 int TextureData_CalcNew();
159 int Slice_2D_Mat_from_VD(
Mat *pMA_SliceOut,
D_VisDat_Slice_2D slice,
double min_global,
double max_global);
160 int TextureData_AppendSlice(
Mat *pMA_toAppend,
size_t slice_number);
163 void set_VolumeScalingAndPosition();
164 void set_TextureSize();
166 void set_HD_shader(
bool hd);
167 void set_preserve_opacity(
bool preserve);
168 void set_draw_slices(
bool draw);
169 void set_alpha_multiplier(
double factor);
170 void set_shadow_quality(
int shadow_quality_id);
172 void change_graph_background_color();
173 void change_graph_background_color(QColor color);
175 void check_volume_changes_and_trigger_slots();
177 void adapt_alpha_multiplier_step(
double value);
178 void adapt_depth_scale_step(
double value);
187 void ERR(
int err, QString func, QString detail);
191 int default_dir_index = 0;
194 void Populate_CB_Single(QComboBox *CB, QStringList QSL,
int init_index = 0);
199 QGridLayout *ui_layout_target;
200 QGroupBox *ui_GroupBox_3D_graph;
201 QGroupBox *ui_GroupBox_2D_slices;
202 QGroupBox *ui_GroupBox_Settings;
203 QGroupBox *ui_GroupBox_Settings_Volume;
205 QGroupBox *ui_GroupBox_Settings_Alpha;
206 QGroupBox *ui_GroupBox_Settings_Graphics;
207 QGroupBox *ui_GroupBox_SaveAnimationVideo;
210 QComboBox *ui_ComboBox_Volume;
211 vector<QSpinBox*> vui_SpinBox_DimIndices;
220 vector<QGraphicsView*> vui_GraphicsView_Slices2D;
224 vector<D_Viewer*> vViewer_Slices2D;
238 QComboBox *ui_ComboBox_AlphaMode;
239 QDoubleSpinBox *ui_DoubleSpinBox_AlphaMultiplier;
242 QPushButton *ui_PushButton_BackgroundColor;
243 QDoubleSpinBox *ui_DoubleSpinBox_ScaleDepth;
244 QCheckBox *ui_CheckBox_HeatColor;
245 QCheckBox *ui_CheckBox_Slices_Show;
246 QCheckBox *ui_CheckBox_Slices_SliceVolume;
247 QCheckBox *ui_CheckBox_Slices_KeepAspectRatio;
248 QCheckBox *ui_CheckBox_Shader_HD;
249 QCheckBox *ui_CheckBox_OpacityPreserve;
250 QComboBox *ui_ComboBox_ShadowQuality;
251 QSpacerItem *ui_spacer_Settings;
252 QPushButton *ui_PushButton_SaveAnimationVideo_Rotation;
253 QPushButton *ui_PushButton_SaveAnimationVideo_Slice;
260 vector<int> v_dim_indeces_last = {0, 0, 0, 0, 0, 0};
266 Q3DScatter *graph_scatter;
267 QWidget *container_widget_scatter;
268 QCustom3DVolume *volume_item;
271 QVector<uchar> vTextureData;
272 QVector<QRgb> vColorTable;
275 bool vis_trafo_active =
false;
276 double vis_trafo_in_min = 0;
277 double vis_trafo_in_max = 255;
278 double vis_trafo_gamma = 1.0;
279 double vis_trafo_center = 0.0;
280 double vis_trafo_divisor = 1.0;
281 double vis_trafo_anchor = 0;
282 double vis_trafo_range = 1;
290 bool state_ui_init =
false;
291 bool state_VD_set =
false;
292 bool state_texture_set =
false;
293 bool state_graph_up2date =
false;
294 bool state_graph_updating =
false;
295 bool state_default_dir =
false;
300 #endif // D_VIEWER_3D_H
cv::Mat Mat
Definition: d_opencv_typedefs.h:28
@ ER_okay
Definition: d_enum.h:133
int TakeFrames_CameraRotationFull(vector< Mat > *pvMA_ViewsOut, size_t n_frames=360)
Definition: d_viewer_3d.cpp:587
@ c_VIEWER_3D_ALPHA_NUMBER_OF
Definition: d_enum.h:492
static int Visualize_to8bit(Mat *pMA_Out, Mat *pMA_In, int mode_crop, int mode_trafo, int mode_anchor, int mode_range, double val_anchor, double val_range, double val_min, double val_max, double val_gamma, double val_center, double val_scale, bool keep_min_max=false, int mode_complex=c_COMPLEX2REAL_RE_IM)
Definition: d_img_proc.cpp:5082
void Set_VisTrafo_Anchor(double anchor=127.5)
Definition: d_viewer_3d.h:116
int TakeFrames_SliceDim(vector< Mat > *pvMA_ViewsOut, int dim2loop)
Definition: d_viewer_3d.cpp:545
@ c_DIM_X
Definition: d_enum.h:235
int Dim_extended0()
Definition: d_viewer_3d.h:131
int Save(QString QS_Save)
Definition: d_viewer_3d.cpp:360
vector< int > Dims_fix()
Definition: d_viewer_3d.h:139
@ c_DIM_Z
Definition: d_enum.h:237
void Set_VisTrafo_SpreadInMin(double spread_min=0)
Definition: d_viewer_3d.h:112
@ c_DIM_T
Definition: d_enum.h:238
const double PI_2_0
Definition: d_enum.h:2537
static int PlaneFromDims(int d1, int d2)
Definition: d_visdat_proc.cpp:146
The D_Viewer class Display images (Mat) in QGraphicsView in the user interface.
Definition: d_viewer.h:58
@ ER_MemSizeToBig
Definition: d_enum.h:180
The D_Storage class Used for storing data. There is only one instance in D_MainWindow .
Definition: d_storage.h:49
void Set_VisTrafo_Mode_Anchor(int mode=c_VIS_TRAFO_ANCHOR_DYNAMIC)
Definition: d_viewer_3d.h:120
@ c_VIEWER_3D_ALPHA_CHANNEL_MEAN
Definition: d_enum.h:489
int SaveVideo_SliceDim()
Definition: d_viewer_3d.cpp:365
void Set_VisTrafo_Gamma(double gamma=1)
Definition: d_viewer_3d.h:111
@ c_DIM_Y
Definition: d_enum.h:236
@ ER_UiNotInit
Definition: d_enum.h:177
void Set_VisTrafo_Mode_Trafo(int mode=c_VIS_TRAFO_LINEAR)
Definition: d_viewer_3d.h:119
const QStringList QSL_Volumes
Definition: d_enum.h:351
cv::Vec3b Vec3b
Definition: d_opencv_typedefs.h:51
static int Read_2D_Plane(Mat *pMA_Out, D_VisDat_Obj *pVD_In, D_VisDat_Slice_2D InPlane)
Definition: d_visdat_proc.cpp:2946
Definition: d_viewer_3d.h:85
@ c_VIS_TRAFO_LINEAR
Definition: d_enum.h:697
@ c_VIS_TRAFO_RANGE_DYNAMIC
Definition: d_enum.h:723
void Set_VisTrafo_ActiveBool(bool active=true)
Definition: d_viewer_3d.h:110
const QStringList QSL_ShadowQuality_3D_ShadowInName
Definition: d_enum.h:572
int set_VisDat(D_VisDat_Obj *pVD_toShow)
Definition: d_viewer_3d.cpp:325
void Set_VisTrafo_Range(double range=127.5)
Definition: d_viewer_3d.h:117
The D_VisDat_Dim class Represents a 6D volume.
Definition: d_visdat_dim.h:49
static vector< int > VolumeDims(int volume_index)
Definition: d_visdat_proc.cpp:141
@ c_DIM_S
Definition: d_enum.h:239
void clear_graph()
Definition: d_viewer_3d.cpp:314
void ERR(int err, QString sender, QString func, QString detail)
D_Error_Handler::ERR pops an error message if an error occured and/or streams it to a csv file.
Definition: d_error_handler.cpp:23
int Volume()
Definition: d_viewer_3d.h:130
int channels()
Definition: d_visdat_obj.h:76
cv::VideoWriter VideoWriter
Definition: d_opencv_typedefs.h:25
The D_VisDat_Obj class Represents a 6D image.
Definition: d_visdat_obj.h:51
int Dim_fix0()
Definition: d_viewer_3d.h:136
QDir * dir_byIndex(int dir_index)
Definition: d_storage.h:65
void Set_VisTrafo_Mode_Complex(int mode=c_COMPLEX2REAL_RE_IM)
Definition: d_viewer_3d.h:122
D_Viewer_3D()
Definition: d_viewer_3d.cpp:11
int size_PixelCount()
Definition: d_visdat_dim.cpp:56
void Set_VisTrafo_Center(double center=0)
Definition: d_viewer_3d.h:114
void Update_Ui()
Definition: d_viewer_3d.cpp:642
int Update_Graph()
Definition: d_viewer_3d.cpp:690
vector< int > Dims_extended()
Definition: d_viewer_3d.h:134
D_VisDat_Dim Dim()
Definition: d_visdat_obj.h:72
void Set_VisTrafo_Divisor(double divisor=0)
Definition: d_viewer_3d.h:115
The D_VideoWriter class Creates a video from a sequence of images and saves it as a file.
Definition: d_videowriter.h:53
const QStringList QSL_Viewer3D_Alpha
Definition: d_enum.h:494
The D_Error_Handler class takes error codes from D_ERROR_ENUM and shows a popup if an error occures.
Definition: d_error_handler.h:38
cv::Vec4b Vec4b
Definition: d_opencv_typedefs.h:57
void Set_VisTrafo_ActiveInt(int active=1)
Definition: d_viewer_3d.h:109
int size_Dim(int idx)
Definition: d_visdat_dim.h:65
int Plane_SliceYZ()
Definition: d_viewer_3d.h:143
static int Convert_toMat4Ch_8bit(Mat *pMA_Out, Mat *pMA_In, int alpha_mode, bool heat_color=false, bool norm_alpha=true)
Definition: d_img_proc.cpp:1363
The D_VisDat_Slice_2D class Represents a 2D slice through a D_VisDat_Obj.
Definition: d_visdat_slice_2d.h:18
int Dim_extended2()
Definition: d_viewer_3d.h:133
int Plane_SliceXY()
Definition: d_viewer_3d.h:141
@ ER_StreamNotOpen
Definition: d_enum.h:174
int Plane_SliceXZ()
Definition: d_viewer_3d.h:142
@ c_COMPLEX2REAL_RE_IM
Definition: d_enum.h:978
int Dim_extended1()
Definition: d_viewer_3d.h:132
@ c_VOLUME_XYZ
Definition: d_enum.h:329
void Set_VisTrafo_SpreadInMax(double spread_max=255)
Definition: d_viewer_3d.h:113
@ ER_other
Definition: d_enum.h:134
@ c_VIEWER_PLOT_3D_SHADOW_MEDIUM
Definition: d_enum.h:556
void Set_AlphaMode(size_t alpha_mode)
Definition: d_viewer_3d.h:128
@ c_VIS_TRAFO_ANCHOR_DYNAMIC
Definition: d_enum.h:709
@ c_DIM_P
Definition: d_enum.h:240
~D_Viewer_3D()
Definition: d_viewer_3d.cpp:21
@ ER_type_missmatch
Definition: d_enum.h:137
int Dim_is_fix(int d)
Definition: d_viewer_3d.h:140
@ c_DIM_NUMBER_OF
Definition: d_enum.h:241
void Set_VisTrafo_Mode_Crop(int mode=c_VIS_TRAFO_CROP_DYNAMIC)
Definition: d_viewer_3d.h:118
D_VisDat_Dim * pDim()
Definition: d_visdat_obj.h:73
void init(QGridLayout *target_layout)
Definition: d_viewer_3d.cpp:26
@ c_VIS_TRAFO_CROP_FIXED
Definition: d_enum.h:688
void Set_VisTrafo_Mode_Range(int mode=c_VIS_TRAFO_RANGE_DYNAMIC)
Definition: d_viewer_3d.h:121
static QColor Contrast_Color(QColor col_in, bool force_black_and_white=true, bool mirror_hue=true, bool force_light2blue=true)
Definition: d_img_proc.cpp:19388
@ ER_dim_missmatch
Definition: d_enum.h:148
void set_dir_byIndex(QString path, int dir_index)
Definition: d_storage.h:95
bool Dim_is_extended(int d)
Definition: d_viewer_3d.h:135
int SaveVideo_CameraRotationFull()
Definition: d_viewer_3d.cpp:469
const QStringList QSL_DimIndices
Definition: d_enum.h:251
static int Calc_MinMax(D_VisDat_Obj *pVD_In, double *min_ext, double *max_ext)
Definition: d_visdat_proc.cpp:7660
void Set_StoragePointer(D_Storage *pStorage, int index_dir2use)
Definition: d_viewer_3d.h:124
cv::Vec< T, N > Vec
Definition: d_opencv_typedefs.h:44
@ ER_parameter_bad
Definition: d_enum.h:142
@ c_VOLUME_NUMBER_OF
Definition: d_enum.h:349
int Dim_fix2()
Definition: d_viewer_3d.h:138
void Set_Volume(size_t volume_index)
Definition: d_viewer_3d.h:126
int Update_Slices()
Definition: d_viewer_3d.cpp:734
static QString Color2Text4StyleSheet(QColor col_in)
Definition: d_img_proc.cpp:19445
void set_Pos_Dim(int d, int pos)
Definition: d_visdat_slice_nd.h:74
void Set_backgroundColor(QColor color)
Definition: d_viewer_3d.h:127
@ c_VIS_TRAFO_CROP_DYNAMIC
Definition: d_enum.h:687
int Dim_fix1()
Definition: d_viewer_3d.h:137
@ ER_index_out_of_range
Definition: d_enum.h:146
@ ER_empty
Definition: d_enum.h:135