Warning
This page is located in archive. Go to the latest version of this course pages.

Ultrazvuk

Vstupní data

  • Screenshot s viditelnou krční tepnou (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: podélně a příčně

Sekvence (jednotlive framy jako png) podélně, 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

Zadání

  1. Vyhodnoťte a udejte změřený průměr krkavice. [0.5b]
  2. 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.

  1. 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]
  2. Normalizujte signál $j(t)$ odečtením střední hodnoty (přes klouzavý interval o délce $w$, ca $w=32$.
  3. 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]
      1. Pomocí funkce fft spočtěte spektrum signálu $J(f) = |\mathcal{F}(j)|$
      2. Za pomocí funkce 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.
      3. Najděte dominantní frekvenci (odpovídající tepu) a vyjádřete jí v úderech za minutu.
      4. Vykreslete $J(t)$ a použije tepovou frekvenci na ose $x$.
  • Autokorelace signálu [2 pt]
    1. Je-li potřeba, vyhlaďte signál před použitím autokorelace; například pomocí konvoluce Gaussovským kernelem (funkce 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}}$$.
    2. Spočtěte autokorelaci filtrovaného signálu (funkce xcorr)
    3. Z periody autokorelačního signálu (získáme s pomocí funkce findpeaks) spočtěte tepovou frekvenci.
  1. 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
      <latex>

\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 </latex>

  • pomocí operace \ (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$.
courses/a6m33zsl/lab_us_processinga.txt · Last modified: 2017/04/10 13:42 by herinjan