Bonjour à tous,

Je ne parviens pas à appliquer une matrice de correction à mon image (corrigée de la distorsion) en fonction de 3 angles dont je dispose.
Les photos sont prises sur un trepied qui applique des rotations (connues) à la camera dans cet ordre :
Roll, puis Pitch, puis Yaw

Afin de recomposer une image à partir de plusieurs clichés, je reprojette les points de chaque image en fonctions des 3 valeurs d'angles connues. Mais je n'arrive pas à trouver la combinaison de matrice qui convient...

Voila ce que je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Mat MATRICE_roll                	= Mat(3, 3, CV_32FC1);
	MATRICE_roll.at<float>(0, 0)	= 1;						MATRICE_roll.at<float>(0, 1)	= 0;						MATRICE_roll.at<float>(0, 2)	= 0;		
	MATRICE_roll.at<float>(1, 0)	= 0;						MATRICE_roll.at<float>(1, 1)	= cos( roll_radian );		MATRICE_roll.at<float>(1, 2) = -sin( roll_radian );
	MATRICE_roll.at<float>(2, 0)	= 0;						MATRICE_roll.at<float>(2, 1) 	= sin( roll_radian );		MATRICE_roll.at<float>(2, 2) = cos( roll_radian );
 
Mat MATRICE_pitch                	= Mat(3, 3, CV_32FC1);
	MATRICE_pitch.at<float>(0, 0)	= cos( pitch_radian );		MATRICE_pitch.at<float>(0, 1)	= 0;						MATRICE_pitch.at<float>(0, 2) = sin( pitch_radian );		
	MATRICE_pitch.at<float>(1, 0)	= 0;						MATRICE_pitch.at<float>(1, 1)	= 1;						MATRICE_pitch.at<float>(1, 2) = 0;
	MATRICE_pitch.at<float>(2, 0)	= -sin( pitch_radian );		MATRICE_pitch.at<float>(2, 1) 	= 0;						MATRICE_pitch.at<float>(2, 2) = cos( pitch_radian );
 
Mat MATRICE_yaw	                	= Mat(3, 3, CV_32FC1);
	MATRICE_yaw.at<float>(0, 0)	= cos( yaw_radian );			MATRICE_yaw.at<float>(0, 1)	= -sin( yaw_radian );			MATRICE_yaw.at<float>(0, 2) = 0;		
	MATRICE_yaw.at<float>(1, 0)	= sin( yaw_radian );			MATRICE_yaw.at<float>(1, 1)	= cos( yaw_radian );			MATRICE_yaw.at<float>(1, 2) = 0;
	MATRICE_yaw.at<float>(2, 0)	= 0;							MATRICE_yaw.at<float>(2, 1) = 0;						MATRICE_yaw.at<float>(2, 2) = 1;
 
 
Mat MATRICE_resultante                	= Mat(3, 3, CV_32FC1);
 
MATRICE_resultante = MATRICE_roll*MATRICE_pitch*MATRICE_yaw;
Puis j'applique dans une boucle pour chaque point de l'image (c'est surement ici que je me trompe) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
MATRICE_transformee_rigide_X.at<float>( x,y ) =	( ( MATRICE_resultante.at<float>(1,1) * ( x -	centre_image_x ) ) 	+	( MATRICE_resultante.at<float>(1,2) * ( y -	centre_image_y) ) ) + centre_image_x;
MATRICE_transformee_rigide_Y.at<float>( x,y ) =	( ( MATRICE_resultante.at<float>(2,1) * ( x -	centre_image_x ) ) 	+	( MATRICE_resultante.at<float>(2,2) * ( y -	centre_image_y) ) ) + centre_image_y;
Avant de passer le resultat à un remap().

Merci d'avance pour votre aide !