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