Pjesa e dytë:
Çdo imazh raster mund të paraqitet si matricë dy dimensionale . Kur flitet për ngjyrat, ideja mund të avancojë duke e shqyrtuar imazhin simatricë tri dimensionale , në të cilën dimensionet shtesë përdoren për ruajtjen e të dhënave të secilës ngjyrë.Duke e konsideruar ngjyrën përfundimtare si një kombinim të ngjyrave të njohura (të kuqe, të gjelbër dhe blu), në matricën tonë tri dimensionale përcaktojmë tri plane: e para për ngjyrën e kuqe, e dyta për të gjelbrën dhe e fundit për të blunë.
Le të quajmë çdo pikë në këtë matricë piksel (element imazhi). Çdo piksel përmban informacion rreth intensitetit (zakonisht në formën e një vlere numerike) të secilës ngjyrë. Për shembull,
pikseli i kuq do të thotë se ai përmban 0 ngjyrë të gjelbër, 0 ngjyrë të blunë dhe maksimumin e kuq. Pikseli me ngjyrë rozë mund të formohet duke përdorur një kombinim të tre ngjyrave. Duke përdorur gamën numerike nga 0 deri në 255, pikseli rozë përcaktohet si E Kuq = 255 E Gjelbër = 192, E Blu = 203 dhe Artikulli është publikuar me mbështetje nga kompanisë EDISON..
Ne zhvillojmëaplikacione për videonb monitoring, video streaming regjistrimin e videos në dhomën e kirurgjisë. .
Përshkruar ngjyrat që përbëjnë imazhin, ka gjithashtu shumë modele të tjera. Për shembull, mund të përdoret një paletë indeksuese, e cila kërkon vetëm një bajt për të përfaqësuar secilin piksel, në vend të tre bajtëve që kërkohen kur përdoret modeli RGB. Në një model të tillë mund të përdoret një matricë 2D në vend të një matrice 3D për të përfaqësuar secilën ngjyrë. Kjo kursen memorie, por jep një gamë më të vogël ngjyrash.
RGB

Për shembull, shikoni këtë pamje më poshtë. Nga e para, fytyra është e ngjyrosur plotësisht. Të tjerat janë plane të kuqe, të gjelbra dhe blu (intensiteti i ngjyrave përkatëse është i treguar në shkallë gri).
Vërejmë se nuancat e kuqe në origjinal do të jenë në të njëjtat vende ku vërehen pjesët më të ndritshme të fytyrës së dytë. Ndërsa kontributi i ngjyrës blu mund të shihet kryesisht vetëm në sytë e Mario (fytyra e fundit) dhe elementët e rrobave të tij. Vërejtni se ku të tri planet e ngjyrave kanë kontribuar më pak (pjesët më të errëta të imazheve) - kjo është te moustaka e Mario.

Për të ruajtur intensitetin e secilës ngjyrë kërkohet një sasi e caktuar bitesh - kjo sasi quhet
thellësia e bitëve . Le të supozojmë se shpenzohen 8 bite (duke u bazuar në vlerën nga 0 deri në 255) për një plan ngjyror. Atëherë kemi një thellësi ngjyre prej 24 bitësh (8 bit * 3 plane R/G/B).Një tjetër pronë e imazhit është
rezolucioni , i cili përfaqëson numrin e pikseleve në një dimension. Shpesh shënohet sigjerësi × lartësi , siç tregohet në shembullin e imazhit më poshtë 4 nga 4.Një pronë tjetër me të cilën merremi kur punojmë me imazhe/video është

raporti i aspektit , i cili përshkruan marrëdhënien zakonore proporcionale ndërmjet gjerërisë dhe lartësisë së imazhit ose pikselit.Kur flitet për një film ose pamje që kanë dimensionin 16 me 9, zakonisht bëhet fjalë për
raportin e aspektit të ekranit DAR (— nga Display Aspect Ratio ). Megjithatë ndonjëherë mund të ketë forma të ndryshme të pikseve të veçanta - në këtë rast flasim përraportin e pikseve PAR (Pixel Aspect Ratio Display Aspect Ratio Për kujdesin e shtëpisë:).


DVD DAR 4 me 3 përputhet Megjithatë, rezolucioni real i DVD-së është 704×480, megjithatë ai ruan raportin e aspektit 4:3, pasi PAR ka vlerën 10:11 (704×10 / 480×11).
Dhe përfundimisht, mund të përcaktojmë
si një sekuencë të video kadrave në një periudhë n kohe , e cila mund të merret si një dimension shtesë. Dheatëherë - është frekuenca e kadrave ose numri i kadrave në sekondë ( n FPSFrames per Second Display Aspect Ratio Numri i bitëve në sekondë, e domosdoshme për shfaqjen e videos, është).

shpejtësia e transmetimit bitrate — bitrate = gjerësi * lartësi * thellësia e bitëve * frekuenca e kadrave.
Për shembull, për një video me 30 kadra në sekondë, 24 bits për piksel, rezolucioni 480×240 kërkon 82,944,000 bit në sekondë ose 82,944 Mbit/s (30x480x240x24) - por kjo është nëse nuk përdoret asnjë nga metodat e kompresimit.
Nëse shpejtësia e transmetimit
është pothuajse konstante , atëherë quhetshpejtësi e transmetimit konstante CBR (constant bit rate Display Aspect Ratio ). Por ajo mund të varihej, në këtë rast quhetshpejtësi e transmetimit e ndryshueshme VBR (variable bit rate Display Aspect Ratio Ky grafik tregon një VBR të kufizuar, kur shpenzohen jo shumë bite në rastin e një kadre tërësisht të errët.).
Fillimisht, inxhinierët zhvilluan një metodë për të dyfishuar frekuencën e perceptuar të kadrave të videodispaly pa përdorur bandë shtesë. Ky metodë njihet si

video interlaced video interlacing; primarily, it sends half of the screen in the first "frame" and the other half in the next "frame."
Currently, scene visualization mainly occurs using progressive scan technology. This is a method of displaying, storing, or transmitting moving images, where all lines of each frame are drawn sequentially.

Well then! Now we know how an image is represented digitally, how its colors are structured, and how many bits per second we consume to display video, whether the bitrate is constant (CBR) or variable (VBR). We understand the given resolution with a specified frame rate and have familiarized ourselves with many other terms, such as interlaced video, PAR, and some others.
Removing redundancy
It is known that uncompressed video cannot be used properly. An hour of video at 720p resolution and at 30 frames per second would take up 278 GB. We arrive at this value by multiplying 1280 x 720 x 24 x 30 x 3600 (width, height, bits per pixel, FPS, and duration in seconds).
Përdorimi lossless compression algorithms, such as DEFLATE (used in PKZIP, Gzip, and PNG), will not provide sufficient reduction in the required bandwidth. We must look for other ways to compress video.
For this, we can use the characteristics of our vision. We can differentiate brightness better than colors. Video is a set of sequential images that repeat over time. The differences between adjacent frames of the same scene are small. Moreover, each frame contains many areas that use the same (or similar) color.
Color, brightness, and our eyes
Our eyes are more sensitive to brightness than to color. You can verify this yourself by looking at this picture.

If you cannot see that the colors of the squares in the left half of the image A dhe B are actually the same, that is normal. Our brain makes us pay more attention to light and shadow rather than color. On the right side, there is a bridge of the same color between the marked squares — therefore we (i.e., our brain) easily determine that there is indeed the same color there.
Let’s break down (simplified) how our eyes work. The eye is a complex organ made up of many parts. However, we are most interested in the cones and rods. The eye contains about 120 million rods and 6 million cones.
Le të shqyrtojmë perceptimin e ngjyrës dhe ndriçimit si funksione të veçanta të pjesëve të caktuara të syrit (në të vërtetë, gjërat janë pak më të komplikuara, por ne do ta thjeshtojmë). Qelizat yndyrore, kryesisht, përgjigjen për ndriçimin, ndërsa qelizat konike përgjigjen për ngjyrën. Qelizat konike ndahen në tre lloje, në varësi të pigmentit të përmbajtur: S-qeliza (ngjyrë blu), M-qeliza (ngjyrë e gjelbër) dhe L-qeliza (ngjyrë e kuqe).
Duke qenë se kemi shumë më tepër qeliza yndyrore (ndriçimi) sesa qeliza konike (ngjyra), mund të nxirrni përfundimin se jemi më të aftë të dallojmë kalimet midis errësirës dhe dritës sesa ngjyrave.
Funksionet e ndjeshmërisë ndaj kontrastit
Kërkuesit e psikologjisë eksperimentale dhe shumë fushave të tjera kanë zhvilluar teorira të shumta mbi shikimin njerëzor. Njëra prej tyre quhet funksionet e ndjeshmërisë ndaj kontrastit. Ato lidhen me ndriçimin hapësinor dhe temporal. Në thelb, bëhet fjalë për sa ndryshime nevojiten para se vëzhguesi t’i vërejë ato. Vini re përdorimin e shumës së fjalës "funksion". Kjo është për shkak se ne mund të masim funksionet e ndjeshmërisë ndaj kontrastit jo vetëm për imazhe bardh e zi, por edhe për ato me ngjyra. Rezultatet e këtyre eksperimenteve tregojnë se në shumicën e rasteve sytë tanë janë më të ndjeshëm ndaj ndriçimit sesa ndaj ngjyrës.
Tani që dihet se jemi më të ndjeshëm ndaj ndriçimit të imazhit, mund të provokojmë të përdorim këtë fakt.
Modeli i ngjyrës
Ne disi e kuptuam se si të punojmë me imazhe me ngjyra përdorur skemën RGB. Ka edhe modele të tjera. Ekziston një model që ndan ndriçimin nga ngjyra dhe është i njohur si YCbCr. Me rastin, ka edhe modele të tjera që bëjnë këtë ndarje të ngjashme, por ne do të shqyrtojmë vetëm këtë.
Në këtë model ngjyrash Y — është përfaqësimi i ndriçimit, si dhe përdoren dy kanale ngjyrash: Cb (blu e ngopur) dhe Cr (i kuq i ngopur). YCbCr mund të merret nga RGB, ashtu siç është e mundur edhe kthimi i këtij transformimi. Duke përdorur këtë model, ne mund të krijojmë imazhe me ngjyrë të plotë, siç shihni më poshtë:

Transformimi midis YCbCr dhe RGB
Disa mund të kundërshtojnë: si është e mundur të arrihen të gjitha ngjyrat nëse nuk përdoret e gjelbra?
Për të përgjigjur në këtë pyetje, do të konvertojmë RGB në YCbCr. Do të përdorim koeficientët e pranuar në standardin BT.601, i cili rekomandohet nga ITU-R. Ky departament përcakton standardet për videon dixhitale. Për shembull: çfarë është 4K? Cila duhet të jetë frekuenca e fotove, rezolucioni, modeli i ngjyrave?
Së pari, do të llogarisim ndriçimin. Do të përdorim konstantat e propozuara nga ITU dhe do të zëvendësojmë vlerat RGB.
Y = 0.299R + 0.587G + 0.114B
Pasi marrim ndriçimin, do të ndajmë ngjyrën blu dhe atë të kuqe:
Cb = 0.564(B — Y)
Cr = 0.713(R — Y)
Dhe ne gjithashtu mund të konvertojmë prapë dhe madje të marrim të gjelbërin me ndihmën e YCbCr:
R = Y + 1.402Cr
B = Y + 1.772Cb
G = Y — 0.344Cb — 0.714Cr
Në përgjithësi, ekranet (monitorët, televizorët, ekranet etj.) përdorin vetëm modelin RGB. Por ky model mund të organizohet në mënyra të ndryshme:

Subdiskretizimi i ngjyrave
Me imazhin e paraqitur si një kombinim të ndriçimit dhe ngjyrës, ne mund të përdorim ndjeshmërinë më të lartë të sistemit vizual të njeriut ndaj ndriçimit sesa ndaj ngjyrës, nëse heqim informacionin në mënyrë selektive. Subdiscretizimi i ngjyrave është një metodë kodimi imazhesh, që përdor një rezolucion më të vogël për ngjyrën sesa për ndriçimin.

Sa është e pranueshme të ulet rezolucioni i ngjyrës?! Siç duket, tashmë ekzistojnë disa skema që përshkruajnë se si të trajtohet rezolucioni dhe bashkimi (Ngjyra përfundimtare = Y + Cb + Cr).
Këto skema njihet si sistemet e subdiscretizimit dhe shprehen si një raport 3:1 — a:x:y, i cili përcakton numrin e mostrave të sinjaleve të ndriçimit dhe ngjyrës.
a — referencë e mostrave horizontale (zakonisht e barabartë me 4)
x — numri i mostrave të ngjyrës në rreshtin e parë të pikselëve (rezolucioni horizontal në raport me a)
y — numri i ndryshimeve të mostrave të ngjyrës midis rreshtit të parë dhe të dytë të pikselëve.
Përjashtimi është 4:1:0, duke siguruar një mostër ngjyrash për çdo bllok të rezolucionit të ndriçimit 4 me 4.
Skemat e zakonshme të përdorura në kodekët modernë:
- 4:4:4 (pa subdiscretizim)
- 4:2:2
- 4:1:1
- 4:2:0
- 4:1:0
- 3:1:1
YCbCr 4:2:0 — shembuj të bashkimit
Këtu është një fragment i bashkuar i një imazhi duke përdorur YCbCr 4:2:0. Vini re se ne shpenzojmë vetëm 12 bit për pixel.
Kështu duket të njëjtin imazh, i koduar me llojet kryesore të subdiscretizimit të ngjyrave. Rreshti i parë është YCbCr përfundimtar, rreshti i poshtëm tregon rezolucionin e ngjyrave. Rezultatet janë mjaft të mirë, duke marrë parasysh humbjet e vogla në cilësi.

Kujto, ne shpallëm 278 GB hapësirë në disk për ruajtjen e një videoje një-orëshe me rezolucion 720p dhe 30 korniza në sekondë? Nëse përdorim YCbCr 4:2:0, atëherë kjo madhësi do të reduktohet në gjysmë — 139 GB. Akoma ka një distancë në rezultate të pranueshme.
Mund të merrni histogramin YCbCr me ndihmën e FFmpeg. Në këtë imazh, e bluaja mbizotëron mbi të kuqen, që është e dukshme në histogram.

Ngjyra, ndriçimi, gama e ngjyrave — video përmbledhëse
Rekomandohet të shihni këtë video shkatërruese. Aty shpjegohet se çfarë është ndriçimi, dhe në përgjithësi shtrohen të gjitha pyetjet mbi ë ndriçimin dhe ngjyrat.
Llojet e kornizave
Le të vazhdojmë. Në përpjekje për të eliminuar tepricën në kohë. Por fillimisht le të përcaktojmë disa terminologji themelore. Le të supozojmë se kemi një film me 30 korniza në sekondë, këtu janë 4 kornizat e para:

Ne mund të shohim shumë përsëritje në korniza: për shembull, sfondi blu, i pandryshuar nga korniza në kornizë. Për të zgjidhur këtë problem, ne mund ta klasifikojmë ato në mënyrë abstrakte si tre lloje kornizash.
I-korniza (Intro Frame)
I-korniza (korniza reference, korniza kyçe, korniza e brendshme) është autonome. Pa marrë parasysh se çfarë duhet të vizualizohet, I-korniza është, në thelb, një fotografi statike. Korniza e parë zakonisht është një I-kornizë, megjithatë ne do të shohim rregullisht I-korniza edhe mes kornizave që nuk janë fare të para.

P-korniza (Predicted Frame)
P-korniza (korniza e parashikuar) shfrytëzon faktin se pothuajse gjithmonë imazhi aktual mund të riprodhohet duke përdorur kornizën e mëparshme. Për shembull, në kornizën e dytë, ndryshimi i vetëm është një top që lëviz përpara. Ne mund ta marim kornizën 2 thjesht duke modifikuar pak kornizën 1, duke përdorur vetëm ndryshimin midis këtyre dy kornizave. Për të ndërtuar kornizën 2, referohemi në kornizën e saj paraprake 1.
← 
B-korniza (Bi-prediktiv Frame)
Si për lidhjet jo vetëm me të kaluarën, por edhe me kornizat e ardhshme për të siguruar një kompresim më të mirë?! Kjo është, në thelb, B-korniza (korniza me dy drejtime).
←
→ 
Përfundimi i ndërmjetëm
Këto tipe kadrash përdoren për të siguruar kompresionin më të mirë. Ne do të shpjegojmë se si ndodh kjo në seksionin vijues. Deri atëherë, le të theksojmë se I-kadri është më "i shtrenjtë" sa i përket memories, P-kadri është dukshëm më i lirë, ndërsa opsioni më i përballueshëm për video është B-kadri.

Të dhënat e tepërta temporale (parashikimi ndër-kadrov)
Le ta shqyrtojmë se cilat janë mundësitë tona për të minimizuar përsëritjet në kohë. Ky tip i tepërsisë do të zgjidhet me metoda parashikuese të ndërsjellta.
Do të mundohemi të shpenzojmë sa më pak bitë për të koduar sekuencat e kadrave 0 dhe 1.

Ne mund të realizojmë zbritjen, thjesht duke zbritur kadri 1 nga kadri 0. Marrim kadri 1, duke përdorur diferencën midis tij dhe kadrin e mëparshëm, duke koduar në fakt vetëm mbetjen që rezulton.

Por çfarë do të mendoja nëse do t'ju thoja se ekziston një metodë akoma më e mirë që përdor edhe më pak bitë?! Fillimisht, le të ndajmë kadri 0 në një rrjet të qartë, përbërë nga blloqe. Më pas do të përpiqemi të përputhim blloqet nga kadri 0 me kadri 1. Me fjalë të tjera, të vlerësojmë lëvizjen midis kadrave.
Nga Wikipedia — kompensimi i lëvizjes me blloqe
Kompensimi i lëvizjes me blloqe e ndan kadrin aktual në blloqe jo të mbivendosura dhe vektori i kompensimit të lëvizjes tregon origjinën e blloqeve (një keqkuptim i zakonshëm është se kadri i mëparshëm ndahet në blloqe të mbivendosura, dhe vektorët e kompensimit të lëvizjes tregojnë se ku shkojnë këto blloqe. Në të vërtetë, është e kundërta — analizohet jo kadri i mëparshëm, por kadri i ardhshëm, dhe zbulohet jo se ku lëvizin blloqet, por nga erdhën ato). Zakonisht blloqet origjinale mbivendosen në kadri origjinë. Disa algoritme të kompresimit të videos e ndërrtojnë kadrin aktuel nga pjesë të më shumë se një kadri të mëparshëm.

Gjatë procesit të vlerësimit shohim se topi u zhvendos nga (x=0, y=25) në (x=6, y=26), vlerat x dhe y përcaktojnë vektorin e lëvizjes. Një hap tjetër që mund të bëjmë për të kursyer bitë është të kodojmë vetëm diferencën midis vektorëve të lëvizjes midis pozita e fundit të bllokut dhe parashikimit, kështu që vektori përfundimtar i lëvizjes do të jetë (x=6-0=6, y=26-25=1).
Në një situatë reale, ky top do të ishte i ndarë në n blloqe, por kjo nuk e ndryshon kuptimin e çështjes.
Objektet në kadër lëvizin në tre dimensione, prandaj gjatë lëvizjes së topit ai mund të bëhet vizualisht më i vogël (o më i madh, nëse lëviz në drejtim të spektatorit). Është normale që të mos ketë një përputhje perfekte midis blloqeve. Këtu është një pamje e kombinuar e vlerësimit tonë dhe imazhit real.

Por shohim që kur aplikojmë vlerësimin e lëvizjes, të dhënat për kodim janë dukshëm më të pakta se kur përdorim metodën më të thjeshtë të llogaritjes së diferencës midis kadrave.

Si do të dukej kompensimi i lëvizjes në praktikë
Kjo metodë aplikohet menjëherë për të gjithë blloqet. Shpesh, topi ynë hipotetik që lëviz do të ndahet menjëherë në disa blloqe.

Mund të provoni këto koncepte vetë, duke përdorur .
Për të parë vektorët e lëvizjes mund të krijoni një video me parashikimin e jashtëm përmes .

Gjithashtu mund të përdorni (ai është me pagesë, por ka një version provues falas që është i kufizuar vetëm në dhjetë kadrin e parë).

Të dhënat e tepërta hapësinore (parashikimi i brendshëm)
Nëse analizojmë çdo kadër në video, do të zbulonim një numër të madh rajonesh të lidhura.

Le të shohim këtë shembull. Kjo skenë përbëhet kryesisht nga ngjyrat blu dhe të bardha.

Ky është një I-kadër. Nuk mund të marrim kadrin e mëparshëm për parashikim, por mund ta kompresojmë. Do të kodojmë veçimin e bllokut të kuq. Nëse shohim fqinjët e tij, vëmë re se rreth tij ka disa tendenca ngjyrash.

Le të supozojmë se ngjyrat në kadër përhapen në mënyrë vertikale. Çfarë do të thotë se ngjyrat e pikselëve të panjohur do të kenë vlera të fqinjëve të tij.

Ky parashikim ndoshta mund të jetë i pasaktë. Pikërisht për këtë arsye është e nevojshme të aplikohet ky metodë (parashikimi i brendshëm), dhe pastaj të hiqen vlerat reale. Kjo do të na japë një bllok mbetje, që do të çonte në një matrice shumë më të kompresuar krahasuar me origjinalin.

Nëse dëshoni të praktikoni me parashikime të brendshme, mund të krijoni një video me makroblloqe dhe parashikimet e tyre me ndihmën e ffmpeg. Për të kuptuar kuptimin e çdo ngjyre të bllokut do t'ju duhet të njiheni me dokumentacionin e ffmpeg.

Ose mund të përdorni Intel Video Pro Analyzer (siç e përmenda më lart, në versionin provues falas ka një kufizim për dhjetë kadrin e parë, por ajo do t'ju mjaftojë për fillimet tuaja).

Pjesa e dytë:
Burimi: habr.com



