Najneskorší termín odovzdania: 1.4.2012 (nedeľa) o 21:00
Odovzdávané súbory: AnalyzatorSkenu.java
Doplňujúce požiadavky:
Zuzana je študentkou medziodborového štúdia biológia-informatika na UPJŠ. A ako to už býva pri štúdiu biológie, práci v labákoch sa žiaden študent nevyhne. Zuzana nie je žiadnou výnimkou. Pri jednej takej práci v laboratóriu im ich vyučujúci ukázal experiment, na ktorom práve robia. V rámci experimentu študujú pohyb a delenie akýchsi buniek (Zuzana je ešte len prváčka, takže to, o aké bunky ide, veľmi "nerieši"). Samozrejme na UPJŠ nie je núdza ani o modernú laboratórnu techniku. A tak biológovia na tie bunky nepozerajú bežným mikroskopom ale rovno digitálnym mikroskopom. Taký digitálny mikroskop si môžete predstaviť ako digitálny fotoapárat s veľmi kvalitným "zoomom" - umožňuje vyfotografovať či nakamerovať mikroskopické zábery. Aby bolo bunky lepšie vidieť, biológia si dopomáhajú rôznymi fluorescenčnými látkami alebo ožarovaním (preto sú bunky tak "do zelena"). Ale k veci. Vyučujúci poprosil Zuzanu a jej spolužiakov o pomoc pri vyhodnocovaní experimentu. Biológovia majú kopu záberov z mikroskopu, no pre samotné vyhodnotenie by potrebovali vedieť, koľko buniek je jednotlivých záberoch (keďže čas vzniku záberov poznajú, môžu tak určiť rýchlosť delenia buniek a jej závislosť od okolitých podmienok). Zuzana aj spolužiaci súhlasili (veď kto by sa nechcel podieľať na takomto experimente) - a začali bunky na záberoch rátať. S každým ďalším záberom a každou ďalšou bunkou ich nadšenie (exponenciálne?) klesalo... :-(
Ako také zábery vyzerajú, si môžete pozrieť na tomto obrázku:
Ďalšie mikroskopické zábery buniek nájdete v súbore: SkenyBuniek.zip (aj s počtom buniek, ktoré študenti na zábere napočítali)
A vtedy si Zuzana uvedomila: veď ja viem predsa programovať! PAZ1a má za sebou, PAZ1b je ešte otvorené, no už všelijaké algoritmy a údajové štruktúry pozná. A nebolo by skvelé, ak by kolegom biológom ukázala, že informatike sa dnes už nevyhne asi žiaden vedecký odbor? Čo tak naprogramovať program, ktorý by zrátal počet buniek na zábere z digitálneho mikroskopu?
Obrázkov na spracovanie je veľa, niektoré sú oveľa väčšie ako tie na obrázku. Zuzana je však znalá problematiky efektívnosti algoritmov. Rozhodla sa preto napísať program čo najefektívnejšie - v ideálnom prípade tak, aby pracoval v lineárnom čase (lepšie sa nedá, lebo na každý pixel obrázka sa musíme pozrieť aspoň raz).
Upravením triedy AnalyzatorSkenu
vytvorte triedu na analýzu záberov buniek z digitálneho mikroskopu. Kód analyzujúci vstupný obrázok umiestnite do metódy analyzuj
. Metódu pocetBuniek
upravte tak, aby vrátila počet buniek na obrázku. Pri analýze použitie tieto skutočnosti:
jePixelBunky
vám povie, či pixel na zadaných súradniciach je pixelom bunky - využíva sa to, že obrázok je predspracovaný a pozadie má čiernu farbu,
sirka
a vyska
; platný rozsah indexov pre pixely v x-ovej súradnici je teda 0, ..., (sirka-1)
a y-ovej súradnici je 0, ..., (vyska-1)
,
Trieda AnalyzatorSkenu
:
V triede AnalyzatorSkenu
nájdete aj metódu vypocitajHustotuBuniek
, ktorá demonštruje princíp práce s obrázkom ako aj použitie metódy jePixelBunky
. Táto metóda do inštančnej premennej hustotaBuniek
vypočíta pomer počtu pixelov, ktoré zachycujú nejakú bunku, k celkovému počtu pixelov obrázka. Inými slovami hustotaBuniek
určuje, aké percento plochy obrázka je pokryté bunkami.