Question

Supposons que j'ai une matrice de transformation arbitraire A tel que,

A =

    0.9966    0.0007   -6.5625
    0.0027    0.9938    1.0598
         0         0    1.0000

un ensemble de points de telle sorte que leurs coordonnées x et y sont représentés par X et Y respectivement.

Et supposons,

[Xf Yf] = tformfwd(maketform('projective',A),X,Y);

[Xff Yff] = tformfwd(maketform('projective',inv(A)),Xf,Yf);
[Xfi Yfi] = tforminv(maketform('projective',A),Xf,Yf); 

[Xff Yff] et [Xfi Yfi] semblent être exactement les mêmes (et ils devraient).

est tforminv juste là pour la commodité ou suis-je manque quelque chose ici?

Était-ce utile?

La solution

Je vais commencer par dire qu'il est mon meilleure estimation ...

Il est possible que tforminv peut effectuer la transformation sans former réellement la matrice inverse. Par exemple, vous pouvez résoudre un système d'équations linéaires Ax = b de deux façons:

x = inv(A)*b;
x = A\b;

Selon la documentation inv , la deuxième option ( en utilisant l'opérateur de division de la matrice) peut effectuer mieux « à la fois un temps d'exécution et de point de vue de la précision numérique » car il « produit en utilisant la solution d'élimination gaussienne, sans former l'inverse ». tforminv peut faire quelque chose de similaire et montrer ainsi un meilleur comportement global par rapport à passer la matrice inverse tformfwd.

Si vous étiez si incliné, vous pourriez probablement essayer un certain nombre de différentes matrices de transformation et de tester les deux approches (tforminv ou tformfwd et inv) pour voir la précision des résultats et la façon dont ils sont rapides chaque calculées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top