Pildi skaleerimine

**Pildi skaleerimine** (ingl *image scaling*) tähendab arvutigraafikas ja digitaalses pilditöötluses digitaalse pildi suuruse muutmist.

Vektorgraafikat on võimalik skaleerida pildi kvaliteeti kaotamata, skaleerides pilti moodustavaid primitiive geomeetriliste teisendustega. Rastergraafika skaleerimisel tuleb luua uus pilt, millel on rohkem või vähem piksleid. Pildi ja pikslite arvu vähendamisega kaasneb tavaliselt märgatav kvaliteedikadu. Digitaalse signaalitöötluse seisukohalt on rastergraafika skaleerimine kahedimensiooniline näide diskreetimissagedusteisendusest – diskreetse signaali teisendamisest ühest diskreetimissagedusest teise.

## Matemaatika
Pildi skaleerimist võib mõista kui teatud sorti pildi taasdiskreetimist või pildi taastamist Nyquisti-Shannoni diskreetimisteoreemi mõttes. Vastavalt sellele teoreemile tuleb enne suurema resolutsiooniga originaali vähendamist kasutada sobivat 2D aliasevastast filtrit, et vältida artefakte. Pilt vähendatakse informatsiooniks, mida suudab kanda tulemuseks olev väiksem pilt.

Pildi suurendamisel asendab aliasevastast filtrit taastusfilter.


File:160 by 160 thumbnail of 'Green Sea Shell'.png | Originaalpilt
File:160 by 160 thumbnail of 'Green Sea Shell' - 0. in fourier domain.png | Originaalpilt ruumilissagedusdomeenis
File:160 by 160 thumbnail of 'Green Sea Shell' - 1. fourier filtered for downsampling to 40 x 40.png | 2D madalpääsfiltreeritud
File:160 by 160 thumbnail of 'Green Sea Shell' - 1.1. fourier filtered image for downsampling to 40 x 40 in fourier domain.png | Filtreeritud pilt ruumilissagedusdomeenis


File:160 by 160 thumbnail of 'Green Sea Shell' - 2. downsampling to 40 x 40 (nearest neighour).png | 4× vähendatud
File:160 by 160 thumbnail of 'Green Sea Shell' - 3. fourier reconstruction from 40 x 40.png | 4× Fourier' suurendus (korrektne taastus)
File:160 by 160 thumbnail of 'Green Sea Shell' - 4. fourier reconstruction from 40 x 40 (aliasing ).png | 4× Fourier' suurendus (koos aliasega)


Keerulisem lähenemine suurendamisele käsitleb probleemi pöördprobleemina, vastates küsimusele, kuidas saaks luua usutavat pilti, mis näeks pärast vähendamist välja nagu sisendpilt. Selle jaoks on kasutatud mitmesuguseid meetodeid, nende hulgas optimeerimistehnikaid regulatsiooni termidega ja masinõpet.

## Algoritmid
Pildi suurust saab muuta mitmel viisil.

### Lähima naabri interpolatsioon
Üks lihtsamaid viise pildi suurust muuta on lähima naabri interpolatsioon, mis asendab väljundi iga piksli lähima sisendpiksliga. Suurendamisel põhjustab see olukorras, et mitu lähedalolevat pikslit on sama värvi, mis võib säilitada pikslikunsti piltides soovitud teravust, kuid põhjustada sakilisust piltides, mis varem olid sujuvad. Lähima naabri algoritmis ei pea lähim piksel olema matemaatiliselt lähim. Tavaline on ümardada alla, mis põhjustab vähem artefakte ja on kiirem, kuid erineb ka rohkem originaalist.

### Bilineaarsed ja bikuubilised algoritmid
Bilineaarne interpolatsioon töötab pikslite värvide vahel interpoleerides, mis põhjustab väljundis pideva ülemineku ühelt pikslilt teisele, isegi kui originaalis on üleminekud diskreetsed. Kuigi see on soovitav sujuvate tooniüleminekutega piltidel, vähendab see algoritm kontrasti (teravaid ääri) moel, mis ei sobi joongraafika jaoks. Bikuubiline interpolatsioon annab märkimisväärselt paremaid tulemusi ning on arvutuslikult ainult veidi keerulisem.

### Sinci ja Lanczosi filtrid

Sinci filter on teoorias parim võimalik taastus perfektse ribalaiusega signaali jaoks. Praktikas pole sinci-põhise filtri kõik eeldused täidetud päriseluliste digitaalpiltide poolt. Lanczosi filter, sinci filtri lähend, annab paremaid tulemusi. Bikuubilist interpolatsiooni võib lugeda arvutuslikult efektiivseks Lanczosi filtri lähendiks.

### Kastimeetod

Eelnevate algoritmide üks nõrkus on, et need võtavad arvesse ainult piiratud hulga piksleid. Kui pilti vähendada alla mingi piiri, näiteks rohkem kui kahekordselt bilineaarse algoritmi korral, siis ei võta algoritm arvesse sisendi kõiki piksleid, mis põhjustab informatsiooni kadu ja ebatäpseid tulemusi.

Triviaalne lahendus on kasutada kastimeetodit, mis käsitleb sisend- ja väljundpildi piksleid kastidena, kus väljundipildi piksli värvus on kõigi selle sisendpikslite värvuste kaalutud keskmine. See tagab selle, et kõiki sisendpiksleid võetakse väljundis arvesse. Selle algoritmi suurim nõrkus on, et seda on raske optimeerida.

### Mipmap
Teine lahendus piltide vähendamisel liiga väheste pikslite arvessevõtmise probleemile on mipmapid. Mipmap on eelvähendatud koopiate hulk. Pilti vähendades võetakse sisendiks lähim suurem mipmap, kindlustamaks et ükski originaalse sisendi piksel ei jääks arvestamata. See algoritm on kiire ning lihtne optimeerida ja on standardiks paljudes raamistikes nagu OpenGL. Selle halb külg on see, et see võtab kolmandiku võrra rohkem mälu.

### Fourier' teisenduse meetodid
Fourier' teisendusel põhinev interpoleerimine ümbritseb sagedusdomeeni nullkomponentidega. (Sujuv aknapõhine lähenemine vähendaks rõngasartefakte.) Kuigi meetod säilitab (või taastab) hästi detaile, on rõngasartefaktid ja pildi ringleke ühest servast teise märkimisväärsed probleemid.

### Servapõhine interpolatsioon
Servapõhised interpoleerimisalgoritmid keskenduvad väljundpildis servade säilitamisele, erinevalt teistest algoritmidest, mis võivad põhjustada treppartefakte.

Selle algoritmi näidete hulka kuuluvad New Edge-Directed Interpolation (NEDI), Edge-Guided Image Interpolation (EGGI), Iterative Curvature-Based Interpolation (ICBI) ning Directional Cubic Convolution Interpolation (DCCI). 2013. aasta analüüs leidis, et DCCI andis parimaid PSNR ja SSIM tulemusi testpiltide hulga peal.

### Pikslikunsti algoritmid

Suurendades väikese resolutsiooni ja/või väheste värvidega (tavaliselt 2–256 värvi) pilte, saavutavad pikslikunsti skaleerimisalgoritmid paremaid tulemusi. Need loovad teravaid ääri ja säilitavad palju detaile.

### Vektoriseerimine
Vektorite eraldamine (vektoriseerimine) pakub teist lähenemist. Vektoriseerimine tekitab kõigepealt resolutsioonist sõltumatu vektorkujutise skaleeritavast pildist. Seejärel renderdatakse resolutsioonist sõltumatu vektorkujutis soovitud resolutsioonil tagasi rasterpildiks. Seda tehnikat kasutavad Adobe Illustrator, Live Trace ja Inkscape. Vektorgraafika on sobiv lihtsatele geomeetrilistele piltidele, kuid ei tööta hästi fotodega nende keerulisuse tõttu.

### Süvakonvolutsioonivõrgud
Süvakonvolutsioonivõrgud kasutavad masinõpet, mis töötab ka detailsete piltide peal nagu fotod ja keerulised kunstiteosed. Programmid, mis kasutavad seda meetodit, on näiteks Waifu2x ja Neural Enhance.


File:Evelyn de Morgan - Phosphorus and Hesperus, (1881) detail.png | Originaalpilt (täissuuruse saamiseks klõpsatav)
File:Evelyn de Morgan - Phosphorus and Hesperus, (1881) detail - upscaled 200% using Paint Shop Pro.png | Suurendatud 200% PaintShop Pro abil
File:Evelyn de Morgan - Phosphorus and Hesperus, (1881) detail - upscaled 200% using Waifu2x in Photo mode with Medium noise reduction.png | Suurendatud 200% Waifu2x abil fotorežiimis keskmise müravähendusega


## Rakendused
### Üldine
Piltide skaleerimist kasutavad muuhulgas veebibrauserid, pilditöötlustarkvara, piltide ja failide lugejad, tarkvaralised suurendusklaasid, digitaalne suurendus, pisipiltide loomisprotsess, piltide kuvamine ekraanil ning printimine.

### Video
Juhul kui salvestatud video resolutsioon ei vasta ekraani resolutsioonile, tuleb seda eelnevalt skaleerida. Skaleerimine toimub reaalajas ja väljundit ei salvestada pärast selle kuvamist.

### Pikslikunsti skaleerimine
Kuna pikslikunst on tavaliselt väikese resolutsiooniga, tugineb see üksikute pikslite hoolikale asetusele ning on tihti väga piiratud värvihulgaga. See põhjustab pilte, mis tuginevad stiliseeritud visuaalsetele märguannetele, et määratleda keerulisi kujutisi, kus üksikud pikslid on olulised. Seetõttu on pikslikunsti skaleerimine eriti keeruline probleem.

Töötati välja spetsiaalsed algoritmid, mis käsitlevad pikslikunsti, sest traditsioonilised skaleerimisalgoritmid ei arvesta visuaalseid märguandeid.

Kuna tavapärane kasutusvaldkond on emulaatorites neljanda generatsiooni ja varasemate arvutimängude väljanägemise parandamine, on paljud neist tehtud töötama reaalajas väikeste sisendpiltide jaoks 60 kaadrit sekundis.

Kiire riistvara peal on need algoritmid sobivad mängimiseks ja reaalaja pilditöötluseks. Nende algoritmide tulemuseks on terav, minimaalselt udune graafika. Skaleerimisalgoritmid on implementeeritud paljudes emulaatorites ja 2D-mängumootorites.

## Viited

## Välislingid

* 2D Image Filters
* xBRZ Scaler Comparison and Testing Tool
* C library implementing the xBR pixel art scaling algorithm
* AVIR image resizing algorithm