Pildi skaleerimine

Allikas: Vikipeedia
Kujutis on suurendatud lähima naabri algoritmiga (vasakul) ning 2×SaI algoritmiga (paremal)

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[muuda | muuda lähteteksti]

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.

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[muuda | muuda lähteteksti]

Pildi suurust saab muuta mitmel viisil.

Lähima naabri interpolatsioon[muuda | muuda lähteteksti]

Ü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.[1]

Bilineaarsed ja bikuubilised algoritmid[muuda | muuda lähteteksti]

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.[1]

Sinci ja Lanczosi filtrid[muuda | muuda lähteteksti]

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.[1]

Kastimeetod[muuda | muuda lähteteksti]

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.[1]

Mipmap[muuda | muuda lähteteksti]

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[muuda | muuda lähteteksti]

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.[1]

Servapõhine interpolatsioon[muuda | muuda lähteteksti]

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),[2][3] Edge-Guided Image Interpolation (EGGI),[4] Iterative Curvature-Based Interpolation (ICBI)[5] ning Directional Cubic Convolution Interpolation (DCCI).[6] 2013. aasta analüüs leidis, et DCCI andis parimaid PSNR ja SSIM tulemusi testpiltide hulga peal.[7]

Pikslikunsti algoritmid[muuda | muuda lähteteksti]

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[muuda | muuda lähteteksti]

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.[8] Vektorgraafika on sobiv lihtsatele geomeetrilistele piltidele, kuid ei tööta hästi fotodega nende keerulisuse tõttu.

Süvakonvolutsioonivõrgud[muuda | muuda lähteteksti]

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.

Rakendused[muuda | muuda lähteteksti]

Üldine[muuda | muuda lähteteksti]

Piltide skaleerimist kasutavad muuhulgas veebibrauserid,[9] pilditöötlustarkvara, piltide ja failide lugejad, tarkvaralised suurendusklaasid, digitaalne suurendus, pisipiltide loomisprotsess, piltide kuvamine ekraanil ning printimine.

Video[muuda | muuda lähteteksti]

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[muuda | muuda lähteteksti]

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,[10] 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[muuda | muuda lähteteksti]

  1. 1,0 1,1 1,2 1,3 1,4 Anthony Thyssen (14.02.2013). "Resampling Filters". Vaadatud 01.12.2018.
  2. "Edge-Directed Interpolation". Vaadatud 19.11.2018.
  3. Xin Li; Michael T. Orchard. "NEW EDGE DIRECTED INTERPOLATION" (PDF). 2000 IEEE International Conference on Image Processing: 311. Originaali (PDF) arhiivikoopia seisuga 14.02.2016.
  4. Lei Zhang; Xiaolin Wu. "An Edge-Guided Image Interpolation Algorithm via Directional Filtering and Data Fusion" (PDF). {{cite journal}}: viitemall journal nõuab parameetrit |journal= (juhend)
  5. K.Sreedhar Reddy; Dr.K.Rama Linga Reddy (detsember 2013). "Enlargement of Image Based Upon Interpolation Techniques" (PDF). International Journal of Advanced Research in Computer and Communication Engineering. 2 (12): 4631.
  6. Dengwen Zhou; Xiaoliu Shen. "Image Zooming Using Directional Cubic Convolution Interpolation". Vaadatud 13.09.2015.
  7. Shaode Yu; Rongmao Li; Rui Zhang; Mou An; Shibin Wu; Yaoqin Xie. "Performance evaluation of edge-directed interpolation methods for noise-free images". arXiv:1303.6455.
  8. Johannes Kopf and Dani Lischinski (2011). "Depixelizing Pixel Art". ACM Transactions on Graphics (Proceedings of SIGGRAPH 2011). 30 (4): 99:1–99:8. DOI:10.1145/2010324.1964994. Originaali arhiivikoopia seisuga 01.09.2015. Vaadatud 24.10.2012.
  9. Jason Summers. "Analysis of image scaling algorithms used by popular web browsers". Vaadatud 19.11.2018.
  10. "Pixel Scalers". DataGenetics. Vaadatud 19.11.2018.

Välislingid[muuda | muuda lähteteksti]