CPPxDIC
C++ Digital Image Correlation library for fingertip 3D reconstruction
Loading...
Searching...
No Matches
step_d_workflow.h
Go to the documentation of this file.
1
7#ifndef STEP_D_WORKFLOW_H
8#define STEP_D_WORKFLOW_H
9
10#include "parameters.h"
11#include "image_processor.h"
12#include "roi_manager.h"
13#include "config.h"
14#include "stage_plan.h"
15#include <ncorr.h>
16#include <opencv2/opencv.hpp>
17#include <string>
18#include <vector>
19
20namespace cppxdic {
21
28public:
34 explicit StepDWorkflow(const Config& config);
35
46 std::tuple<std::string, std::vector<int>, bool> execute(const std::string& trial,
47 int stereopair,
48 const StagePlan& plan = StagePlan{});
49
56 static bool updateMaskAndSeedFromOutput(const cv::Mat& input_mask,
57 const SeedPoint& input_seed,
58 const ncorr::DIC_analysis_output& dic_output,
59 cv::Mat& output_mask,
60 SeedPoint& output_seed);
61
77 static void formatDic2DPairResults(const Config& config,
78 const StepParameters& step_params,
79 const std::string& output_path,
80 int cam_1,
81 int cam_2,
82 const std::vector<int>& pairOrder,
83 bool pairForced);
84
85private:
86 const Config& config_;
87 BaseParameters base_params_;
88 StepParameters step1_params_; // Tracking camera 1
89 StepParameters step2_params_; // Tracking camera 2
90 StepParameters step1_2_params_; // Matching between cameras
91 ProtocolInfo protocol_info_;
92
100 void setupBaseParameters(const std::string& trial,
101 int stereopair,
102 const std::string& reftrial);
103
107 void setupStepParameters();
108
114 bool loadProtocol();
115
122 std::string determineReferenceTrial(const std::string& trial);
123
134 bool importVideoFrames(const std::string& trial,
135 int stereopair,
136 std::vector<cv::Mat>& cam_first_raw,
137 std::vector<cv::Mat>& cam_second_raw,
138 int maxFrames = 0);
139
148 void performSaturation(const std::vector<cv::Mat>& cam_first_raw,
149 const std::vector<cv::Mat>& cam_second_raw,
150 std::vector<cv::Mat>& cam_first_satur,
151 std::vector<cv::Mat>& cam_second_satur);
152
164 bool initializeROIAndSeed(const std::vector<cv::Mat>& cam_first_satur,
165 cv::Mat& refmask_REF,
166 cv::Mat& refmask_trial,
167 SeedPoint& ref_seed_point,
168 SeedPoint& initial_seed_point_set1);
169
183 bool matchingInitialFrame(const std::vector<cv::Mat>& cam_ref,
184 const std::vector<cv::Mat>& cam_cur,
185 const cv::Mat& refmask_ref,
186 const std::string ncorr_matching_path,
187 const std::string message,
188 const SeedPoint& initial_seed_point_ref,
189 cv::Mat& refmask_cur_matched,
190 SeedPoint& initial_seed_point_cur);
191
203 bool performMatching(const std::vector<cv::Mat>& cam_first_satur,
204 const std::vector<cv::Mat>& cam_second_satur,
205 cv::Mat& refmask_trial,
206 SeedPoint& initial_seed_point_set1,
207 cv::Mat& refmask_trial_matched,
208 SeedPoint& initial_seed_point_set2);
209
219 bool performTracking(const int tracking_number,
220 const std::vector<cv::Mat>& cam_frames,
221 const cv::Mat& refmask,
222 const SeedPoint& initial_seed_point);
223
232 bool performTracking1(const std::vector<cv::Mat>& cam_first,
233 const cv::Mat& refmask_trial,
234 const SeedPoint& initial_seed_point_set1);
235
244 bool performTracking2(const std::vector<cv::Mat>& cam_second,
245 const cv::Mat& refmask_trial_matched,
246 const SeedPoint& initial_seed_point_set2);
247
257 void applyImageFiltering(const std::vector<cv::Mat>& cam_first_satur,
258 const std::vector<cv::Mat>& cam_second_satur,
259 const cv::Mat& refmask_trial,
260 std::vector<cv::Mat>& cam_first,
261 std::vector<cv::Mat>& cam_second);
262
270 void saveTrialInfo(const std::string& trial, int stereopair, int num_frames);
271
280 void formatOutput(const std::string& trial,
281 int stereopair,
282 const std::vector<int>& pairOrder,
283 bool pairForced);
284
288 void writeNcorrMatSidecar(const std::string& output_path,
289 const cv::Mat& ref_img,
290 const std::vector<cv::Mat>& cur_imgs,
291 const cv::Mat& roi_mask,
292 const StepParameters& step_params,
293 const ncorr::DIC_analysis_output& dic_output) const;
294
298 void writeMatchingDebugPanel(const std::string& stage_name,
299 const cv::Mat& ref_img,
300 const cv::Mat& cur_img,
301 const cv::Mat& mask_before,
302 const cv::Mat& mask_after,
303 const SeedPoint& seed_before,
304 const SeedPoint& seed_after,
305 const ncorr::DIC_analysis_output& dic_output) const;
306
319 ncorr::DIC_analysis_output runNcorrAnalysis(const cv::Mat& ref_img,
320 const std::vector<cv::Mat>& cur_imgs,
321 const cv::Mat& roi_mask,
322 const SeedPoint& seed_point,
323 const StepParameters& step_params,
324 const std::string& output_path,
325 const bool go_parallel,
326 const bool use_no_update = false);
327
328};
329
330} // namespace cppxdic
331
332#endif // STEP_D_WORKFLOW_H
StepDWorkflow class Implements the complete 2D DIC analysis workflow Equivalent to stepD_2DDIC....
std::tuple< std::string, std::vector< int >, bool > execute(const std::string &trial, int stereopair, const StagePlan &plan=StagePlan{})
Execute Step D: 2D DIC Analysis Main entry point for 2D DIC processing.
static void formatDic2DPairResults(const Config &config, const StepParameters &step_params, const std::string &output_path, int cam_1, int cam_2, const std::vector< int > &pairOrder, bool pairForced)
Format cached ncorr outputs into myDIC2DpairResults (step2_dic_finish equivalent).
static bool updateMaskAndSeedFromOutput(const cv::Mat &input_mask, const SeedPoint &input_seed, const ncorr::DIC_analysis_output &dic_output, cv::Mat &output_mask, SeedPoint &output_seed)
Map an ROI mask and seed point through the first displacement field.
DataSerializer - Abstract base class for format-agnostic DIC data I/O.
StagePlan — selects which pipeline sub-steps a single process executes.
Definition stage_plan.h:21
Base parameters structure Contains fundamental paths and settings for DIC analysis Equivalent to base...
Definition parameters.h:20
Protocol information structure Contains trial condition information from protocol MAT file.
Definition parameters.h:120
Seed point structure Stores seed points in both pixel world (pw) and subset world (sw) coordinates.
Definition parameters.h:108
Step parameters structure for DIC analysis Contains DIC-specific parameters like radius,...
Definition parameters.h:79