Il s'agit d'un problème d'algèbre linéaire classique, la phrase clé à rechercher est "régression linéaire multiple".
J'ai dû coder une variation de ceci plusieurs fois au cours des années. Par exemple, le code pour calibrer une tablette numériseur ou un écran tactile stylet utilise les mêmes calculs.
Voici le calcul:
Soit p être un vecteur d'entrée et q le vecteur de sortie correspondant.
La transformation que vous voulez est une matrice 3x3; appelez le A.
Pour une seule entrée et le vecteur de sortie p et q, il y a un vecteur d'erreur e
e = q - A x p
Le carré de l'amplitude de l'erreur est une valeur scalaire:
e T x e = (q - A x p) T x (q - A x p)
(où l'opérateur T est transposé).
Qu'est-ce que vous voulez vraiment réduire au minimum la somme des e valeurs sur les jeux:
E = somme (e)
Cela satisfait minimum l'équation de la matrice D = 0 où
D (i, j) = la dérivée partielle de E par rapport à A (i, j)
Disons que vous avez entrée N et des vecteurs de sortie.
Votre ensemble d'entrée 3-vecteurs est une matrice 3xN; appeler cette matrice P. La ième colonne de P est le ième vecteur d'entrée.
Ainsi est l'ensemble des vecteurs de sortie 3; appelez cette matrice Q.
Lorsque vous broyer à travers l'ensemble de l'algèbre, la solution est
A = Q xP T x (Px P T)^-1
(où^-1 est l'opérateur inverse - désolé de ne pas avoir d'exposants ou d'indices)
est ici l'algorithme:
Créer la matrice 3xN P de l'ensemble des vecteurs d'entrée.
Créez la matrice 3xN Q à partir de l'ensemble des vecteurs de sortie.
Matrice Multiply R = P x transposition (P)
Calculer la inverseOf R
Matrice Multiply A = Q x transposition (P) x inverse (R)
en utilisant les routines de multiplication matricielle et d'inversion de matrice de votre bibliothèque d'algèbre linéaire de choix.
Cependant, transformer une matrice 3x3 affines est capable d'évoluer et faire tourner les vecteurs d'entrée, mais pas faire une traduction! Ce n'est peut-être pas assez général pour votre problème. C'est généralement une bonne idée d'ajouter un "1" à la fin de chacun des 3-vecteurs pour faire ensuite un 4-vectoriel, et de chercher la meilleure matrice de transformation 3x4 qui minimise l'erreur. Cela ne peut pas faire de mal; cela ne peut que conduire à un meilleur ajustement des données.
Avez-vous une correspondance entre les vecteurs dans les deux ensembles (c'est-à-dire l'ensemble 1, le vecteur 1 supposé correspondre à l'ensemble 2, le vecteur 1)? –
Oui, il y a correspondance – shodanex
Est-ce une sorte de correction gamma? ou cartographie de l'histogramme? – RobS