Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


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

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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()

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

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)


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

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: 357

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: 3199
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: 3199
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: 357

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: 3199
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 smile

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

 

Pied de page des forums

Powered by FluxBB