CPPxDIC
C++ Digital Image Correlation library for fingertip 3D reconstruction
Loading...
Searching...
No Matches
utils.h
Go to the documentation of this file.
1
6#ifndef UTILS_H
7#define UTILS_H
8
9#include "config.h"
10#include "parameters.h"
11#include <string>
12#include <string_view>
13#include <vector>
14#include <opencv2/opencv.hpp>
15#include <Eigen/Dense>
16
17class Utils {
18public:
19 // Check data and protocol files (equivalent to dic_check.m)
20 static bool dicCheck(const Config& config);
21
22 // File system utilities
23 static bool fileExists(const std::string& path);
24 static bool directoryExists(const std::string& path);
25 static std::vector<std::string> findFiles(const std::string& directory,
26 const std::string& pattern);
27
28 // String utilities
29 static std::string formatString(const std::string& format, ...);
30 static std::vector<std::string> split(const std::string& str, char delimiter);
31
32 // Video import (equivalents of import_vid.m / import_raw_vid.m)
33 // maxFrames > 0 limits extraction to the first maxFrames selected frames
34 // (e.g. 1 when only the reference frame is needed); 0 means all frames.
35 static bool importVid(const Config& config,
36 int trial,
37 int stereopair,
38 std::vector<std::string>& cam1Frames,
39 std::vector<std::string>& cam2Frames,
40 int maxFrames = 0);
41
42 static bool importRawVid(const Config& config,
43 int trial,
44 int stereopair,
45 int frameStart,
46 int frameEnd,
47 int frameJump,
48 std::vector<std::string>& cam1Frames,
49 std::vector<std::string>& cam2Frames,
50 int maxFrames = 0);
51
52 // ROI/SEED from MAT to JSON
53 static bool loadROIFromMat(const Config& config,
54 int trial,
55 int stereopair,
56 std::string& roiJsonPath,
57 std::string& roiMaskImagePath);
58
59 static bool loadSeedFromMat(const Config& config,
60 int trial,
61 int stereopair,
62 std::string& seedJsonPath);
63
64 // Camera calibration and distortion removal
66 cv::Mat camera_matrix; // 3x3 intrinsic matrix [fx 0 cx; 0 fy cy; 0 0 1]
67 cv::Mat distortion_coeffs; // Distortion coefficients [k1 k2 p1 p2 k3...]
69
71 };
72
78 static bool loadCameraParameters(const std::string& mat_path, CameraParameters& params);
79
87 static void undistortPoints(const std::vector<cv::Point2d>& points_in,
88 const CameraParameters& params,
89 std::vector<cv::Point2d>& points_out);
90
94 static cv::Point2d undistortPoint(const cv::Point2d& point_in,
95 const CameraParameters& params);
96
108 static bool DLT11Calibration(const double* P2, const double* P3, size_t N,
109 std::vector<double>& L);
110
111 // Rigid Body Motion (RBM) transformation
113 Eigen::Matrix3d R; // Rotation matrix
114 Eigen::Vector3d t; // Translation vector
116
117 RigidTransform() : R(Eigen::Matrix3d::Identity()),
118 t(Eigen::Vector3d::Zero()),
119 is_valid(false) {}
120 };
121
132 static bool computeRigidTransform(const std::vector<Eigen::Vector3d>& points_from,
133 const std::vector<Eigen::Vector3d>& points_to,
134 RigidTransform& transform);
135
140 static std::vector<Eigen::Vector3d> applyRigidTransform(const std::vector<Eigen::Vector3d>& points_in,
141 const RigidTransform& transform);
142
152 static void setCameraPairs(const std::vector<std::pair<int,int>>& camera_pairs);
153
155 static const std::vector<std::pair<int,int>>& cameraPairs();
156
164 static void getCamerasForPair(int stereopair, int& cam_first, int& cam_second);
165
173 static void getCamerasForPair(int stereopair, const std::vector<std::pair<int,int>>& camera_pairs,
174 int& cam_first, int& cam_second);
175
184 static std::string buildBaseDataPath(const Config& config, bool with_data_or_dic_path = false, bool with_rawdata = false, bool with_speckles = false);
185
192 static std::string buildOutputUntilTrialDir(const Config& config, int trial);
193
200 static std::string buildOutputUntilPhaseDir(const Config& config, int trial);
201
202
215 static std::string buildPath(const Config& config, bool with_data_or_dic_path = false, bool with_rawdata = false, bool with_speckles = false, bool with_material = false, bool with_video = false, bool with_protocol = false, bool with_calib = false);
216
225 static std::string buildUntilMaterialDir(const Config& config, bool with_data_or_dic_path, bool with_rawdata, bool with_speckles);
226
232 static std::string buildOutputUntilMaterialDir(const Config& config);
233
243 static std::string buildProtocolDir(const Config& config, bool with_data_or_dic_path = false, bool with_rawdata = false, bool with_speckles = false, bool with_material = false);
244
245
255 static std::string buildVideoDir(const Config& config, bool with_data_or_dic_path = false, bool with_rawdata = false, bool with_speckles = false, bool with_material = false);
256
262 static std::string buildCalibDir(const Config& config);
263
273 static std::string buildPath(const cppxdic::BaseParameters& parameters, bool with_material = false, bool with_trial = false, bool with_phase = false, bool with_cache = false);
274
280 static std::string buildOutputPath(const cppxdic::BaseParameters& parameters);
281
287 static std::string buildOutputCachePath(const cppxdic::BaseParameters& parameters);
288
289 static std::string likeRoiOrSeedPath(const std::string& path, const std::string_view& prefix, const std::string& reftrial, const std::string& phase, int stereopair, const std::string& extension);
290 static std::string likeRoiPath(const std::string& path, const std::string& reftrial, const std::string& phase, int stereopair, const std::string& extension);
291 static std::string likeSeedPath(const std::string& path, const std::string& reftrial, const std::string& phase, int stereopair, const std::string& extension);
292
301 static std::string buildRoiFilePath(const cppxdic::BaseParameters& parameters, std::string reftrial, int stereopair, const std::string& extension = ".mat");
302
311 static std::string buildSeedFilePath(const cppxdic::BaseParameters& parameters, std::string reftrial, int stereopair, const std::string& extension = ".mat");
312
313
322 static std::string buildMatchingFilePath(const cppxdic::BaseParameters& parameters, std::string reftrial, int stereopair, const std::string& extension = ".bin");
323
324 static std::string buildDic3DCombinedFilePath(const std::string pathdir, int num_pair, const std::string& ext);
325 static std::string buildDic3DPPresultsFilePath(const std::string pathdir, int num_pair, const std::string& fileversion, const std::string& ext);
326 static std::string buildVizPath(const std::string pathdir, const std::string filename);
327 static std::string buildDic2DPairResultsFilePath(const std::string pathdir, int cam_1, int cam_2, const std::string& extension);
328 static std::string buildNcorrFilePath(const std::string pathdir, int cam_1, int cam_2 = -1, const std::string& extension = ".bin");
329
330private:
331 static bool checkROIReferences(const Config& config);
332 static bool checkSeedReferences(const Config& config);
333 static bool checkProtocolFiles(const Config& config);
334 static bool checkCalibrationFiles(const Config& config);
335
336 static std::string buildRoiOrSeedLikeFilePath(const cppxdic::BaseParameters& parameters, std::string reftrial, int stereopair, std::string_view prefix, const std::string& extension = ".mat");
337
338};
339
340#endif // UTILS_H
Utility functions for CPPXDIC Equivalent to various utility functions in Matlab xDIC.
Definition utils.h:17
static cv::Point2d undistortPoint(const cv::Point2d &point_in, const CameraParameters &params)
Undistort single 2D point.
Definition utils.cpp:934
static std::string buildNcorrFilePath(const std::string pathdir, int cam_1, int cam_2=-1, const std::string &extension=".bin")
Definition utils.cpp:1363
static std::string buildVideoDir(const Config &config, bool with_data_or_dic_path=false, bool with_rawdata=false, bool with_speckles=false, bool with_material=false)
Build the video path.
Definition utils.cpp:1249
static void setCameraPairs(const std::vector< std::pair< int, int > > &camera_pairs)
Register the process-wide stereopair -> (cam_first, cam_second) table.
Definition utils.cpp:246
static std::string likeRoiPath(const std::string &path, const std::string &reftrial, const std::string &phase, int stereopair, const std::string &extension)
Definition utils.cpp:1303
static bool fileExists(const std::string &path)
Definition utils.cpp:185
static bool importRawVid(const Config &config, int trial, int stereopair, int frameStart, int frameEnd, int frameJump, std::vector< std::string > &cam1Frames, std::vector< std::string > &cam2Frames, int maxFrames=0)
Definition utils.cpp:349
static std::string formatString(const std::string &format,...)
static std::string buildPath(const Config &config, bool with_data_or_dic_path=false, bool with_rawdata=false, bool with_speckles=false, bool with_material=false, bool with_video=false, bool with_protocol=false, bool with_calib=false)
Build the path based on activated parameters and return the proper string.
Definition utils.cpp:1204
static std::string likeSeedPath(const std::string &path, const std::string &reftrial, const std::string &phase, int stereopair, const std::string &extension)
Definition utils.cpp:1309
static std::string buildOutputCachePath(const cppxdic::BaseParameters &parameters)
Build the output cache path.
Definition utils.cpp:1290
static std::string buildBaseDataPath(const Config &config, bool with_data_or_dic_path=false, bool with_rawdata=false, bool with_speckles=false)
Build base data path.
Definition utils.cpp:1162
static std::vector< std::string > split(const std::string &str, char delimiter)
Definition utils.cpp:224
static std::vector< std::string > findFiles(const std::string &directory, const std::string &pattern)
Definition utils.cpp:193
static std::string likeRoiOrSeedPath(const std::string &path, const std::string_view &prefix, const std::string &reftrial, const std::string &phase, int stereopair, const std::string &extension)
Definition utils.cpp:1294
static std::string buildDic3DPPresultsFilePath(const std::string pathdir, int num_pair, const std::string &fileversion, const std::string &ext)
Definition utils.cpp:1346
static std::string buildDic2DPairResultsFilePath(const std::string pathdir, int cam_1, int cam_2, const std::string &extension)
Definition utils.cpp:1357
static std::string buildProtocolDir(const Config &config, bool with_data_or_dic_path=false, bool with_rawdata=false, bool with_speckles=false, bool with_material=false)
Build protocol path.
Definition utils.cpp:1241
static std::string buildRoiFilePath(const cppxdic::BaseParameters &parameters, std::string reftrial, int stereopair, const std::string &extension=".mat")
Build the roi file path.
Definition utils.cpp:1323
static bool importVid(const Config &config, int trial, int stereopair, std::vector< std::string > &cam1Frames, std::vector< std::string > &cam2Frames, int maxFrames=0)
Definition utils.cpp:468
static std::string buildSeedFilePath(const cppxdic::BaseParameters &parameters, std::string reftrial, int stereopair, const std::string &extension=".mat")
Build the seed file path.
Definition utils.cpp:1328
static std::string buildCalibDir(const Config &config)
Build the calib path.
Definition utils.cpp:1257
static bool dicCheck(const Config &config)
Utility functions implementation for CPPXDIC.
Definition utils.cpp:23
static std::string buildVizPath(const std::string pathdir, const std::string filename)
Definition utils.cpp:1353
static void undistortPoints(const std::vector< cv::Point2d > &points_in, const CameraParameters &params, std::vector< cv::Point2d > &points_out)
Undistort 2D points using camera parameters Matches MATLAB: undistortPoints(points,...
Definition utils.cpp:911
static bool computeRigidTransform(const std::vector< Eigen::Vector3d > &points_from, const std::vector< Eigen::Vector3d > &points_to, RigidTransform &transform)
Compute optimal rigid body transformation between two point clouds Matches MATLAB: rigidTransformatio...
Definition utils.cpp:1060
static bool DLT11Calibration(const double *P2, const double *P3, size_t N, std::vector< double > &L)
Compute DLT (Direct Linear Transformation) 11 parameters from 2D-3D point correspondences Matches MAT...
Definition utils.cpp:999
static std::string buildOutputUntilPhaseDir(const Config &config, int trial)
Build output dir until the Phase folder.
Definition utils.cpp:1195
static const std::vector< std::pair< int, int > > & cameraPairs()
Currently registered stereopair table (see setCameraPairs).
Definition utils.cpp:250
static std::string buildOutputUntilMaterialDir(const Config &config)
Build output path until material folder.
Definition utils.cpp:1237
static std::string buildOutputUntilTrialDir(const Config &config, int trial)
Build output dir until Trial folder.
Definition utils.cpp:1186
static std::vector< Eigen::Vector3d > applyRigidTransform(const std::vector< Eigen::Vector3d > &points_in, const RigidTransform &transform)
Apply rigid transformation to point cloud points_out = R * points_in + t.
Definition utils.cpp:1140
static std::string buildMatchingFilePath(const cppxdic::BaseParameters &parameters, std::string reftrial, int stereopair, const std::string &extension=".bin")
Build the matching file path.
Definition utils.cpp:1334
static std::string buildUntilMaterialDir(const Config &config, bool with_data_or_dic_path, bool with_rawdata, bool with_speckles)
Build path until material folder.
Definition utils.cpp:1229
static bool directoryExists(const std::string &path)
Definition utils.cpp:189
static bool loadROIFromMat(const Config &config, int trial, int stereopair, std::string &roiJsonPath, std::string &roiMaskImagePath)
Definition utils.cpp:596
static bool loadCameraParameters(const std::string &mat_path, CameraParameters &params)
Load camera calibration parameters from MATLAB .mat file Matches MATLAB: load('cameraCBparameters_cam...
Definition utils.cpp:804
static std::string buildOutputPath(const cppxdic::BaseParameters &parameters)
Build the output path.
Definition utils.cpp:1286
static bool loadSeedFromMat(const Config &config, int trial, int stereopair, std::string &seedJsonPath)
Definition utils.cpp:670
static std::string buildDic3DCombinedFilePath(const std::string pathdir, int num_pair, const std::string &ext)
Definition utils.cpp:1341
static void getCamerasForPair(int stereopair, int &cam_first, int &cam_second)
Get camera numbers for a given stereopair using the registered table (setCameraPairs).
Definition utils.cpp:254
cv::Mat distortion_coeffs
Definition utils.h:67
cv::Mat camera_matrix
Definition utils.h:66
Eigen::Vector3d t
Definition utils.h:114
Eigen::Matrix3d R
Definition utils.h:113
Base parameters structure Contains fundamental paths and settings for DIC analysis Equivalent to base...
Definition parameters.h:20