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