title: Trasformazione di Helmert
text: # Trasformazione di Helmert
  
  ## Informazioni teoriche
  
  Per rototraslazione e variazione di scala nel piano intendiamo un cambiamento di coordinate cartesiane da un sistema di riferimento ad un altro con alterazione delle unità di misura e quindi di scala. Tutto ciò è possibile grazie ad una trasformazione lineare composta da una traslazione e da una rotazione, accompagnate da un fattore di riduzione o ingrandimento. Questo problema prende il nome di trasformazione di Helmert a sette parametri, ed è individuato dall'espressione:
  
  ${\vec {X}}'=\lambda R{\vec {X}}+{\vec {T}}$
  
  dove i parametri da determinare sono tre per la rotazione, tre per la traslazione ed uno per le unità di misura.
  
  In particolare: R è la matrice di rotazione rispetto ai tre assi (matrice 3x3), ${\vec {T}}$ è il vettore di traslazione (3 componenti) e $\lambda$ è il fattore di scala, mentre ${\vec {X}}$ e ${\vec {X}}'$ rappresentano rispettivamente le coordinate dei punti prima e dopo la trasformazione.
  
  Per comodità consideriamo uno spazio di lavoro bidimensionale, quindi la matrice R sarà una 2x2 e dipenderà da un solo parametro, 𝛼, che individua l’angolo di rotazione e ${\vec {T}}$ diventerà un vettore a due componenti ($T_{x}$ e $T_{y}$). $R$ è della forma:
  
  $R(\alpha )={\begin{pmatrix}cos(\alpha )&-sin(\alpha )\\sin(\alpha )&cos(\alpha )\end{pmatrix}}$
  
  A questo punto si vuole stimare i valori dei parametri $\alpha$, $\lambda$, $T_{x}$, $T_{y}$ che governano la trasformazione tramite il metodo dei minimi quadrati. Prima è però necessario svolgere un processo di linearizzazione del sistema rispetto ai parametri $\alpha$ e $\lambda$, ponendo $a=\lambda \cos \alpha$, $b=\lambda \sin \alpha$ e ${\frac {b}{a}}=\tan \alpha$. Si ottiene:
  
  $\lambda R(\alpha )={\begin{pmatrix}a&-b\\b&a\end{pmatrix}}$
  
  Dunque, conoscendo le coordinate ${\vec {X}}$ e ${\vec {X}}'$ di un certo numero di punti (più sono minore sarà l’errore) e utilizzando queste supposizioni/semplificazioni:
  
  * le coordinate ${\vec {X}}$ note senza errori;
  * le coordinate ${\vec {X}}'$ incorrelate e con medesima varianza;
  * utilizzo delle coordinate baricentriche;
  
  la trasformazione diventa:
  
  ${\vec {X}}'={\begin{pmatrix}a&-b\\b&a\end{pmatrix}}{\vec {X}}+{\vec {T}}$
  
  ## Calcolo delle coordinate baricentriche
  
  In prima battuta si calcolano le coordinate del baricentro dei punti nei due sistemi di riferimento:
  
  ${\vec {X}}_{B}={\frac {1}{N}}\sum {\vec {x}}_{p}$ ${\vec {X}}_{B}'={\frac {1}{N}}\sum {\vec {x}}_{p}'$
  
  Successivamente si calcolano le coordinate baricentriche di tutti gli N punti relativamente al loro baricentro:
  
  ${\vec {W}}_{p}={\vec {X}}p-{\vec {X}}_{B}$ ${\vec {W}}_{p}'={\vec {X}}p'-{\vec {X}}_{B}'$
  
  ## Nuova forma per le trasformazione di Helmert
  
  È possibile ora modificare la prima equazione mediante l’utilizzo delle coordinate baricentriche:
  
  ${\vec {X}}_{p}'=\lambda R{\vec {X}}_{p}+{\vec {T}}\longrightarrow {\vec {W}}_{p}'=\lambda R(\alpha ){\vec {W}}_{p}-{\vec {X}}_{B}'+{\vec {T}}+\lambda R(\alpha ){\vec {X}}_{B}$
  
  la quale, ponendo ${\vec {T}}_{0}=-{\vec {X}}_{B}'+{\vec {T}}+\lambda R(\alpha ){\vec {X}}_{B}$ risulta:
  
  ${\vec {W}}_{p}'=\lambda R(\alpha ){\vec {W}}_{p}+{\vec {T}}_{0}$
  
  A questo punto il problema può essere ricondotto ad un’equazione matriciale del tipo:
  
  ${\vec {y}}=A{\vec {x}}$
  
  Esplicitando per ogni punto e ricordando il precedente cambio di variabile otteniamo:
  
  ${\begin{cases}{\vec {W}}_{px}'={\vec {W}}_{px}a-{\vec {W}}_{py}b+{\vec {T}}_{0x}\\{\vec {W}}_{py}'={\vec {W}}_{py}a+{\vec {W}}_{px}b+{\vec {T}}_{0y}\end{cases}}$
  
  ovvero:
  
  ${\begin{pmatrix}{\vec {W}}_{1x}'\\{\vec {W}}_{1y}'\\...\\{\vec {W}}_{px}'\\{\vec {W}}_{py}'\\...\\{\vec {W}}_{Nx}'\\{\vec {W}}_{Ny}'\end{pmatrix}}={\begin{pmatrix}{\vec {W}}_{1x}&-{\vec {W}}_{1y}&1&0\\{\vec {W}}_{1y}&{\vec {W}}_{1x}&0&1\\...\\{\vec {W}}_{px}&-{\vec {W}}_{py}&1&0\\{\vec {W}}_{py}&{\vec {W}}_{px}&0&1\\...\\{\vec {W}}_{Nx}&-{\vec {W}}_{Ny}&1&0\\{\vec {W}}_{1y}&{\vec {W}}_{1x}&0&1\end{pmatrix}}$$*{\begin{pmatrix}a\\b\\{\vec {T}}_{0x}\\{\vec {T}}_{0y}\end{pmatrix}}$
  
  dove ${\vec {y}}$ rappresenta il vettore contenente i termini noti, $A$ la matrice dei coefficienti e ${\vec {x}}$ il vettore dei parametri da stimare.
  
  ## Stima dei parametri
  
  Per la risoluzione del sistema è conveniente normalizzarlo, moltiplicando ambo i membri per la trasposta di $A$ ($A^{T}$) :
  
  $A^{T}A{\vec {x}}=A^{T}{\vec {y}}$
  
  Allora, definendo con $N=A^{T}A$ la matrice normale, i prodotti $A^{T}A$ e $A^{T}{\vec {y}}$ risultano essere:
  
  $N=A^{T}A={\begin{pmatrix}d&0&0&0\\0&d&0&0\\0&0&N&0\\0&0&0&N\\\end{pmatrix}}$ $A^{T}{\vec {y}}={\begin{pmatrix}p\\q\\0\\0\\\end{pmatrix}}$
  
  con :
  
  $d=\sum _{p=1}^{N}(W_{px}^{2}+W_{py}^{2})$
  
  $p=\sum _{p=1}^{N}(W_{px}W_{px}'+W_{py}W_{py}')$
  
  $p=\sum _{p=1}^{N}(W_{py}W_{px}'-W_{px}W_{py}')$
  
  La matrice normale è diagonale in quanto le coordinate baricentriche hanno media nulla; le componenti ${\vec {T}}_{0x}$ e ${\vec {T}}_{0y}$ sono pari a zero per il medesimo motivo.
  
  Per la stima dei parametri non ci resta che determinare il sistema. Si ottengono le seguenti relazioni:
  
  ${\hat {a}}={\frac {p}{q}}$ ${\hat {b}}={\frac {q}{d}}$ ${\vec {T}}_{0x}=0$ ${\vec {T}}_{0x}=0$
  
  Grazie a queste è possibile stimare i parametri $\alpha$ e $\lambda$ :
  
  ${\hat {\lambda }}={\sqrt {{\hat {a}}^{2}+{\hat {b}}^{2}}}$ ${\hat {\alpha }}=\arctan {\frac {\hat {a}}{\hat {b}}}$
  
  mentre una stima del vettore traslazione è ${\vec {T}}={\vec {X}}_{B}'-{\lambda }R{\vec {X}}_{B}$
  
  ## Calcolo degli scarti e delle varianza
  
  Definiamo gli scarti come differenza tra il valore reale e quello stimato:
  
  ${\vec {\nu }}={\vec {y}}-A{\vec {\hat {x}}}$
  
  Per calcolare la varianza a posteriori si usa la formula:
  
  ${\hat {\sigma _{0}^{2}}}={\frac {\nu ^{T}\nu }{r}}$
  
  con r = (numero di misure) - (numero parametri).
  
  