Class ProjectiveStructureFromHomographies
Given a set of homographies mapping pixels in view i to view 0 this will estimate the projective camera matrix of each view. x' = P*X, where P is the camera matrix that is to be estimated, x' is pixel, and X is 3D feature location in view 0's reference frame. Output is 3D structure and camera matrices.
A camera matrix is a 3x4 projective matrix with the following structure [M,t]. If a homography defines the transform between pixels in one view to another view then M is equal to that homography. The camera matrix is now defined up to the unknown t. To solve for t the points in this projective frame also need to be derived. This is done by solving a linear system:
[ p.x*m'[2]  m'[0] , 1 , 0 , p.x ] [ p.y*m'[2]  m'[1] , 0 , 1 , p.y ] * [X ; t ]where m'[i] is row 'i' in M transposed. (p.x,p.y) is pixel observation, X and t are the unknowns. Each observation x = P*X generates 2 equations. See [1] for derivation. Vector product of both sides is involved.
Normalization is automatically applied to inputs and undo for output. Normalization matrix is computed using
LowLevelMultiViewOps.computeNormalizationLL(List, BoofLambdas.ConvertOut, NormalizationPoint2D)
[1] 18.5.1 Page 448 in R. Hartley, and A. Zisserman, "Multiple View Geometry in Computer Vision", 2nd Ed, Cambridge 2003

Constructor Summary

Method Summary
Modifier and TypeMethodDescriptionvoid
getCameraMatrix
(int viewIdx, DMatrixRMaj P) void
getFeature3D
(int featureIdx, Point3D_F64 X) double
boolean
proccess
(List<DMatrixRMaj> homographies_view0_to_viewI, List<List<PointIndex2D_F64>> observations, int totalFeatures) Solves for camera matrices and scene structure.void
setInfinityThreshold
(double infinityThreshold)

Constructor Details

ProjectiveStructureFromHomographies
public ProjectiveStructureFromHomographies()


Method Details

proccess
public boolean proccess(List<DMatrixRMaj> homographies_view0_to_viewI, List<List<PointIndex2D_F64>> observations, int totalFeatures) Solves for camera matrices and scene structure.
Homographies from view i to 0:
x[0] = H*x[i] Parameters:
homographies_view0_to_viewI
 (Input) Homographies matching pixels from view i to view 0.observations
 (Input) Observed features in each view, except view 0. Indexes of points must be from 0 to totalFeatures1totalFeatures
 (Input) total number of features being solved for. Uses to sanity check input Returns:
 true if successful or false if it failed

getCameraMatrix

getFeature3D

getInfinityThreshold
public double getInfinityThreshold() 
setInfinityThreshold
public void setInfinityThreshold(double infinityThreshold)
