Expand description
Gravity prior for GPS ENU fits whose positions are (nearly) collinear.
A Sim3 fitted to camera centers on a straight line leaves the rotation about that line unobservable: the scene can end up rolled about the flight line. When that happens the free roll is chosen from gravity: (a) a dominant ground plane fitted to the sparse points (cameras above it, normal -> +Up), or, failing that, (b) the mean optical axis pointing down. Scale and translation stay those of the GPS fit. With non-degenerate GPS nothing here changes the fit.
Structs§
- Gravity
Resolution - Outcome of a degenerate-GPS fit.
Enums§
- Gravity
Prior - Which gravity prior fixed the free roll.
Constants§
- COLLINEAR_
RATIO - Ratio of the 2nd to the 1st singular value of the centred positions below which they count as collinear.
Functions§
- collinearity_
ratio - σ2/σ1 of the centred positions (1.0 when fewer than 3 points or no spread, so those are never “degenerate” here).
- degenerate_
ratio Some(ratio)when the positions are collinear (ratio <COLLINEAR_RATIO).- fit_
enu_ sim3 - Umeyama Sim3
src -> dst; whendstis collinear the roll about the line is resolved with the gravity prior ofrec(srcare the model-frame positions).Noneif Umeyama fails. - fit_
same_ up_ sim3 - Umeyama Sim3 between two frames that already share the same Up (e.g. two ENU models). With collinear
dstthe roll about the line is chosen so that +Z maps to +Z. - resolve_
roll - Resolves the free roll of
t(model -> ENU) about the line throughdst.