|
On cherche les solutions du problème de positionnement d'une
caméra (calibrée) à partir de l'image de 3 points
connus dans
.
Calculer les équations sur les distances entre le centre de la caméra et les trois points en fonction des angles de vue et des distances entres les points.
(ideal)
Déterminer une base du quotient par l'idéal engendré par ces équations.
(monomialIdeal)
Calculer la matrice de multiplication dans cette base.
(%, matrix, submatrix, |, coefficients)
Calculer les vecteurs propres de sa transposée.
(sub(.,RR), eigenvectors)
En déduire les solutions du problème.
(columnMult)
i1 :
R = QQ[x1,x2,x3]
Une fonction qui calcule l'idéal à partir des
cosinus des angles entre les rayons de
visés des points
et des distances
entre ces points.
i2 :
F = (c1,c2,c3,d1,d2,d3) ->
ideal( {x1^2+x2^2-2*c1*x1*x2-d1,
x1^2+x3^2-2*c2*x1*x3-d2,
x2^2+x3^2-2*c3*x2*x3-d3 })
i3 :
I = F(1/2,1/10,1/3,1,2-1/5,2-2/3)
Le degré ou le nombre de solutions (comptées avec multiplicité).
i4 :
degree I
i5 :
monomialIdeal (I)
Une base monomiale du quotient .
i6 :
B = {1,x1,x2,x3,x1*x3,x2*x3,x3^2,x3^3}
i7 :
(Mn,C) = coefficients((x1^2 % I), Monomials=>B);C
La matrice de multiplication par dans
cette base. On multiplie chaque élément de
par
et on calcule son reste
modulo (la base de Grobner de)
.
i9 :
M = matrix(QQ,{{0},{0},{0},{0},{0},{0},{0},{0}});
for m in B do {
(Mn,C) = coefficients((m*x1 % I), Monomials=>B);
M = M|C;
};
M=submatrix(M,{1..8})
La matrice (tranposée) de la multiplication par dans le dual de
.
i12 :
M1 = sub(transpose(M),RR)
Ses valeurs et vecteurs propres.
i13 :
(V,E) = eigenvectors (M1)
On normalise en divisant par un scalaire pour avoir en première ligne.
i14 :
S = mutableMatrix(E);
for i from 0 to numcols(E)-1 do {
columnMult(S,i,1/E_(0,i))
};
Ev = matrix(S)
On lit les coordonnées des solutions dans les 3 lignes
suivantes, car
i17 :
transpose(submatrix(transpose(Ev),{1..3}))
i18 :
Les variables représentant des distances,
seules les solutions réelles positives nous intéressent.
Dans cet exemple, il n'y a que la solution
. A
partir de ces distances aux points
, nous
calculons la position du centre de la caméra. Il y a deux
possibilités (devant ou derrière le plan
)
correspondant à deux positions « mirroirs ».
L'orientation des images de
dans le plan de
l'image permet alors de déterminer quelle est la bonne position.