Ogni raster immagine pò esse rapprisintatu in a forma matrice bidimensionale. Quandu si tratta di culori, l'idea pò esse sviluppata fighjendu una maghjina cum'è matrice tridimensionale, in quale dimensioni supplementari sò aduprate per almacenà dati per ognunu di i culori.
Se cunsideremu u culore finali cum'è una cumminazione di u cusì chjamatu. culori primari (russu, verde è turchinu), in a nostra matrice tridimensionale definiscenu trè piani: u primu per u rossu, u sicondu per u verde è l'ultimu per u turchinu.
Chjameremu ogni puntu in questa matrice un pixel (elementu di l'imaghjini). Ogni pixel cuntene infurmazione nantu à l'intensità (di solitu cum'è un valore numericu) di ogni culore. Per esempiu, pixel rossu significa chì cuntene 0 verdi, 0 blu è rossi massimu. Pixel rosa pò esse furmatu cù una cumminazzioni di trè culori. Utilizendu un intervallu numericu da 0 à 255, un pixel rosa hè definitu cum'è Rossu = 255, Verde = 192 и Blu = 203.
Questu articulu hè statu publicatu cù u sustegnu di EDISON.
Modi alternattivi per codificà una maghjina di culore
Ci hè parechje altre mudelli per rapprisintà i culori chì custituiscenu una maghjina. Per esempiu, pudete aduprà una paleta indexata, chì richiede solu un byte per rapprisintà ogni pixel, invece di i trè necessarii quandu si usa u mudellu RGB. In un tali mudellu, hè pussibule aduprà una matrice 2D invece di una matrice 3D per rapprisintà ogni culore. Questu salva a memoria, ma dà una gamma di culori più chjuca.
RGB
Per esempiu, fate un ochju à sta stampa sottu. A prima faccia hè cumplitamenti dipinta. L'altri sò i piani rossi, verdi è blu (l'intensità di i culori currispondenti sò mostrati in scala di grisa).
Avemu vistu chì i sfumaturi di rossu in l'uriginale seranu in i stessi lochi induve i più brillanti di a seconda faccia sò osservati. Mentre chì a cuntribuzione di u turchinu pò esse vistu principarmenti solu in l'ochji di Mario (l'ultima faccia) è elementi di a so robba. Avvisu induve tutti i trè piani di culore cuntribuiscenu u minimu (a parte più scura di l'imaghjini) - u mustache di Mario.
Per almacenà l'intensità di ogni culore, un certu numaru di bit hè necessariu - sta quantità hè chjamata prufundità di pocu. Diciamu chì 8 bit sò spesi (basatu nantu à un valore da 0 à 255) per pianu di culore. Allora avemu una prufundità di culore di 24 bits (8 bits * 3 piani R / G / B).
Una altra pruprietà di l'imaghjini hè risoluzione, chì hè u numeru di pixel in una dimensione. Spessu denotatu cum'è larghezza × altezza, cum'è in l'esempiu 4 per 4 quì sottu.
Un'altra pruprietà chì avemu trattatu quandu u travagliu cù l'imaghjini / video hè inquadramentu d'aspettu, chì descrive a relazione proporzionale normale trà a larghezza è l'altezza di una maghjina o pixel.
Quandu dicenu chì un certu filmu o stampa hè 16 per 9 in grandezza, di solitu significanu mostra u rapportu d'aspettu (BUT - da Mostra u rapportu d'aspettu). Tuttavia, qualchì volta ci ponu esse diverse forme di pixel individuali - in questu casu parlemu rapportu di pixel (PAR - da Rapportu d'aspettu di pixel).
Nota à l'hostess: DVD соответствует DAR 4 à 3
Ancu s'è a risoluzione DVD attuale hè 704x480, mantene sempre un rapportu d'aspettu 4: 3 perchè u PAR hè 10:11 (704x10 / 480x11).
È infine, pudemu determinà видео cum'è una sequenza di n frames per u periodu di u tempu, chì pò esse cunsideratu una dimensione supplementaria. A n allora hè a freccia di fotogrammi o u numeru di fotogrammi per seconda (FPS - da Frames per Secondu).
U numeru di bit per seconda necessariu per vede un video hè u so velocità di trasmissione - bitrate.
bitrate = larghezza * altezza * prufundità di bit * frames per seconda
Per esempiu, un video di 30 fps, 24 bps, 480x240 necessitava 82,944,000 bps o 82,944 Mbps (30x480x240x24) - ma questu hè se ùn hè micca utilizatu un metudu di compressione.
Se a velocità di trasferimentu quasi custanti, allora si chjama vitezza di trasmissione custanti (cbr - da velocità di bit constante). Ma pò ancu varià, in questu casu hè chjamatu baud rate variabile (VBR - da velocità di bit variabile).
Stu graficu mostra un VBR limitatu, induve ùn sò micca troppu bits perditi in u casu di un quadru completamente scuru.
L'ingegneri hà sviluppatu inizialmente un metudu per duppià a freccia di fotogramma percepita di una visualizazione video senza aduprà larghezza di banda supplementaria. Stu metudu hè cunnisciutu cum'è video intrecciatu; In fondu, manda a mità di u screnu in u primu "frame" è l'altra mità in u prossimu "frame".
Attualmente, i sceni sò principalmente resi cù l'usu tecnulugia di scanning progressiva. Hè un metudu di visualizà, almacenà o trasmette l'imaghjini in muvimentu in quale tutte e linee di ogni quadru sò tracciate in sequenza.
Ebbè ! Avà sapemu cumu una maghjina hè rapprisintata digitalmente, cumu si sò disposti i so culori, quanti bits per seconda passemu per vede u video, se u bit rate hè constante (CBR) o variabile (VBR). Sapemu di una risuluzione determinata utilizendu una freccia di fotogramma data, avemu familiarizatu cù assai altri termini, cum'è video interlaced, PAR è alcuni altri.
Eliminazione di a redundanza
Hè cunnisciutu chì u video senza cumpressione ùn pò esse usatu nurmalmente. Un video d'una ora à una risoluzione di 720p è 30 frames per seconda piglià 278 GB. Arrivemu à stu valore multiplicendu 1280 x 720 x 24 x 30 x 3600 (larghezza, altezza, bits per pixel, FPS è tempu in seconde).
Usu algoritmi di cumpressione senza perdita, cum'è DEFLATE (usatu in PKZIP, Gzip è PNG), ùn riducerà micca abbastanza a larghezza di banda necessaria. Avemu da circà altre manere di cumpressione video.
Per fà questu, pudete aduprà e caratteristiche di a nostra visione. Semu megliu à distingue a luminosità di u culore. Un video hè una seria d'imaghjini sequenziali chì si repite in u tempu. Ci hè una piccula differenza trà i frames adiacenti di a listessa scena. Inoltre, ogni quadru cuntene assai spazii chì utilizanu u listessu culore (o simile).
Culore, luminosità è i nostri ochji
I nostri ochji sò più sensibili à a luminosità cà à u culore. Pudete vede questu per voi stessu fighjendu sta stampa.
Se ùn vede micca chì nantu à a mità manca di l'imaghjini i culori di i quadrati A и B sò veramente listessi, allora hè normale. U nostru cervellu ci obbliga à prestà più attenzione à a luce è l'ombra piuttostu chè à u culore. À u latu drittu trà i quadrati designati ci hè un jumper di u listessu culore - cusì noi (vale à dì u nostru cervu) determina facilmente chì, in fattu, sò u listessu culore.
Fighjemu (in modu simplificatu) cumu travaglianu i nostri ochji. L'ochju hè un organu cumplessu custituitu di parechje parte. In ogni casu, simu più interessate in cuni è bastone. L'ochju cuntene circa 120 milioni di bastoncini è 6 milioni di coni.
Cunsideremu a percepzione di u culore è a luminosità cum'è funzioni separati di certi parti di l'ochju (in fatti, tuttu hè un pocu più cumplicatu, ma simplificàremu). E cellule di bastone sò principarmenti rispunsevuli di a luminosità, mentre chì e cellule di cune sò rispunsevuli di u culore. I cuni sò spartuti in trè tippi, secondu u pigmentu chì cuntenenu: S-cones (blu), M-cones (verde) è L-cones (rossu).
Siccomu avemu assai più bastone (luminosità) chì cuni (culore), pudemu cuncludi chì simu più capaci di distinguiri transizzioni trà u scuru è u lume chì i culori.
Funzioni di sensibilità à u cuntrastu
I ricercatori in a psiculugia sperimentale è parechji altri campi anu sviluppatu assai teorii di a visione umana. È unu di elli hè chjamatu funzioni di sensibilità di cuntrastu. Sò ligati à l'illuminazione spaziale è temporale. In breve, si tratta di quanti cambiamenti sò necessarii prima chì un observatore li nota. Nota u plurale di a parolla "funzione". Questu hè duvuta à u fattu chì pudemu misurà e funzioni di sensibilità di cuntrastu micca solu per l'imaghjini in biancu è biancu, ma ancu per quelli di culore. I risultati di sti esperimenti mostranu chì in a maiò parte di i casi i nostri ochji sò più sensittivi à a luminosità cà à u culore.
Siccomu sapemu chì simu più sensittivi à a luminosità di l'imaghjini, pudemu pruvà à utilizà stu fattu.
Modellu di culore
Avemu capitu un pocu cumu travaglià cù l'imaghjini di culore cù u schema RGB. Ci sò ancu altri mudelli. Ci hè un mudellu chì separa a luminanza da a croma è hè cunnisciutu cum'è YCbCr. In modu, ci sò altri mudelli chì facenu una divisione simili, ma avemu da cunsiderà solu questu.
In questu mudellu di culore Y hè una rapprisintazioni di a luminosità, è usa ancu dui canali di culore: Cb (blu riccu) è Cr (rossu riccu). YCbCr pò esse derivati da RGB, è a cunversione inversa hè ancu pussibule. Aduprendu stu mudellu pudemu creà l'imaghjini di culore cum'è vedemu quì sottu:
Cunvertisce trà YCbCr è RGB
Qualchissia s'oppone: cumu hè pussibule di ottene tutti i culori se u verde ùn hè micca usatu?
Per risponde à sta quistione, cunvertisce RGB à YCbCr. Utilizemu i coefficienti aduttati in u standard BT.601, chì era cunsigliatu da l'unità ITU-R. Questa divisione stabilisce i standard per u video digitale. Per esempiu: chì hè 4K? Chì duverebbe esse a freccia di quadru, a risoluzione, u mudellu di culore?
Prima, calculemu a luminosità. Utilizemu i custanti pruposti da l'ITU è rimpiazzà i valori RGB.
Y = 0.299R + 0.587G + 0.114B
Dopu avè a luminosità, separemu i culori blu è rossi:
Cb = 0.564 (B - Y)
Cr = 0.713 (R - Y)
È pudemu ancu cunvertisce è ancu diventa verde cù YCbCr:
R = Y + 1.402Cr
B = Y + 1.772Cb
G = Y - 0.344Cb - 0.714Cr
Di genere, i display (monitor, TV, schermi, etc.) utilizanu solu u mudellu RGB. Ma stu mudellu pò esse urganizatu in diverse manere:
Subsampling di culore
Cù una maghjina rapprisintata cum'è una cumminazione di luminanza è crominanza, pudemu sfruttà a sensibilità più grande di u sistema visuale umanu à a luminanza chè à a crominanza, eliminendu selettivamente l'infurmazioni. Chroma subsampling hè un metudu di codificazione di l'imaghjini chì utilizanu menu risuluzione per a croma chì per a luminanza.
Quantu hè permessu di riduce a risoluzione di u culore ?! Risulta chì ci sò digià alcuni diagrammi chì descrizanu cumu trattà a risoluzione è a fusione (Colore Risultante = Y + Cb + Cr).
Questi schemi sò cunnisciuti cum'è sistemi di downsampling è sò espressi cum'è un rapportu di 3 volte - a:x:y, chì determina u numeru di campioni di segnali di luminanza è di differenza di culore.
a - standard di campionamentu horizontale (di solitu uguale à 4) x - numeru di campioni di chroma in a prima fila di pixel (risoluzione horizontale relative à a) y - u numeru di cambiamenti in i campioni di chroma trà a prima è a seconda fila di pixel.
L'eccezzioni hè 4:1:0, furnisce una mostra di chroma in ogni bloccu di risoluzione di luminanza 4 per 4.
Schemi cumuni usati in i codecs muderni:
4:4:4 (senza downsampling)
4:2:2
4:1:1
4:2:0
4:1:0
3:1:1
YCbCr 4: 2: 0 - esempiu di fusione
Eccu una maghjina fusionata cù YCbCr 4:2:0. Nota chì avemu solu gastru 12 bits per pixel.
Questu hè ciò chì pare a listessa maghjina, codificata cù i tipi principali di subsampling di culore. A prima fila hè l'YCbCr finale, a fila di fondu mostra a risoluzione di croma. Risultati assai decenti, cunziddi a ligera perdita di qualità.
Ricurdativi di quandu avemu cuntatu 278 GB di spaziu di almacenamentu per almacenà un schedariu video d'una ora à una risoluzione di 720p è 30 frames per seconda? Sè avemu usatu YCbCr 4: 2: 0, allura sta taglia sarà ridutta da a mità - 139 GB. Finu a ora, hè sempre luntanu da un risultatu accettabile.
Pudete uttene l'istogramma YCbCr sè stessu cù FFmpeg. In questa maghjina, u blu domina nantu à u rossu, chì hè chjaramente visibile in l'histogramma stessu.
Culore, luminosità, gamma di culori - video review
Avemu cunsigliatu per vede stu video fantasticu. Spiega ciò chì a luminosità hè, è in generale tutti i punti sò puntelli ё circa luminosità è culore.
Tipi di quadru
Andemu avanti. Pruvemu di eliminà a redundanza di u tempu. Ma prima, definiscemu una terminologia basica. Diciamu chì avemu un filmu cù 30 frames per secondu, eccu i so primi 4 frames :
Pudemu vede assai ripetizioni in i frames: per esempiu, un fondo blu chì ùn cambia micca da quadru à quadru. Per risolve stu prublema, pudemu classificà in astrattu in trè tippi di frames.
I-frame (Intro Frame)
I-frame (quadru di riferimentu, quadru chjave, quadru internu) hè autonomu. Indipendentemente da ciò chì vulete visualizà, un I-frame hè essenzialmente una fotografia statica. U primu quadru hè di solitu un I-frame, ma observeremu regularmente I-frame ancu trà micca i primi frames.
P-frame (PFrame ridittatu)
P-frame (frame predictivu) prufittà di u fattu chì quasi sempre l'imaghjini attuale pò esse ripruduciutu cù u quadru precedente. Per esempiu, in u sicondu quadru l'unicu cambiamentu hè a bola chì avanza. Pudemu ottene u quadru 2 solu mudificà ligeramente u quadru 1, solu utilizendu a diferenza trà questi frames. Per custruisce u quadru 2, avemu riferitu à u quadru precedente 1.
←
B-frame (BFrame i-predictive)
E ligami micca solu à u passatu, ma ancu à i frames futuri per furnisce una cumpressione ancu megliu ?! Questu hè basicamente un B-frame (frame bidirezionale).
← →
Ritirata intermediata
Sti tipi di frames sò usati per furnisce u megliu cumpressione pussibule. Fighjemu cumu questu succede in a sezione dopu. Per avà, avemu nutatu chì u più "caru" in quantu à a memoria cunsumata hè l'I-frame, u P-frame hè notevolmente più prezzu, ma l'opzione più prufittuosa per u video hè u B-frame.
Redundancy temporale (predizione inter-frame)
Fighjemu quali opzioni avemu per minimizzà a ripetizione cù u tempu. Pudemu risolve stu tipu di redundancy usendu metudi di prediczione incruciata.
Pruvaremu di spende quant'è pocu bit pussibule per codificà una sequenza di frames 0 è 1.
Pudemu pruduce sottrazione, Sustrate simpricimenti u quadru 1 da u quadru 0. Avemu u quadru 1, solu aduprà a diffarenza trà ellu è u quadru precedente, in fatti avemu solu codificà u restu resultante.
Ma chì si vi dicu chì ci hè un metudu ancu megliu chì usa ancu menu bits ?! Prima, rompemu u quadru 0 in una griglia chjara cumpostu di blocchi. E dopu avemu da pruvà à currisponde à i blocchi da u quadru 0 cù u quadru 1. In altri palori, avemu da stima u muvimentu trà frames.
Da Wikipedia - compensazione di u muvimentu di bloccu
A compensazione di u muvimentu di bloccu divide u quadru attuale in blocchi non sovrapposti è u vettore di compensazione di u muvimentu informa l'origine di i blocchi (un malconcepimentu cumuni hè chì precedente u quadru hè divisu in blocchi non sovrapposti, è i vettori di compensazione di u muvimentu dicenu induve vanu quelli blocchi. Ma in fattu, hè l'altru - ùn hè micca u quadru precedente chì hè analizatu, ma u prossimu; ùn hè micca chjaru induve i blocchi si movenu, ma da induve venenu). Di genere, i blocchi di fonte si sovrapponenu in u quadru di fonte. Certi algoritmi di cumpressione video assemblanu u quadru attuale da parte di micca mancu unu, ma parechji frames trasmessi prima.
Duranti u prucessu di valutazione, vedemu chì a bola hè mossa da (x= 0, y= 25) par (x= 6, y= 26), valori x и y determina u vettore di muvimentu. Un altru passu chì pudemu fà per priservà i bits hè di codificà solu a diffarenza di vettori di muvimentu trà l'ultimu pusizioni di bloccu è quella prevista, cusì u vettore di muvimentu finali serà (x=6-0=6, y=26-25=1). ).
In una situazione reale, sta bola seria divisa in n blocchi, ma questu ùn cambia micca l'essenza di a materia.
L'uggetti in u quadru si move in trè dimensioni, cusì quandu a bola si move, pò esse visualmente più chjuca (o più grande si si move versu u visor). Hè normale chì ùn ci sarà micca un match perfettu trà i blocchi. Eccu una vista cumminata di a nostra stima è a stampa reale.
Ma vedemu chì quandu usemu l'estimazione di u muvimentu, ci sò notevolmente menu dati per a codificazione cà quandu si usa un metudu simplice di calculà a delta trà frames.
Chì a vera compensazione di u muvimentu serebbe
Sta tecnica hè appiicata à tutti i blocchi à una volta. Spessu a nostra bola in muvimentu cundizionale serà divisa in parechji blocchi à una volta.
Pudete ottene una sensazione di sti cuncetti sè stessu utilizendu Ghjove.
Per vede i vettori di muvimentu, pudete creà un video di prediczione esterna utilizendu ffmpeg.
Pudete ancu aduprà Analizzatore Intel Video Pro (Hè pagatu, ma ci hè una prova gratuita chì hè limitata à i primi deci frames solu).
Redundanza spaziale (previsione interna)
Se analizemu ogni quadru in un video, truvemu assai spazii interconnessi.
Andemu à traversu stu esempiu. Sta scena hè custituita principalmente di culori blu è bianchi.
Questu hè un I-frame. Ùn pudemu micca piglià frames previ per a prediczione, ma pudemu cumpressà. Andemu codificà a selezzione di u bloccu rossu. Se fighjemu i so vicini, avemu nutatu chì ci sò qualchi tendenzi di culore intornu.
Assumimu chì i culori si sparghjenu verticalmente in u quadru. Chì significa chì u culore di i pixel scunnisciuti cuntene i valori di i so vicini.
Una tale previsione pò esse sbagliata. Hè per quessa chì avete bisognu di applicà stu metudu (previsione internu), è poi sottrae i valori veri. Questu ci darà un bloccu residuale, chì resultarà in una matrice assai più compressa cumparata cù l'uriginale.
Se vulete praticà cù predizioni internu, pudete creà un video di macroblocchi è e so previsioni cù ffmpeg. Per capisce u significatu di ogni culore di bloccu, avete da leghje a documentazione ffmpeg.
O pudete aduprà Intel Video Pro Analyzer (cum'è aghju dettu sopra, a versione di prova gratuita hè limitata à i primi 10 frames, ma questu serà abbastanza per voi prima).