Barevné formáty Neindexované arevné formáty zleva: 15 pp, 12 pp zleva: 9 pp (3-3-3), 8 pp (3-3-2)
zleva: 7 pp (2-3-2), 6 pp (2-2-2) zleva: 5 pp (2-2-1), 4 pp (1-2-1) 3 pp (1-1-1)
srovnání použití koeficientu (vlevo) a pouhého itového posunu (vpravo), shora: 8 pp (3-3-2), 6 pp (2-2-2), 3 pp (1-1-1) Indexované arevné formáty Statická vyhledávací taulka Velmi snadný způsoem, jak vytvořit paletu pro orázek je založený na tom, že si všechny zorazitelné arvy promítneme na úsečku, kterou rozdělíme rovnoměrně tolikrát, kolik chceme získat arev. Jednotlivé dělicí ody potom udou označovat reprezentativní arvy. Tento postup je však nepraktický, protože arvy vytvořené palety závisí pouze na počtu zvolených arev a nikoliv na arvách osažených v orázku (ten se vůec neprochází). Při vhodně zvoleném počtu arev však může vzniknout gloálně optimální paleta, kterou je možné použít oecně s nejmenší ztrátou, avšak konkrétní orázky si ovykle vyerou jen několik arev, přičemž zylá většina je k neupotřeení. Jedinou výhodou algoritmu je vysoká rychlost, protože odpadá potřea jednoho průchodu orázkem. Algoritmus začíná jednoduchým určením délky kroku na úsečce se všemi arvami: 3 256 16777216 step = = colors 1 colors 1 Následuje cyklus, který naplní jednotlivé položky palety (pro 256 arev jsou indexy palety i od 0 do 255). Hodnota index udává umístění na přímce: index = i step Toto číslo se posléze převede do 256-kové soustavy, takže získáme trojciferné číslo s hodnotami cifer 0-255. Tyto hodnoty označíme za intenzity jednotlivých arevných složek a získáme tak jednotlivé arvy. Dalším nešvarem tohoto algoritmu je periodicita, která se při špatně zvolené hodnotě kroku projeví (v případě 256 neo 16 arev udou arevné složky stejné, takže vygenerovaná paleta paleta ude osahovat stupně šedi):
Static look-up tale algoritmus, zleva: 256 arev, 16 arev Sporadické výsledky dostaneme při zvolených neovyklých počtech arev: Static look-up tale algoritmus, shora: 250 arev, 171 arev Static look-up tale algoritmus, 8 arev Prostorové podvzorkování Velmi jednoduchý a rychlý algoritmus pro redukci počtu arev se zakládá na zmenšení orázku na velikost palety, takže arvy pixelů orázku udou určovat reprezentativní arvy. Nevýhodou algoritmu je zanedání velkého množství pixelů, které se vyhýají načítaným hodnotám. Paleta pak osahuje mnoho podoných, ne-li stejných arev, přičemž jiné důležité arvy se v ní vůec nevyskytují. Rychlost je však hlavní předností, která dovoluje např. redukci počtu arev v reálném čase. Velikost zmenšené itmapy odvodíme z předpokladů, že počet jejích pixelů se má lížit požadovanému počtu arev a její poměr stran musí odpovídat poměru stran původního orázku. Platí tedy: width height = colors width width = height height Odtud dostáváme vztahy pro velikost podvzorkované itmapy:
width colors width = ceiling height colors height = ceiling width Hodnoty jsou zaokrouhleny nahoru, protože velikost itmapy je diskrétní. Spatial susampling algoritmus, zleva: 256, 16 a 8 arev Prostorové průměrování Tento algoritmus pracuje v podstatě stejně, jen při zmenšování itmapy používá interpolaci (v programu ImagingShop ikuická). Tím vlastně započítává i méně četné arvy, ale dochází tak k míchání arev a arvy v paletě už odpovídají spíše skupinám pixelů, než konkrétním arvám osaženým v orázku. V některých případech však tento algoritmus dosahuje lepších výsledků, než při podvzorkování. Spatial averaging algoritmus, zleva: 256, 16 a 8 arev rozdíl ve výstupu při použití podvzorkování (vlevo) a interpolace palety při použití podvzorkování (vlevo) a interpolace Stejnoměrné rozdělení arevného prostoru Tento algoritmus pracuje v arevném prostoru RGB krychle, která je rozsekána na přiližně tolik malých shodných kvádříků, kolik požadujeme arev. Jakmile je prostor exaktně rozdělen, prochází se pixely orázku a jejich arvy se
vnáší do jednotlivých kvádrů. Reprezentativní arva se z každého kvádru přečte jako průměr všech arev, které se v dané krychli nacházejí. Nevýhodou tohoto algoritmu je rozklad arevného prostoru, který nerespektuje rozložení arev v krychli, takže některé kvádříky nemusí osahovat žádnou arvu (nevyužité položky palety) a některé mohou osahovat dva shluky arev, které se zprůměrňují do jedné arvy a vnesou tak do výsledného orázku velké homogenní plochy. Algoritmus trpí podonými prolémy, jako předchozí, nicméně už částečně vychází z rozložení arev v orázku, takže přináší lepší výsledky. Implementace algoritmu je také poměrně jednoduchá. Nejprve je třea určit počet hran kvádříků na každé ose výchozí RGB krychle. Součin počtů hran na každé ose y se měl co nejvíce lížit požadovanému počtu arev, přičemž kvádříky y se svým tvarem měli co nejvíce lížit krychli. Počet hran musí ýt přirozené číslo, proto udeme ze začátku zaokrouhlovat dolů a začneme u modré osy. Potom ude následovat červená a nakonec zelená. Díky tomuto pořadí připadne na zelenou největší zytek, což odpovídá pořadí citlivosti člověka na doplňkové arvy (zelená ude mít nejvíce úrovní, pak červená a nakonec modrá): 3 2 r r = colors = floor 3 ( colors ) = colors colors = floor = colors g r g colors = floor r Velikost kroku na ose je dána: step r, g, 256 = Před zahájením procházení pixelů orázku je zinicializováno statické pole struktur o rozměrech. Každý prvek tohoto pole osahuje čtyři proměnné: součty hodnot arevných složek r g pixelů spadajících do daného prvku pole (kvádříku v RGB krychli) a vlastní počet takových pixelů. Pozice v poli, na R G B které se jednotlivé proměnné inkrementují je [,, ], kde R, G, B jsou hodnoty arevných složek step step step r, g, r g příslušných pixelů. V závěru algoritmu se celé pole projde, přičemž každá složka reprezentativní (průměrná) arvy na určité pozici je podíl odpovídajících součtů arevných složek a počtu pixelů. Při mapování arev do palety je potřea dát pozor na kvádříky, ve kterých žádná arva není (dělení nulou). Uniform algoritmus, zleva: 256, 16 a 8 arev Z posledního dodatku vyplývá, že ne vždy se ojeví nějaká arva v každém kvádříku, rovněž nelze krychli rozdělit na zlomky kvádříků, proto je výsledná paleta neúplná:
Paleta orázku Parrots, Uniform algoritmus, 256 arev Popularity algoritmus Tento algoritmus vychází pouze z histogramu orázku. Pro získání přesného histogramu je potřea nejprve projít celý orázek, často se v praxi prochází třea jen každý čtvrtý pixel. Ovykle je to dostačující, protože se nevychází z přesných počtů pixelů té které arvy, ale pouze je třea určit, které arvy je víc než jiné. Podívejme se na histogramy původního orázku a orázku zpracovaného Popularity algoritmem. Vzdálenost na vodorovné ose (příklad níže) odpovídá intenzitě arevné složky, na svislé ose potom pravděpodonost výskytu této intenzity. K průchod histogramy červené, zelené a modré složky dojde tolikrát, kolik výsledných arev požadujeme. Při prvním průchodu se z každého histogramu odpíchne ta intenzita, která odpovídá největší výskytovosti. Z hodnot intenzit jednotlivých složek potom vytvoříme nejpopulárnější arvu. V druhém průchodu zvolíme druhou nejpopulárnější arvu a tak dále. Histogram orázku Parrots před a po zpracování Popularity algoritmem (256 arev) Achylovou patou algoritmu je zanedání arev, které se v orázku vyskytují sice málo, ale vyjadřují klíčové detaily. Velmi záleží na tvaru histogramu. V příkladu je nejvíce arev nakumulováno v olasti menších intenzit, takže výstupem algoritmu při nižším počtu zvolených arev udou arvy právě z této olasti. Orázek tedy ude tmavý. Hladší graf histogramu zase vede k vkládání podoných arev, takže výsledný orázek může pozývat na kontrastu. Oa tyto nešvary jsou na výsledcích vidět. Na druhou stranu je algoritmus přímočarý, pouze vyčte příslušné arvy z histogramu (rychost). Navíc může u orázků, které neosahují příliš odstínů jedné arvy, dosahovat podoných výsledků, jako jiné algoritmy. Popularity algoritmus: 256 arev, vygenerovaná paleta Paleta orázku osahuje arvy seřazené podle popularity, avšak arvy se mohou odchylovat od původních, protože yly vytvořeny na základě analýzy jednotlivých arevných kanálů a ne celých arev (viz chocholka papouška arara).
Degradace kontrastu a světlosti při sníženém počtu arev, zleva: 16 a 8 arev Diversity algoritmus Hlavní prolém Popularity algoritmu (žádný ohled na arvy s menším výskytem) částečně řeší Diversity algoritmus, který nehledá jen intenzity s největším výskytem, ale střídavě intenzity s nejvyšším-nejnižším výskytem. Samozřejmě zase není zaručeno, že právě arvy, které z hlediska výskytu leží někde mezi těmito dvěma extrémy, neudou zrovna ty, které dokreslují důležité detaily (základ v histogramu). Diversity algoritmus: 256 arev, vygenerovaná paleta Diversity algoritmus, zleva: 16 a 8 arev Z orázků je patrné, že vynucení méně se vyskytujících arev nevede vždy k výěru všech vhodných arev. jsou však ovykle lepší, než u popularity algoritmu. Octree algoritmus Tento algoritmus patří k jedněm z nejpoužívanějších, zejména kvůli rychlosti a efektivitě. K redukci počtu arev využívá oktalové stromy (pro vysvětlení a implementaci viz kap. Datové struktury v počítačové grafice). Octree algoritmus vychází z RGB krychle. Každý od v této krychli vyjadřuje svými souřadnicemi jednu arvu a krychle sama může osahovat všechny zorazitelné arvy (rozměry krychle jsou tedy 256x256x256). Nejprve je potřea získat prvních k unikátních arev, tedy právě tolik arev, kolik má mít výsledný orázek. Jednotlivé arvy leží zpočátku v listech stromu v hlouce 8 (maximální hlouka). Samotná pozice listu říká, jakou arvu vyjadřuje, avšak list osahuje pro pozdější redukci počtu arev datovou strukturu s proměnnými r, g,, references, které jsou typu long. Při každém přidání nové arvy Se jde ve stromu tak hluoko, až se narazí na uzel osahující tuto strukturu (takový uzel se považuje za list) a k proměnným r, g, se přičtou hodnoty složek vkládané arvy. K proměnné references se přičte jedna. Jakmile se ve stromu vyskytne k+1 unikátních arev, je třea provést redukci některého uzlu. Zde se ojevuje základní prolém algoritmu, tedy nalezení toho správného uzlu, který y měl ýt zredukován. Hlavním kritériem pro volu uzlu je jeho hlouka, protože uzly ve vetší hlouce mají pod seou listy, které vyjadřují ližší arvy, takže jejich zredukováním vznikne menší odchylka. Druhým kritériem je počet pixelů, který daný uzel vyjadřuje (tedy součet počtu pixelů arev, které vyjadřují listy). Vyíráme samozřejmě z uzlů, ze kterých už vycházejí jen listy, což jsou zpočátku uzly v hlouce 7, později mohou ýt i výše. Ovykle se jako druhé kritérium pro výěr uzlu volí co nejmenší počet pixelů s arvami, které jsou v listech níže. Lze však volit jako druhé kritérium co největší počet reprezentovaných pixelů. V tomto případě ude celková odchylka výsledného orázku vyšší,
avšak získáme věrnější zorazení v detailních částech orázku na úkor homogenních arevných ploch a protáhlých přechodů. V programu ImagingShop je zohledněno první kritérium. Vylepšená varianta Octree algoritmus, zleva: 256, 16 a 8 arev Vylepšená varianta algoritmu uduje sekundární oktalový strom, který slouží ke kontrole, zda je vkládaná arva nová, do redukovaného stromu tedy přicházejí pouze unikátní arvy. Orázky jsou potom pestřejší, protože paleta osahuje více rozdílných arev. originál vlevo: orázek zpracovaný Octree algoritmem a jeho paleta, vpravo: Improved octree algoritmus Median Cut algoritmus Tento algoritmus poprvé představil P. Heckert začátkem 80. let. Algoritmus se snaží dosáhnout přiližně stejného počtu pixelů na každou reprezenativní arvu v paletě. Median Cut algoritmus, zleva: 256, 16 a 8 arev Variance-ased algoritmus Další algoritmy pro redukci počtu arev