Prostorové vyhlazení - Spatial anti-aliasing

V digitálním zpracování signálu je prostorové vyhlazení technika pro minimalizaci artefaktů zkreslení známých jako vyhlazení, když představuje obrázek s vysokým rozlišením při nižším rozlišení. Vyhlazování se používá v digitální fotografii , počítačové grafice , digitálním zvuku a mnoha dalších aplikacích.

Vyhlazení znamená odebrání signálových komponent, které mají vyšší frekvenci, než kterou dokáže záznamové (nebo vzorkovací) zařízení správně vyřešit. Toto odstranění se provádí před (opětovným) vzorkováním při nižším rozlišení. Když se provádí vzorkování bez odstranění této části signálu, způsobí to nežádoucí artefakty, jako je černobílý šum.

V získávání signálu a zvuku se vyhlazování často provádí pomocí analogového vyhlazovacího filtru k odstranění mimopásmové složky vstupního signálu před vzorkováním analogově-digitálním převodníkem . V digitální fotografii optické vyhlazovací filtry vyrobené z dvojlomných materiálů vyhlazují signál v prostorové optické doméně. Filtr vyhlazování v podstatě mírně rozostří obraz, aby se snížilo nebo nedosáhlo rozlišení dosažitelného digitálním snímačem (čím větší je rozteč pixelů , tím nižší je dosažitelné rozlišení na úrovni snímače).

Příklady

Vizuální zkreslení, když se nepoužívá vyhlazování
Vyhlazeno
Vyhlazeno pomocí algoritmu filtru sinc
Zvětšená část obrazu bez vyhlazování (vlevo) a vyhlazování (vpravo)

V počítačové grafice vyhlazení vylepšuje vzhled „zubatých“ hran mnohoúhelníků nebo „ zubatek “, takže jsou na obrazovce vyhlazeny. To však přináší náklady na výkon grafické karty a využívá více grafické paměti . Úroveň vyhlazování určuje, jak hladké jsou hrany polygonů (a kolik grafické paměti spotřebovává).

Blízko horní části obrázku s ustupujícím vzorem šachovnice je obraz obtížně rozpoznatelný a není esteticky atraktivní. Naproti tomu, když vyhladí šachovnicovou desku v horní části, přechází do šedé, což je obvykle požadovaný efekt, když rozlišení není dostatečné pro zobrazení detailů. Dokonce i v dolní části obrázku jsou okraje na vyhlazeném obrazu mnohem hladší. Existuje více metod, včetně filtru sinc , který je považován za lepší algoritmus vyhlazování. Při zvětšení je vidět, jak vyhlazování interpoluje jas pixelů na hranicích a vytváří šedé pixely, protože prostor je obsazen černými i bílými dlaždicemi. Pomáhají zajistit, aby antialiazovaný obraz filtru sinc vypadal mnohem hladší než originál.

Vlevo: aliasovaná verze jednoduchého tvaru. Vpravo: vyhlazená verze stejného tvaru.

V jednoduchém kosočtvercovém obrázku vyhlazení spojí hraniční pixely; to snižuje esteticky nepříjemný účinek ostrých, stupňovitých hranic, které se objevují v aliasované grafice.

Při vykreslování textu na obrazovce počítače se často používá vyhlazování, aby se navrhly hladké kontury, které lépe napodobují vzhled textu vytvořeného běžným tiskem inkoustem a papírem. Zejména u písem zobrazovaných na typických obrazovkách LCD je běžné používat techniky vykreslování subpixelů, jako je ClearType . Vykreslování subpixelů vyžaduje speciální barevně vyvážené vyhlazovací filtry, které promění to, co by bylo silným zkreslením barev, na sotva znatelné barevné proužky. Ekvivalentní výsledky lze dosáhnout tím, že jednotlivé subpixely budou adresovatelné, jako by to byly plné pixely, a dodáním hardwarového vyhlazovacího filtru, jak se to dělá v řadiči displeje notebooku OLPC XO-1 . To vše ovlivňuje geometrie pixelů , ať už se vyhlazování a subpixelové adresování provádí v softwaru nebo hardwaru.

Nejjednodušší přístup k vyhlazování

Nejzákladnějším přístupem k vyhlazení pixelu je určení, jaké procento pixelu je obsazeno danou oblastí ve vektorové grafice - v tomto případě čtverec o velikosti pixelu, případně transponovaný přes několik pixelů - a použití tohoto procenta jako barvy .

Velmi základní vykreslení jediného vyhlazovacího bodu bílá na černé pomocí této metody lze provést následovně:

def plot_antialiased_point(x: float, y: float):
    """Plot of a single, white-on-black anti-aliased point."""
    for rounded_x in floor(x) to ceil(x):
        for rounded_y in floor(y) to ceil(y):
            percent_x = 1 - abs(x - rounded_x)
            percent_y = 1 - abs(y - rounded_y)
            percent = percent_x * percent_y
            draw_pixel(coordinates=(rounded_x, rounded_y), color=percent (range 0-1))

Tato metoda je obecně nejvhodnější pro jednoduchou grafiku, jako jsou základní čáry nebo křivky, a aplikace, které by jinak musely převádět absolutní souřadnice na souřadnice s omezenými pixely, jako je 3D grafika. Je to poměrně rychlá funkce, ale je relativně nekvalitní a zpomaluje se s rostoucí složitostí tvaru. Pro účely vyžadující velmi kvalitní grafiku nebo velmi složité vektorové tvary to pravděpodobně nebude nejlepší přístup.

Poznámka: Výše DrawPixel uvedená rutina nemůže slepě nastavit hodnotu barvy na vypočítané procento. Musí přidat novou hodnotu k existující hodnotě v daném místě až do maxima 1. Jinak se jas každého pixelu bude rovnat nejtemnější hodnotě vypočítané v čase pro dané místo, což vede k velmi špatnému výsledku. Například pokud jeden bod nastaví úroveň jasu 0,90 pro daný pixel a další bod vypočítaný později se tohoto pixelu sotva dotkne a má jas 0,05, konečná hodnota nastavená pro tento pixel by měla být 0,95, nikoli 0,05.

U sofistikovanějších tvarů lze algoritmus zobecnit jako vykreslení tvaru do mřížky obrazových bodů s vyšším rozlišením, než je cílová zobrazovací plocha (obvykle násobek, jehož síla je 2 ke snížení zkreslení), a poté k určení průměrné intenzity použití bikubické interpolace. každého skutečného pixelu na povrchu displeje.

Přístup zpracování signálu k vyhlazování

V tomto přístupu je ideální obraz považován za signál . Obraz zobrazený na obrazovce se bere jako vzorky filtrované verze signálu v každé ( x, y ) poloze pixelu. V ideálním případě by člověk pochopil, jak by lidský mozek zpracoval původní signál, a poskytl by na obrazovce obraz, který by přinesl nejpodobnější odezvu mozku.

Nejčastěji přijímaným analytickým nástrojem pro tyto problémy je Fourierova transformace ; toto rozkládá signál na základní funkce různých frekvencí, známé jako frekvenční složky, a dává nám amplitudu každé frekvenční složky v signálu. Vlny mají tvar:

kde j a k jsou libovolná nezáporná celá čísla . Existují také frekvenční složky zahrnující sinusové funkce v jedné nebo obou dimenzích, ale pro účely této diskuse bude stačit kosinus .

Čísla j a k společně představují frekvenci složky: j je frekvence ve směru x a k je frekvence ve směru y .

Cílem antialiasingového filtru je výrazně snížit frekvence nad určitou hranici, známou jako Nyquistova frekvence , takže signál bude přesně reprezentován svými vzorky nebo téměř tak, v souladu se vzorkovací teorémem ; existuje mnoho různých možností podrobného algoritmu s různými funkcemi přenosu filtru . Současná znalost lidského vizuálního vnímání obecně nestačí k tomu, abychom řekli, jaký přístup bude vypadat nejlépe.

Dvourozměrné úvahy

Funkce Sinc, se samostatnými X a Y.

Předchozí diskuse předpokládá, že vzorkování obdélníkového oka je dominantní částí problému. Filtr, který se obvykle považuje za optimální, není rotačně symetrický, jak ukazuje tento první obrázek; je to proto, že data jsou vzorkována na čtvercové mřížce , bez použití spojitého obrazu. Tento vzorkovací vzor je ospravedlněním pro zpracování signálu podél každé osy, jak se tradičně provádí na jednorozměrných datech. Lanczos převzorkování je založeno na konvoluci dat s diskrétní reprezentací funkce sinc.

Pokud rozlišení není omezeno obdélníkovou vzorkovací frekvencí zdrojového ani cílového obrazu, mělo by se v ideálním případě použít rotačně symetrický filtr nebo interpolační funkce, jako by data byla dvourozměrná funkce spojitých x a y. Sinc funkce poloměru má příliš dlouhý ocas, aby vytvořil dobrý filtr (není ani integrovatelný do čtverce ). Vhodnějším analogem k jednorozměrnému sinu je dvourozměrná amplituda Airyho disku , 2D Fourierova transformace kruhové oblasti v 2D frekvenčním prostoru, na rozdíl od čtvercové oblasti.

Gaussova plus diferenciální funkce

Dalo by se uvažovat o Gaussově plus dostatečném množství jeho druhé derivace k vyrovnání horní části (ve frekvenční doméně) nebo její zostření (v prostorové doméně), jak je znázorněno. Funkce založené na Gaussově funkci jsou přirozenou volbou, protože konvoluce s Gaussianem dává další Gaussian, ať už se použije na xay nebo na poloměr. Podobně jako u vlnek je další jeho vlastností to, že je na půli cesty mezi lokalizací v konfiguraci (x a y) a ve spektrálním (j a k) vyjádření. Jako interpolační funkce se Gaussian sám zdá příliš rozložený, aby zachoval maximální možnou podrobnost, a proto je přidána druhá derivace.

Jako příklad lze uvést, že při tisku fotografického negativu s bohatou schopností zpracování a na tiskárně se šestihranným vzorem není důvod používat interpolaci funkcí sinc. Taková interpolace by zacházela s diagonálními čarami odlišně od vodorovných a svislých čar, což je jako slabá forma aliasingu.

Praktické aproximace vyhlazování v reálném čase

Existuje jen hrstka primitiv používaných na nejnižší úrovni ve vykreslovacím modulu v reálném čase (softwarově nebo hardwarově zrychleno). Patří sem „body“, „čáry“ a „trojúhelníky“. Pokud je třeba nakreslit takový primitiv v bílé barvě na černém pozadí, je možné navrhnout takový primitiv, aby měl fuzzy hrany a dosáhl tak nějakého vyhlazování. Tento přístup má však potíže s řešením sousedních primitiv (jako jsou trojúhelníky, které sdílejí hranu).

Aby se aproximoval jednotný průměrovací algoritmus, lze použít další vyrovnávací paměť pro data subpixelů. Počáteční (a nejméně náročné na paměť) přístup používal 16 bitů navíc na pixel v mřížce 4 × 4. Pokud člověk vykreslí primitiva v pečlivém pořadí, například zepředu dozadu, je možné vytvořit přiměřený obraz.

Protože to vyžaduje, aby primitivy byly v určitém pořadí, a proto špatně interagují s aplikačním programovacím rozhraním, jako je OpenGL , nejnovější metody jednoduše mají dva nebo více úplných subpixelů na pixel, včetně informací o plné barvě pro každý subpixel. Některé informace mohou být sdíleny mezi subpixely (například Z-buffer ).

Mipmapping

K dispozici je také přístup specializovaný na mapování textury s názvem mipmapping , který funguje vytvořením předfiltrovaných verzí mapy textury s nižším rozlišením. Při vykreslování obrazu je vybrána mipmapa s příslušným rozlišením, a proto jsou pixely textury (texely) již při příjezdu na obrazovku filtrovány. Mipmapping se obecně kombinuje s různými formami filtrování textur, aby se zlepšil konečný výsledek.

Příklad obrázku s extrémním pseudonáhodným aliasingem

Protože fraktály mají neomezené detaily a žádný šum kromě aritmetické chyby zaokrouhlování, ilustrují aliasing jasněji než fotografie nebo jiná měřená data. Tyto časy únikové , které jsou konvertovány na barvy v přesném středy pixelů, jít do nekonečna na hranici sady, takže barvy z center blízko hranic jsou nepředvídatelné vzhledem k aliasingu. Tento příklad má okraje přibližně v polovině svých pixelů, takže ukazuje hodně aliasingu. První obrázek se nahraje v původní vzorkovací frekvenci. (Vzhledem k tomu, že většina moderních softwarových vyhlazování může být nutné stáhnout verzi v plné velikosti, aby se zobrazily všechny aliasy.) Druhý obrázek se vypočítá při pětinásobku vzorkovací frekvence a odebere se vzorek s vyhlazením. Za předpokladu, že by člověk opravdu chtěl něco jako průměrnou barvu nad každým pixelem, tento se blíží. Je to zjevně uspořádanější než ten první.

Aby bylo možné tyto obrázky správně porovnat, je nutné je prohlížet v plném měřítku.

Stává se, že v tomto případě existují další informace, které lze použít. Přepočítáním pomocí algoritmu „odhadce vzdálenosti“ byly identifikovány body, které jsou velmi blízko k okraji sady, takže jsou neobvykle jemné detaily aliasovány z rychle se měnících únikových časů blízko okraje sady. Barvy odvozené z těchto vypočítaných bodů byly identifikovány jako neobvykle nereprezentativní pro jejich pixely. Sada se tam mění rychleji, takže vzorek jednoho bodu je méně reprezentativní pro celý pixel. Tyto body byly na třetím obrázku nahrazeny interpolací bodů kolem nich. Snižuje se tím hlučnost obrazu, ale má to vedlejší účinek zjasnění barev. Tento obrázek tedy není úplně stejný, jaký by byl získán s ještě větší sadou vypočítaných bodů. Aby se ukázalo, co bylo zahozeno, jsou na čtvrtém obrázku zobrazeny odmítnuté body smíchané do šedého pozadí.

A konečně, „Budding Turbines“ je tak pravidelný, že systematické aliasy (Moiré) lze jasně vidět poblíž hlavní „osy turbíny“, když je zmenšeno pořízením nejbližšího pixelu. Aliasing v prvním obrázku se jeví jako náhodný, protože pochází ze všech úrovní podrobností pod velikostí pixelu. Když je potlačen aliasing na nižší úrovni, aby se vytvořil třetí obrázek a poté se provede opětovné vzorkování, bez anti-aliasingu, aby se vytvořil pátý obrázek, pořadí v měřítku třetího obrazu se objeví jako systematické aliasing v pátém obraz.

Čisté vzorkování obrazu dolů má následující účinek (doporučuje se prohlížení v plném měřítku):

Super vzorkování / vyhlazení celé scény

Super vzorkování vyhlazování (SSAA) , také nazývané vyhlazování celé scény (FSAA), se používá k zamezení aliasingu (nebo „ jaggies “) na obrázcích na celou obrazovku. SSAA byl první typ vyhlazení dostupný u starších grafických karet. Ale kvůli jeho obrovským výpočetním nákladům a nástupu podpory vícevzorového vyhlazování (MSAA) na GPU se již v aplikacích v reálném čase široce nepoužívá. MSAA poskytuje poněkud nižší grafickou kvalitu, ale také obrovské úspory výpočetního výkonu.

Výsledný obraz SSAA se může zdát měkčí a měl by se také jevit realističtější. I když je to užitečné pro fotografie podobné fotografiím, jednoduchý přístup k vyhlazování (například super-vzorkování a následné průměrování) může ve skutečnosti zhoršit vzhled některých typů čárových grafik nebo diagramů (což způsobí, že obrázek vypadá rozmazaně), zejména tam, kde většina čáry jsou vodorovné nebo svislé. V těchto případech může být užitečný předchozí krok osazení mřížkou (viz nápověda ).

Obecně platí, že superodběr vzorků je technika sběru datových bodů ve větším rozlišení (obvykle silou dvou), než je konečné rozlišení dat. Tyto datové body jsou poté kombinovány (vzorkovány dolů) na požadované rozlišení, často pouze jednoduchým průměrem . Kombinované datové body mají méně viditelné artefakty aliasingu (nebo vzory moaré ).

Vyhlazení celé scény pomocí super-vzorkování obvykle znamená, že každý celý snímek je vykreslen na dvojnásobné (2x) nebo čtyřnásobné (4x) rozlišení displeje a poté je vzorkováno dolů, aby odpovídalo rozlišení displeje. Takže 2x FSAA by vykreslil 4 super-vzorkované pixely pro každý jednotlivý pixel každého snímku. Vykreslování při větším rozlišení přinese lepší výsledky; je však zapotřebí více energie procesoru, což může snížit výkon a snímkovou frekvenci. Někdy je FSAA implementována v hardwaru takovým způsobem, že grafická aplikace neví, že obrázky se před zobrazením super vzorkují a poté se vzorkují dolů.

Objektové vyhlazování

Systém vykreslování grafiky vytváří obraz na základě objektů vytvořených z polygonálních primitiv; efekty aliasingu v obrázku lze omezit použitím vyhlazovacího schématu pouze na oblasti obrazu představující siluetové hrany objektů. Okraje siluety jsou vyhlazeny vytvořením vyhlazovacích primitiv, které se liší neprůhledností. Tito vyhlazovací primitiva jsou spojeni se siluetovanými hranami a vytvářejí oblast v obraze, kde objekty vypadají, že splývají s pozadím. Metoda má některé důležité výhody oproti klasickým metodám založeným na akumulační vyrovnávací paměti, protože generuje vyhlazení celé scény pouze ve dvou průchodech a nevyžaduje použití další paměti vyžadované akumulační vyrovnávací pamětí. Vyhlazování založené na objektech bylo poprvé vyvinuto ve společnosti Silicon Graphics pro jejich pracovní stanici Indy .

Vyhlazení a gama komprese

Digitální obrázky jsou obvykle uloženy ve formátu komprimovaném gama , ale většina optických filtrů proti vyhlazení je lineární. Chcete-li tedy odebrat vzorek obrazu způsobem, který by odpovídal optickému rozmazání, měli byste jej nejprve převést na lineární formát, poté použít filtr vyhlazování a nakonec jej převést zpět na formát komprimovaný gama. Použití lineární aritmetiky na obrázku komprimovaném gama vede k hodnotám, které se mírně liší od ideálního filtru. Tato chyba je větší, když se jedná o oblasti s vysokým kontrastem, což způsobí, že oblasti s vysokým kontrastem zeslabnou: jasné detaily (například kočičí vousy) se vizuálně ztenčí a tmavé detaily (například větve stromů) se zesílí vzhledem k opticky anti- aliasovaný obrázek. Každý pixel je individuálně zkreslený, což znamená, že obrysy po vyhlazení nebudou hladké. Protože převod do lineárního formátu az něj výrazně zpomaluje proces a protože rozdíly jsou obvykle jemné, téměř veškerý software pro úpravy obrázků , včetně Final Cut Pro , Adobe Photoshop a GIMP , zpracovává obrázky v doméně komprimované gama.

Většina moderních grafických procesorů podporuje ukládání textur v paměti ve formátu sRGB a může provádět transformaci do lineárního prostoru a zpět transparentně, v podstatě bez ztráty výkonu.

Dějiny

Mezi důležitá raná díla v historii vyhlazování patří:

  • Freeman, H. (březen 1974). Msgstr "Počítačové zpracování obrázků perokresby". ACM Computing Surveys . 6 (1): 57–97. doi : 10.1145 / 356625.356627 .
  • Crow, Franklin C. (listopad 1977). Msgstr "Problém aliasingu v počítačem generovaných stínovaných obrázcích". Komunikace ACM . 20 (11): 799–805. doi : 10,1145 / 359863,359869 .
  • Catmull, Edwin (23. – 25. Srpna 1978). "Algoritmus skrytého povrchu s vyhlazováním". Sborník z 5. ročníku konference Počítačová grafika a interaktivní techniky . s. 6–11.

Viz také

Reference

externí odkazy