Pixelkonstskalningsalgoritmer

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 29 april 2016; kontroller kräver 7 redigeringar .

Pixelgrafikskalningsalgoritmer  är digitala bildskalningsalgoritmer utformade speciellt för att öka kvaliteten på lågupplöst grafik . Till skillnad från traditionella skalningsalgoritmer ger de en mindre suddig bild.

Skäl till

Det finns två standardbildskalningsalgoritmer, bilinjär och bikubisk interpolation . Eftersom färgkoordinaterna för den aktuella pixeln vanligtvis beräknas genom att interpolera fyra grannar, är den bearbetade bilden suddig. Även om detta är acceptabelt för fullfärgsbilder, tenderar användningen av interpolation att minska kontrasten (kantskärpa), och därför ger denna metod dåliga resultat på palettindexerade bilder.

Den närmaste grannemetoden bevarar skarpa kanter, men introducerar aliasing i bilden (särskilt diagonala linjer liknar en "stege" av kvadrater). Således bör den idealiska algoritmen för att förstora pixelkonst interpolera områden med kontinuerlig ton, bevara skärpan för horisontella och vertikala linjer och jämna (kantutjämning) diagonala linjer och kurvor. Flera försök har gjorts för att lösa detta problem.

Effektivitet

Eftersom det huvudsakliga tillämpningsområdet för dessa algoritmer är emulatorer av gamla konsol- och DOS-spel, är många av dem utformade för att visa en dynamiskt föränderlig bild i realtid (med en tillräckligt låg bildupplösning).

Många algoritmer fungerar bara med heltalsförstoringar: 2x, 3x och 4x.

Algoritmer

EPX/Scale2x/AdvMAME2x

EPX ("Eric's Pixel eXpansion") är en algoritm som utvecklades av Eric Johnston från LucasArts runt 1992 [1] medan han portade SCUMM-motorn från IBM PC (320×200 upplösning, 256 färger) till de tidiga Macintosh -färgdatorerna . var ungefär dubbelt så hög [2] .

Algoritmen fungerar så här:

A --\ 1 2 CPB --/ 3 4 D Om C==A => 1=A Om A==B => 2=B Om B==D => 4=D Om D==C => 3=C Om 3 eller fler pixlar från A, B, C, D är samma: 1=P, 2=P, 3=P, 4=P

Efterföljande implementeringar av denna algoritm (som AdvMAME2x och Scale2x, utvecklade runt 2001) har en annan (mer effektiv) men funktionellt identisk implementering:

A --\ 1 2 CPB --/ 3 4 D 1=P; 2=P; 3=P; 4=P; Om C==A och C!=D och A!=B => 1=A Om A==B och A!=C och B!=D => 2=B Om B==D och B!=A och D!=C => 4=D Om D==C och D!=B och C!=A => 3=C

AdvMAME4x/Scale4x är bara EPX applicerad två gånger.

Scale3x/AdvMAME3x

AdvMAME3x/Scale3x-algoritmen är inte densamma som EPX, men de är ganska lika varandra:

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; Om D==B och D!=H och B!=F => 1=D Om (D==B och D!=H och B!=F och E!=C) eller (B==F och B!=D och F!=H och E!=A) => 2=B Om B==F och B!=D och F!=H => 3=F Om (H==D och H!=F och D!=B och E!=A) eller (D==B och D!=H och B!=F och E!=G) => 4=D 5=E Om (B==F och B!=D och F!=H och E!=I) eller (F==H och F!=B och H!=D och E!=C) => 6=F Om H==D och H!=F och D!=B => 7=D Om (F==H och F!=B och H!=D och E!=G) eller (H==D och H!=F och D!=B och E!=I) => 8=H Om F==H och F!=B och H!=D => 9=F

Eagle

Eagle fungerar enligt följande: för varje ingångspixel genereras 4 utdatapixlar, först ställs färgerna för alla fyra in på färgen på den aktuella skannade pixeln (exakt samma som i närmaste granne), sedan pixlarna från toppen och vänster skannas om de har samma färg (alla tre), sedan målar vi den övre vänstra pixeln i denna färg, utför liknande åtgärder för alla fyra pixlarna och går vidare [3]

.

Först: |Då: . . . --\ CC |STU --\ 1 2 . C. --/ CC |VCW --/ 3 4 . . . |XYZ | Om V==S==T => 1=S | Om T==U==W => 2=U | Om V==X==Y => 3=X | Om W==Z==Y => 4=Z

Således kommer en enda svart pixel på en vit bakgrund att lösas upp när denna algoritm används. Denna bugg har åtgärdats i algoritmerna 2xSaI och HQ3x.

2xSaI

2xSaI, (2x skala och interpolation) är en förbättring av Eagle-algoritmen. Den utvecklades av Derek Liauw Kie Fa, även känd som Kreed, ursprungligen för användning i emulatorer, där den fortfarande är en ganska populär algoritm. Många populära emulatorer som ZSNES , Jnes , DOSBox och VisualBoyAdvance stöder denna utdataalgoritm.

Kreed har publicerat källkoderna för algoritmen [1] under GPL-licensen , det vill säga den kan fritt användas för alla ändamål som anges av licensen. För att använda algoritmen i icke-GPL-produkter måste utvecklaren skriva om den utan att använda koden skriven av Kreed.

Super 2xSaI och Super Eagle

Något modifierade implementeringar heter "Super 2xSaI", "2xSaI" och "Super Eagle".

Super Eagle skriven av Kreed, liknande 2XSaI, men resultatet är en starkare blandning av pixelfärger (blandning).

Super 2xSaI är skrivet av Kreed, ett filter för att jämna ut grafik, men med starkare blandning än Super Eagle.

Familjen hq n x

Maxim Stepin utvecklade algoritmerna hq2x, hq3x och hq4x för förstoring i proportionerna 2:1, 3:1 respektive 4:1. Färgen på varje pixel jämförs med åtta grannar, grannarna markeras som nära och fjärran, sedan används en förgenererad tabell för att hitta det erforderliga förhållandet mellan värden för var och en av de 4, 9 eller 16 utdatapixlarna. Algoritmen hq3x jämnar perfekt ut diagonala linjer med en lutning på ±1:2, ±1:1 och ±2:1 (förutsatt att det inte finns någon kantutjämning vid algoritmens ingång); linjer med en annan lutningsfaktor kommer att återges som brutna linjer från ovanstående diagonaler. Branta kurvor jämnar ut bra. Till skillnad från 2xSaI tillämpas kantutjämning på utgången [4] .

hq n x designades ursprungligen för Super Nintendo-emulatorn, ZSNES .

Kopf-Lishchinsky-algoritmen

Algoritmen utvecklades 2011 och presenterades på SIGGRAPH 2011 [5] . Konverterar en pixelbild med få färger till vektorform. Men om bilden har kantutjämning blir resultaten sämre.

Applikation i spelkonsolemulatorer

På tillräckligt snabba datorer gör dessa algoritmer det möjligt att implementera utmatningen av en skalad bild, vilket är acceptabelt vad gäller hastighet för realtidsapplikationer, i synnerhet datorspel. Mycket optimerade algoritmer ger en klar och skarp bild med minimal oskärpa. Pixelgrafikskalningsalgoritmer har implementerats för en mängd olika emulatorer, 2D-spelmotorer och remastrade spelmotorer, som AdvanceMAME , DOSBox och ScummVM . De var mycket hyllade av spelare som började göra om spel skrivna på 80- och 90-talen. Dessa filter används för närvarande (2013) i kommersiella Xbox Live , Virtual Console och PSN -emulatorer för att få klassiska lågupplösta spel att se bättre ut på högupplösta skärmar. Sådana spel inkluderar Sonics Ultimate Genesis Collection , Castlevania: The Dracula X Chronicles , Castlevania: Symphony of the Night och Akumajō Dracula X Chi no Rondo '.

Anteckningar

  1. Indiana Jones and the Fate of Atlantis (PNG-skärmdump). Arkiverad från originalet den 11 april 2012.
  2. Thomas, Kas Fast Blit Strategies: A Mac Programmer's Guide (1999). Arkiverad från originalet den 11 april 2012.
  3. Örn (idé) . Allt2 (18 januari 2007). Arkiverad från originalet den 11 april 2012.
  4. Stepin, Maxim hq3x Förstoringsfilter . Hämtad 3 juli 2007. Arkiverad från originalet 8 februari 2008.
  5. Avpixelisera pixelkonst . Tillträdesdatum: 26 mars 2012. Arkiverad från originalet 1 september 2015.

Länkar