Cílem prvního cvičení je seznámení s prostředím MATLAB a procvičení základních operací s obrazem na příkladu jasových transformací.
V laboratořích K132, K220 a G3 by měl být správný Matlab 7 na ploše. Pokud je váš domácí počítač připojen k Internetu, můžete si Matlab (včetně toolboxů) nainstalovat i doma. Matlab běží lokálně na vašem stroji a ověřuje si licenci na licenčních serverech.
Na webu lze najít mnoho tutoriálů a návodů. Z mnohých vybíráme:
Během cvičeních se vám budou hodit pomocné
funkce a obrázky.
Doporučujeme stáhnout do
vašeho pracovního adresáře, např do podadresářů Codes,
Images
. Spusťte Matlab. Přejděte do vašeho adresáře
>> cd jmeno_disku:/jmeno_adresare
Přidejte cesty pomocí příkazu
>> addpath ./Codes ./Images
Nyní bude Matlab vaše funkce a obrázky "znát", o čemž se snadno přesvědčíte příkazy:
>> help showdata >> im = imread('Kravy_na_podzim.jpg');
Pro rychlejší pochopení základních operací můžete
použít vzorové kódy, která jsme pro vás
připravili. Demostrují některé základní operace s obrazy v
Matlabu. Doporučujeme stáhnout a experimentovat pro lepší
pochopení. Pokud vám nebude něco jasné, použijte nejdříve komfortní Matlab help doc
jmeno_funkce
, pak se ptejte cvičících.
|
Tento obrázek má malý kontrast, tj. malý rozdíl intenzit mezi světlými a tmavými oblastmi. Více podrobností zjistíme z jeho histogramu. V této úloze se naučíme, jak kvalitu takových obrázků vylepšovat. Pokud nevíte, jak na to, přečtěte si stručný úvod do jasových transformací. Můžete se podívat též na ukázkový skript a jeho výstup. Poznámka: nízký kontrast neznamená automaticky špatnou fotografii, pokud je záměrem fotografa, hovoříme o low-key (chybí světlé odstíny) nebo high-key (chybí tmavé odstíny) fotografii. |
Pro experimenty můžete použít připravenou fotografii. Můžete přirozeně použít i
nějakou vlastní. Uvažujeme 8-bitový šedotónový obraz, načítejte pomocí
standardní funkce imread
.
Napište funkci [q01,q99] = hist_and_quantiles(I)
, kde
vstupní parameter I
je matice s obrazem, a výstupní parametry q01,q99
jsou 1% a
99% kvantily
intenzit v obraze. Funkce také musí zobrazit histogram jasových hodnot
pomocí Matlab funkce bar
. [0.5 bodu]
Implementujte po částech lineární transformační funkci Iout =
jastr_lin(I,a,b,c,d)
– byla popsána v návodu. Napište funkci maximálně obecně tak,
aby fungovala pro libovolné parametry. Tedy například i pro
c>d
. Zkuste si vaši funkci použít pro konverzi obrázku na
negativ. Funkce by měla sama kontrolovat přípustnost parametrů a v
případě chyby zobrazit smysluplné hlášení. Při testování můžete také
vhodně použít kvantily vpočtené funkcí
hist_and_quantiles
. Výstupní obraz Iout
musí
mít stejný rozměr a být stejného typu jako obraz vstupní.
[2 bodu]
Pokud napíšete výše požadovanou funkci jastr_lin
bez jediného cyklu pomocí maticových a vektorových operací
(google: Matlab code vectorization). Implementujte tak aby komplexita
byla úměrná počtu jasových hodnot, nikoli počtu pixelů v
obraze. Náleží vám dalších [0.5 bodu]
Bonusová úloha: implementujte ekvalizaci histogramu
Iout = jastr_ekv(I)
podle definice
z přednášky, aplikujte na I
. Opět, vstupní i výstupní obrázek musí mít stejný rozměr i datový typ.
[0.5 bodu]
Odevzdáváte tedy funkce (soubory): hist_and_quantiles.m,
jastr_lin.m
a případně bonusovou funkci
jastr_ekv.m
. Pokud tyto funkce případně vyžadují ještě další vaši funkci, přibalte ji také.