Vaizdo kompresijos algoritmai

Kodėl mūsų telefonai nesprogs nuo nuotraukų

Prisimenu, kaip prieš kokius dešimt metų mano pirmasis išmanusis telefonas turėjo 8 GB atminties, ir tai atrodė kaip beribė erdvė. Dabar viena 4K vaizdo minutė gali užimti kelis gigabaitus. Bet kažkaip vis dar telpa šimtai filmų, tūkstančiai nuotraukų, ir telefonas nesiskundžia. Kaip tai įmanoma? Atsakymas slypi vaizdo kompresijos algoritmuose – technologijoje, kuri tyliai dirba fone ir leidžia mums gyventi skaitmeninį gyvenimą be nuolatinio atminties trūkumo.

Vaizdo kompresija – tai procesas, kurio metu sumažinamas skaitmeninių vaizdų ar video failų dydis, išlaikant priimtiną kokybę. Skamba paprasta, bet už šios technologijos slypi dešimtmečiai matematikos, psichologijos ir inžinerijos. Be jos neturėtume nei YouTube, nei Netflix, nei Instagram – visa tai tiesiog neveiktų su dabartine interneto infrastruktūra.

Kaip iš viso atrodo skaitmeninis vaizdas

Kad suprastume kompresijos magiją, pirmiausia reikia suprasti, ką iš tikrųjų kompiuteris mato, kai mes žiūrime į nuotrauką. Kiekvienas vaizdas – tai taškelių (pikselių) rinkinys. Kiekvienas pikselis turi savo spalvą, o spalva paprastai užkoduojama trimis skaičiais: raudonos, žalios ir mėlynos spalvų intensyvumas (RGB sistema).

Paprasta matematika: jei turite Full HD nuotrauką (1920×1080 pikselių), tai yra 2 073 600 pikselių. Kiekvienas pikselis reikalauja 3 baitų informacijos (po vieną kiekvienai spalvai). Rezultatas? Apie 6 MB vienai nuotraukai be jokios kompresijos. O dabar įsivaizduokite 4K video su 30 kadrų per sekundę – kiekviena sekundė užimtų apie 200 MB. Dešimties minučių filmukas būtų 120 GB. Absurdas, tiesa?

Čia ir prasideda kompresijos poreikis. Bet kaip galima sumažinti failą, neprarandant to, kas jame yra? Atsakymas: pašalinti tai, ko mums iš tikrųjų nereikia, arba užrašyti tą pačią informaciją efektyviau.

Nuostolinga ir be nuostolių – du skirtingi pasauliai

Vaizdo kompresija skirstoma į dvi pagrindines kategorijas, ir skirtumas tarp jų yra fundamentalus.

Be nuostolių kompresija (lossless) veikia kaip labai protingas archyvavimas. Įsivaizduokite, kad turite tekstą, kuriame žodis „kompiuteris” kartojasi šimtą kartų. Vietoj to, kad rašytumėte jį šimtą kartų, galite parašyti „kompiuteris×100”. Failas tampa mažesnis, bet jokia informacija neprarasta – visada galite atkurti originalą tiksliai.

PNG ir GIF formatai naudoja būtent tokią kompresija. Tai puiku medicininėms nuotraukoms, techninėms schemoms ar bet kam, kur svarbus kiekvienas pikselis. Problema ta, kad net ir su protingiausiais triukais, dažniausiai pavyksta sumažinti failą tik 2-3 kartus. Nuotraukoms ir video to neužtenka.

Nuostolinga kompresija (lossy) žaidžia pagal kitas taisykles. Ji tiesiog išmeta dalį informacijos, bet daro tai labai protingai – pašalina tai, ko žmogaus akis vis tiek nepastebės. Čia prasideda tikroji magija, nes reikia suprasti ne tik matematiką, bet ir žmogaus regėjimo ypatumus.

Ką mūsų akys iš tikrųjų mato

Žmogaus regėjimas nėra tobulas – ir kompresijos algoritmai tai puikiai išnaudoja. Mūsų akys daug jautresnės šviesumui nei spalvoms. Galime pastebėti labai subtilias šviesos ir šešėlių permainas, bet spalvų niuansus – ne taip gerai. Tai evoliucijos padarinys: mūsų protėviams buvo svarbiau pastebėti plėšrūną prieblandoje nei įvertinti jo kailio spalvos atspalvį.

JPEG formatas (tikriausiai pats populiariausias vaizdo formatas pasaulyje) šį faktą išnaudoja genialiai. Vietoj RGB, jis konvertuoja vaizdą į YCbCr spalvų erdvę, kur Y reiškia šviesumą, o Cb ir Cr – spalvų informaciją. Tada algoritmas tiesiog sumažina spalvų informacijos tikslumą, nes žino, kad mes to vis tiek nepastebėsime.

Dar vienas triukas: mūsų akys blogai mato greitai besikeičiančius dalykus. Jei nuotraukoje yra smulkių detalių – tarkim, plaukų tekstūra ar žolės laukas – mes nematome kiekvieno atskirai. Matome bendrą įspūdį. Kompresijos algoritmai tai žino ir leidžia sau būti „netiksliems” ten, kur yra daug smulkių detalių.

DCT transformacija – matematinis šuolis

Dabar pasinersime šiek tiek giliau. JPEG ir daugelis video kompresijos standartų naudoja kažką, kas vadinasi Diskrečiąja kosinuso transformacija (DCT). Skamba bauginančiai, bet idėja gana paprasta.

Įsivaizduokite, kad vaizdą galima aprašyti ne kaip pikselių rinkinį, o kaip bangų rinkinį – kaip muziką. Žemų dažnių bangos atitinka lėtus spalvų pokyčius (pvz., mėlyną dangų), o aukštų dažnių bangos – staigius pokyčius (pvz., objekto kraštus). DCT transformacija ima 8×8 pikselių blokelį ir paverčia jį tokiu „bangų” aprašymu.

Kodėl tai naudinga? Nes dauguma vizualinės informacijos yra žemų dažnių bangose. Aukštų dažnių bangos (smulkios detalės) dažnai gali būti stipriai sumažintos arba visai pašalintos, o vaizdas vis tiek atrodys gerai. Tai kaip MP3 muzikoje – pašalinamos aukštos dažnio dalys, kurių vis tiek negirdime.

Po DCT transformacijos algoritmas tiesiog „suapvalina” mažas vertes iki nulio. Daug nulių reiškia, kad informaciją galima užrašyti labai kompaktiškai. Štai kaip JPEG gali sumažinti failą 10-20 kartų, o vaizdas vis dar atrodo puikiai.

Video kompresija – laiko dimensija

Jei nuotraukų kompresija yra sudėtinga, tai video kompresija – tai visai kitas lygis. Video yra ne tik erdvė (pikseliai), bet ir laikas (kadrai). Ir čia slypi didžiulė galimybė: dauguma kadrų yra labai panašūs į ankstesnius.

Pagalvokite apie tipinę video sceną: žmogus kalba kameroje. Fonas nekinta, veidas juda šiek tiek, bet dauguma vaizdo lieka ta pati. Būtų absurdiška kiekvieną kadrą saugoti atskirai. Vietoj to, video kompresijos algoritmai (kaip H.264, H.265, VP9) naudoja tris kadrų tipus:

I-kadrai (Intra) – tai pilni kadrai, suspausti kaip JPEG nuotraukos. Jie yra „atramės taškai”.

P-kadrai (Predicted) – šie kadrai saugo tik skirtumus nuo ankstesnio kadro. „Veidas pajudėjo 5 pikselius į kairę, visa kita tas pats.”

B-kadrai (Bidirectional) – dar protingesni, jie žiūri ir į priekį, ir atgal. „Šis kadras yra kažkur tarp ankstesnio ir kito, štai kaip jį atkurti.”

Šis metodas vadinamas tarpkadrų kompresija (inter-frame compression), ir jis leidžia sumažinti video dydį dar 10-50 kartų, palyginti su atskirų kadrų kompresija.

Judėjimo kompensacija – sekimas kaip kine

Vienas iš protingiausių video kompresijos triukų yra judėjimo kompensacija (motion compensation). Algoritmas bando „atspėti”, kaip objektai juda tarp kadrų. Jei kamuolys juda per ekraną, nereikia saugoti kamuolio kiekviename kadre – užtenka pasakyti „tas pats kamuolys, tik 10 pikselių į dešinę”.

Modernus H.265 (HEVC) kodavimas gali analizuoti judėjimą su neįtikėtinu tikslumu, net su subpikselių tikslumu. Tai reiškia, kad jis gali sekti objektus, kurie juda mažiau nei vieno pikselio atstumu per kadrą. Skamba kaip overkill, bet būtent dėl to 4K video gali tilpti į pagrįstų dydžių failus.

Bet yra kaina: kompiuteris turi atlikti daug skaičiavimų, kad rastų šiuos judėjimo vektorius. Štai kodėl video kodavimas užtrunka daug ilgiau nei paprastas nuotraukos išsaugojimas. Jūsų telefonas dirba kaip pasiutęs, kai bandote eksportuoti video iš montažo programos.

Naujausios kartos kodavimas ir AI įsikišimas

Technologijos nestovi vietoje. Naujausi kompresijos standartai kaip AV1 ir VVC (H.266) žada dar geresnę kompresija – iki 50% mažesnius failus nei H.265 su ta pačia kokybe. Kaip? Dar protingesni algoritmai, dar daugiau galimų būdų analizuoti ir prognozuoti vaizdą.

Bet tikroji revoliucija vyksta su dirbtinio intelekto pagalba. Tradiciniai algoritmai remiasi matematinėmis formulėmis ir žmogaus regėjimo tyrimais. AI modeliai gali išmokti, kas „atrodo gerai” tiesiog žiūrėdami milijonus vaizdų. Jie gali rekonstruoti detales, kurių iš tikrųjų nebuvo suspaustuose duomenyse, bet kurios „turėtų būti ten” pagal kontekstą.

Pavyzdžiui, jei algoritmas mato žemo rezoliucijos veidą, tradicinis metodas tiesiog pabandys jį „išlyginti”. AI modelis gali atpažinti, kad tai veidas, ir pridėti realistiškų detalių – odos tekstūros, akių blizgesio – remdamasis tuo, ką išmoko iš tūkstančių kitų veidų. Tai jau ne tik kompresija – tai beveik turinio kūrimas.

Praktiniai dalykai ir kaip tai veikia jūsų gyvenime

Gerai, užtenka teorijos. Kaip visa tai veikia praktikoje ir ką jūs galite su tuo padaryti?

Kai fotografuojate telefonų, dauguma automatiškai išsaugo JPEG formatu su vidutine kompresija. Tai puikus balansas – nuotrauka atrodo gerai ir neužima per daug vietos. Bet jei fotografuojate kažką svarbaus (šeimos šventė, kelionė), verta įjungti RAW formatą, jei jūsų telefonas tai palaiko. RAW yra be nuostolių arba su minimalia kompresija, tai duoda daugiau galimybių redaguojant.

Video atveju, situacija sudėtingesnė. Jūsų telefonas tikriausiai įrašinėja H.264 arba H.265 formatu. Jei planuojate video redaguoti, geriau pasirinkti didesnį bitrate (duomenų srautą) nustatymuose. Taip, failas bus didesnis, bet turėsite daugiau kokybės rezervo montažui.

Kai dalinsitės video socialiniuose tinkluose, žinokite, kad jie papildomai suspaus jūsų turinį. Instagram, Facebook, TikTok – visi turi savo kompresijos algoritmus. Todėl verta įkelti kiek įmanoma aukštesnės kokybės failą – galutinis rezultatas vis tiek bus suspaustas, bet pradėję nuo geresnės kokybės, gausit geresnį rezultatą.

Dar vienas patarimas: jei saugote svarbius video archyvui, naudokite ne maksimalią kompresija. Kiekviena kompresija prideda artefaktų – tų bjaurių blokelių ir išsitepimų. Jei suspausite jau suspausą failą, kokybė krenta labai greitai. Tai kaip fotokopija iš fotokopijos – kiekviena karta blogėja.

Kada kompresija tampa per daug

Kompresijos artefaktai – tai šalutinis nuostolingos kompresijos efektas. Jie pasireiškia kaip blokeliai (ypač JPEG), spalvų juostos (vietoj lygaus gradiento matote „pakopas”), išsitrynusios detalės arba „skraidantys uodai” video (maži pikseliai, kurie mirga ir keičiasi).

Kiekvienas esame matę per daug suspausą nuotrauką – ji atrodo „plastmasinė”, detalės išsitepusios, spalvos keistos. Tai atsitinka, kai kompresijos lygis per aukštas arba kai failas buvo suspaustas kelis kartus.

Yra toks dalykas kaip „kompresijos pragaro” (compression hell) – kai video pereina per kelias platformas, kiekviena suspaudžia iš naujo. Originalas buvo geras, bet po Facebook, paskui YouTube, paskui dar kažkas parsisiuntė ir įkėlė kitur – rezultatas atrodo kaip 2005-ų metų internetas.

Ateitis – kur link judame

Kompresijos technologijos tobulėja nuolat, bet susiduria su fundamentaliais apribojimais. Negalima be galo mažinti failo dydžio be kokybės praradimo – tai tiesiog matematiškai neįmanoma. Bet galima vis protingiau pasirinkti, ką išmesti ir kaip užkoduoti.

Dirbtinis intelektas čia atvers naujų galimybių. Jau dabar yra eksperimentinių kodekų, kurie naudoja neuroninius tinklus vietoj tradicinių algoritmų. Rezultatai įspūdingi – ypač žemose bitrate reikšmėse, kur tradiciniai metodai jau visiškai subyrėja, AI modeliai vis dar gali išlaikyti priimtiną kokybę.

Bet yra problema: AI kompresija reikalauja daug skaičiavimo galios. Suspausti gal ir pavyksta greitai, bet išpakuoti – reikia galingos vaizdo plokštės. Kol kas tai netinka masėms, bet ateityje, kai kiekvienas įrenginys turės AI spartintuvus (kaip jau turi naujausi telefonai), situacija pasikeis.

Taip pat matome judėjimą link adaptyvios kompresijos – algoritmai, kurie realiu laiku prisitaiko prie turinio. Jei scenoje daug judėjimo, skiriama daugiau bitų. Jei statiškas vaizdas – mažiau. Jei svarbi dalis vaizde (pvz., veidas) – jai prioritetas. Tai jau vyksta dabar, bet ateityje taps dar protingiau.

Dar viena kryptis – kompresija debesyje. Vietoj to, kad jūsų įrenginys dirbtų sunkų darbą, failas siunčiamas į serverį, ten suspaudžiamas galingais algoritmais, ir grąžinamas. Google Photos jau daro kažką panašaus. Tai leidžia naudoti sudėtingesnius, lėtesnius, bet efektyvesnius algoritmus.

Kas lieka už kadro

Vaizdo kompresija – tai viena iš tų technologijų, kurios veikia taip gerai, kad mes apie jas net negalvojame. Kiekvieną kartą, kai žiūrite video, darote nuotrauką ar siunčiate meme draugui, už kulisų vyksta sudėtingi matematiniai skaičiavimai, psichologiniai triukai ir dešimtmečių inžinerijos darbas.

Tai ne tik techninė problema – tai menas rasti balansą tarp kokybės, dydžio ir skaičiavimo greičio. Kiekvienas naujas standartas turi būti geresnis, bet ir suderinamas, ir pakankamai greitas realiam naudojimui. Tai kodėl naujų kodekų priėmimas užtrunka metus ar net dešimtmečius.

Gražiausia tai, kad kompresijos technologijos demokratizavo vaizdinį turinį. Be jų, tik didžiosios kompanijos galėtų leisti sau video streaming, tik profesionalai galėtų dalintis nuotraukomis. Dabar kiekvienas gali būti kūrėjas, nes technologija padarė tai prieinamu ir paprastu.

Taigi kitą kartą, kai jūsų telefonas akimirksniu išsaugos 4K video, arba kai Netflix be vėlavimo paleist filmą, prisiminkite – už to slypi dešimtmečiai matematikos, inžinerijos ir supratimo apie tai, kaip mes matome pasaulį. Ir tai, tiesą sakant, gana nuostabu.

Поділіться: XFacebookPinterestLinkedin