#1 Tue 04 September 2012 13:48
- PierreBrial
- Participant occasionnel
- Date d'inscription: 28 Jan 2007
- Messages: 23
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 Tue 04 September 2012 17:19
- Lrdb1
- Juste Inscrit !
- Date d'inscription: 4 Sep 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 Wed 05 September 2012 05:10
- PierreBrial
- Participant occasionnel
- Date d'inscription: 28 Jan 2007
- Messages: 23
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 Wed 05 September 2012 07:02
- LrDb
- Participant occasionnel
- Date d'inscription: 9 Aug 2011
- Messages: 34
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 Wed 05 September 2012 08:08
- PierreBrial
- Participant occasionnel
- Date d'inscription: 28 Jan 2007
- Messages: 23
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 Thu 13 September 2012 16:56
- AHarmel
- Juste Inscrit !
- Date d'inscription: 13 Sep 2012
- Messages: 4
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 Mon 24 September 2012 07:43
- PierreBrial
- Participant occasionnel
- Date d'inscription: 28 Jan 2007
- Messages: 23
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 Sat 27 October 2012 10:56
- pelouab
- Juste Inscrit !
- Date d'inscription: 27 Oct 2012
- Messages: 4
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 Mon 29 October 2012 04:42
- PierreBrial
- Participant occasionnel
- Date d'inscription: 28 Jan 2007
- Messages: 23
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()
Hors ligne
#10 Tue 30 October 2012 20:56
- pelouab
- Juste Inscrit !
- Date d'inscription: 27 Oct 2012
- Messages: 4
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 Thu 01 November 2012 12:19
- pelouab
- Juste Inscrit !
- Date d'inscription: 27 Oct 2012
- Messages: 4
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 (Thu 01 November 2012 21:36)
Hors ligne
#12 Mon 01 June 2020 15:52
- Millevaches
- Participant occasionnel
- Date d'inscription: 14 Jun 2010
- Messages: 20
Re: Transformation de Helmert en 2D sans facteur d'échelle
Ce post est bien ancien et je ne suis pas sûr que ma contribution aura un écho quelconque...
Sans coefficient k, le problème n'est pas linéaire et la méthode matricielle ne s'applique pas...
Une méthode itérative peut s'appliquer mais, dans le cas évoqué, il est possible de résoudre les équations normales sans approximation et donc d'obtenir des formules "exactes" pour une transformation qui vérifie les moindres carrés...
Comme c'est un petit peu pénible à taper, faites moi savoir si quelqu'un est encore intéressé par ce post et je les mettrai en ligne...
Cordialement...
Hors ligne
#13 Tue 14 November 2023 16:55
- olivier.eckmann
- Participant assidu
- Date d'inscription: 14 Dec 2007
- Messages: 353
Re: Transformation de Helmert en 2D sans facteur d'échelle
Bonjour,
Je me penche actuellement sur la programmation de la transformation Helmert sans facteur d'échelle.
Si vous avez encore les formules, je serais volontiers preneur.
Merci
Olivier
Hors ligne
#14 Wed 15 November 2023 14:30
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3178
- Site web
Re: Transformation de Helmert en 2D sans facteur d'échelle
Bonjour
Sur mon téléphone je peux pas répondre.
Mais il y a pas mal de notions à revoir....
C'est une catastrophe les réponses précédentes sur l'aspect théorique du sujet.
Après il faut aussi tenir compte de l'informatique théorique et de la représentation des nombres...et de la précision des calculs....
Un ordinateur ne sais faire que des sommes de registres et en binaire....
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#15 Thu 16 November 2023 07:55
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3178
- Site web
Re: Transformation de Helmert en 2D sans facteur d'échelle
Bonjour,
Une transformation d'Helmert est la composée de trois fonctions.
Homothétie, rotation et translation.
Pour rappel l'ensemble des fonctions continues muni de l'opérateur o (composition)n'est pas commutatif :
homothétie o rotation <> rotation o homothetie
"Sans coefficient k" ???
Cela veut dire quoi ? Une simple translation? k=0 ? k=1 ? ???
Ecriture de l'équation :
Soit n points P(Xv, Yv) mesurés dans le système d'arrivé, ils sont dénommés "valeurs vraies"
Soit n points p(x,y) mesurés dans le système de départ.
La transformée de p est égale à :
x=ax+by+c
y=ax-by+d
et théoriquement égale à P (valeur vraie)
Or il existe un écart (résidu) entre la transformée de p et P
Le système s'écrit donc
A*P+B=R
R étant la matrice des résidus
Le principe : trouver a,b,c,d tels que le carré des résidus (distance entre t(p) et P) soit minimal.
donc que (A*P+B)^2=R² soit minimale,
donc que sa dérivée soit nulle.
Trouver la solution c'est inversé la matrice A.
Donc que A soit inversible.
Dernière modification par ChristopheV (Thu 16 November 2023 07:57)
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#16 Thu 16 November 2023 09:48
- olivier.eckmann
- Participant assidu
- Date d'inscription: 14 Dec 2007
- Messages: 353
Re: Transformation de Helmert en 2D sans facteur d'échelle
Bonjour,
Merci pour les informations.
Quand je disais sans échelle, ça voulait dire sans appliquer d'homothétie donc k=1.
Ca sert à recaler des cibles d'un scan statique en coordonnées locales, vers un géoréférencement en coordonnées CC via station totale/GPS.
Il faut donc que je calcule sans mise à l'échelle, pour conserver absolument la dimension initiale du nuage de point qui est plus précise que son calage topographique.
En attendant de me replonger dans les formules, j'ai programmé ça brutalement par itération.
Pour le moment ça me satisfait, mais si je trouve plus propre, j'aime autant.
Olivier
Hors ligne
#17 Thu 16 November 2023 10:13
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3178
- Site web
Re: Transformation de Helmert en 2D sans facteur d'échelle
Bonjour,
Si k=1 alors Homothétie(x)=Identité(x)
La fonction homothétie est neutre (mais elle existe), soyons précis c'est mieux.
Il faut donc que je calcule sans mise à l'échelle, pour conserver absolument la dimension initiale du nuage de point qui est plus précise que son calage topographique.
La transformation d'helmert est une transformation conforme (contrairement à une affine par exemple).
Donc H(précision du lever locale ) est la précision du lever adapté.
Quelle valeur d'échelle ? Le facteur d'homothétie a t il une réelle influence ? ça se calcul
Exemple précision 1 cm facteur homothétie 1.123 ... je vous laisse compter
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne