crosscorr#

HR-EBSD: deviatoric strain and lattice rotation by pattern cross-correlation.

Where refine_hr() matches a pattern against a dynamical master, HR-EBSD is purely differential: it cross-correlates regions of a test pattern against a reference pattern of the same phase and fits the displacement gradient tensor that maps one onto the other. Nothing about the master pattern enters, so the model-fidelity ceiling that caps absolute pattern-center accuracy near 1e-3 does not apply here.

The shift equation#

A lattice displacement gradient beta = F - I sends a crystal direction r to (I + beta) r. In gnomonic screen coordinates (x, y, z) with z = pcz, a feature therefore moves by, to first order,

qx = b11 x + b12 y + b13 z - (x/z)(b31 x + b32 y + b33 z) qy = b21 x + b22 y + b23 z - (y/z)(b31 x + b32 y + b33 z)

Two equations per region of interest, linear in beta. Adding c I to beta leaves both exactly unchanged – the hydrostatic component is invisible to a projection – so only the 8 trace-free components are measurable and hrebsd() solves under trace(beta) = 0. Recovering the hydrostatic part needs an elastic boundary condition (usually sigma_33 = 0 at the free surface) and the stiffness tensor; that is left to the caller.

Reference remapping#

The first-order shift equation degrades once the lattice rotation is large, and a pattern-center error coupled to a lattice rotation w leaks in as a phantom strain of order (dpc / pcz) * w. So hrebsd() defaults to two passes: measure F, re-project the reference through the gnomonic geometry into the deformed configuration (remap_reference()), then re-correlate and compose. The residual rotation entering the second pass is only as large as the first pass’s error, which relaxes the pattern-center requirement by one to two orders of magnitude. The remap is exact rather than first-order, and it absorbs any pattern-center difference between the reference and test points as well.

How much of this is verified#

The geometry: the design matrix reproduces the exact projective displacement of a region to ~1e-4 px, and the solver inverts it to ~1e-3 of beta.

The locator, on real 2048px direct-detection patterns (64 regions on a uniform grid, 5% independent noise added, true shifts from 0.04 to 13 px, known exactly by Fourier shift): median error 0.002-0.003 px, worst 0.006-0.009 px at 128-256 px regions. Plain correlation with one refinement iteration measured best; whitening was neither needed nor helpful. Feeding that precision through the shift equation puts beta around 1e-5 with ~64 regions, and the error falls as 1 / sqrt(M).

After Wilkinson, Meaden & Dingley (2006); remapping after Britton & Wilkinson (2012).

Functions

hrebsd(patterns, reference, detector[, ...])

Deviatoric strain and lattice rotation relative to a reference pattern.

remap_reference(reference, detector, f, ...)

Re-project a whole reference pattern into the deformed configuration.

roi_centers(detector[, grid, roi_size, margin])

Region-of-interest centers on a grid x grid layout, as (M, 2) row/col.

Classes

HREBSDResult(beta, strain, rotation, ...)

What hrebsd() measured, per test pattern, in the detector frame.