1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
void cFcompute::getF_Moravec(matrix<double> & F,
std::vector<cVector2D> s1_match ,
std::vector<cVector2D> s2_match , int nbre)
{
// Pour trouver F, on va resoudre AG = 0 ... G ~ F mais en vecteur colonne
matrix<double> B(nbre,1) ;
matrix<double> G(8,1) ;
matrix<double> A(nbre,8) ;
for ( int i = 0 ; i < (nbre-1) ; i ++ )
{
B(i,0) = -1 ;
G(i,0) = 0 ;
}
// On va ensuite initialiser notre matrice A avec les valeurs (x,y) (x',y') des couples de pixels .
for ( int j = 0 ; j < nbre ; j++ )
{
cVector2D & v1 = s1_match[j] ;
cVector2D & v2 = s2_match[j] ;
A(j,0) = v2.X * v1.X ;
A(j,1) = v2.X * v1.Y ;
A(j,2) = v2.X ;
A(j,3) = v2.Y * v1.X ;
A(j,4) = v2.Y * v1.Y ;
A(j,5) = v2.Y ;
A(j,6) = v1.X ;
A(j,7) = v1.Y ;
}
matrix < double > Aprime(8,8) ;
matrix < double > Bprime(8,1) ;
Aprime = prod(trans(A),A);
Bprime = prod(trans(A),B);
LU_manager.solveLU(Aprime,G,Bprime,8) ;
// Reconstruction de F
F(0,0) = G(0,0) ; F(0,1) = G(1,0) ; F(0,2) = G(2,0) ;
F(1,0) = G(3,0) ; F(1,1) = G(4,0) ; F(1,2) = G(5,0) ;
F(2,0) = G(6,0) ; F(2,1) = G(7,0) ; F(2,2) = 1 ;
} |
Partager