Ajna rastrumo bildo povas esti reprezentita en la formo dudimensia matrico. Kiam temas pri koloroj, la ideo povas disvolviĝi rigardante bildon kiel tridimensia matrico, en kiu kromaj dimensioj estas uzataj por konservi datumojn por ĉiu el la koloroj.
Se ni konsideras la finan koloron kiel kombinaĵon de la tn. primaraj koloroj (ruĝa, verda kaj blua), en nia tridimensia matrico ni difinas tri ebenojn: la unua por ruĝa, la dua por verda kaj la lasta por blua.
Ni nomos ĉiun punkton en ĉi tiu matrico pikselo (bildelemento). Ĉiu pikselo enhavas informojn pri la intenseco (kutime kiel nombra valoro) de ĉiu koloro. Ekzemple, ruĝa pikselo signifas, ke ĝi enhavas 0 verdan, 0 bluan kaj maksimuman ruĝan. Rozkolora pikselo povas esti formita uzante kombinaĵon de tri koloroj. Uzante numeran gamon de 0 ĝis 255, rozkolora pikselo estas difinita kiel Ruĝa = 255, Verda = 192 и Blua = 203.
Ĉi tiu artikolo estis publikigita kun la subteno de EDISON.
Estas multaj aliaj modeloj por reprezenti la kolorojn, kiuj konsistigas bildon. Ekzemple, vi povas uzi indeksitan paletron, kiu postulas nur unu bajton por reprezenti ĉiun pikselon, anstataŭ la tri necesaj kiam vi uzas la RGB-modelon. En tia modelo, eblas uzi 2D-matricon anstataŭ 3D-matrico por reprezenti ĉiun koloron. Ĉi tio ŝparas memoron, sed donas pli malgrandan koloran gamon.
RVB
Ekzemple, rigardu ĉi tiun bildon sube. La unua vizaĝo estas tute pentrita. La aliaj estas la ruĝaj, verdaj kaj bluaj ebenoj (la intensecoj de la respondaj koloroj estas montritaj en grizskalo).
Ni vidas, ke la ruĝaj nuancoj en la originalo estos en la samaj lokoj, kie la plej brilaj partoj de la dua vizaĝo estas observataj. Dum la kontribuo de bluo ĉefe videblas nur en la okuloj de Mario (lasta vizaĝo) kaj elementoj de lia vestaĵo. Rimarku kie ĉiuj tri koloraj ebenoj malplej kontribuas (la plej malhelaj partoj de la bildoj) - la lipharoj de Mario.
Por konservi la intensecon de ĉiu koloro, necesas certa nombro da bitoj - ĉi tiu kvanto nomiĝas iom profundo. Ni diru, ke 8 bitoj estas elspezitaj (surbaze de valoro de 0 ĝis 255) per kolorplano. Tiam ni havas kolorprofundon de 24 bitoj (8 bitoj * 3 R/G/B ebenoj).
Alia propraĵo de bildo estas rezolucio, kiu estas la nombro da pikseloj en unu dimensio. Ofte indikita kiel larĝo × alto, kiel en la 4 per 4 ekzemplobildo malsupre.
Alia propraĵo, kiun ni traktas kiam laboras kun bildoj/vidbendoj, estas bildformato, priskribante la normalan proporcian rilaton inter la larĝo kaj alteco de bildo aŭ pikselo.
Kiam ili diras, ke certa filmo aŭ bildo estas 16 per 9 grandeco, ili kutime signifas montri bildformato (DAR - de Montru Aspektproporcion). Tamen, foje povas esti malsamaj formoj de individuaj pikseloj - en ĉi tiu kazo ni parolas piksela proporcio (BY - de Piksela Bildformato).
Noto al la gastigantino: DVD соответствует DAR 4 ĝis 3
Kvankam la fakta DVD-rezolucio estas 704x480, ĝi daŭre konservas bildformaton 4:3 ĉar la PAR estas 10:11 (704x10 / 480x11).
Kaj finfine, ni povas determini видео kiel sekvenco de n kadroj por la periodo tempo, kiu povas esti konsiderata aldona dimensio. A n tiam estas la framfrekvenco aŭ la nombro da kadroj je sekundo (FPS - de Kadroj po Sekundo).
La nombro da bitoj por sekundo necesaj por montri videon estas ĝia transdono rapido - bitrate.
bitrate = larĝo * alteco * bitprofundo * kadroj por sekundo
Ekzemple, 30 fps, 24 bps, 480x240 video postulus 82,944,000 bps aŭ 82,944 Mbps (30x480x240x24) - sed tio estas se neniu kunprema metodo estas uzata.
Se la transiga rapido preskaŭ konstanta, tiam ĝi nomiĝas konstanta transdona rapido (CBR - de konstanta bitrapideco). Sed ĝi ankaŭ povas varii, ĉi-kaze ĝi nomiĝas varia baudrapideco (VBR - de ŝanĝiĝema bitrapideco).
Ĉi tiu grafikaĵo montras limigitan VBR, kie ne tro da bitoj estas malŝparitaj en la kazo de tute malhela kadro.
Inĝenieroj komence evoluigis metodon por duobligi la perceptitan framfrekvencon de videekrano sen uzi kroman bendolarĝon. Ĉi tiu metodo estas konata kiel interplektita video; Esence, ĝi sendas duonon de la ekrano en la unua "kadro" kaj la alian duonon en la sekva "kadro".
Nuntempe, scenoj estas plejparte bildigitaj uzante progresemaj skanaj teknologioj. Ĝi estas metodo por montri, stoki aŭ transdoni movajn bildojn, en kiuj ĉiuj linioj de ĉiu kadro estas sinsekve desegnitaj.
Nu! Nun ni konscias kiel bildo estas reprezentita ciferece, kiel ĝiaj koloroj estas aranĝitaj, kiom da bitoj por sekundo ni elspezas por montri filmeton, se la bitrapideco estas konstanta (CBR) aŭ varia (VBR). Ni scias pri difinita rezolucio uzante antaŭfiksitan framfrekvencon, ni konas multajn aliajn terminojn, kiel interplektita video, PAR kaj iuj aliaj.
Forigante redundon
Oni scias, ke video sen kunpremo ne povas esti uzata normale. Hor-longa video kun 720p rezolucio kaj 30 kadroj sekundo okupus 278 GB. Ni alvenas al ĉi tiu valoro multiplikante 1280 x 720 x 24 x 30 x 3600 (larĝo, alteco, bitoj por pikselo, FPS kaj tempo en sekundoj).
Uzo senperdaj kunpremaj algoritmoj, kiel DEFLATE (uzata en PKZIP, Gzip kaj PNG), ne sufiĉe reduktos la bezonatan bendolarĝon. Ni devas serĉi aliajn manierojn kunpremi videon.
Por fari tion, vi povas uzi la funkciojn de nia vizio. Ni pli bone distingas brilecon ol koloron. Vidbendo estas serio de sinsekvaj bildoj, kiuj ripetiĝas laŭlonge de la tempo. Estas malgrandaj diferencoj inter apudaj kadroj de la sama sceno. Aldone, ĉiu kadro enhavas multajn areojn uzante la saman (aŭ similan) koloron.
Koloro, brilo kaj niaj okuloj
Niaj okuloj estas pli sentemaj al brilo ol al koloro. Vi povas vidi ĉi tion mem rigardante ĉi tiun bildon.
Se vi ne vidas, ke maldekstre duono de la bildo la koloroj de la kvadratoj A и B estas fakte la samaj, tiam tio estas normala. Nia cerbo devigas nin atenti pli ol lumon kaj ombron ol koloron. Sur la dekstra flanko inter la indikitaj kvadratoj estas jumper de la sama koloro - do ni (t.e. nia cerbo) facile determinas ke, fakte, ili estas la sama koloro.
Ni rigardu (en simpligita maniero) kiel funkcias niaj okuloj. La okulo estas kompleksa organo konsistanta el multaj partoj. Tamen ni plej interesiĝas pri konusoj kaj bastonoj. La okulo enhavas ĉirkaŭ 120 milionojn da bastonoj kaj 6 milionojn da konusoj.
Ni konsideru la percepton de koloro kaj brilo kiel apartajn funkciojn de iuj partoj de la okulo (fakte ĉio estas iom pli komplika, sed ni simpligos ĝin). Bastonĉeloj respondecas ĉefe pri brileco, dum konusĉeloj respondecas pri koloro. Konusoj estas dividitaj en tri tipojn, depende de la pigmento kiun ili enhavas: S-konusoj (bluaj), M-konusoj (verdaj), kaj L-konusoj (ruĝaj).
Ĉar ni havas multe pli da bastonoj (brileco) ol konusoj (koloro), ni povas konkludi, ke ni pli kapablas distingi transirojn inter mallumo kaj lumo ol koloroj.
Karakterizaĵoj de Kontrasto-Sentemo
Esploristoj en eksperimentpsikologio kaj multaj aliaj kampoj evoluigis multajn teoriojn de homa vizio. Kaj unu el ili nomiĝas funkcioj de kontraŭsentemo. Ili rilatas al spaca kaj tempa lumigado. Resume, temas pri kiom da ŝanĝoj necesas antaŭ ol observanto ilin rimarkas. Notu la pluralon de la vorto "funkcio". Ĉi tio ŝuldiĝas al la fakto, ke ni povas mezuri kontrastajn sentemajn funkciojn ne nur por nigraj kaj blankaj bildoj, sed ankaŭ por koloraj. La rezultoj de ĉi tiuj eksperimentoj montras, ke en la plej multaj kazoj niaj okuloj estas pli sentemaj al brilo ol al koloro.
Ĉar ni scias, ke ni estas pli sentemaj al bilda brilo, ni povas provi uzi ĉi tiun fakton.
Kolora modelo
Ni iom eksciis kiel labori kun koloraj bildoj uzante la RGB-skemon. Estas ankaŭ aliaj modeloj. Estas modelo, kiu apartigas lumecon de kromo kaj ĝi estas konata kiel YCbCr. Parenteze, ekzistas aliaj modeloj, kiuj faras similan dividon, sed ni konsideros nur ĉi tiun.
En ĉi tiu kolormodelo Y estas reprezentado de brileco, kaj ankaŭ uzas du kolorkanalojn: Cb (riĉa bluo) kaj Cr (riĉa ruĝa). YCbCr povas esti derivita de RGB, kaj la inversa konvertiĝo ankaŭ estas ebla. Uzante ĉi tiun modelon ni povas krei plenkolorajn bildojn kiel ni vidas sube:
Konverti inter YCbCr kaj RGB
Iu kontraŭos: kiel eblas akiri ĉiujn kolorojn, se verdo ne estas uzata?
Por respondi ĉi tiun demandon, ni konvertu RGB al YCbCr. Ni uzu la koeficientojn adoptitajn en la normo BT.601, kiu estis rekomendita de la unuo ITU-R. Ĉi tiu dividado fiksas la normojn por cifereca vidbendo. Ekzemple: kio estas 4K? Kio devus esti la framfrekvenco, rezolucio, kolormodelo?
Unue ni kalkulu la brilecon. Ni uzu la konstantojn proponitajn de la ITU kaj anstataŭigu la RGB-valorojn.
Y = 0.299R + 0.587G + 0.114B
Post kiam ni havas la brilon, ni apartigos la bluajn kaj ruĝajn kolorojn:
Cb = 0.564(B - Y)
Cr = 0.713(R - Y)
Kaj ni ankaŭ povas konverti reen kaj eĉ verdiĝi uzante YCbCr:
R = Y + 1.402Cr
B = Y + 1.772Cb
G = Y - 0.344Cb - 0.714Cr
Tipe, ekranoj (monitoroj, televidiloj, ekranoj, ktp.) uzas nur la RGB-modelon. Sed ĉi tiu modelo povas esti organizita en malsamaj manieroj:
Kolorsubspecimenado
Kun bildo reprezentita kiel kombinaĵo de lumeco kaj krominance, ni povas ekspluati la pli grandan sentemon de la homa vida sistemo al lumeco ol al krominance selekteme forigante informojn. Kroma subspecimenigo estas metodo de ĉifrado de bildoj uzanta malpli rezolucion por kromo ol por lumeco.
Kiom estas permesate redukti la kolorrezolucion?! Montriĝas, ke jam ekzistas iuj diagramoj, kiuj priskribas kiel trakti rezolucion kaj kunfandigon (Rezulta Koloro = Y + Cb + Cr).
Ĉi tiuj skemoj estas konataj kiel subspecimena sistemoj kaj estas esprimitaj kiel triobla rilatumo - a:x:y, kiu determinas la nombron da provaĵoj de lumeco kaj kolordiferencsignaloj.
a - horizontala specimena normo (kutime egala al 4) x - nombro da kromaspecimenoj en la unua vico de pikseloj (horizontala rezolucio relative al a) y — la nombro da ŝanĝoj en kromaj specimenoj inter la unua kaj dua vicoj de pikseloj.
La escepto estas 4:1:0, disponigante unu kroman provaĵon en ĉiu 4-post-4-luma rezoluciobloko.
Oftaj kabaloj uzitaj en modernaj kodekoj:
4:4:4 (neniu subspecimeno)
4:2:2
4:1:1
4:2:0
4:1:0
3:1:1
YCbCr 4:2:0 - fuzia ekzemplo
Jen kunfandita bildo uzante YCbCr 4:2:0. Notu, ke ni elspezas nur 12 bitojn por pikselo.
Jen kiel aspektas la sama bildo, ĉifrita per la ĉefaj specoj de kolora subspecimenado. La unua vico estas la fina YCbCr, la malsupra vico montras la kroman rezolucion. Tre decaj rezultoj, konsiderante la iometan perdon de kvalito.
Ĉu vi memoras, kiam ni kalkulis 278 GB da stokado por stoki hor-longan videodosieron je 720p rezolucio kaj 30 kadroj sekundo? Se ni uzas YCbCr 4:2:0, tiam ĉi tiu grandeco estos reduktita je duono - 139 GB. Ĝis nun ĝi estas ankoraŭ malproksime de akceptebla rezulto.
Vi povas akiri la YCbCr-histogramon mem uzante FFmpeg. En ĉi tiu bildo, bluo dominas super ruĝa, kiu estas klare videbla en la histogramo mem.
Koloro, brileco, kolora gamo - videorecenzo
Ni rekomendas spekti ĉi tiun mirindan videon. Ĝi klarigas kio estas brilo, kaj ĝenerale ĉiuj punktoj estas punktitaj ё pri brilo kaj koloro.
Kadraj Tipoj
Ni pluiru. Ni provu forigi la temporedundon. Sed unue, ni difinu iun bazan terminologion. Ni diru, ke ni havas filmon kun 30 kadroj por sekundo, jen ĝiaj unuaj 4 kadroj:
Ni povas vidi multe da ripetado en la kadroj: ekzemple, blua fono, kiu ne ŝanĝiĝas de kadro al kadro. Por solvi ĉi tiun problemon, ni povas abstrakte klasifiki ilin en tri specojn de kadroj.
I-kadro (Intro Kadro)
I-kadro (referenca kadro, ŝlosila kadro, interna kadro) estas memstara. Sendepende de tio, kion vi volas bildigi, I-kadro estas esence statika foto. La unua kadro estas kutime I-kadro, sed ni regule observos I-kadron eĉ inter ne la unuaj kadroj.
P-kadro (Predaktita Kadro)
P-kadro (antaŭdira kadro) ekspluatas la fakton, ke preskaŭ ĉiam la nuna bildo povas esti reproduktita per la antaŭa kadro. Ekzemple, en la dua kadro la nura ŝanĝo estas la pilko moviĝanta antaŭen. Ni povas akiri kadron 2 simple iomete modifante kadron 1, nur uzante la diferencon inter ĉi tiuj kadroj. Por konstrui kadron 2, ni rilatas al la antaŭa kadro 1.
←
B-kadro (Bi-prognoza Kadro)
Kio pri ligiloj ne nur al pasintaj, sed ankaŭ al estontaj kadroj por disponigi eĉ pli bonan kunpremadon?! Ĉi tio estas esence B-kadro (dudirekta kadro).
← →
Meza retiriĝo
Ĉi tiuj kadrospecoj estas uzataj por disponigi la plej bonan eblan kunpremadon. Ni rigardos kiel tio okazas en la sekva sekcio. Nuntempe, ni rimarku, ke la plej "multekosta" laŭ konsumita memoro estas la I-kadro, la P-kadro estas rimarkeble pli malmultekosta, sed la plej profita elekto por video estas la B-kadro.
Tempora redundo (inter-kadra prognozo)
Ni rigardu, kiajn eblojn ni havas por minimumigi ripeton laŭlonge de la tempo. Ni povas solvi ĉi tiun tipon de redundo uzante kruc-antaŭdirajn metodojn.
Ni provos elspezi kiel eble plej malmultajn bitojn por kodi sekvencon de kadroj 0 kaj 1.
Ni povas produkti subtraho, ni simple subtrahas kadron 1 de kadro 0. Ni ricevas kadron 1, nur uzas la diferencon inter ĝi kaj la antaŭa kadro, fakte ni nur ĉifras la rezultan reston.
Sed kio se mi dirus al vi, ke ekzistas eĉ pli bona metodo, kiu uzas eĉ malpli da pecoj?! Unue, ni rompu kadron 0 en klaran kradon konsistantan el blokoj. Kaj tiam ni provos kongrui la blokojn de kadro 0 kun kadro 1. Alivorte, ni taksos la movadon inter kadroj.
El Vikipedio - bloko moviĝo kompenso
Blokmoviĝkompenso dividas la nunan kadron en ne-imbrikitajn blokojn kaj la moviĝkompensvektoro raportas la originon de la blokoj (ofta miskompreniĝo estas tio antaŭa la kadro estas dividita en ne-imbrikitajn blokojn, kaj moviĝ-kompensvektoroj rakontas kien tiuj blokoj iras. Sed fakte, estas inverse - ne la antaŭa kadro estas analizita, sed la sekva; ne estas klare, kien la blokoj moviĝas, sed de kie ili venis). Tipe la fontblokoj interkovras en la fontkadro. Kelkaj videokunpremaj algoritmoj kunigas la nunan kadron de partoj de eĉ ne unu, sed pluraj antaŭe elsenditaj kadroj.
Dum la taksadprocezo, ni vidas ke la pilko moviĝis de (x= 0, y=25) al (x= 6, y=26), valoroj x и y determini la movvektoron. Alia paŝo, kiun ni povas fari por konservi bitojn, estas kodi nur la diferencon de movvektoroj inter la lasta blokpozicio kaj la antaŭvidita, do la fina movvektoro estos (x=6-0=6, y=26-25=1). ).
En reala situacio, ĉi tiu pilko estus dividita en n blokoj, sed tio ne ŝanĝas la esencon de la afero.
Objektoj en la kadro moviĝas en tri dimensioj, do kiam la pilko moviĝas, ĝi povas iĝi vide pli malgranda (aŭ pli granda se ĝi moviĝas direkte al la spektanto). Estas normale, ke ne estos perfekta kongruo inter blokoj. Jen kombinita vido de nia takso kaj la reala bildo.
Sed ni vidas, ke kiam ni uzas movtakson, estas rimarkeble malpli da datumoj por kodigo ol kiam oni uzas pli simplan metodon de kalkulo de la delto inter kadroj.
Kia aspektus reala movkompenso
Ĉi tiu tekniko estas aplikata al ĉiuj blokoj samtempe. Ofte nia kondiĉa movanta pilko estos dividita en plurajn blokojn samtempe.
Vi povas mem kompreni ĉi tiujn konceptojn uzante Jupitero.
Por vidi movajn vektorojn, vi povas krei eksteran prognozan videon uzante ffmpeg.
Vi ankaŭ povas uzi Intel Video Pro Analizilo (ĝi estas pagita, sed estas senpaga provo, kiu estas limigita nur al la unuaj dek kadroj).
Spaca redundo (interna prognozo)
Se ni analizas ĉiun kadron en video, ni trovos multajn interligitajn areojn.
Ni trairu ĉi tiun ekzemplon. Ĉi tiu sceno plejparte konsistas el bluaj kaj blankaj koloroj.
Ĉi tio estas I-kadro. Ni ne povas preni antaŭajn kadrojn por antaŭdiro, sed ni povas kunpremi ĝin. Ni kodu la elekton de la ruĝa bloko. Se ni rigardas ĝiajn najbarojn, ni rimarkas, ke estas iuj koloraj tendencoj ĉirkaŭ ĝi.
Ni supozas, ke koloroj disvastiĝas vertikale en la kadro. Kio signifas, ke la koloro de la nekonataj pikseloj enhavos la valorojn de siaj najbaroj.
Tia prognozo povas montriĝi malĝusta. Estas pro tio, ke vi devas apliki ĉi tiun metodon (interna prognozo), kaj poste subtrahi la realajn valorojn. Ĉi tio donos al ni restan blokon, kiu rezultigos multe pli kunpremitan matricon kompare kun la originalo.
Se vi volas praktiki kun internaj prognozoj, vi povas krei videon de makroblokoj kaj iliaj antaŭdiroj uzante ffmpeg. Por kompreni la signifon de ĉiu blokkoloro, vi devos legi la ffmpeg-dokumentadon.
Aŭ vi povas uzi Intel Video Pro Analyzer (kiel mi menciis supre, la senpaga prova versio estas limigita al la unuaj 10 kadroj, sed ĉi tio sufiĉos por vi komence).