===== Lab 10 : Rekonstrukce obrazu (MRI) =====
V předchozím cvičení jsme se zabývali závislostí signálu jednoduché sekvence s opakovými RF pulsy na parameterech TR/TE. Průběh signálu jsme uvažovali pro jednu látku, bez prostorového umístění. Ostatně při této sekvenci bychom měřili **jeden** signál -- celkové echo celého excitovaného objemu. Abychom získali 3D obraz, potřebujeme měřené echo //prostorově zakódovat//. To děláme pomocí gradientů, kterými se budeme zabývat v tomto cvičení.
**Frekvenční gradient** (frequency-encoding gradient) Pomocí cívek na vnějším plášti MR skeneru lze vytvořit //gradient frekvenčního kódování// $G_f$, což je doplňkové magnetické pole, které se přičítá k hlavnímu (statickému) poli $B_0$ (princip superpozice). Tento gradient začíná (ve smyslu osy $x$) na levé straně a lineárně roste směrem k pravé. Indukce (efektivní) celkového pole $B(x)$ pole tedy roste podél osy $x$ a tím pádem roste i spin a frekvence echa (//Larmorova rovnost// říká: $f = \gamma B(x)$. S timto kódováním jsme se setkali v předchozím cvičení, nastavovali jsme sílu přidaného gradientu tak, abychom daným pulsem excitovali pouze omezenou oblast osy $x$. Frekvenční gradient je aktivní během echa (resp. vyčítání signálu).
**Fázový gradient** (phase-encoding gradient) Opět použijeme lineární gradient $G_\phi$, kterým dočasně změníme rezonanční frekvenci ($\omega_1$ = $\gamma \cdot (B_0 + B_1) $). Po vypnutí gradientního pole se protony vrací zpátky ke své //původní// rezonanční frekvenci $\omega_0$, ale jejich fáze bude vůči výchozímu stavu posunuta. Velikost posunu je závislosti na síle a délce trvání $G_y$. Fázové kódování se zpravidla aplikuje podél osy $y$. Gradient fázového posunu se zapne a vypne před vytvořením echa.
**K-prostor** Je datová matice nad souřadnicemi $(k_x, k_y)$, někdy také //dočasný obrazový prostor//, kterou plníme vzorkováním signálu echa. Použitím frekvenčního a fázového kódování a definicí $k_x = -\gamma G_f t$ a $k_y = -\gamma G_\phi t$ získáváme souřadnici v reálném obrazu $x$ jako konjugovanou proměnnou k $k_x$, a obdobně pro $y$ a $k_y$. Díky tomu pak probíhá rekonstrukce MRI obrazu aplikací inverzní 2D-FFT.
Další informace jsou opět pěkně zpracovány na Q-MRI: [[http://mriquestions.com/how-to-locate-signals.html|prostorové kódování]], přehledová stránka //[[http://mriquestions.com/hellipmaking-an-image.html|making an image]]//, frekvenční a [[http://mriquestions.com/what-is-phase-encoding.html|fázové kódování]], [[http://mriquestions.com/k-space-basic.html|k-prostor]].
==== Domácí cvičení ====
- **[3 pt]** Naprogramujte funkci //{{courses:zsl:encodingmri.m?linkonly|[k_space,t]=encodingMRI(pho,T_1,T_2,T_r,T_e)}}// která dostane jako vstupní parametrické mapy $\rho$, $T_1$ a $T_2$, a vrací matici //K// (matici k-prostoru). Jedna řádka matice //K// obsahuje signál echo nasnímaný (navzorkovaný) pro jeden fázový gradient (podrobněji v [[#Detaily implementace]]). {{ :courses:zsl:mri_recon_constants.png?600 |}}
- **[2 pt]** Pomocí skriptu {{ :courses:a6m33zsl:get_nmr_phantom.m | get_nmr_phantom}} si vygenerujte parametrické mapy pro $T_1$, $T_2$ a $\rho$ (PD). Pro kombinace parametrů $TE, TR$ uvedené v tabulce níže:
- spočítejte matici $K$
- vykreslete matici $K$ (zobrazte amplitudu a použijte logaritmus pro převedení na stupně šedi)
- proveďte rekonstrukci obrazu pomocí inverzní FFT(2D) a také vykreslete.
- Jaké kombinace parametrů z tabulky vedou k $T_1$-, $T_2$- a $\rho$-váženému obrazu?
/* - **[1 pt]** [BONUS] Select one of the TE/TR settings, and add Gaussian noise to the frequency sample values prior to computing each row of the $k$-space (more details in the next section) and compare the resulting reconstructed image to the non-noisy reconstruction [1 pt]
*/
^ ^ A ^ B ^ C ^
^ $TR$ | 2500 ms | 2500 ms | 400 ms |
^ $TE$ | 90 ms | 10 ms | 90 ms |
**Parametrické mapy T1, T2 obsahují hodnoty v [ms], s časy TE a TR je rovněž potřeba pracovat v [ms]**
==== Detaily implementace ====
Na vstupu máme tři matice pro parametry $\rho, T_1, T_2$, které získáme zavoláním funkce [P_pd, P_t1, P_t2] = get_nmr_phantom(n);
. V dalším popisu budu pro odlišení řádek a sloupců používat $N, M$, ale generátor fantomu má pouze jeden parameter //n//, tedy platí $M = N = n$ a parametrické mapy jsou čtvercové.
Z parametrických map a z parametrů sekvence //TE// a //TR// pak na základě zjednodušené rovnice
$$U = \rho \cdot (1 - e^{-\frac{TR}{T_1}}) \cdot e^{-\frac{TE}{T_2}}$$
můžeme určit amplitudu měřeného signálu. Zde si musíme uvědomit, že echo $S(\omega, \phi)$, které lze popsat rovnicí
$$ S = U * \cos[\omega \cdot t + \phi] + \sqrt{-1} * sin [\omega \cdot t + \phi] $$
je souhrnný signál za celou excitovanou 2D-vrstvu. Tedy každý prostorový bod $(x, y)$ ovlivňuje hodnoty více (všech) bodů v k-prostoru $(k_x, k_y)$. Pro fixní fázový posun naplníme vzorkováním signálu jednu řádku matice $k$-prostoru, opakováním měření pro různé fázové posuny pak postupně naplníme všechny řádky.
{{:courses:zsl:labs_2020:mri_kspace.jpg?400|Zdroj: http://www.mri-q.com/data-for-k-space.html}}
Prvním krokem bude diskretizace rovnice výše v proměnných $U$, $t$, $\omega$ a $\phi$, samozřejmě s využitím souvislostí mezi fází $\phi_m$ a prostorovu osou $y$ v $U$ a mezi frekvencí $\omega_m$ a osou $x$. Mějme na vstupu parametrické mapy o velikosti $N \times M$. Pak již můžeme určit:
pro **frekvenční/fázové kódování**
* vektor diskrétních fází $\phi_n \in \langle 0, 2\pi)$, $n=1,..,N$ pro každý řádek obrázku.
* vektor frekvencí pro kódování sloupců $\omega_m = 100 \cdot m$ [Hz] pro každý sloupec $m=1,...,M$.
pro **diskretizaci signálu**
* vzorkovací frekvenci (minimálně dvojnásobek maximální frekvence, abychom se nedostali přes //Nyquistův vzorkovací limit//) $\Delta T = \frac{2\pi}{\max(\omega)}$
* vektor vzorkovacích časů $t_s = (s-1) * \Delta T, \quad s=1,...,M$
Vzorkování signálu v nastavených samplovacích bodech $t_s$:
$$ K(r, t_s) = \sum_{i, j}^{N, M} U(i, j) \cos[\omega_j t_s + r \phi_i] + \sqrt{-1} \sin[...]$$
opakujeme pro každou řádku matice $K$. Nezapomeňte, že echo je vždy celkové echo z kompletní vrstvy, proto jedna hodnota K(r, t_s) závisí na součtu přes $N$ a $M$.
/*
In the bonus task, distort the values of $\omega_j$ by generating zero-mean Gaussian noise $\varepsilon_j(r)$ for each repetition to get $\omega_j^{(n)} = \omega_j + \varepsilon_j(r)$ and use it instead of $\omega_j$ when filling the $K$-space.
*/