Anti – AliasingAnti – Aliasing
Ondřej BurkertOndřej Burkert
atrey.karlin.mff.cuni.cz/atrey.karlin.mff.cuni.cz/~ondra/~ondra/strankastranka
ÚvodÚvodCo je to anti - aliasing ?Co je to anti - aliasing ?
Aliasing Aliasing = vznik artefaktů v důsledku podvzorkování při vzorkování = vznik artefaktů v důsledku podvzorkování při vzorkování (sampling) obrazu(sampling) obrazu
ppodvzorkováníodvzorkování = příliš vysoká frekvence dat vzhledem k vzorkovací = příliš vysoká frekvence dat vzhledem k vzorkovací frekvenci frekvenci
vzorkovací frekvence musí být alespoň 2x větší než frekvence dat vzorkovací frekvence musí být alespoň 2x větší než frekvence dat ((Shannonův teorémShannonův teorém))
ppodvzorkování způsobuje rušivé efekty (odvzorkování způsobuje rušivé efekty (jaggiesjaggies, , MoireMoire)) Anti – aliasing Anti – aliasing
metody na odstranění nesrovnalostí způsobených podvzorkovánímetody na odstranění nesrovnalostí způsobených podvzorkování TechnikyTechniky
no – filterno – filter pre - filteringpre - filtering post - filteringpost - filtering
uniformníuniformní Stochastický – JitterStochastický – Jitter
TechnikyTechniky
Pre-filteringPre-filtering intenzita/barva pixelu se spočítá přes zastoupení jednotlivých segmetů v intenzita/barva pixelu se spočítá přes zastoupení jednotlivých segmetů v
pixelu váženo plouchou, kterou zabírajípixelu váženo plouchou, kterou zabírají výpočetně náročnévýpočetně náročné
Uniformní pUniformní post-filteringost-filtering zvýšení vzorkovací frekvence (rozlišení)zvýšení vzorkovací frekvence (rozlišení) filtracefiltrace rekonstrukcerekonstrukce nevýhodynevýhody
špatné pro malé objektyšpatné pro malé objekty paměťové nárokypaměťové nároky problém jen odsunut do vyšší frekvenceproblém jen odsunut do vyšší frekvence
výhodyvýhody jednoduchá implementacejednoduchá implementace
Stochastický post - filteringStochastický post - filtering pozice vzorků je náhodně pozměněna (jitter)pozice vzorků je náhodně pozměněna (jitter) lidské oko lépe vnímá šum než aliasinglidské oko lépe vnímá šum než aliasing nevýhodynevýhody
nefunguje dobře u paralelních výpočtůnefunguje dobře u paralelních výpočtů výhodyvýhody
vyšší frekvence nahrazeny šumemvyšší frekvence nahrazeny šumem rychlejšírychlejší
Algoritmy pro kreslení přímkyAlgoritmy pro kreslení přímky
Gupta-Sproull Gupta-Sproull Fujimoto-IwatFujimoto-Iwataa Xiaolin WuXiaolin Wu
Obecné předpokladyObecné předpoklady
Oba popisované algoritmy předpokládají Oba popisované algoritmy předpokládají náležení přímky do prvního oktanunáležení přímky do prvního oktanu
To se snadno zařídí prostřednicvím symetriíTo se snadno zařídí prostřednicvím symetrií
Gupta – Sproull (1981)Gupta – Sproull (1981)
Algoritmus pracuje s konvolučním filtrem tvaru Algoritmus pracuje s konvolučním filtrem tvaru kužele (další varianty krychle, Gaussian)kužele (další varianty krychle, Gaussian)
Tvar kuTvar kužele zvolen, vzhledem k chování CRT žele zvolen, vzhledem k chování CRT monitorumonitoru
Střed kužele je roven středu počítaného pixelu, Střed kužele je roven středu počítaného pixelu, intenzita barvy pixelu závisí na ploše průniku kužele a intenzita barvy pixelu závisí na ploše průniku kužele a kreslené přímkykreslené přímky
Ve sloupci jsou 3 pixelyVe sloupci jsou 3 pixely Výpočet se urychluje předpočítáním si tabulky hodnot Výpočet se urychluje předpočítáním si tabulky hodnot
pro jednotlivé druhy průmětů, tabulka je pro jednotlivé druhy průmětů, tabulka je parametrizovaná úhlem a vzdálenostíparametrizovaná úhlem a vzdáleností
……
Algoritmus hodně záleží na volbě velikosti konvolučního filtru Algoritmus hodně záleží na volbě velikosti konvolučního filtru a stupňů intenzitya stupňů intenzity
Další možné vylepšení: Další možné vylepšení: readbackreadback Barva pixelu je zohledněna i vzhledem k barvě pozadí a okolních Barva pixelu je zohledněna i vzhledem k barvě pozadí a okolních
pixelůpixelů Řeší rozumně protínání přímekŘeší rozumně protínání přímek Hodně časově náročné – časté přístupy do pamětiHodně časově náročné – časté přístupy do paměti
Příklady vlivu nastaveníPříklady vlivu nastavení
WuWu’s ’s algorithm (1991)algorithm (1991)
Mnohem jednodušší a efektivnější než Gupta-SproullMnohem jednodušší a efektivnější než Gupta-Sproull Založen na úpravě Bresenhamova algoritmu pro Založen na úpravě Bresenhamova algoritmu pro
kreslení přímkykreslení přímky Snadno implementovatelný i hardwarověSnadno implementovatelný i hardwarově Používá proměnou určující vzdálenost středu pixelu Používá proměnou určující vzdálenost středu pixelu
od středu přímky k určení intenzity/barvyod středu přímky k určení intenzity/barvy Kreslí místo jednoho pixelu dva, součet intenzity Kreslí místo jednoho pixelu dva, součet intenzity
dává jednadává jedna Vystačí s operacemi sčítání a bitovými posunyVystačí s operacemi sčítání a bitovými posuny
Nástin algoritmuNástin algoritmu I(x0,y0)=I(x1,y1)=I; I(x0,y0)=I(x1,y1)=I; //pocatecni body//pocatecni body D=0;D=0; d=[k2^n+0.5]; d=[k2^n+0.5]; //dolni cela část//dolni cela část, de facto obdoba DDA algoritmu, de facto obdoba DDA algoritmu while (while (x0<x1x0<x1){){ //postupuji z obou stran//postupuji z obou stran dokud nedojdu doprost dokud nedojdu doprostřředed x0+=1;x0+=1; x1-=1;x1-=1; D+=d;D+=d; if (D overflow)if (D overflow){ { //D presahne mez, posunu linku o pixel nahoru po souradnici y//D presahne mez, posunu linku o pixel nahoru po souradnici y y0+=1;y0+=1; y1-=1;y1-=1; }} I(x0,y0)=I(x1,y1)=D div 2^(n-m); I(x0,y0)=I(x1,y1)=D div 2^(n-m); //prvnimu pixelu jeho stupen sedi//prvnimu pixelu jeho stupen sedi //n je pocet bitu D, m je pocet stupnu sedi//n je pocet bitu D, m je pocet stupnu sedi //intenzita je dana m nejvyznamejsimi bity D//intenzita je dana m nejvyznamejsimi bity D I(x0,y0+1)=I(x1,y1-1)=I(x0,y0) doplnek;I(x0,y0+1)=I(x1,y1-1)=I(x0,y0) doplnek; //druhemu priradim komplement hodnoty prvniho pixelu//druhemu priradim komplement hodnoty prvniho pixelu //I(x,y)=i <=> putpixel(x,y,i)//I(x,y)=i <=> putpixel(x,y,i) i..intenzita pixelui..intenzita pixelu }}}}
Dodatky k algoritmuDodatky k algoritmu D … diference je rD … diference je reeálné číslo s fixní desetinnou álné číslo s fixní desetinnou
čárkou a velikostí rovnou velikosti slova stroječárkou a velikostí rovnou velikosti slova stroje d … posun vzhledem k ose y (posun k x je 1)d … posun vzhledem k ose y (posun k x je 1) Konce přímek: v případě neceločíselných hodnot Konce přímek: v případě neceločíselných hodnot
počátku a konce… pomocí poměrného přesahu počátku a konce… pomocí poměrného přesahu poslední integerové hodnoty x-ové soořadniceposlední integerové hodnoty x-ové soořadnice
Přímky kratší jednoho pixelu – intenzita určena Přímky kratší jednoho pixelu – intenzita určena poměrem délky a velikosti pixelupoměrem délky a velikosti pixelu
Srovnání Gupta-Sproull x WuSrovnání Gupta-Sproull x Wu Gupta-SproullGupta-Sproull
Lepší výsledkyLepší výsledky Přímky jsou trochu Přímky jsou trochu
rozmazanějšírozmazanější Výpočetně náročné Výpočetně náročné
(výpočet tabulky)(výpočet tabulky) Neošetřuje konce přímekNeošetřuje konce přímek
WuWu RychlejšíRychlejší Jednodušší (jen přičtení a Jednodušší (jen přičtení a
bitový posun)bitový posun)
Benchmark data: Pentium III 450Mhz, Visual C++ 6.0 Release Build, Default Maximum Speed Optimization...
Algorithm Lines Drawn (x1000) (s) Lines Per SecDDA 1600 504.476 3171.608Bresenham 1600 80.446 19889.117Wu 1600 72.895 21949.378EFLA Variation E 1600 63.801 25077.97
VyužitíVyužití
Oba algoritmy se dají s úspěchem použít i na Oba algoritmy se dají s úspěchem použít i na vykreslování anti-aliasovaných kružnic a elips, vykreslování anti-aliasovaných kružnic a elips, pro vykreslování polygonů je třeba algoritmy pro vykreslování polygonů je třeba algoritmy příslušně upravit.příslušně upravit.
Při vykreslování na obrazovku se občas Při vykreslování na obrazovku se občas používá několik algoritmů a jejich nastavení používá několik algoritmů a jejich nastavení najednou a postupně se zlepšuje kvalita obrazunajednou a postupně se zlepšuje kvalita obrazu
OblastiOblasti využitívyužití
Prakticky ve všech oblastech grafikyPrakticky ve všech oblastech grafiky FraktályFraktály Renderování polygonů Renderování polygonů Ray – tracingRay – tracing Mapování texturMapování textur Video (blur)Video (blur) Temporary antialiasingTemporary antialiasing
ZdrojeZdroje Graphic Gems III., s. 349-354Graphic Gems III., s. 349-354 Fundamental Algorithms for Computer Graphics, Fundamental Algorithms for Computer Graphics,
s. 113-133s. 113-133 Computer Graphics, July 1991Computer Graphics, July 1991 Computer Graphics Techniques, 131-159Computer Graphics Techniques, 131-159 www.www.whisqu.se/per/docs/graphics75.htmlwhisqu.se/per/docs/graphics75.html www.www.heraklesherakles..zcuzcu/education//education/apgapg_2002_2003/_2002_2003/hradekhradek/html//html/
AliasingAliasing.html.html http://www.edepot.com/algorithm.html http://www.edepot.com/algorithm.html