Neuronové sítě – kódování a dekódování bitmapových obrázků

Díl 8

Zkusíme naučit neuronovou síť zakódovat a posléze dekódovat grafický bitmapový obrázek. Dalo by se tomu říkat komprese obrázků, ale budeme tomu říkat kódování, protože jde o širší využití např. hledání grafických objektů či porovnávání grafických podkladů apod.

Princip

Neuron bitmap kódování

Pro tento účel nám nebude stačit jen jedna neuronová síť, ale budeme potřebovat jednu pro systém zakódování a jednu pro dekódování zakódovaných dat. Kódovací síť se naučí obrázek zakódovat ve svých vnitřních hladinách a zároveň i rozkódovat. Hodnoty vnitřních zakódovaných hodnot se pak po kvantizaci použijí jako vstupní parametry pro dekódovací neuronovou síť. Pro lepší orientaci v projektu se podívejte na přiložené obrázky.

Vstupní a výstupní parametry

Celý obrázek se rozčlení do jednotlivých bloků ve velikosti X×Y. Tyto bloky se rozdělí na řadu pixelů a dále na složky RGB. Hodnoty složek RGB (0 až 255) se normalizují na hodnoty 0 až 1 jako vstup neuronové sítě.
Tyto hodnoty se použijí pro vstup a výstup kódovací sítě i jako výstupní hodnoty pro učení dekódovací sítě.

Příklad: pokud zvolíme blok o velikosti 2×2 dostaneme 4 pixely. Tyto barvy pixelů rozložíme na RGB (3 hodnoty) tzn. 2×2×3=12 hodnot 0 až 1. Vstupní vrstva bude mít 12 neuronů.

Vstupní hodnoty dekódovací sítě jsou vyčteny z prostřední hladiny kódovací sítě. Následně jsou kvantizovány (1-8 bits) na hodnotu v osmi stupních (dle nastavení zkušební aplikace). Hodnoty pro kvantizaci:

Příklad: pokud bude vnitřní hladina obsahovat 8 hodnot a budeme mít nastavenou kvantizaci na 3 bits, dostaneme 8 hodnot 0 až 1 ve stupních po 1/7.

Tvar neuronové sítě

Neuron bitmap dekódováníJak jsme se již zmínili, použijeme dvě neuronové sítě. Jednu pro kódování a druhou pro dekódování obrazu. Vstupní hodnota tvaru neuronové sítě je začátek kódovací sítě, která se symetricky převrátí a rozšíří svoje hladiny.

Příklad: pokud vstup neuronové sítě bude 12-8, automaticky se vytvoří kódovací síť 12-8-12 či pokud bude vstup 18-9-3 vytvoří se kódovací síť 18-9-3-9-18.

Dekódovací neuronová síť bude zepředu zkrácená a zbude jen její zrcadlová část hladin.

Příklad: pro 12-8-12 bude 8-12 a pro 18-9-3-9-18 bude 3-9-18.

Výstupem z kódovací sítě a vstupem dekódovací sítě bude vždy prostřední hladina.

Aplikace

Popis aplikace a ovládacích prvků:

UraxBitmap.zip (C++) aplikace ke stažení (1.12 MB)
(Stažený soubor rozbalte do nějakého adresáře a spusťte UraxBitmap.exe, testovací obrázky pro aplikaci jsou přiloženy)

Závěr

Systém kódování obrázku neuronovou sítí najde optimální zakódování jednotlivých obrazových bloků. Kombinace bloků, které se v konkrétním obraze nevyskytují, jsou vypuštěny a využity k optimálnějšímu zakódování stávající obrazové matice. Tento způsob lze využít i pro ukládání kompresovaných obrázků, ale bude asi příliš pomalý. Komprese obrázků metodou JPG bude efektivnější.

Obdobné nebo rozšířené způsoby lze, ale využít pro jiné, sofistikovanější zpracování grafických podkladů  snad někdy příště.

Zábavu s obrázky pro vás připravil Shrimphood.net team

-fjura-

Odkazy

Další projekty Neuronové sítě

Galerie

| Více