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é.