Research Article

A Linear Method to Derive 3D Projective Invariants from 4 Uncalibrated Images

Algorithm 1

X = RandomReal[{−1000, 1000}, {6, 4}];
M = RandomReal[{−1, 1}, {4, 3, 4}];
T = RandomReal[{0, 1}, {4, 6}];
x = RandomReal[{0, 1}, {4, 6, 3}];
a = RandomReal[{0, 1}, {4, 6, 4}];
b = RandomReal[{0, 1}, {4, 6, 4}];
u = RandomReal[{0, 1}, {4, 6}];
v = RandomReal[{0, 1}, {4, 6}];
X[[ ]] = 1;
X[[ ]] = 1;
X[[ ]] = 1;
X[[ ]] = 1;
X[[ ]] = 1;
X[[ ]] = 1;
XT = Transpose[{X[[ ]], X[[ ]], X[[ ]], X[[ ]]}];
A = LinearSolve[XT, X[[ ]]];
B = LinearSolve[XT, X[[ ]]];
Inv1 = (A[[ ]] B[[ ]])/(A[[ ]] B[[ ]]);
Inv2 = (A[[ ]] B[[ ]])/(A[[ ]] B[[ ]]);
Inv3 = (A[[ ]] B[[ ]])/(A[[ ]] B[[ ]]);
Print[“The three invariants computed from 3D point
locations: ”, Inv1, “ ”, Inv2, “ ”, Inv3];
For[i = 1, i <= 4, i++, For[j = 1, j <= 6, j++,
x[[i, j]] = M[[i]]   X[[j]];
u[[i, j]] = x[[i, j, 1]]/x[[i, j, 3]];
v[[i, j]] = x[[i, j, 2]]/x[[i, j, 3]];
]];
For[i = 1, i <= 4, i++, For[j = 5, j <= 6, j++,
a[[i, j, 1]] = u[[i, 1]] − u[[i, j]];
a[[i, j, 2]] = u[[i, 2]] − u[[i, j]];
a[[i, j, 3]] = u[[i, 3]] − u[[i, j]];
a[[i, j, 4]] = u[[i, 4]] − u[[i, j]];
b[[i, j, 1]] = v[[i, 1]] − v[[i, j]];
b[[i, j, 2]] = v[[i, 2]] − v[[i, j]];
b[[i, j, 3]] = v[[i, 3]] − v[[i, j]];
b[[i, j, 4]] = v[[i, 4]] − v[[i, j]];
]];
For[i = 1, i <= 4, i++,
T[[i, 1]] = (a[[i, 5, 3]] b[[i, 5, 4]] − a[[i, 5, 4]] b[[i, 5, 3]])
  (a[[i, 6, 1]] b[[i, 6, 2]] − a[[i, 6, 2]] b[[i, 6, 1]]);
T[[i, 2]] = (a[[i, 5, 4]] b[[i, 5, 2]] − a[[i, 5, 2]] b[[i, 5, 4]])
  (a[[i, 6, 1]] b[[i, 6, 3]] − a[[i, 6, 3]] b[[i, 6, 1]]);
T[[i, 3]] = (a[[i, 5, 2]] b[[i, 5, 3]] − a[[i, 5, 3]] b[[i, 5, 2]])
  (a[[i, 6, 1]] b[[i, 6, 4]] − a[[i, 6, 4]] b[[i, 6, 1]]);
T[[i, 4]] = (a[[i, 5, 1]] b[[i, 5, 4]] − a[[i, 5, 4]] b[[i, 5, 1]])
  (a[[i, 6, 2]] b[[i, 6, 3]] − a[[i, 6, 3]] b[[i, 6, 2]]);
T[[i, 5]] = (a[[i, 5, 3]] b[[i, 5, 1]] − a[[i, 5, 1]] b[[i, 5, 3]])
  (a[[i, 6, 2]] b[[i, 6, 4]] − a[[i, 6, 4]] b[[i, 6, 2]]);
T[[i, 6]] = (a[[i, 5, 1]] b[[i, 5, 2]] − a[[i, 5, 2]] b[[i, 5, 1]])
  (a[[i, 6, 3]] b[[i, 6, 4]] − a[[i, 6, 4]] b[[i, 6, 3]]);
];
I1 = −Det[{
{T[[ ]], T[[ ]] + T[[ ]], T[[ ]], T[[ ]]},
{T[[ ]], T[[ ]] + T[[ ]], T[[ ]], T[[ ]]},
{T[[ ]], T[[ ]] + T[[ ]], T[[ ]], T[[ ]]},
{T[[ ]], T[[ ]] + T[[ ]], T[[ ]], T[[ ]]}
}]/Det[{
{T[[ ]], T[[ ]], T[[ ]], T[[ ]]},
{T[[ ]], T[[ ]], T[[ ]], T[[ ]]},
{T[[ ]], T[[ ]], T[[ ]], T[[ ]]},
{T[[ ]], T[[ ]], T[[ ]], T[[ ]]}
}];
I2 = −Det[{
{T[[ ]] + T[[ ]], T[[ ]], T[[ ]], T[[ ]]},
{T[[ ]] + T[[ ]], T[[ ]], T[[ ]], T[[ ]]},
{T[[ ]] + T[[ ]], T[[ ]], T[[ ]], T[[ ]]},
{T[[ ]] + T[[ ]], T[[ ]], T[[ ]], T[[ ]]}
}]/Det[{
{T[[ ]], T[[ ]], T[[ ]], T[[ ]]},
{T[[ ]], T[[ ]], T[[ ]], T[[ ]]},
{T[[ ]], T[[ ]], T[[ ]], T[[ ]]},
{T[[ ]], T[[ ]], T[[ ]], T[[ ]]}
}];
I3 = −Det[{
{T[[ ]] + T[[ ]], T[[ ]], T[[ ]], T[[ ]]},
{T[[ ]] + T[[ ]], T[[ ]], T[[ ]], T[[ ]]},
{T[[ ]] + T[[ ]], T[[ ]], T[[ ]], T[[ ]]},
{T[[ ]] + T[[ ]], T[[ ]], T[[ ]], T[[ ]]}
}]/Det[{
{T[[ ]], T[[ ]], T[[ ]], T[[ ]]},
{T[[ ]], T[[ ]], T[[ ]], T[[ ]]},
{T[[ ]], T[[ ]], T[[ ]], T[[ ]]},
{T[[ ]], T[[ ]], T[[ ]], T[[ ]]}
}];
Print[“The three invariants computed from 2D projections: ”,
I1, “ ”, I2, “ ”, I3];