Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

TransferFactor

Created by Codex.

Constrain two fundamental matrices by transferring corresponding points into a third view.

Open In Colab

Mathematical idea

Two observations predict epipolar lines in their shared target view,

ℓc(a)=Fcap~a,ℓc(b)=Fcbp~b.\ell_c^{(a)}=F_{ca}\tilde p_a, \qquad \ell_c^{(b)}=F_{cb}\tilde p_b.

Their homogeneous intersection is p^c∝ℓc(a)×ℓc(b)\hat p_c\propto\ell_c^{(a)}\times\ell_c^{(b)}. After dehomogenization, the factor returns p^c−pc\hat p_c-p_c; stacking NN triplets produces a 2N2N-dimensional residual.

Model

For each (p_a, p_b, p_c) triplet, the factor intersects the two epipolar lines transferred from views a and b into their shared view c, then compares the result with observed p_c. The residual dimension is 2N for N triplets; the noise model must have the same dimension.

Python exposes TransferFactorFundamentalMatrix and TransferFactorSimpleFundamentalMatrix. When intrinsics are known, EssentialTransferFactor stores a fixed calibration with the factor. EssentialTransferFactorK instead treats calibration as an optimized variable. The calibration template has concrete Cal3_S2, Cal3f, and Cal3Bundler variants; the example uses the representative Cal3_S2 forms.

Practical notes

  • Use consistent edge conventions: an EdgeKey(i,j) identifies the matrix stored for that view pair.

  • Use several well-spread triplets per factor for a useful constraint.

  • Jacobians are computed numerically, so this factor is typically more expensive than an analytic reprojection factor.