Kateri koli raster slika lahko predstavimo v obliki dvodimenzionalna matrika. Ko gre za barve, lahko idejo razvijemo tako, da pogledamo sliko kot tridimenzionalna matrika, v katerem se za shranjevanje podatkov za vsako od barv uporabljajo dodatne dimenzije.
Če upoštevamo končno barvo kot kombinacijo t.i. primarnih barv (rdeča, zelena in modra), v naši tridimenzionalni matriki definiramo tri ravnine: prvo za rdečo, drugo za zeleno in zadnjo za modro.
Vsako točko v tej matriki bomo imenovali piksel (element slike). Vsaka slikovna pika vsebuje informacije o intenzivnosti (običajno kot številsko vrednost) vsake barve. na primer rdeči piksel pomeni, da vsebuje 0 zelenih, 0 modrih in največ rdeče. Rožnati piksel se lahko oblikuje s kombinacijo treh barv. Z uporabo številskega obsega od 0 do 255 je rožnata slikovna pika definirana kot Rdeča = 255, Zelena = 192 и Modra = 203.
Obstaja veliko drugih modelov za predstavitev barv, ki sestavljajo sliko. Uporabite lahko na primer indeksirano paleto, ki zahteva samo en bajt za predstavitev vsake slikovne pike namesto treh, potrebnih pri uporabi modela RGB. V takem modelu je mogoče za predstavitev vsake barve uporabiti 2D matriko namesto 3D matrike. To prihrani pomnilnik, vendar daje manjši barvni obseg.
RGB
Na primer, poglejte to sliko spodaj. Prvi obraz je popolnoma pobarvan. Druge so rdeča, zelena in modra ravnina (intenziteta ustreznih barv je prikazana v sivinah).
Vidimo, da bodo odtenki rdeče v izvirniku na istih mestih, kjer so opazni najsvetlejši deli druge ploskve. Medtem ko je prispevek modre barve v glavnem viden le v Mariovih očeh (zadnji obraz) in elementih njegovega oblačila. Opazite, kje vse tri barvne ravnine prispevajo najmanj (najtemnejši deli slik) – Mariovi brki.
Za shranjevanje intenzivnosti vsake barve je potrebno določeno število bitov - ta količina se imenuje bitna globina. Recimo, da je porabljenih 8 bitov (na podlagi vrednosti od 0 do 255) na barvno ravnino. Potem imamo barvno globino 24 bitov (8 bitov * 3 ravnine R/G/B).
Druga lastnost slike je dovoljenje, ki je število slikovnih pik v eni dimenziji. Pogosto označeno kot širina × višina, kot na sliki 4 krat 4 spodaj.
Druga lastnost, s katero se ukvarjamo pri delu s slikami/videoposnetki, je razmerje, ki opisuje normalno sorazmerno razmerje med širino in višino slike ali slikovne pike.
Ko rečejo, da je določen film ali slika velikosti 16 x 9, običajno mislijo resno razmerje stranic zaslona (DAR - od Prikaz razmerja stranic). Včasih pa lahko pride do različnih oblik posameznih pikslov – v tem primeru govorimo o razmerje slikovnih pik (PAR - od Razmerje stranic slikovnih pik).
Opomba za hosteso: DVD соответствующий DAR 4 do 3
Čeprav je dejanska ločljivost DVD-ja 704x480, še vedno ohranja razmerje stranic 4:3, ker je PAR 10:11 (704x10 / 480x11).
In končno lahko ugotovimo Video kot zaporedje n okvirji za obdobje časa, kar lahko štejemo za dodatno dimenzijo. A n potem je hitrost sličic ali število sličic na sekundo (FPS - od Število sličic na sekundo).
Število bitov na sekundo, potrebnih za prikaz videa, je njegovo hitrost prenosa - bitna hitrost.
bitna hitrost = širina * višina * bitna globina * sličice na sekundo
Na primer, 30 sličic na sekundo, 24 bps, 480 x 240 videoposnetek bi zahteval 82,944,000 bps ali 82,944 Mbps (30 x 480 x 240 x 24) - vendar to velja, če ne uporabite metode stiskanja.
Če je hitrost prenosa skoraj konstantna, potem se imenuje konstantna hitrost prenosa (CBR - od konstantna bitna hitrost). Lahko pa se tudi razlikuje, v tem primeru se imenuje spremenljiva hitrost prenosa (VBR - od spremenljiva bitna hitrost).
Ta graf prikazuje omejen VBR, kjer se v primeru popolnoma temnega okvirja ne izgubi preveč bitov.
Inženirji so sprva razvili metodo za podvojitev zaznane hitrosti sličic video zaslona brez uporabe dodatne pasovne širine. Ta metoda je znana kot prepleten video; V bistvu pošlje polovico zaslona v prvi "okvir", drugo polovico pa v naslednji "okvir".
Trenutno so prizori večinoma upodobljeni z uporabo progresivne tehnologije skeniranja. Je metoda prikazovanja, shranjevanja ali prenosa gibljivih slik, pri kateri so vse črte vsakega okvirja narisane zaporedno.
No! Sedaj vemo, kako je slika digitalno predstavljena, kako so njene barve razporejene, koliko bitov na sekundo porabimo za prikaz videa, ali je bitna hitrost konstantna (CBR) ali spremenljiva (VBR). Poznamo določeno ločljivost z uporabo dane hitrosti sličic, poznamo številne druge izraze, kot so prepleteni video, PAR in nekateri drugi.
Odstranjevanje odvečnosti
Znano je, da videa brez stiskanja ni mogoče normalno uporabljati. Enourni video v ločljivosti 720p in 30 sličicah na sekundo bi zasedel 278 GB. Do te vrednosti pridemo tako, da pomnožimo 1280 x 720 x 24 x 30 x 3600 (širina, višina, biti na slikovno piko, FPS in čas v sekundah).
Uporaba algoritmi stiskanja brez izgub, tako kot DEFLATE (uporablja se v PKZIP, Gzip in PNG), ne bo dovolj zmanjšal zahtevane pasovne širine. Iskati moramo druge načine za stiskanje videa.
Če želite to narediti, lahko uporabite funkcije naše vizije. Boljši smo pri razlikovanju svetlosti kot barv. Videoposnetek je serija zaporednih slik, ki se skozi čas ponavljajo. Med sosednjimi sličicami iste scene so majhne razlike. Poleg tega vsak okvir vsebuje veliko področij z isto (ali podobno) barvo.
Barva, svetlost in naše oči
Naše oči so bolj občutljive na svetlost kot na barvo. To lahko vidite sami, če pogledate to sliko.
Če tega ne vidite na levi polovici slike, so barve kvadratkov A и B so dejansko enaki, potem je to normalno. Naši možgani nas silijo, da smo bolj pozorni na svetlobo in sence kot na barve. Na desni strani med označenimi kvadratki je skakalec enake barve - tako mi (tj. naši možgani) zlahka ugotovimo, da sta dejansko enake barve.
Poglejmo (poenostavljeno), kako delujejo naše oči. Oko je kompleksen organ, sestavljen iz številnih delov. Najbolj pa nas zanimajo stožci in palice. Oko vsebuje približno 120 milijonov paličic in 6 milijonov stožcev.
Razmislimo o zaznavanju barve in svetlosti kot ločenih funkcij določenih delov očesa (pravzaprav je vse nekoliko bolj zapleteno, vendar ga bomo poenostavili). Paličaste celice so odgovorne predvsem za svetlost, stožčaste celice pa za barvo. Stožci so razdeljeni v tri vrste, odvisno od pigmenta, ki ga vsebujejo: S-stožci (modri), M-stožci (zeleni) in L-stožci (rdeči).
Ker imamo veliko več paličic (svetlosti) kot stožcev (barve), lahko sklepamo, da smo bolj sposobni razlikovati prehode med temno in svetlobo kot barve.
Funkcije kontrastne občutljivosti
Raziskovalci eksperimentalne psihologije in mnogih drugih področij so razvili številne teorije o človeškem vidu. In eden od njih se imenuje funkcije kontrastne občutljivosti. Povezani so s prostorsko in časovno osvetlitvijo. Skratka, gre za to, koliko sprememb je potrebnih, preden jih opazovalec opazi. Upoštevajte množino besede "funkcija". To je posledica dejstva, da lahko merimo funkcije kontrastne občutljivosti ne samo za črno-bele slike, ampak tudi za barvne. Rezultati teh poskusov kažejo, da so naše oči v večini primerov bolj občutljive na svetlost kot na barvo.
Ker vemo, da smo bolj občutljivi na svetlost slike, lahko to dejstvo poskusimo izkoristiti.
Barvni model
Malo smo ugotovili, kako delati z barvnimi slikami po shemi RGB. Obstajajo tudi drugi modeli. Obstaja model, ki ločuje svetilnost od barvnosti in je znan kot YCbCr. Mimogrede, obstajajo tudi drugi modeli, ki imajo podobno delitev, vendar bomo upoštevali samo tega.
V tem barvnem modelu Y je predstavitev svetlosti in uporablja tudi dva barvna kanala: Cb (bogata modra) in Cr (bogata rdeča). YCbCr je mogoče izpeljati iz RGB, možna pa je tudi obratna pretvorba. S tem modelom lahko ustvarimo barvne slike, kot jih vidimo spodaj:
Pretvarjanje med YCbCr in RGB
Nekdo bo ugovarjal: kako je mogoče dobiti vse barve, če ne uporabimo zelene?
Za odgovor na to vprašanje pretvorimo RGB v YCbCr. Uporabimo koeficiente, sprejete v standardu BT.601, ki ga je priporočila enota ITU-R. Ta oddelek postavlja standarde za digitalni video. Na primer: kaj je 4K? Kakšna naj bo hitrost sličic, ločljivost, barvni model?
Najprej izračunajmo svetlost. Uporabimo konstante, ki jih predlaga ITU, in zamenjajmo vrednosti RGB.
Y = 0.299R + 0.587G + 0.114B
Ko imamo svetlost, bomo ločili modro in rdečo barvo:
Cb = 0.564(B - Y)
Cr = 0.713(R - Y)
Prav tako lahko pretvorimo nazaj in celo postanemo zeleni z uporabo YCbCr:
R = Y + 1.402Cr
B = Y + 1.772Cb
G = Y - 0.344Cb - 0.714Cr
Običajno zasloni (monitorji, televizorji, zasloni itd.) uporabljajo samo model RGB. Toda ta model je mogoče organizirati na različne načine:
Barvno podvzorčenje
S sliko, predstavljeno kot kombinacija svetilnosti in barvnosti, lahko s selektivnim odstranjevanjem informacij izkoristimo večjo občutljivost človeškega vidnega sistema na svetilnost kot na barvnost. Podvzorčenje barvnosti je metoda kodiranja slik z uporabo manjše ločljivosti za barvnost kot za svetilnost.
Koliko je dopustno zmanjšati barvno ločljivost?! Izkazalo se je, da že obstaja nekaj diagramov, ki opisujejo, kako ravnati z ločljivostjo in združevanjem (končna barva = Y + Cb + Cr).
Te sheme so znane kot sistemi za zmanjšanje vzorčenja in so izraženi kot 3-kratno razmerje - a:x:y, ki določa število vzorcev signalov svetilnosti in barvne razlike.
a — horizontalni standard vzorčenja (običajno enak 4) x — število barvnih vzorcev v prvi vrsti slikovnih pik (vodoravna ločljivost glede na a) y — število sprememb v vzorcih barvnosti med prvo in drugo vrstico slikovnih pik.
Izjema je 4:1:0, ki zagotavlja en vzorec barvnosti v vsakem bloku ločljivosti svetilnosti 4 krat 4.
Pogoste sheme, ki se uporabljajo v sodobnih kodekih:
4:4:4 (brez zmanjšanja vzorčenja)
4:2:2
4:1:1
4:2:0
4:1:0
3:1:1
YCbCr 4:2:0 - primer fuzije
Tukaj je združena slika z uporabo YCbCr 4:2:0. Upoštevajte, da porabimo le 12 bitov na slikovno piko.
Tako izgleda ista slika, kodirana z glavnimi vrstami barvnega podvzorčenja. Prva vrstica je končni YCbCr, spodnja vrstica prikazuje barvno ločljivost. Zelo spodobni rezultati, če upoštevamo rahlo izgubo kakovosti.
Se spomnite, ko smo šteli 278 GB prostora za shranjevanje enourne video datoteke pri ločljivosti 720p in 30 slikah na sekundo? Če uporabimo YCbCr 4:2:0, se ta velikost zmanjša za polovico - 139 GB. Zaenkrat je še daleč od sprejemljivega rezultata.
Histogram YCbCr lahko dobite sami z uporabo FFmpeg. Na tej sliki modra prevladuje nad rdečo, kar je jasno vidno na samem histogramu.
Barva, svetlost, barvni razpon - video pregled
Priporočamo ogled tega čudovitega videa. Pojasnjuje, kaj je svetlost, in na splošno so vse pike pikčaste ё o svetlosti in barvi.
Vrste okvirjev
Gremo naprej. Poskusimo odpraviti časovno redundanco. Najprej pa opredelimo nekaj osnovne terminologije. Recimo, da imamo film s 30 slikami na sekundo, tukaj so njegove prve 4 slike:
V okvirjih lahko opazimo veliko ponavljanja: na primer modro ozadje, ki se od okvirja do okvirja ne spreminja. Da bi rešili ta problem, jih lahko abstraktno razvrstimo v tri vrste okvirjev.
I-okvir (Intro okvir)
I-okvir (referenčni okvir, ključni okvir, notranji okvir) je samostojen. Ne glede na to, kaj želite vizualizirati, je I-okvir v bistvu statična fotografija. Prvi okvir je običajno I-okvir, vendar bomo I-okvirje redno opazovali tudi med ne prvimi okvirji.
P-okvir (Purejen okvir)
P-okvir (prediktivni okvir) izkorišča dejstvo, da je skoraj vedno mogoče trenutno sliko reproducirati s prejšnjim okvirjem. Na primer, v drugem okvirju je edina sprememba žogica, ki se premika naprej. Okvir 2 lahko dobimo tako, da preprosto rahlo spremenimo okvir 1 in uporabimo samo razliko med tema okvirjema. Za izdelavo okvirja 2 se sklicujemo na prejšnji okvir 1.
←
B-okvir (Bi-prediktivni okvir)
Kaj pa povezave ne le do preteklih, ampak tudi do prihodnjih okvirjev za še boljše stiskanje?! To je v bistvu B-okvir (dvosmerni okvir).
← →
Vmesni umik
Te vrste okvirjev se uporabljajo za zagotavljanje najboljše možne kompresije. Kako se to zgodi, si bomo ogledali v naslednjem razdelku. Zaenkrat naj omenimo, da je najbolj "drag" glede porabljenega pomnilnika I-okvir, P-okvir je opazno cenejši, najbolj donosna možnost za video pa je B-okvir.
Časovna redundanca (predvidevanje med okvirji)
Poglejmo, katere možnosti imamo za zmanjšanje ponavljanja skozi čas. To vrsto redundance lahko rešimo z metodami navzkrižnega predvidevanja.
Za kodiranje zaporedja okvirjev 0 in 1 bomo poskušali porabiti čim manj bitov.
Lahko proizvajamo odštevanje, okvir 1 preprosto odštejemo od okvirja 0. Dobimo okvir 1, uporabimo le razliko med njim in prejšnjim okvirjem, pravzaprav le kodiramo nastali ostanek.
Kaj pa, če vam povem, da obstaja še boljša metoda, ki uporablja še manj bitov?! Najprej razdelimo okvir 0 na jasno mrežo, sestavljeno iz blokov. Nato bomo poskušali uskladiti bloke iz okvira 0 z okvirjem 1. Z drugimi besedami, ocenili bomo gibanje med okvirji.
Iz Wikipedije - kompenzacija gibanja blokov
Kompenzacija gibanja bloka razdeli trenutni okvir na bloke, ki se ne prekrivajo, vektor kompenzacije gibanja pa poroča o izvoru blokov (pogosta napačna predstava je, da prejšnji okvir je razdeljen na bloke, ki se ne prekrivajo, vektorji za kompenzacijo gibanja pa povedo, kam gredo ti bloki. Toda v resnici je ravno obratno - ne analizira se prejšnji okvir, ampak naslednji; ni jasno, kje se bloki premikajo, ampak od kod prihajajo). Običajno se izvorni bloki prekrivajo v izvornem okviru. Nekateri algoritmi za stiskanje videa sestavijo trenutni okvir iz delov niti enega, ampak več predhodno poslanih okvirjev.
Med postopkom ocenjevanja vidimo, da se je žogica premaknila iz (x= 0, y=25) do (x= 6, y=26), vrednosti x и y določi vektor gibanja. Drug korak, ki ga lahko naredimo za ohranitev bitov, je, da kodiramo samo razliko vektorjev gibanja med zadnjim položajem bloka in predvidenim, tako da bo končni vektor gibanja (x=6-0=6, y=26-25=1 ).
V resnični situaciji bi bila ta krogla razdeljena na n blokov, vendar to ne spremeni bistva zadeve.
Predmeti v kadru se premikajo tridimenzionalno, zato se žogica lahko vizualno zmanjša (ali poveča, če se premakne proti gledalcu). Normalno je, da med bloki ne bo popolnega ujemanja. Tukaj je združen pogled naše ocene in realne slike.
Vendar vidimo, da je pri uporabi ocene gibanja opazno manj podatkov za kodiranje kot pri uporabi enostavnejše metode izračuna delte med sličicami.
Kako bi izgledala prava kompenzacija gibanja
Ta tehnika se uporablja za vse bloke hkrati. Pogosto bo naša pogojno gibljiva žoga razdeljena na več blokov hkrati.
Sami lahko pridobite občutek za te koncepte z uporabo Jupiter.
Če želite videti vektorje gibanja, lahko ustvarite zunanji predvideni video z uporabo ffmpeg.
Uporabite lahko tudi Intel Video Pro Analyzer (plača se, vendar obstaja brezplačna preizkusna različica, ki je omejena samo na prvih deset sličic).
Prostorska redundanca (notranja napoved)
Če analiziramo vsak okvir v videu, bomo našli veliko medsebojno povezanih področij.
Pojdimo skozi ta primer. Ta prizor je v glavnem sestavljen iz modre in bele barve.
To je I-okvir. Za predvidevanje ne moremo vzeti prejšnjih okvirjev, lahko pa jih stisnemo. Kodirajmo izbiro rdečega bloka. Če pogledamo njegove sosede, opazimo, da je okoli njega nekaj barvnih trendov.
Predvidevamo, da se barve širijo navpično v okvirju. Kar pomeni, da bo barva neznanih pikslov vsebovala vrednosti svojih sosedov.
Takšna napoved se lahko izkaže za napačno. Zato morate uporabiti to metodo (notranja napoved) in nato odšteti realne vrednosti. To nam bo dalo preostali blok, kar bo povzročilo veliko bolj stisnjeno matriko v primerjavi z izvirnikom.
Če želite vaditi z notranjimi napovedmi, lahko ustvarite videoposnetek makroblokov in njihovih napovedi z uporabo ffmpeg. Če želite razumeti pomen vsake barve bloka, boste morali prebrati dokumentacijo ffmpeg.
Lahko pa uporabite Intel Video Pro Analyzer (kot sem omenil zgoraj, je brezplačna preizkusna različica omejena na prvih 10 sličic, vendar vam bo to na začetku zadostovalo).