Algoritmy změny měřítka grafiky pixelů jsou algoritmy změny měřítka digitálního obrazu navržené speciálně pro zvýšení kvality grafiky s nízkým rozlišením . Na rozdíl od tradičních algoritmů škálování poskytují méně rozmazaný obraz.
Existují dva standardní algoritmy pro změnu měřítka obrazu, bilineární a bikubická interpolace . Vzhledem k tomu, že barevné souřadnice aktuálního pixelu se obvykle vypočítávají interpolací čtyř sousedů, je zpracovaný obraz rozmazaný. I když je to přijatelné pro plnobarevné obrázky, použití interpolace má tendenci snižovat kontrast (ostrost hran), a proto tato metoda poskytuje špatné výsledky na obrázcích indexovaných v paletě.
Metoda nejbližšího souseda zachovává ostré hrany, ale zavádí aliasing do obrazu (zejména diagonální čáry připomínají "žebřík" čtverců). Ideální algoritmus pro zvětšování obrazových bodů by tedy měl interpolovat oblasti souvislého tónu, zachovat ostrost vodorovných a svislých čar a vyhladit (vyhladit) diagonální čáry a křivky. Bylo učiněno několik pokusů tento problém vyřešit.
Protože hlavní oblastí použití těchto algoritmů jsou emulátory starých konzolových a DOSových her, mnohé z nich jsou navrženy tak, aby zobrazovaly dynamicky se měnící obraz v reálném čase (s dostatečně nízkým vstupním rozlišením obrazu).
Mnoho algoritmů pracuje pouze s celočíselným zvětšením: 2x, 3x a 4x.
EPX ("Eric's Pixel eXpansion") je algoritmus vyvinutý Ericem Johnstonem z LucasArts kolem roku 1992 [1] při portování enginu SCUMM z IBM PC (rozlišení 320×200, 256 barev) na rané barevné počítače Macintosh . byla asi dvakrát vyšší [2] .
Algoritmus funguje takto:
A --\ 1 2 CPB --/ 3 4 D Pokud C==A => 1=A Pokud A==B => 2=B Pokud B==D => 4=D Pokud D==C => 3=C Pokud jsou 3 nebo více pixelů z A, B, C, D stejné: 1=P, 2=P, 3=P, 4=PNásledné implementace tohoto algoritmu (jako AdvMAME2x a Scale2x, vyvinuté kolem roku 2001) mají odlišnou (efektivnější), ale funkčně identickou implementaci:
A --\ 1 2 CPB --/ 3 4 D 1 = P; 2=P; 3 = P; 4=P; Pokud C==A a C!=D a A!=B => 1=A Pokud A==B a A!=C a B!=D => 2=B Pokud B==D a B!=A a D!=C => 4=D Jestliže D==C a D!=B a C!=A => 3=CAdvMAME4x/Scale4x je právě EPX aplikovaný dvakrát.
Algoritmus AdvMAME3x/Scale3x není stejný jako algoritmus EPX, ale jsou si navzájem dost podobné:
ABC --\ 1 2 3 DEF > 4 5 6 GHI --/ 7 8 9 1 = E; 2=E; 3=E; 4=E; 5=E; 6=E; 7=E; 8 = E; 9=E; Jestliže D==B a D!=H a B!=F => 1=D Jestliže (D==B a D!=H a B!=F a E!=C) nebo (B==F a B!=D a F!=H a E!=A) => 2=B Jestliže B==F a B!=D a F!=H => 3=F Jestliže (H==D a H!=F a D!=B a E!=A) nebo (D==B a D!=H a B!=F a E!=G) => 4=D 5=E Jestliže (B==F a B!=D a F!=H a E!=I) nebo (F==H a F!=B a H!=D a E!=C) => 6=F Jestliže H==D a H!=F a D!=B => 7=D Jestliže (F==H a F!=B a H!=D a E!=G) nebo (H==D a H!=F a D!=B a E!=I) => 8=H Jestliže F==H a F!=B a H!=D => 9=FEagle funguje následovně: pro každý vstupní pixel se vygenerují 4 výstupní pixely, zpočátku se barvy všech čtyř nastaví na barvu aktuálně naskenovaného pixelu (přesně stejné jako v nejbližším sousedovi), poté pixely shora a vlevo jsou naskenovány, pokud mají stejnou barvu (všechny tři), pak vybarvíme levý horní pixel touto barvou, provedeme podobné akce pro všechny čtyři pixely a pokračujeme [3]
.
Nejprve: | Pak: . . . --\ CC |STU --\ 1 2 . C. --/ CC |VCW --/ 3 4 . . . |XYZ | Pokud V==S==T => 1=S | Pokud T==U==W => 2=U | Pokud V==X==Y => 3=X | Pokud W==Z==Y => 4=ZPři použití tohoto algoritmu se tedy rozpustí jeden černý pixel na bílém pozadí. Tato chyba byla opravena v algoritmech 2xSaI a HQ3x.
2xSaI, (2x Scale and Interpolation) je vylepšením algoritmu Eagle. Byl vyvinut Derekem Liauw Kie Fa, také známým jako Kreed, původně pro použití v emulátorech, kde je to stále poměrně populární algoritmus. Mnoho populárních emulátorů jako ZSNES , Jnes , DOSBox a VisualBoyAdvance podporuje tento výstupní algoritmus.
Kreed zveřejnil zdrojové kódy algoritmu [1] pod licencí GPL , tj. lze jej volně používat pro jakýkoli účel stanovený licencí. Pro použití algoritmu v produktech bez GPL by jej vývojář musel přepsat bez použití kódu napsaného Kreedem.
Mírně upravené implementace jsou pojmenovány „Super 2xSaI“, „2xSaI“ a „Super Eagle“.
Super Eagle napsaný Kreedem, podobný 2XSaI, ale výstupem je silnější směs barev pixelů (prolnutí).
Super 2xSaI napsal Kreed, filtr pro vyhlazování grafiky, ale se silnějším prolnutím než Super Eagle.
Maxim Stepin vyvinul algoritmy hq2x, hq3x a hq4x pro zvětšení v poměrech 2:1, 3:1 a 4:1. Barva každého pixelu je porovnána s osmi sousedy, sousedé jsou označeni jako blízcí a vzdálení, poté je pomocí předem vygenerované tabulky nalezen požadovaný poměr hodnot pro každý ze 4, 9 nebo 16 výstupních pixelů. Algoritmus hq3x dokonale vyhlazuje diagonální čáry se sklonem ±1:2, ±1:1 a ±2:1 (za předpokladu, že na vstupu algoritmu není antialiasing ); čáry s jiným faktorem sklonu budou vykresleny jako přerušované čáry z výše uvedených úhlopříček. Strmé křivky dobře vyhlazují. Na rozdíl od 2xSaI je na výstupu aplikován anti-aliasing [4] .
hq n x byl původně navržen pro emulátor Super Nintendo, ZSNES .
Algoritmus byl vyvinut v roce 2011 a představen na SIGGRAPH 2011 [5] . Převede pixelový obrázek s několika barvami do vektorové podoby. Pokud má však obrázek vyhlazování, jsou výsledky horší.
Na dostatečně rychlých počítačích umožňují tyto algoritmy realizovat výstup zmenšeného obrazu, který je z hlediska rychlosti přijatelný pro aplikace v reálném čase, zejména počítačové hry. Vysoce optimalizované algoritmy poskytují jasný a ostrý obraz s minimálním rozmazáním. Algoritmy škálování pixelové grafiky byly implementovány pro různé emulátory, 2D herní enginy a remasterované herní enginy, jako jsou AdvanceMAME , DOSBox a ScummVM . Byli velmi uznávaní hráči, kteří začali předělávat hry napsané v 80. a 90. letech. Tyto filtry se v současnosti (2013) používají v komerčních emulátorech Xbox Live , Virtual Console a PSN , aby klasické hry s nízkým rozlišením vypadaly lépe na displejích s vysokým rozlišením. Mezi takové hry patří Sonic's Ultimate Genesis Collection , Castlevania: The Dracula X Chronicles , Castlevania: Symphony of the Night a Akumajō Dracula X Chi no Rondo '.