Cvičení 4 - Jasové transformace

A) Teoretický úvod

Jasové transformace obrazu mohou být obecně bodové, lokální a globální podle toho, jaké okolí používají pro stanovení výstupní hodnoty vyšetřovaného bodu. Globální jasová transformace znamená, že výsledná hodnota pixelu je upravena na základě analýzy celého vstupního obrazu. Příkladem může být např. globální zvýšení jasu podexponovaného snímku. Lokální jasová transformace používá pro obrazovou analýzu jen malé lokální okolí vyšetřovaného bodu (zpravidla nejbližší čtyřokolí nebo osmiokolí) a bodová jasová transformace už jen pouze tento jeden bod. Bodová jasová transformace obrazu je tedy taková transformace, u níž je hodnota výstupního obrazového bodu s danými souřadnicemi závislá pouze na obrazovém bodu se stejnými souřadnicemi ve vstupním obrazu. Tento typ jasové transformace se při zpracování obrazu využívá nejčastěji a to ve formě převodních funkcí (převodních charakteristik nebo v diskrétním pojetí vyhledávacích tabulek LUT).

Sestavením převodních tabulek udávajících závislost jasových hodnot výstupního obrazu na jasových hodnotách obrazu vstupního lze provést některé ze základních jasových úprav obrazu jako např. inverze, okénko, prahování, úprava jasu nebo kontrastu, redukce barev (prahování s více prahy) a gama korekce. Na následujícím obrázku jsou graficky znázorněny uvedené převodní charakteristiky.

Každá převodní funkce musí splňovat princip jednoznačnosti (exkluzivní implikace), tedy že pro každou vstupní hodnotu existuje právě jedna hodnota výstupní. Obráceně ale tento princip neplatí a více vstupních hodnot může být zobrazeno na jednu výstupní hodnotu (zobrazení není surjektivní). Zřejmým případem je např. prahování s jedním prahem, kdy jsou ve výstupním obrazu použity jen dvě krajní jasové hodnoty. Výpočetně lze převodní charakteristiku pro šedotónový obraz v 8 bitové hloubce implementovat jako vektor o délce 256 hodnot z intervalu <0;255>. Algoritmus pro naplnění hodnot vektoru však závisí na typu prováděné transformace a obecně může být libovolně složitý.

O zastoupení jasových úrovní v obrazu vypovídá charakteristika, která se nazývá histogram a jíž v matematice odpovídá četnost prvku ve třídě. Graficky jde o závislost počtu výskytů h(q) dané jasové úrovně na hodnotě této úrovně q. Horizontální osu histogramu tedy tvoří v případě šedotónového obrazu s 8 bitovou barevnou hloubkou hodnoty 0 až 255 a vertikální osu pak počty pixelů s danou úrovní v celém obrazu. Je zřejmé, že histogram čistě bílého, černého nebo jinak homogenního obrazu o jasové hodnotě qk bude tvořen pouze jednou svislou čarou na příslušné pozici jasové hodnoty qk a její výška bude odpovídat celkovému počtu bodů obrazu tj. h(qk) = MxN.

Mezi jasové transformace patří také roztažení a vyrovnání (častěji ekvalizace) histogramu. Roztažení histogramu je početně jednoduchá operace, kdy je nenulový rozsah histogramu obrazu normován na celý rozsah možných jasových hodnot. Výstupní obraz tak využívá všechny jasové úrovně. Naproti tomu je ekvalizace histogramu výpočetně složitější transformace jasových hodnot využívající informaci o míře zastoupení jasových úrovní ve vstupním obrazu. Nejprve je vypočítán kumulativní histogram, jehož prvek n je dán součtem jeho prvku n-1 a prvku n původního histogramu (kumulativní histogram je integrací prostého histogramu). Následně je třeba vytvořit transformační funkci normováním kumulativního histogramu na rozsah jasových hodnot odpovídajících zvolenému výstupnímu obrazu např. 0 až 255. Posledním krokem je samotná transformace jasových úrovní podle převodní charakteristiky. Důležité je podotknout, že tato transformace je obecně nelineární a pro mnoho obrazů nemá význam (např. malé objekty na velké ploše).

Jasové transformace obrazu vždy změní jeho histogram bez ohledu na to, zda jde o transformaci bodovou, lokální nebo globální. V případě prahování s jedním nebo více prahy (tzv. redukce barev) dochází např. ke vzniku čárového histogramu. Vzhledem k tomu, že vlivem špatné expozice nejsou vždy u reálných snímků v histogramu přítomny krajní hodnoty tj. zcela tmavé a zcela světlé jasové úrovně, provádí se saturace mezních hodnot. Z hlediska histogramu to znamená, že daná část tmavých jasových hodnot je saturována na úrovni 0 a stejná část světlých jasových hodnot na úrovni 255. Míra saturace se volí podle potřeb aplikace a zpravidla dosahuje jednotek procent (nejčastěji percentil). K implementaci se používá kumulovaný histogram, v němž se určí jasové hodnoty odpovídající zadanému procentu pixelů stejně jako p-procentní kvantil u distribuční funkce hustoty pravděpodobnosti.

B) Úkoly

  1. Napište funkci [J] = ImageTransformLUT(I,LUT), která vrátí transformovaný obraz J vstupního obrazu I podle převodní (vyhledávací) tabulky určené druhým vstupním parametrem funkce. Na obrazu [lenaM.bmp] ověřte funkci pro operace inverze a úpravy kontrastu a zobrazte výsledek.

  2. Napište funkci [H] = ImageHistogram(I) pro výpočet histogramu obrazu a pro oba obrazy z minulého bodu vypočtěte a zobrazte do jednoho okna histogram původního a upraveného obrazu.

  3. Ověřte, že obraz [lenaM.bmp] neobsahuje všechny jasové úrovně a proveďte roztažení a vyrovnání jeho histogramu bez použití knihovních funkcí. Operaci roztažení histogramu proveďte jako skript a pro operaci vyrovnání histogramu napište funkci [J] = ImageEqualize(I), která vrací ekvalizovaný snímek. V jednom okně přehledně zobrazte původní obraz, obraz jasově roztažený a obraz ekvalizovaný vždy s příslušným histogramem.

  4. Implementujte funkci [Q01,Q99] = ImageQuantiles(I), která pomocí kumulovaného histogramu vypočítá 1% a 99% kvantil intenzit vstupního obrazu I a následně oba kvantily zobrazí v histogramu obrazu svislými čarami. Správnost implementace ověřte na obrazu [lenaM.bmp] pomocí jasové korekce tak, aby kvantily q01 a q99 tvořily v novém obrazu krajní hodnoty, tj. saturujte 1% tmavých a 1% světlých odstínů.

C) Dobré vědět

  • Pouhým roztažením nebo vyrovnáním histogramu (vektor hodnot) se samotný obraz nezmění, ale získá se charakteristika, podle které je možné upravit jasové úrovně všech bodů obrazu.

  • Povolené funkce: imread

  • Nepovolené funkce: imcomplement, imadjust, imcontrast, imhist, histeq

D) Ilustrace výsledků