Teine osa:
Iga rasterpilt vÔib olla esitatud kahemÔÔtmelise maatriksina . Kui rÀÀkida vÀrvidest, saab ideed arendada, arvestades pilti kuikolmemÔÔtmelist maatriksit , kus tÀiendavad mÔÔtmed on kasutusel iga vÀrvi andmete salvestamiseks.Kui kÀsitleda lÔppvÀrvi kui kombinatsiooni nn pÔhivÀrvidest (punane, roheline ja sinine), mÀÀratleme meie kolmemÔÔtmelises maatriksis kolm tasapinda: esimene punase, teine rohelise ja viimane sinise jaoks.
Igat punkti selles maatriksis nimetame piksliks (pildi elemendiks). Iga piksel sisaldab teavet iga vÀrvi intensiivsuse kohta (tavaliselt numbrilise vÀÀrtuse kujul). NÀiteks,
punane piksel tÀhendab, et selles on 0 rohelist, 0 sinist ja maksimum punast. Roosa piksel vÔib olla loodud kolme vÀrvi kombinatsiooniga. Kasutades numbrivahemikku 0 kuni 255, mÀÀratletakse roosa piksel kui Punane = 255 Roheline = 192, Sinine = 203 ja Artikkel on avaldatud ettevÔtte EDISON toetusel..
Arendamerakendusi videovalve, voogedastuse videote salvestamisega kirurgiatoas .
Kujutise vĂ€rvide esitamiseks on olemas mitmeid teisi mudelid. NĂ€iteks vĂ”ib kasutada indeksitud vĂ€rvipaletti, kus iga piksli esitamiseks on vaja vaid ĂŒhe bait, mitte kolme, nagu RGB mudeli puhul. Selles mudelis on vĂ”imalik kasutada 2D maatriksit, et esitada iga vĂ€rvi. See sÀÀstab mĂ€lu, kuid pakub vĂ€iksemat vĂ€rvitoonide vahemikku.
RGB

Vaadake allolevat pilti. Esimene nĂ€gu on tĂ€ielikult vĂ€rvitud. ĂlejÀÀnud on punase, rohelise ja sinise tasandid (vastavate vĂ€rvide intensiivsus on nĂ€idatud hallis skaala jĂ€rgi).
NÀiteks vaadake allolevat pilti. Esimene nÀgu on tÀielikult vÀrvitud. Teised on punased, rohelised ja sinised pinnad (vastavate vÀrvide intensiivsus on nÀidatud halltoone kasutades).

NĂ€eme, et punasetoonid originaalis asuvad samades kohtades, kus on kĂ”ige eredamad osad teise isiku suhtes. Samas on sinise vĂ€rvi panus peamiselt nĂ€htav ainult Mario silmades (viimane isik) ja tema rĂ”ivastes. Pange tĂ€hele, kuhu kĂ”ik kolm vĂ€rvitasandit annavad kĂ”ige vĂ€iksema panuse (kĂ”ige tumedamad osad piltidel) â see on Mario vuntsides.
Iga vĂ€rvi intensiivsuse sĂ€ilitamiseks on vajalik teatud hulk bite â seda mÔÔdetakse bitisĂŒgavusega. Oletame, et ĂŒhe vĂ€rvitasandi jaoks kulub 8 bitti (vahemik 0 kuni 255). Siis on meil vĂ€rvisĂŒgavus 24 bitti (8 bitti * 3 tasandit R/G/B).
Veel ĂŒks omadus pildist on eraldusvĂ”ime, mis vĂ€ljendab pikslite arvu ĂŒhes mÔÔtmes. Sageli tĂ€histatakse seda kui laius Ă kĂ”rgus, nagu alloleval 4x4 pildi nĂ€itel.

Veel ĂŒks omadus, millega kokku puutume piltide/ videote töötlemisel, on kuvasuhe, mis kirjeldab tavalist proportsionaalset seost pildi vĂ”i pikslite laius ja kĂ”rgus vahel.
Kui öeldakse, et kindlal filmil vĂ”i pildil on mÔÔt 16 korda 9, siis mĂ”eldakse tavaliselt ekraani kuvasuhte (DAR â lĂŒhend Display Aspect Ratio). Kuid mĂ”nikord vĂ”ivad eraldi piksli vormid olla erinevad â siis rÀÀgime pikslisuhte (PAR â lĂŒhend Pixel Aspect Ratio).


Koduperenaisele tÀhelepanuks: DVD vastab DAR 4 x 3
Kuigi DVD tegelik eraldusvĂ”ime on 704Ă480, sĂ€ilitab see siiski kuvasuhte 4:3, kuna PAR on 10:11 (704Ă10 / 480Ă11).
Ja lĂ”puks, saame mÀÀratleda video jĂ€rjestikuna n kaadreid aja jooksul mis on lisamÔÔde. Siis on see kaadrisagedus ehk kaadrite number sekundis (FPS n Frames per SecondKahtlemata on videote vaatamiseks vajalik bitihulk sekundis selle â lĂŒhend edastuskiirus).

bitrate bitrate = laius * kĂ”rgus * bitisĂŒgavus * kaadreid sekundis â NĂ€iteks, 30 kaadriga sekundis, 24 bitti pikslite kohta, eraldusvĂ”ime 480x240 vajab 82,944,000 bitti sekundis vĂ”i 82,944 Mbit/s (30x480x240x24) â aga see kehtib vaid juhul, kui ei kasutata mingit tihendamismeetodit..
Kui edastuskiirus
on peaaegu konstantne
, siis nimetatakse seda konstandiks edastuskiirusCBR constant bit rate (CBR â lĂŒhend pĂŒsiv bitikiirus). Kuid see vĂ”ib samuti varieeruda, sellisel juhul nimetatakse muutuvate edastuskiirus (VBR â lĂŒhend muutuv bitikiirus).
See graafik nÀitab piiratud VBR-i, kui tÀielikult musta kaadri korral ei kulu liiga palju bitte.

Alguses töötasid insenerid vĂ€lja meetodi videodispelai kiirusperioodi tajumise kahekordistamiseks ilma tĂ€iendava ribalaiuseta. Seda meetodit tuntakse vĂ€lhekseldatud videona; ĂŒldiselt saadetakse esimese 'kaadri' ajal pool ekraani ja jĂ€rgmise 'kaadri' ajal teine pool.
Praegu toimub stseenide visualiseerimine enamasti progressiivse skaneerimise. See on meetod, kus liikuvate piltide kuvamine, salvestamine vÔi edastamine toimub, kus iga kaadri kÔik read joonistatakse jÀrjestikku.

Noh, nĂŒĂŒd teame, kuidas pilt esitatakse digitaalsetes vormingutes, kuidas selle vĂ€rvid on organiseeritud, kui palju bitte sekundis kulutame video nĂ€itamiseks, kui edastuskiirus on konstantne (CBR) vĂ”i muutuv (VBR). Oleme tuttavad mÀÀratud eraldusvĂ”imega, kasutades mÀÀratud kaadrisagedust, ning oleme tutvunud paljude teiste mĂ”istetega, nagu vĂ€lhekseldatud video, PAR ja mĂ”ned teised.
Ăksikasjade eemaldamine
On teada, et kompressitud videot ei saa normaalselt kasutada. Tund aega 720p eraldusvÔime ja 30 kaadrit sekundis vÔtaks 278 GB. Sellele vÀÀrtusele jÔuame, kui korrutame 1280 x 720 x 24 x 30 x 3600 (laius, kÔrgus, bitid pikslis, FPS ja aja sekundid).
Kasutamine kaotusevabal kompressioonialgoritmide, nagu DEFLATE (kasutatakse PKZIP-is, Gzip-is ja PNG-s), ei tagatud piisavalt vÀhendatud ribalaiust. Peame leidma muid video kompressimise viise.
Selleks saab kasutada meie nĂ€gemisvĂ”ime omadusi. Me eristame heledust paremini kui vĂ€rve. Video on jĂ€rjestikuste piltide kogum, mis kordub ajas. Ăksikute stseenide vaheliste kaadrite vahe on vĂ€ike. Peale selle sisaldavad iga kaader palju alasid, mis kasutavad sama (vĂ”i sarnast) vĂ€rvi.
VĂ€rv, heleduse ja meie silmad
Meie silmad on heledusele tundlikumad kui vÀrvile. Saate ise seda kinnitada, vaadates seda pilti.

Kui te ei nĂ€e, mis on pildi vasakus pooles ruutude vĂ€rvid A ja B kui nad on tegelikult samad, siis see on normaalne. Meie aju sunnib meid rohkem tĂ€helepanu pöörama valguse ja varju erinevustele, mitte vĂ€rvile. Paremal pool tĂ€histatud ruutude vahel on sama vĂ€rvi vaheosa - seega suudame (ehk siis meie aju) kergesti eristada, et seal on tegelikult ĂŒks ja sama vĂ€rv.
Vaatame lihtsustatult, kuidas meie silmad töötavad. Silm on keeruline organ, mis koosneb paljusid osadest. Kuid meid huvitavad peamiselt koonus- ja pulgarakud. Silm sisaldab umbes 120 miljonit pulgarakku ja 6 miljonit koonusrakku.
Uurime vĂ€rvi ja heleduse tajumist eraldi silma teatud osade funktsioonidena (tegelikult on asi veidi keerulisem, kuid lihtsustame). Pulgarakud vastutavad peamiselt heleduse eest, samas kui koonusrakud vastutavad vĂ€rvi eest. Koonusrakud jagunevad kolme tĂŒĂŒpi, sĂ”ltuvalt sisalduvast pigmendist: S-koonusrakud (sinine), M-koonusrakud (roheline) ja L-koonusrakud (punane).
Kuna meil on palju rohkem pulgakesi (heleduse jaoks) kui koonusrakke (vĂ€rvi jaoks), vĂ”ib jĂ€reldada, et oleme rohkem vĂ”imelised eristama ĂŒleminekuid tumeduse ja valguse vahel kui vĂ€rve.
Kontrastsuse tundlikkuse funktsioonid
Eksperimentaalse psĂŒhholoogia ja paljude teiste valdkondade teadlased on vĂ€lja töötanud mitmeid teooriaid inimnĂ€gemise kohta. Ja ĂŒks neist nimetatakse kontrastsuse tundlikkuse funktsioonideks. Need on seotud ruumilise ja ajaliselt valgustusega. LĂŒhidalt öeldes rÀÀgime sellest, kui palju on vaja muutusi, enne kui vaatleja neid mĂ€rkab. Pange tĂ€hele sĂ”na âfunktsioonâ mitmust. See on seotud sellega, et me saame mÔÔta kontrastsuse tundlikkuse funktsioone mitte ainult mustvalge, vaid ka vĂ€rvilise pildi suhtes. Nende katsete tulemused nĂ€itavad, et enamikul juhtudel on meie silmad heleduse suhtes tundlikumad kui vĂ€rvi suhtes.
Kuna on teada, et oleme pildi heledusele tundlikumad, on mÔistlik kasutada seda fakti.
VĂ€rvimudel
Oleme veidi aru saanud, kuidas töötada vÀrviliste piltidega, kasutades RGB-skeemi. On ka teisi mudeleid. On mudel, mis eraldab heleduse vÀrvusest ja see on tuntud kui YCbCr. Muide, on ka teisi mudeleid, mis teevad sarnast eraldamist, kuid vaatame ainult seda.
Selles vĂ€rvimudelis Y â on heleduse esitamine ning kasutatakse kaht vĂ€rvikanalit: Cb (kĂŒllastunud sinine) ja Cr (kĂŒllastunud punane). YCbCr saadakse RGB-st, nagu ka vastupidine teisendus on vĂ”imalik. Kasutades seda mudelit, saame luua tĂ€isvĂ€rvilisi pilte, nagu nĂ€eme allpool:

Teisendus YCbCr ja RGB vahel
MÔned vÔivad vÀita: kuidas on vÔimalik saada kÔiki vÀrve, kui roheline ei ole kasutusel?
KĂŒsimusele vastamiseks teisendame RGB YCbCr-iks. Kasutame MSE poolt kehtestatud koefitsiiente BT.601, mis on soovitatud ITU-R. See ĂŒksus mÀÀratleb digitaalvideo standardid. NĂ€iteks: mis on 4K? Millised peaksid olema kaadrisagedus, resolutsioon, vĂ€rvimudel?
Esiteks arvutame heledus. Kasutame ITU poolt pakutud konstande ja asendame RGB vÀÀrtused.
Y = 0.299R + 0.587G + 0.114B
PÀrast heleduse saamist lahutame sinise ja punase vÀrvi:
Cb = 0.564(B â Y)
Cr = 0.713(R â Y)
Ja me saame ka tagasi teisendada ja isegi roheline vÀrvi YCbCr abil saada:
R = Y + 1.402Cr
B = Y + 1.772Cb
G = Y â 0.344Cb â 0.714Cr
Ăldiselt kasutavad ekraanid (monitorid, telerid, ekraanid jne) ainult RGB mudelit. Kuid see mudel vĂ”ib olla korraldatud erinevalt:

VĂ€rvialane subdiskreetimine
Pilti, mis on esitatud heleduse ja vĂ€rvuse kombinatsioonina, saame kasutada inimeste nĂ€gemissĂŒsteemi suuremat tundlikkust heledusele vĂ”rreldes vĂ€rvuse tundlikkusega, kui eemaldame teavet valikuliselt. VĂ€rvialane subdiskreetimine on meetod, kuidas kodeerida pilte, kasutades vĂ€rvuse jaoks madalamat resolutsiooni kui heleduse jaoks.

Kui lubatud on vÀrvuse resolutsiooni vÀhendamine?! Tundub, et juba on olemas mÔned skeemid, mis kirjeldavad, kuidas töötada resolutsiooni ja sulandumisega (LÔppvÀrv = Y + Cb + Cr).
Need skeemid on tuntud kui subdiskreetimise sĂŒsteemid ja vĂ€ljendatakse 3:2 suhe â a:x:y, mis mÀÀratleb heleduse ja vĂ€rvuse vahe signaalide vĂ”tmiste arvu.
a â standardne horisontaalne vĂ”tete arv (ĂŒldiselt 4)
x â vĂ€rvuse vĂ”tete arv esimeses pikseliribas (horisontaalne resolutsioon vĂ”rreldes a)
y â vĂ€rvuse vĂ”tete muudatuste arv esimese ja teise pikseliriba vahel.
Erandina on 4:1:0, mis tagab ĂŒhe vĂ€rvuse vĂ”tte igas heleduse 4x4 resolutsiooni plokis.
Kaasaegsetes koodekites kasutatavad ĂŒldised skeemid:
- 4:4:4 (ilma aladieskreetimiseta)
- 4:2:2
- 4:1:1
- 4:2:0
- 4:1:0
- 3:1:1
YCbCr 4:2:0 â sulandumise nĂ€ide
Siin on YCbCr 4:2:0 kasutades ĂŒhendatud pildi fragment. Pange tĂ€hele, et kulutame ainult 12 bitti pikseli kohta.
NĂ€ete, kuidas sama pilt on kodeeritud peamiste vĂ€rvi aladieskreetimise tĂŒĂŒpidega. Ălemine rida on lĂ”plik YCbCr, alumine rida nĂ€itab vĂ€rvilisuse resolutsiooni. Tulemused on ĂŒsna kĂ”rged, arvestades, et kvaliteedi kaotused on minimaalsed.

Kas mĂ€letate, et arvutasime vĂ€lja 278 GB kettaruumi, et salvestada ĂŒhe tunni video 720p resolutsiooniga ja 30 kaadrit sekundis? Kui kasutame YCbCr 4:2:0, kahaneb see suurus poole vĂ”rra â 139 GB. Siiski on veel kaugeltki kĂ€tte saadavast tulemusest.
Saate ise YCbCr-i histogrammi kasutada FFmpegiga. Selles pildis on sinine vĂ€rv punase ĂŒlekaalus, mis on histogrammil hĂ€sti nĂ€htav.

VĂ€rvilisus, heledus, vĂ€rvigamma â videoĂŒlevaade
Soovitame vaadata seda pöörasepĂ€rast videot. Siin selgitatakse, mis on heledus, ja ĂŒldse, kĂ”ik punktid on paika pandud ĂŒ heleduse ja vĂ€rvi osas.
KaadritĂŒĂŒbid
Liigume edasi. Proovime kĂ”rvaldada ajaĂŒlekande. Kuid kĂ”igepealt mÀÀratleme mĂ”ned pĂ”histerminid. Oletame, et meil on film, kus on 30 kaadrit sekundis, siin on selle esimesed 4 kaadrit:

NĂ€eme kaader-kaadrisse palju kordusi: nĂ€iteks sinine taust, mis ei muutu kaadri kaupa. Selle probleemi lahendamiseks saame neid abstraktselt klassifitseerida kolme kaadritĂŒĂŒbina.
I-kaader (Intro Frame)
I-kaader (viidekaader, vĂ”tme kaader, sisene kaader) on iseseisev. ĂkskĂ”ik, mida visuaalselt nĂ€idata, on I-kaader pĂ”himĂ”tteliselt staatiline foto. Esimene kaader on tavaliselt I-kaader, kuigi vaatame regulaarselt I-kaadreid ka kaugemates kaadrites.

P-kaader (Predicted Frame)
P-raak (prognoositud raami) kasutab Àra asjaolu, et peaaegu alati saab praegust pilti reproduktsioonida eelmise raami abil. NÀiteks, teises raam, ainus muudatus on edasi liikuv pall. Me saame raam 2 lihtsalt veidi muutes raam 1, kasutades ainult nende raamide vahet. Raami 2 koostamiseks tugineme tema eelnevale raami 1.
â 
B-raak (Bi-predictive Frame)
A kuidas oleks, kui viidata mitte ainult minevikule, vaid ka tulevastele raamidele, et tagada veel parem tihendamine?! See on pÔhjeti B-raak (kahepoolne raami).
â
â 
VahekokkuvÔte
Need raamitĂŒĂŒbid on kasutusel parima tihendamise tagamiseks. Me vaatame, kuidas see toimub, jĂ€rgnevas jaotises. Kuid hetkeks mĂ€rkigem, et kĂ”ige "kulukam" mĂ€lu kulutamiseks on I-raak, P-raak on mĂ€rgatavalt odavam, aga kĂ”ige soodsam variant video jaoks on B-raak.

Ajaliselt ĂŒleliigne (vahekaadri prognoosimine)
Vaadakem, millised on meie vĂ”imalused ajakohaste korduste vĂ€hendamiseks. Seda tĂŒĂŒpi ĂŒleliigne lahendame vastastikuse prognoosimise meetoditega.
PĂŒĂŒame kulutada vĂ”imalikult vĂ€he bitte, et kodeerida raamide 0 ja 1 jada.

Me saame lahutamise, lihtsalt lahutame raam 1 raamist 0. Saame raam 1, kasutades erinevust selle ja eelmise raami vahel, tegelikult kodeerime ainult saadud jÀÀki.

Aga mis siis, kui ma ĂŒtleksin, et on veel parem meetod, mis kasutab veel vĂ€hem bitte?! Alustame raami 0 jagamist selgeks vĂ”rgustikuks, mis koosneb plokkidest. Ja siis proovime sobitada plokke raamist 0 raami 1. TeisisĂ”nu, hindame liikumist raamide vahel.
Wikipediast â plokkide liikumise kompensatsioon
Plokkide liikumise kompensatsioon jagab praeguse raami mitteĂŒhtivateks plokkideks ja liikumise kompensatsiooni vektor nĂ€itab plokkide pĂ€ritolu (levinud eksiarvamus on see, et eelmine Kaader jaguneb omavahel mitteĂŒletavatesse blokki, samas kui liikumise kompensatsiooni vektorid nĂ€itavad, kuhu need blokid liiguvad. Tegelikult analĂŒĂŒsitakse mitte eelmise kaadri, vaid jĂ€rgmise kaadri andmeid, et vĂ€lja selgitada, mitte kuhu blokid liiguvad, vaid kust nad ilmusid. Tavaliselt kattuvad lĂ€hteblokkide osad algses kaadris. MĂ”ned videokompressiooni algoritmid koguvad praeguse kaadri koostisosad isegi mitte ĂŒhest, vaid kohe mitmest varasemalt edastatud kaadrist.

Hindamise kĂ€igus nĂ€eme, et pall on liikunud punktist (x=0, y=25) punkti (x=6, y=26), vÀÀrtused x ja y mÀÀravad liikumise vektori. Veel ĂŒks samm, mida saame teha, et sĂ€ilitada bitsid, on kodeerida ainult liikumise vektorite erinevust viimase bloki asukoha ja prognoositud vahel, mistĂ”ttu lĂ”plik liikumise vektor on (x=6-0=6, y=26-25=1).
TÔelises olukorras oleks see pall jagatud n blokkideks, kuid asja sisu ei muutu.
Kaadris liikuvad objektid liiguvad kolmes mÔÔtmes, seega vĂ”ib palli liikumisel see visuaalselt vĂ€iksemaks muutuda (vĂ”i suuremaks, kui see liigub vaatleja suunas). on normaalne, et blokid ei vasta ideaalselt. Siin on meie hinde ja reaalse pildi ĂŒhtne vaade.

Kuid nÀeme, et kui rakendame liikumise hindamist, on kodeerimise andmeid mÀrgatavalt vÀhem kui lihtsama raamide vahelise erinevuse arvutamise meetodi puhul.

Kuidas nÀeb vÀlja tÔeline liikumise kompensatsioon
See meetod rakendatakse kohe kÔigile blokkidele. Sageli meie tinglikult liikuv pallike jagatakse kohe mitmeks blokkiks.

Sa saad ise neid mÔisteid tunnetada, kasutades .
Liikumise vektorite nÀgemiseks saab luua video vÀlise prognoosimise abil, kasutades .

Samuti vĂ”ib kasutada (see on tasuline, kuid saadaval on tasuta prooviversioon, mis on piiratud ainult esimese kĂŒmne kaadriga).

Ruumiline ĂŒleliigsus (sisemine prognoos)
Kui analĂŒĂŒsida iga kaadrit videos, avastame palju omavahel seotud piirkondi.

Vaadakem seda nÀidet. See stsenaarium koosneb peamiselt sinisest ja valgest vÀrvist.

See on I-kaader. Eelmisi kaadreid prognoosimiseks kasutada ei saa, kuid suudame seda siiski kokku suruda. Kodeerime punase bloki vĂ€ljatoomise. Kui vaatame selle naabritele, mĂ€rkame, et selle ĂŒmber on teatavad vĂ€rvilised kalduvused.

Eeldame, et pildis levivad vÀrvid vertikaalselt. See tÀhendab, et tundmatute pikslite vÀrvid sisaldavad naabrite vÀÀrtusi.

Selline prognoos vÔib osutuda vale. Just sellepÀrast tuleb rakendada seda meetodit (sisemine prognoos), ja seejÀrel veel lahutada reaalsed vÀÀrtused. See annab meile jÀÀkploki, mis toob kaasa palju kompaktsema maatriksi vÔrreldes originaaliga.

Kui soovite harjutada sisemiste prognoosidega, vÔite luua video makrobokside ja nende prognoosidega, kasutades ffmpeg. Selleks, et mÔista iga bloki vÀrvi tÀhendust, peate tutvuma ffmpeg dokumentatsiooniga.

VÔi vÔite kasutada Intel Video Pro Analyzerit (nagu ma eelnevalt mainisin, on tasuta prooviversioonis piirang esimestele 10 kaadrile, kuid seda mahu tÀitmiseks piisab esialgu).

Teine osa:
Allikas: habr.com



