Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
251b538
chore: enforce C++17, document CMake options
johnaoga Jun 16, 2026
4bc4ee1
feat(ncorr): audit CLI; stub missing post-DIC output flags
johnaoga Jun 16, 2026
6aafea2
fix(input/images): harden image-folder reader edge cases
johnaoga Jun 16, 2026
f241076
feat(input/memory): add in-memory NcorrSession API (stub)
johnaoga Jun 16, 2026
9c31435
feat(params): implement CLI > config-file > compiled-defaults overrid…
johnaoga Jun 16, 2026
b2bf99c
docs(tests): add TESTS_PLAN.md — awaiting confirmation before impleme…
johnaoga Jun 16, 2026
ea1d73e
refactor(input/images): extract frame-reader helpers into reusable he…
johnaoga Jun 16, 2026
6634af9
test(unit): add Catch2 v3 suite for ini/config/frame_reader/session
johnaoga Jun 16, 2026
7e5f89b
test(integration): add DIC pipeline-stage tests on ohtcfrp fixture
johnaoga Jun 16, 2026
417b89c
test(e2e): add ohtcfrp end-to-end regression guard with golden baseline
johnaoga Jun 16, 2026
fb7eb2a
docs: add quickstart guide
johnaoga Jun 16, 2026
4af29db
docs: add developer guide
johnaoga Jun 16, 2026
87585d4
docs: add user guide
johnaoga Jun 16, 2026
cfc0640
chore(deploy): organise parallel/cluster/Docker scripts under deploy/
johnaoga Jun 16, 2026
8273d66
ci: add GitHub Actions workflow for build, test, lint
johnaoga Jun 16, 2026
e2d3de5
docs: add PR description for newversion (local, not yet opened)
johnaoga Jun 16, 2026
43f035b
feat(input/memory): implement in-memory NcorrSession DIC
johnaoga Jun 16, 2026
b5799aa
test(session): real in-memory DIC parity test; move session tests to …
johnaoga Jun 16, 2026
e9f117b
feat(proxyncorr): lagrangian perspective + strain CSV export; clean u…
johnaoga Jun 16, 2026
01b6e81
feat(matlab-dic): fixed-step reference updates (fixed_step_ref option)
johnaoga Jul 7, 2026
5cae56e
Merge branch 'main' into feat/fixed-step-ref
johnaoga Sep 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion include/ncorr.h
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,15 @@ struct DIC_analysis_parallel_input final {
// Seed-based parallelization parameters
double cutoff_max_diffnorm; // Diffnorm threshold for failure prediction
double cutoff_max_corrcoef; // Corrcoef threshold for failure prediction


// Fixed-step reference updates (MATLAB ncorr step analysis semantics):
// when > 0, every seed segment is capped at this many frames, forcing a
// reference change (with seed propagation and — in the exact_matlab_*
// path — chain composition back to the global reference) every N frames
// regardless of seed quality. 0 (default) = segments end only on
// seed-quality failure (long-standing behavior).
difference_type fixed_step_ref = 0;

// Constructors
DIC_analysis_parallel_input() : seeds_are_optimized(false), cutoff_max_diffnorm(0.1), cutoff_max_corrcoef(0.5) { }

Expand Down
11 changes: 10 additions & 1 deletion src/ncorr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4904,8 +4904,17 @@ matlab_seed_segment matlab_compute_seed_segment(const DIC_analysis_parallel_inpu

segment.seeds_by_frame.reserve(DIC_input.imgs.size() - ref_idx - 1);

// Fixed-step reference updates: cap the segment at fixed_step_ref frames so
// the caller's segment loop performs a reference change (seed propagation +
// chain composition) every N frames — MATLAB ncorr step analysis semantics.
const difference_type last_idx_excl =
input.fixed_step_ref > 0
? std::min(difference_type(DIC_input.imgs.size()),
ref_idx + 1 + input.fixed_step_ref)
: difference_type(DIC_input.imgs.size());

const auto A_ref = DIC_input.imgs[ref_idx].get_gs();
for (difference_type cur_idx = ref_idx + 1; cur_idx < difference_type(DIC_input.imgs.size()); ++cur_idx) {
for (difference_type cur_idx = ref_idx + 1; cur_idx < last_idx_excl; ++cur_idx) {
const auto A_cur = DIC_input.imgs[cur_idx].get_gs();
auto sr_nloptimizer = details::subregion_nloptimizer(
A_ref,
Expand Down
Loading