====== 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 → //.