Ma fonction print
est définie comme:Matx33d produit scalaire ne fonctionne pas dans OpenCV
void print(std::string matname, cv::Matx33d A) {
fprintf(stdout, "%s = [\n", matname.c_str());
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
fprintf(stdout, "%15.10lf", A(i,j));
}
fprintf(stdout, "\n");
}
fprintf(stdout, "];\n");
}
et j'ai conçu une matrice H
et utilisé dans le code suivant:
print("H", H);
cv::Matx33d Hinv = H.inv();
print("H^-1", Hinv);
cv::Matx33d HdHinv(H.ddot(Hinv));
print("H*H^-1", HdHinv);
cv::Matx33d HinvdH(Hinv.ddot(H));
print("H^-1*H", HinvdH);
Cependant, la sortie est la suivante:
H = [
0.0386192492 0.1756336675 0.0245675072
0.1756336675 1.3649487597 -0.2727645303
0.0245675072 -0.2727645303 -0.5635269575
];
H^-1 = [
45.9140372920 -5.0221718200 4.4325541956
-5.0221718200 1.2173491959 -0.8081812555
4.4325541956 -0.8081812555 -1.1901116767
];
H*H^-1 = [
3.0000000000 0.0000000000 0.0000000000
0.0000000000 0.0000000000 0.0000000000
0.0000000000 0.0000000000 0.0000000000
];
H^-1*H = [
3.0000000000 0.0000000000 0.0000000000
0.0000000000 0.0000000000 0.0000000000
0.0000000000 0.0000000000 0.0000000000
];
L'inverse semble fonctionner corr ectly, mais pourquoi je reçois ces valeurs du produit scalaire? Est-ce que j'utilise ddot
incorrectement? J'ai testé ce produit scalaire dans Matlab
et j'obtiens la matrice d'identité (jusqu'à 10 décimales de précision), donc je crois que H
et Hinv
sont générés correctement.