====== Ultrazvuk ====== ===== Vstupní data ===== * Screenshot s viditelnou krční tepnou ([[https://cs.wikipedia.org/wiki/Krkavice'|krkavicí]]) a změřeným průměrem (pro vyšší robustnost změřte vzdálenost vícekrát) * Dvě videosekvence krkavice, jedna nasnímaná podél a jedna nasnímaná napříč. Cca 200 framů je postačující délka. Dvě další sekvence stejného typu budou dány k dispozici, dohromady tedy 4 sekvence. Pro snímání utvořte skupinky a postupně během cvičení nasnímejte, nejpozději do 7. cvičení (3.4.). Zpracování bude probíhat jednotlivě, ale stačí nasnímat ve dvojici jednu sadu (screenshot, 2 x video). Na každém cvičení do 3.4. bude ultrazvuk k dispozici. **Sekvence:** [[http://cmp.felk.cvut.cz/~herinjan/docs/raw_long.avi|podélně]] a [[http://cmp.felk.cvut.cz/~herinjan/docs/raw_tra.avi|příčně]] **Sekvence (jednotlive framy jako png)** [[http://cmp.felk.cvut.cz/~herinjan/docs/seq_long.tar.gz|podélně]], [[http://cmp.felk.cvut.cz/~herinjan/docs/seq_tra.tar.gz|příčně]] Nacteni sekvence: pngFiles = dir('*.png'); numfiles = length(pngFiles); mydata = cell(1, numfiles); for k = 1:numfiles mydata{k} = imread(pngFiles(k).name); end /* **Backup Sekvence:** [[http://cmp.felk.cvut.cz/~herinjan/docs/backup_long.avi|podélně]] a [[http://cmp.felk.cvut.cz/~herinjan/docs/backup_tra.avi|příčně]] */ ===== Zadání ===== - Vyhodnoťte a udejte změřený průměr krkavice. [0.5b] - Změřte v nasnímaných sekvencích srdeční tep. [4.5b] ===== Úprava .avi při chybě kodeku ===== Některé verze Matlabu mohou mít s formátem exportovaného videa potíže, pokud se podobná chyba objeví, použijte ''avconv'' pro konverzi: ''avconv -i exported.avi -c:v rawvideo -pix_fmt rgb24 converted.avi'' V tomto formátu by měl Matlab být schopen video načíst. Rychlou kontrolu lze provést následovně '' obj = mmreader('converted.avi'); frame = read( obj, 0); imshow(frame)'' ===== Postup řešení druhé části ===== Srdeční tep budeme zjišťovat pomocí analýzy rozídlných frekvencí (přes časovou osu) obsažených ve výřezu obsahujícím tepající krkavicí. Pomocí frekvenční analýzy budeme sledovat časově závislý signál $j(t)$ střední intenzity výřezu. Ve zprávě uveďte vypočtené tepové frekvence a v postupu zmíněné grafy. - Extrahujte výřez $P$ a spočtěte pro každý frame $t$ průměrnou intenzitu $j(t) = \frac{1}{|P|}\sum_P I(x,y,t)$ a vykreslete funkci $j(t)$ do grafu. [0.5b] {{ :courses:a6m33zsl:us_viz_crop_compl.png?nolink&800 |}} - Normalizujte signál $j(t)$ odečtením střední hodnoty (přes klouzavý interval o délce $w$, ca $w=32$. - Spočtěte dominantní frekvenci signálu $j(t)$ (tepová frekvence) pomocí následujících metod a srovnejte jejich výsledek: * Fourierova transformace [2 pt] - Pomocí funkce [[http://www.mathworks.com/help/matlab/ref/fft.html|fft]] spočtěte spektrum signálu $J(f) = |\mathcal{F}(j)|$ - Za pomocí funkce [[http://www.mathworks.com/help/matlab/ref/fftshift.html|fftshift]] převeďte $J(f)$ na vector o rozsahu $-\frac{f_r}{2} \leq f \leq \frac{f_r}{2}$, kde $f_r$ je //frame rate// vstupního videa. - Najděte dominantní frekvenci (odpovídající tepu) a vyjádřete jí v úderech za minutu. - Vykreslete $J(t)$ a použije tepovou frekvenci na ose $x$. {{ :courses:a6m33zsl:us_jf.png?nolink&400 |}} * Autokorelace signálu [2 pt] - Je-li potřeba, vyhlaďte signál před použitím autokorelace; například pomocí konvoluce Gaussovským kernelem (funkce [[http://www.mathworks.com/help/matlab/ref/conv.html|conv]]). Gaussián se pro připomenutí spočte pomocí $$g(x) = \frac{1}{\sqrt{2 \pi} ~ \sigma} e^{-\frac{x^2}{2 \sigma^2}}$$. - Spočtěte autokorelaci filtrovaného signálu (funkce [[http://www.mathworks.com/help/signal/ref/xcorr.html|xcorr]]) - Z periody autokorelačního signálu (získáme s pomocí funkce [[http://www.mathworks.com/help/signal/ref/findpeaks.html|findpeaks]]) spočtěte tepovou frekvenci. {{ :courses:a6m33zsl:us_xcorr.png?nolink&400 |}} - **BONUS** [1pt] Najděte ve vstupní sekvenci pixely, jejichž časový profil má vysokou podobnost s detekovanou srdeční frekvencí $f_h$. Tj. hledáme pro pixely $x$, čas $t$ a frekvenci $f_h$ parametry modelu: $s(x,t) = a(x) $sin$(2\pi f_h t) + b(x)$cos$(2\pi f_h t) + c(x)$ * Sestavíme soustavu lineárních rovnic \\ \begin{bmatrix} s(x,1) \\ \vdots \\ s(x,N) \end{bmatrix} = \begin{bmatrix} \textrm{sin}(2\pi f_h t_1) & \textrm{cos}(2\pi f_h t_1) & 1 \\ \vdots & \vdots & \vdots \\ \textrm{sin}(2\pi f_h t_N) & \textrm{cos}(2\pi f_h t_N) & 1 \end{bmatrix} \begin{bmatrix} a \\ b \\ c \end{bmatrix} \quad (=) \quad S = A.V \\ * pomocí operace \ ([[http://www.mathworks.com/help/matlab/ref/mldivide.html|mldivide]]) a získáme $V = [a b c]$ * Pro každý pixel spočteme $a(x)^2 + b(x)^2$. * Zobrazte pixely, které mají se signálem srdečního tepu vysokou podobnost, $a(x)^2 + b(x)^2 > \tau$.