====== Cvičení 1 ======
První cvičení obsahuje dvě části. V první se seznámíme s prostřením MATLAB pomocí několika úloh, v té druhé se budeme zabývat problematikou segmentace v prostření programu Fiji.
====== Zadání ======
* [[#Seznámení s MATLABem]] - Projděte si tutoriál a vypracujte tři uvedené úlohy. [3b]
* [[#Segmentace krvinek v programu Fiji]] - Vytvořte ve Fiji makro které osegmentuje jednolivé bunky a spočítá je, a aplikujte ho na všechny 3 obrázky. Odevzdejte výsledné segmentace a vytvořenou funkci. [2b]
====== Seznámení s MATLABem ======
Během cvičení budeme používat [[http://cs.wikipedia.org/wiki/MATLAB|MATLAB]]. Je vhodné, abyste se seznámili s tímto programem a se základy jeho využití, jelikož cvičení mohou být často náročné. Cílem cvičení není trávit příliš mnoho času samotným programováním, ale soustředit se na porozumění tématu a danou úlohu následně pomocí MATLABu efektivně splnit.
Pro případ, že si nejste příliš jisti svými dovednostmi v MATLABu, zde je několik užitečných odkazů:
* {{courses:a6m33zsl:matlab-tutorial.pdf|Matlab tutorial}} (cz)
* [[http://cmp.felk.cvut.cz/cmp/courses/OPT/cviceni/01/Matlab-Tutorial.html|Procvičení základních příkazů Matlabu]] (cz)
* [[http://www.indiana.edu/~statmath/math/matlab/gettingstarted/index.html|Getting started with MATLAB.]] Pěkný strukturovaný tutoriál z Indiana University. (en)
* [[http://www.cyclismo.org/tutorial/matlab/|MATLAB tutorial]] od Clarkson University.
* Jedna [[http://web.mit.edu/18.06/www/Spring09/matlab-cheatsheet.pdf|strana]] s běžnými základními operacemi při používání MATLABu.
* Pro přístup k dokumentaci jednotlivých funkcí použijte následující MATLAB příkazy:
help ops % krátká nápověda MATLAB
doc sum % dokumentace pro funkci sum
lookfor transponovat % vyhledá řetězec v dokumentaci
=== Zadání ===
Vypracujte následující bodu zadání, již během cvičení. Hodnocené jsou úlohy 2.-4., za každou lze získat 1 bod.
- Projděte si následující [[http://cmp.felk.cvut.cz/cmp/courses/OPT/cviceni/01/Matlab-Tutorial.html|Procvičení základních příkazů Matlabu]]
- Vytvořte 1D signál funkce y=-2x+1 v rozsahu (0,5) s krokem 0.1 s přidaným šumem v rozpětí [-1, 1]. Vykreslete pouze část tohoto signálu v intervalu [1,4] jako zelené křížky 'x'. {{ :courses:a6m33zsl:plot_fit_linear.png?600 |1D signál}}
- Proložte signál vytvořený v předcházejícím úkolu přímkou. Pro minimalizaci použijte metodu [[http://en.wikipedia.org/wiki/Least_squares|Least squares]]. Uvažujte soustavu rovnic X \cdot A = Y, kde //A// jsou koeficienty přímky, pak tato soustava má řešení A = X \setminus Y
- Vytvořte 2D plochu funkce z=\frac{\sin\left(\sqrt{x^2+y^2}\right)}{\sqrt{x^2+y^2}} pro x,y \in (-15,15) s krokem 0.25 a vykreslete ji vhodným způsobem. {{ :courses:a6m33zsl:mashgrid.jpg?600 |sinc(x^2+y^2)}}
- Načtete libovolný barevný obrázek (např. [[http://optipng.sourceforge.net/pngtech/img/lena.html|Lena]]).
* Převeďte jej na černobílý obrázek.
* Následně jeho barvy invertujte.
* Vytvořte pouze černo-bíly s prahem 128 (uvažujeme rozsah intenzit od 0 do 256).
{{ :courses:a6m33zsl:lena-res.png?600 |Lena}}
==== Segmentace krvinek v programu Fiji ====
V následující části si prakticky vyzkoušíme segmentaci mikroskopických obrázků v programu Fiji. Metodu následně aplikujte na následující 3 obrázky {{courses:a6m33zsl:5057.png?linkonly|5057.png}}, {{courses:a6m33zsl:5140.png?linkonly|5140.png}} a {{courses:a6m33zsl:5830.png?linkonly|5830.png}}. Do zprávy stručně popište postup včetně zvolených parametrů, vložte obrázky ilustrující postup a také výsledné obrázky.
[[http://fiji.sc/|Fiji]] (Fiji Is Just ImageJ) je Open Source balíček pro zpracování obrazu založený na [[http://en.wikipedia.org/wiki/ImageJ|ImageJ]], pěkný popis je na [[http://en.wikipedia.org/wiki/FIJI_%28software%29|wiki]].
Hlavním účelem Fiji je poskytnout distribuci ImageJ s mnoha užitečnými pluginy. Paralela vztahu mezi Fiji a ImageJ je například jako vztah Ubuntu a Linuxu. Dalším cílem Fiji je poskytnout uživatelům ucelenou strukturu nabídek, rozsáhlé dokumentace ve formě podrobných popisů a návodů algoritmů tak, aby se vyhnul nutnosti instalovat více komponent z různých zdrojů. Pro získání základní znalosti Fiji si projděte některý z [[http://fiji.sc/wiki/index.php/Category:Tutorials|tutoriálů]] nebo detailnější {{courses:a6m33zsl:imagej-user-guide.pdf|manuál}} k ImageJ.
**Úkol:** Nejprve si všechny obrázky převedeme na šedotónové, pak pomocí prahování oddělíme popředí od pozadí a nakonec pomocí základních morfologických operací a rozvodí oddělíme jednotlivé objekty které následně spočítáme.
**Postup:**
- Otevřete si Obrázek //File → Open...// nebo jednoduše přetažením (Drag and Drop) vybraného obrázku na lištu Fiji.
- Převeďte obrázek na šedotónový //Image → Type → 8-bit//.
- Oprahujte šedotónový obrázek abychom získali binární reprezentaci hledaných buněk (1) a pozadí (0). Použijeme funkci //Image → Adjust → Treshold// a nastavíme optimální. {{ :courses:a6m33zsl:fiji-segm-treshold.png?400 |Prahování}}
- Vyplníme prázdné díry uprostřed některých buněk //Process → Binary → Fill Holes//.
- Pro odstranění drobných artefaktů v obraze použijeme morfologickou operaci Otevírání, respektive [[http://homepages.inf.ed.ac.uk/rbf/HIPR2/open.htm|Opening]] //Process → Binary → Open//. Nejprve je v potřeba nastavit velikost masky (respektive počtu opakování eroze a následné dilatace) v nabídce //Process → Binary → Options...//.
- Některé sousedící buňky mohou být stále spojeny a tudíž by se počítaly jako jeden objekt. Pro rozdělení takovýchto shluků použijeme operaci Rozvodí neboli [[http://zone.ni.com/reference/en-XX/help/372916M-01/nivisionconcepts/morphological_segmentation/|Watershed]] //Process → Binary → Watershed//. {{ :courses:a6m33zsl:fiji-segm-watershade.png?400 |Rozdělení pomocí Rozvodí}}
- Nakonec pro spočítání objektů v obraze použijeme //Analyze → Analyze Particles//. Ve volbách doporučujeme nastavit:
* počítat jen objety větší než 50 pixelů
* zobrazit výsledky (numerické)
* vykreslit výsledky do obrázku (Overlay Masks)
{{ :courses:a6m33zsl::fiji-segm-particles.png?400 |Jednotlivé bunky.}}
**Vytváření maker ve Fiji:**
Pro praktické použití není příliš vhodné dělat takovéto segmentování a počítání objektů proto každý obrázek zvláště, proto se v praxi používají již hotové funkce nebo makra (sekvence po sobě jdoucích příkazů). Pro zajímavost si vytvořte takovéto makro pro počítání objektů ve Fiji. Návod jak psát makra ve Fiji naleznete [[http://fiji.sc/Introduction_into_Macro_Programming|zde]].
Jednodušší možnost jako vytvářet makra ve Fiji je si nahrát dané příkazy pomocí funkce //Plugins → Macros → Record..//, které vám otevře nové okno a ve kterém se postupně zapisují všechny vaše použité příkazy. Nyní tedy můžete projít celý postup znovu a nakonec makro uložíte.
Pro další použití aktivujete vaše makro //Plugins → Macros → Install..// (zde vyberete vaše makro) a dále na nově otevřený obrázek je jen stačí zavolat //Plugins → Macros → //.