Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#1 mar. 04 septembre 2012 13:48

PierreBrial
Membre
Date d'inscription: 28 janv. 2007
Messages: 13

Transformation de Helmert en 2D sans facteur d'échelle

Bonjour à tous,

Ayant eu des résultats bizarres en utilisant la fonction "Recalage Helmert avec échelle=1" sur le logiciel COVADIS, j'ai voulu calculer moi-même les paramètres de la transformation.

Le but de l'opération est de simuler, numériquement, le fait de superposer un vieux plan à un plan récent de la même zone, sur calques. On recherche des points communs entre les deux documents, et on les superpose de façon à ce que l'écart entre les points soit minimum.

Numériquement on a, pour les points d'appuis :

Coordonnées de départ : x1,y1 ; x2,y2 ; ...
Coordonées d'arrivée : X1,Y1 ; X2,Y2 ; ...

Le passage d'un jeu de coordonnées à l'autre s'effectue par une rotation d'angle "a" et une translation en plan Tx,Ty :

X = x*cos a - y*sin a + Tx
Y = x*sin a + y*cos a + Ty

Le but est donc de trouver "a", Tx et Ty à partir de deux jeux de coordonnées.

On utilise la méthode des moindres carrés en appliquant sous forme matricielle la formule ci-dessus, en procédant ainsi :

Matrice des coordonnées d'arrivée A :
( X1 )
( Y1 )
( X2 )
( Y2 )
...

Matrice des coordonnées de départ B :
( x1    -y1     1    0 )
( y1     x1     0    1 )
( x2    -y2     1    0 )
( y2     x2     0    1 )
...

et matrice des paramètres P :

( cos a )
( sin a  )
(   Tx   )
(   Ty   )

La formule de départ est A = B * P

et P s'obtient en faisant P= inv(TB*B) * TB*A
(TB est la transposée de B).

Le souci est que comme "cos a" et "sin a" sont calculés comme deux paramètres indépendants, l'ajustement par les moindres carrés introduit, de fait, un facteur d'échelle. En effet, il n'est pas fait de différence entre cos a, sin a, et k*cos a, k*sin a.

Or je ne sais pas comment, dans le calcul ci-dessus, ajouter une contrainte qui impose que cos²a + sin²a = 1, ce qui revient à un facteur d'echelle égal à un.

Quelqu'un aurait t'il une idée sur la façon de procéder ?

Hors ligne

 

#2 mar. 04 septembre 2012 17:19

Lrdb1
Membre
Date d'inscription: 4 sept. 2012
Messages: 1

Re: Transformation de Helmert en 2D sans facteur d'échelle

Bonjour,
Il me semble bien que l'angle est indépendant de l’échelle
sur ce lien, une démonstration sans les matrices
k=racine de (a²+b²)
avec a=ksinA et b=kcosA
k²=k²(sin²A+cos²A)
LrDb

Hors ligne

 

#3 mer. 05 septembre 2012 05:10

PierreBrial
Membre
Date d'inscription: 28 janv. 2007
Messages: 13

Re: Transformation de Helmert en 2D sans facteur d'échelle

L'angle est bien entendu indépendant de l'échelle (il ne sont pas liés mathématiquement). Toutefois, avec le calcul matriciel classique, ce n'est pas l'angle "a" qu'on détermine directement, mais les valeurs C=k*cos a et D=k*sin a.
On calcule ensuite :
a = atan (D/C)
k = racine(C²+D²)
On n'arrive donc pas à fixer une valeur pour k, en l'occurence 1.
Sur le lien donné est étudié une transformation de Helmert avec facteur d'échelle. Ce n'est donc pas ce que je cherche.

Hors ligne

 

#4 mer. 05 septembre 2012 07:02

LrDb
Membre
Date d'inscription: 9 août 2011
Messages: 6

Re: Transformation de Helmert en 2D sans facteur d'échelle

Bonjour,
k=racine(C²+D²)
ici, k=1
1²=C²+D²
D=racine(1-C²);

a=atan((racine(1-C²))/C)
LrDb

Hors ligne

 

#5 mer. 05 septembre 2012 08:08

PierreBrial
Membre
Date d'inscription: 28 janv. 2007
Messages: 13

Re: Transformation de Helmert en 2D sans facteur d'échelle

Justement, le souci est qu'après le calcul par les moindres carrés, on a C²+D² différent de 1.

Hors ligne

 

#6 jeu. 13 septembre 2012 16:56

AHarmel
Membre
Date d'inscription: 13 sept. 2012
Messages: 2

Re: Transformation de Helmert en 2D sans facteur d'échelle

Vous pouvez agir en deux temps:
1/ Définir l'angle "a" par ma méthode matricielle (entachée du facteur d'échelle)
2/ Utilisez "a" comme valeur approchée : l'appoint (éventuel!) "da" à "a"  peut se faire de manière plus linéaire avec cos da=1 sin da= a (c'est un petit angle très proche de 0) :
X' = x cos a -y sin a + Tx
Y' = x sin a +y cos a + Ty
(pas de facteur d'échelle!)
et
X = X' -Y' da +dTx
Y = X' da + Y'+dTy
avec détermination par moindres carrés de dTx, dTy et da vous aurez les paramètres finaux de la transformation sans facteur d'échelle
angle a+da, translations Tx+dTx et Ty+dTy
Normalement da sera vraiment très faible, mais la variation sur les Tx, Ty plus sensible (fonction du facteur d'échelle trouvé à l'étape 1.

En espérant que cela puisse vous aider.

Hors ligne

 

#7 lun. 24 septembre 2012 07:43

PierreBrial
Membre
Date d'inscription: 28 janv. 2007
Messages: 13

Re: Transformation de Helmert en 2D sans facteur d'échelle

Bonjour,
Effectivement, c'est astucieux, et celà fonctionne.
J'ai eu un peu de mal à trouver la matrice pour :

X = X' -Y' da +dTx
Y = X' da + Y'+dTy

En fait il faut partir de :

X-X' = -Y' da +dTx
Y-Y' = X' da +dTy

Sur les exemples essayés, da est négligeable (environ 1E-12 grades).
Merci

Hors ligne

 

#8 sam. 27 octobre 2012 10:56

pelouab
Membre
Date d'inscription: 27 oct. 2012
Messages: 3

Re: Transformation de Helmert en 2D sans facteur d'échelle

Bonjour,
Ayant moi aussi constaté des incohérance entre 2 logiciels (atlog et covadis) sur un calage sans mise a l' echelle, j'ai cherché la solution juste...
Mais je suis loin d'avoir votre niveau en math ( notament les matrices ).

Serai t il possible d'avoir votre solution "linearisé" ? Ou mieux, la solution  dans excel ou opencalc.

Nota: je viens de faire un mail a l ign (geodesie) pour la meme question il y a 3 jours.
En effet, c'est methode est preconisé pour les controle de precision interne mais n'a pas fait l'objet ( a ma connaissance) d'une note de calcul.
Du coup les logiciels commerciaux semblent entretenir le floux sur leurs methodes...

Merci

Hors ligne

 

#9 lun. 29 octobre 2012 04:42

PierreBrial
Membre
Date d'inscription: 28 janv. 2007
Messages: 13

Re: Transformation de Helmert en 2D sans facteur d'échelle

Bonjour,

Ci-joint le fichier tableur avec un exemple (format ods libreoffice/openoffice).

L'inconvénient du calcul avec tableur c'est qu'il faut réajuster toutes les formules de calcul matriciel lorsque le nombre de coordonnées change.

Il y a peu j'ai découvert Scilab, un programme de calcul assez pratique à utiliser ( http://www.scilab.org/fr ). Voici donc le script scilab correspondant. Il suffit de rentrer les coordonnées de départ et d'arrivée au début, et le reste est fait automatiquement.

A bientôt

Code:

//SCILAB
printf("\nCalcul des Paramètres d''une Transformation Helmert en 2D avec f=1\n")
printf("-----------------------------------------------------------------\n")
//Coordonnées de départ :
DEPART=[
10 10
12 10
11 12
];
disp(DEPART,"Coordonnées de départ :")
//Coordonnées d'arrivée :
ARRIVEE=[
15 10
17.2 9.7
16.1 12.5
];
disp(ARRIVEE,"Coordonnées d''arrivée :")
printf("\nTransformation avec facteur d''echelle :\n")
A=matrix(ARRIVEE',-1,1);
M=[1 -1 1 0
1 1 0 1];
N=matrix(cat(2,DEPART,flipdim(DEPART,2))',2,-1)';
B=cat(2,N,ones(N)).*repmat(M,size(DEPART,1),1);
P=lsq(B,A);
rotation=atan(P(2,1)/P(1,1));
printf("\tRotation = %.5f grades\n",rotation*200/%pi)
printf("\tf = %.6f\n",sqrt(P(2,1)^2+P(1,1)^2))
printf("\tTx = %.3f m\n",P(3,1))
printf("\tTy = %.3f m\n\n",P(4,1))
RESIDUS=B*P-A
printf("\nTransformation sans facteur d''echelle :\n")
P2=[cos(rotation);sin(rotation);P(3:4,1)];
A3=B*P2;
A4=A-A3;
M=[-1 1 0
1 0 1];
N=matrix(flipdim(matrix(A3,2,-1),1),-1,1);
B3=cat(2,N,ones(size(N,1),2)).*repmat(M,size(DEPART,1),1);
P3=lsq(B3,A4);
PARAMETRES=(P3+[rotation;P(3:4,1)]);
printf("\tRotation = %.5f grades\n",PARAMETRES(1,1)*200/%pi)
printf("\tTx = %.3f m\n",PARAMETRES(2,1))
printf("\tTy = %.3f m\n\n",PARAMETRES(3,1))
RESIDUS=A3+B3*P3-A
//quit()

Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#10 mar. 30 octobre 2012 20:56

pelouab
Membre
Date d'inscription: 27 oct. 2012
Messages: 3

Re: Transformation de Helmert en 2D sans facteur d'échelle

Merci pour ta réponse,
je vais quand même voir si j'arrive pas a faire une feuille de calcul excel ( ou ods ) pour un nombre inconnu de points.
Si je trouve je post ...
salut et merci encore

Hors ligne

 

#11 jeu. 01 novembre 2012 12:19

pelouab
Membre
Date d'inscription: 27 oct. 2012
Messages: 3

Re: Transformation de Helmert en 2D sans facteur d'échelle

j'ai trouvé ...

  J'ai trouvé une feuille de calcul qui prend un nombre indéterminé de point (donc semble avoir résolue le problème de la taille des matrices).
Elle provient de :http://www.google.fr/url?sa=t&rct=j … Oa1RQjAHGg (en anglais).
Dans ce fichier excel, bien réalisé il me semble, il y a :
-> la transfo helmert 2D (avec mise à l'échelle)
-> la transfo helmert 3D (avec mise à l'échelle) qui ne se charge pas bien sous Open Office (des modif sont a faire pour retrouver les formules).
-> et aussi, en bonus (premier onglet) une transfo "affine" (?) où l'on peut pondéré les points de calage.

  Toute ces transfos sont de plus réversible (on peut re-transformer un point levé dans le système de départs via les même paramètre).
C'est typiquement ce qu'il me faudrait comme utilitaire mais avec le calcul sans mise à l’échelle.

J'y ai rajouté la solution de PierreBrial en bidouillant au petit bonheur la chance .

Je pense que ce fichier peu servir a bon nombre d'entre nous.

Merci a vous.

Dernière modification par pelouab (jeu. 01 novembre 2012 21:36)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

Pied de page des forums

Powered by FluxBB

Partagez  |