25 typedef std::pair<difference_type,difference_type>
coords;
75 nloptimizer_base(2, 12), disp(disp), region_idx(region_idx), disp_interp(disp.get_nlinfo_interpolator(region_idx, interp_type)) { }
79 bool initial_guess()
const override;
80 bool iterative_search()
const override;
81 bool newton()
const override;
94 subregion_nloptimizer() noexcept : scalefactor(), ref_template_avg(), ref_template_ssd_inv(), last_iteration_count(0) { }
112 bool initial_guess()
const override;
113 bool iterative_search()
const override;
114 bool newton()
const override;
116 std::shared_ptr<Array2D<double>> A_ref_ptr;
117 std::shared_ptr<Array2D<double>> A_cur_ptr;
122 std::shared_ptr<Array2D<double>> A_cur_cumsum_p1_ptr;
123 std::shared_ptr<Array2D<double>> A_cur_pow_cumsum_p1_ptr;
126 std::shared_ptr<Array2D<double>> A_dref_dp1_ptr;
127 std::shared_ptr<Array2D<double>> A_dref_dp2_ptr;
128 mutable double ref_template_avg;
129 mutable double ref_template_ssd_inv;
142 mutable int last_iteration_count;
168Disp2D
add(
const std::vector<Disp2D>&,
INTERP);
171Disp2D
add_with_rois(
const std::vector<Disp2D>& disps,
const std::vector<ROI2D>& rois,
INTERP interp_type);
182 DIC_analysis_input() :
scalefactor(),
interp_type(),
subregion_type(),
r(),
num_threads(),
cutoff_corrcoef(),
update_corrcoef(),
prctile_corrcoef(),
roi_update_mode(
ROI_UPDATE_MODE::
SKIP_ALL),
accumulation_mode(
ACCUMULATION_MODE::
ON_THE_FLY),
save_disps_steps(false),
debug() { }
223 bool save_disps_steps_override =
false);
329 SeedParams() : x(0), y(0), u(0.0), v(0.0), du_dx(0.0), du_dy(0.0), dv_dx(0.0), dv_dy(0.0), corrcoef(0.0) { }
331 x(x), y(y), u(0.0), v(0.0), du_dx(0.0), du_dy(0.0), dv_dx(0.0), dv_dy(0.0), corrcoef(0.0) { }
338 params(0) =
static_cast<double>(y);
339 params(1) =
static_cast<double>(x);
346 params(8) = corrcoef;
347 params(9) = diff_norm;
358 seed.
dv_dy = params(4);
359 seed.
dv_dx = params(5);
360 seed.
du_dy = params(6);
361 seed.
du_dx = params(7);
385 const details::subregion_nloptimizer &sr_nloptimizer,
386 const Array2D<double>& ref_gs,
388 const std::vector<SeedParams>& seed_positions,
390 int cutoff_iteration,
391 double cutoff_max_diffnorm,
392 double cutoff_max_corrcoef,
404 roi(roi), seed_params_by_region(params), sr_nloptimizer(sr_nloptimizer) { }
416 const std::vector<SeedParams>& seeds_by_region,
417 double cutoff_corrcoef,
425 const ROI2D& roi_reduced,
428 double cutoff_corrcoef,
435 const std::vector<SeedParams>& seeds,
459 base_input(base), seeds_by_region(seeds), seeds_are_optimized(optimized),
460 cutoff_max_diffnorm(0.1), cutoff_max_corrcoef(0.5) { }
472 const DIC_analysis_input& DIC_input,
473 const std::vector<SeedParams>& seeds_by_region = {},
474 bool seeds_are_optimized = false
481 const DIC_analysis_input& DIC_input,
482 const std::vector<SeedParams>& seeds_by_region = {},
483 bool seeds_are_optimized = false
498 const DIC_analysis_input& DIC_input,
499 const std::vector<SeedParams>& seeds_by_region = {},
500 bool seeds_are_optimized = false
506 const std::vector<ROI2D>& rois);
510 const Array2D<double>& A_cur,
512 const DIC_analysis_parallel_input& input);
521DIC_analysis_output
set_units(
const DIC_analysis_output&,
const std::string&,
double);
545 DIC_output(DIC_output),
546 subregion_type(subregion_type),
610 const std::vector<Image2D>&,
611 const std::vector<Data2D>&,
630 const DIC_analysis_input&,
631 const DIC_analysis_output&,
635 double = std::numeric_limits<double>::quiet_NaN(),
636 double = std::numeric_limits<double>::quiet_NaN(),
643 int = cv::COLORMAP_JET,
645 int = cv::VideoWriter::fourcc(
'M',
'J',
'P',
'G'));
649 const strain_analysis_input&,
650 const strain_analysis_output&,
654 double = std::numeric_limits<double>::quiet_NaN(),
655 double = std::numeric_limits<double>::quiet_NaN(),
662 int = cv::COLORMAP_JET,
664 int = cv::VideoWriter::fourcc(
'M',
'J',
'P',
'G'));
details::Disp2D_nlinfo_interpolator nlinfo_interpolator
std::ptrdiff_t difference_type
disp_nloptimizer() noexcept
disp_nloptimizer(disp_nloptimizer &&)=default
~disp_nloptimizer() noexcept=default
disp_nloptimizer & operator=(const disp_nloptimizer &)=default
disp_nloptimizer(const disp_nloptimizer &)=default
nloptimizer_base::difference_type difference_type
disp_nloptimizer & operator=(disp_nloptimizer &&)=default
nloptimizer_base::coords coords
Array2D< double > grad_buf
void chk_input_params_size(const Array2D< double > &) const
std::ptrdiff_t difference_type
virtual bool iterative_search() const =0
std::pair< const Array2D< double > &, bool > global(const Array2D< double > &) const
std::pair< difference_type, difference_type > coords
std::pair< const Array2D< double > &, bool > operator()(const Array2D< double > &) const
difference_type cutoff_iterations
virtual bool initial_guess() const =0
Array2D< double > hess_buf
virtual bool newton() const =0
nloptimizer_base() noexcept=default
nloptimizer_base::coords coords
nloptimizer_base::difference_type difference_type
const ROI2D::contig_subregion_generator & get_subregion_gen() const
subregion_nloptimizer(const subregion_nloptimizer &)=default
subregion_nloptimizer() noexcept
subregion_nloptimizer(subregion_nloptimizer &&)=default
int get_last_iteration_count() const
subregion_nloptimizer & operator=(subregion_nloptimizer &&)=default
~subregion_nloptimizer() noexcept=default
subregion_nloptimizer & operator=(const subregion_nloptimizer &)=default
ROI2D matlab_update_roi(const ROI2D &, const Disp2D &, INTERP, ROI2D::difference_type radius)
Strain2D LS_strain(const Disp2D &, PERSPECTIVE, double, SUBREGION, ROI2D::difference_type)
DIC_analysis_output DIC_analysis_sequential(const DIC_analysis_input &)
DIC_analysis_output DIC_analysis_parallel(const DIC_analysis_parallel_input &)
Disp2D add(const std::vector< Disp2D > &, INTERP)
std::vector< SeedComputationData > compute_only_seed_points(const Array2D< double > &A_ref, const std::vector< Array2D< double > > &A_curs, const ROI2D &roi, ROI2D::difference_type scalefactor, INTERP interp_type, SUBREGION subregion_type, const std::vector< SeedParams > &seeds_by_region, double cutoff_corrcoef, ROI2D::difference_type region_idx=0, bool debug=false)
Disp2D RGDIC_with_seeds(const Array2D< double > &A_ref, const Array2D< double > &A_cur, const ROI2D &roi, const DIC_analysis_parallel_input &input)
strain_analysis_output strain_analysis(const strain_analysis_input &)
DIC_analysis_output exact_matlab_DIC_analysis_sequential(const DIC_analysis_input &DIC_input, const std::vector< SeedParams > &seeds_by_region={}, bool seeds_are_optimized=false)
Disp2D exact_add_with_rois(const std::vector< Disp2D > &disps, const std::vector< ROI2D > &rois)
void save(const Data2D &data, std::ofstream &os)
void save_strain_video(const std::string &, const strain_analysis_input &, const strain_analysis_output &, STRAIN, double, double, double=std::numeric_limits< double >::quiet_NaN(), double=std::numeric_limits< double >::quiet_NaN(), bool=true, bool=true, bool=true, double=-1.0, double=1.0, ROI2D::difference_type=11, int=cv::COLORMAP_JET, double=2.0, int=cv::VideoWriter::fourcc('M', 'J', 'P', 'G'))
Disp2D RGDIC(const Array2D< double > &, const Array2D< double > &, const ROI2D &, ROI2D::difference_type, INTERP, SUBREGION, ROI2D::difference_type, ROI2D::difference_type, double, bool)
Disp2D compute_displacements(const details::subregion_nloptimizer &sr_nloptimizer, const ROI2D &roi_reduced, const SeedParams &seedparams, ROI2D::difference_type scalefactor, double cutoff_corrcoef, ROI2D::difference_type region_idx, bool debug)
DIC_analysis_output filter_by_correlation(const DIC_analysis_output &, double)
void save_ncorr_data_over_img(const std::string &, const Image2D &, const Data2D &, double, double, double, bool, bool, bool, const std::string &, double, double, double, ROI2D::difference_type, int)
DIC_analysis_output matlab_DIC_analysis_parallel(const DIC_analysis_parallel_input &)
DIC_analysis_output exact_matlab_DIC_analysis_parallel(const DIC_analysis_parallel_input &)
std::vector< SeedParams > propagate_seeds(const std::vector< SeedParams > &seeds, ROI2D::difference_type spacing)
void save_DIC_video(const std::string &, const DIC_analysis_input &, const DIC_analysis_output &, DISP, double, double, double=std::numeric_limits< double >::quiet_NaN(), double=std::numeric_limits< double >::quiet_NaN(), bool=true, bool=true, bool=true, double=-1.0, double=1.0, ROI2D::difference_type=11, int=cv::COLORMAP_JET, double=2.0, int=cv::VideoWriter::fourcc('M', 'J', 'P', 'G'))
DIC_analysis_output change_perspective(const DIC_analysis_output &, INTERP)
void save_ncorr_data_over_img_video(const std::string &, const std::vector< Image2D > &, const std::vector< Data2D > &, double, double, double, double, bool, bool, bool, const std::string &, double, double, double, ROI2D::difference_type, int, double, int)
Disp2D add_with_rois(const std::vector< Disp2D > &disps, const std::vector< ROI2D > &rois, INTERP interp_type)
DIC_analysis_output set_units(const DIC_analysis_output &, const std::string &, double)
void imshow_ncorr_data_over_img(const Image2D &, const Data2D &, ROI2D::difference_type=-1)
ROI2D update(const ROI2D &, const Disp2D &, INTERP, ROI_UPDATE_MODE mode=ROI_UPDATE_MODE::SKIP_ALL)
DIC_analysis_output DIC_analysis(const DIC_analysis_input &)
SeedAnalysisResult analyze_seeds(const details::subregion_nloptimizer &sr_nloptimizer, const Array2D< double > &ref_gs, const ROI2D &roi, const std::vector< SeedParams > &seed_positions, ROI2D::difference_type radius, int cutoff_iteration, double cutoff_max_diffnorm, double cutoff_max_corrcoef, bool debug=true)
DIC_analysis_output matlab_DIC_analysis_sequential(const DIC_analysis_input &DIC_input, const std::vector< SeedParams > &seeds_by_region={}, bool seeds_are_optimized=false)
DIC_analysis_output change_perspective_with_inversion(const DIC_analysis_output &, INTERP)
~DIC_analysis_output() noexcept=default
std::vector< Disp2D > disps
DIC_analysis_output & operator=(DIC_analysis_output &&)=default
DIC_analysis_output(DIC_analysis_output &&)=default
DIC_analysis_output(const DIC_analysis_output &)=default
PERSPECTIVE perspective_type
DIC_analysis_output & operator=(const DIC_analysis_output &)=default
ROI2D::difference_type difference_type
friend void save(const DIC_analysis_output &, std::ofstream &)
static DIC_analysis_output load(std::ifstream &)
DIC_analysis_step_data()=default
DIC_analysis_step_data & operator=(const DIC_analysis_step_data &)=default
~DIC_analysis_step_data() noexcept=default
std::vector< ROI2D > step_rois
ROI2D::difference_type difference_type
std::vector< difference_type > step_ref_idx
friend void save(const DIC_analysis_step_data &, std::ofstream &)
DIC_analysis_step_data(DIC_analysis_step_data &&)=default
DIC_analysis_step_data(const DIC_analysis_step_data &)=default
DIC_analysis_step_data & operator=(DIC_analysis_step_data &&)=default
static DIC_analysis_step_data load(std::ifstream &)
std::vector< Disp2D > step_disps
std::vector< SeedParams > seeds
std::vector< SeedConvergence > convergence
std::vector< SeedParams > seed_params_by_region
details::subregion_nloptimizer sr_nloptimizer
SeedComputationData(const ROI2D &roi, const std::vector< SeedParams > ¶ms, const details::subregion_nloptimizer &sr_nloptimizer)
SeedComputationData()=default
SeedConvergence(int iter, double norm)
static SeedParams from_array(const Array2D< double > ¶ms)
Array2D< double > to_array(double diff_norm=0.0) const
ROI2D::difference_type difference_type
SeedParams(difference_type x, difference_type y)
ROI2D::difference_type difference_type
strain_analysis_output & operator=(const strain_analysis_output &)=default
strain_analysis_output(strain_analysis_output &&)=default
strain_analysis_output & operator=(strain_analysis_output &&)=default
strain_analysis_output(const strain_analysis_output &)=default
strain_analysis_output()=default
~strain_analysis_output() noexcept=default
std::vector< Strain2D > strains