26 #ifndef LIBMV_MULTIVIEW_NVIEWTRIANGULATION_H
27 #define LIBMV_MULTIVIEW_NVIEWTRIANGULATION_H
39 const vector<Matrix<T, 3, 4>>& Ps,
41 int nviews =
x.cols();
42 assert(nviews == Ps.size());
44 Matrix<T, Dynamic, Dynamic> design(3 * nviews, 4 + nviews);
45 design.setConstant(0.0);
46 for (
int i = 0; i < nviews; i++) {
47 design.template block<3, 4>(3 * i, 0) = -Ps[i];
48 design(3 * i + 0, 4 + i) =
x(0, i);
49 design(3 * i + 1, 4 + i) =
x(1, i);
50 design(3 * i + 2, 4 + i) = 1.0;
52 Matrix<T, Dynamic, 1> X_and_alphas;
55 *
X = X_and_alphas.head(4);
65 const vector<Matrix<T, 3, 4>>& Ps,
67 int nviews =
x.cols();
68 assert(nviews == Ps.size());
70 Matrix<T, Dynamic, 4> design(2 * nviews, 4);
71 for (
int i = 0; i < nviews; i++) {
72 design.template block<2, 4>(2 * i, 0) =
SkewMatMinimal(
x.col(i)) * Ps[i];
void NViewTriangulateAlgebraic(const Matrix< T, 2, Dynamic > &x, const vector< Matrix< T, 3, 4 >> &Ps, Matrix< T, 4, 1 > *X)
double Nullspace(TMat *A, TVec *nullspace)
Mat23 SkewMatMinimal(const Vec2 &x)
void NViewTriangulate(const Matrix< T, 2, Dynamic > &x, const vector< Matrix< T, 3, 4 >> &Ps, Matrix< T, 4, 1 > *X)