Comments
Description
Transcript
Codifica Video H.261 H.263
RETI INTERNET MULTIMEDIALI Codifica e Compressione del Video: Introduzione, H.261 e H.263 Il documento è adattato da materiale cortesemente messo a disposizione dal Prof. Stefano Paris Introduzione I formati di compressione per contenuti audio e video introducono nuovi elementi per aumentare il rapporto di codifica Codifica nello spazio e nel tempo Coordinamento per la sincronizzazione audio e video Esistono numerosi standard specifici per diverse applicazioni multimediali Internet streaming (Digital TV broadcasting, VoD, etc.) Video conference Introduzione Standard di compressione video Standard Applicazione Rate Motion JPEG Camcoders 30 Mbps Digital Video Camcoders 25 Mbps H.261 Video Interattivo su ISDN 64 kbps H.263 Video Interattivo su reti a pacchetto 64-384 kbps MPEG-1 Streaming Video (VCR quality) Fino 1.5 Mbps 352 x 240 MPEG-2 Streaming Video (Broadcast quality) 4-15 Mbps 704 x 480 MPEG-4 (H.26L) Video su dispositivi low-rate > 32 kbps HDTV 20 Mbps Televisione ad alta qualità Raster 720 x 480 1920 x 1080 Standard codifica video Gli standard della codifica video sono stati sviluppati da ITU (organismo di stampo telefonico) e da ISO (organismo di stampo informatico) Standard codifica video Transizione da MPEG-2 a H.264/AVC Miglioramento delle prestazioni 2:1 Nuova generazione H.265/HEVC in sviluppo 30-50% miglioramento prestazioni Ancora più complesso Introduzione Standard delle dimensioni delle immagini Common Intermediate Format (CIF) Formato Immagine Matrice Luminanza (HxV) Bit Rate a 30 fps SQCIF 128 x 96 4.4 Mbps QCIF 176 x 144 9.1 Mbps CIF 352 x 288 36.5 Mbps 4CIF 704 x 576 146 Mbps 16CIF 1408 x 1152 584 Mbps Dimensione delle immagini Gli standard hanno definito diverse risoluzioni per le applicazioni TV, HDTV e videoconferenza Es. H.261 specifica l’impiego di formati CIF e QCIF organizzati in un modo ben definito Risoluzione TV GOB: Group Of Blocks 176 x 144 352 x 288 CIF QCIF VIDEO COMPRESSO Motion JPEG, Digital Video Motion JPEG Motion JPEG è una semplice applicazione di JPEG per realizzare video: non è standardizzata Si codifica ogni frame della successione che rappresenta il video con uno degli algoritmi JPEG Il rapporto di compressione è molto contenuto in quanto non si sfrutta il contenuto informativo ridondante presente in frame successivi (codifica iterframe) Es. 30 fps 30Mbps L’implementazione è molto semplice in quanto si possono riutilizzare algoritmi e strutture dati di JPEG Semplifica editing, memorizzazione, reverse play Motion JPEG F4 F3 F2 F1 JPEG Data Stream Digital Video Digital Video (DV) è una versione migliorata di Motion JPEG utilizzato da videocamera Viene eseguita un’ottimizzazione locale della tabella di quantizzazione utilizzata per i coefficienti della DCT per codificare più efficacemente parti del frame Utilizza, come la televisione, frame composte da linee interlacciate per migliorare la velocità di visualizzazione Produce un flusso dati con un rate di 25 Mbps, che aumenta fino a 29 Mbps con l’aggiunta di tecniche di correzione degli errori Digital Video http://www.broadcastpapers.com/whitepapers/PanasonicVideoCompBook.pdf Digital Video http://www.broadcastpapers.com/whitepapers/PanasonicVideoCompBook.pdf Digital Video http://www.broadcastpapers.com/whitepapers/PanasonicVideoCompBook.pdf Digital Video F4 F3 F2 F1 DCT Xuv/Duv Scaled DCT Coefficients Scaling Coefficients Duv Digital Video F1 8x8 F2 8x8 8x8 DCT interleaved Digital Video F1 8x8 2-4-8-DCT F2 8x8 Field 1 Field 2 Digital Video http://www.broadcastpapers.com/whitepapers/PanasonicVideoCompBook.pdf VIDEO CONFERENZA H.261, H.263 Introduzione H.261 e H.263 sono due standard ITU-T per applicazioni di videoconferenza real-time in reti con rate di trasmissione contenuti H.261 per connessioni a rate costante ISDN H.263 per reti a pacchetto Entrambi utilizzano risoluzioni minori rispetto a MPEG-1 e MPEG-2 Entrambi i formati di codifica appartengono ai gruppi H.320 e H.323 definiti per multimedia conference Introduzione A differenza degli standard MPEG, H.261 e H.263 sono stati sviluppati per applicazioni interattive bidirezionali I ritardi in entrambe le direzioni devono essere comparabili e contenuti Non si fa alcuna assunzione sulla tipologia di canale di trasmissione (full-duplex, half-duplex, etc.) La complessità implementativa per la codifica e la decodifica deve rimanere contenuta Codifica e decodifica simmetriche DCT per compressione delle immagini e codifica motioncompensated inter-frame H.261 H.261 supporta due tipi di risoluzione: CIF e Quarter CIF (QCIF) Le componenti di crominanza Cr e Cb hanno una risoluzione dimezzata rispetto alla luminanza Y Il frame rate nominale di H.261 è pari a 29.97 fps, riducibile fino a una fattore 4 Resolution CIF QCIF Component Horizontal Vertical Luminanza 352 288 Crominanza 176 144 Luminanza 176 144 Crominanza 88 72 Applicazioni H.261 Videotelefonia: Risoluzione video e frame rate: CIF,QCIF; frame-rate (7.5), 10, (25), 30 fps Bit-rate: 48-96kbit/s Audio bit-rate: 16-32-56-64kbit/s Videoconferenza: Risoluzione video e frame rate: CIF; frame-rate (25), 30 fps Bit-rate: 320-1856 kbit/s Audio bit-rate: 64 kbit/s Lavoro cooperativo: Risoluzione video e frame rate: QCIF; frame-rate (7.5), 10 fps Bit-rate: 48kbit/s Audio bit-rate: 16-32 kbit/s Caratteristiche tecniche di H.261 Data rate (p x 64) kbps: 64Kbps (p=1) < data rate < 1920Kbps (p=30) Codifica ibrida DCT-DPCM Codifica operante su macroblocchi 16x16: INTRA: codifica senza predizione INTER: codifica dell’errore di predizione dopo motion estimation/compensation • NB: Alcuni macroblocchi sono forzati alla sola codifica INTRA per evitare la propagazione dell’errore, ma non è possibile navigare nella sequenza perché la sola frame interamente codificata INTRA è la prima Per i macroblocchi codifica INTER: motion estimation e motion compensation su macroblocchi di 16x16 pixel; finestra di ricerca +/-15 pixel Trasformata DCT su blocchi 8*8 seguita da quantizzazione scalare Codifica entropica: run-length seguito da codifica di Huffman Strutture dati di H.261 11 3 GOB QCIF CIF MB Cb Y Cr H.261 - Codifica Inter-frame JPEG H.261 - Codifica I dati che compongono l’immagine sono elaborati in macro-blocchi: 4 blocchi 8x8 dei coefficienti di luminanza Y 1 blocco dei coefficienti di crominanza Cr 1 blocco dei coefficienti di crominanza Cb I macro-blocchi sono soggetti a due tipi di codifica: Intra-frame: codifica spaziale Inter-frame: codifica temporale (motion prediction) H.261 – Codifica Intra-frame Ognuno dei blocchi 8x8 di luminanza e crominanza DCT: coefficienti trasformati con DCT Quantizzazione: output della DCT quantizzato Entropy coding: coefficienti quantizzati vengono codificati utilizzando uno schema lossless Il processo è del tutto simile a quello eseguito da JPEG sequenziale Una copia di ogni blocco viene ricostruita per ricreare una copia del frame originale Rescaler: inverso della quantizzazione IDCT: inverso della DCT H.261 – Codifica Intra-frame H.261 – Quantizzazione La quantizzazione in H.261 usa uno step_size costante per tutti i coefficienti DCT in un macroblocco Se usiamo DCT e QDCT per indicare i coefficienti DCT prima e dopo la quantizzazione i coefficienti DC Intra mode valgono: QDCT round DCT round DCT 8 step _ size Mentre gli altri coefficienti (AC): QDCT DCT DCT step _ size 2* scale In cui step_size è un intero ∈ [1,31]. H.261 – Codifica Inter-frame La replica di ogni blocco ricostruita a partire dai coefficienti quantizzati è inserita nel frame store Dalle repliche dei blocchi si ricrea una replica del frame originale La replica del frame originale viene utilizzata come riferimento dall’algoritmo di predizione per predire il successivo frame I dati trasmessi alla destinazione sono quindi composti da: Coefficienti della DCT Dati di movimento generati dall’algoritmo di predizione H.261 - Codifica Inter-frame La compressione Inter-frame si basa sulla compressione Intra-frame: Si codifica la differenza tra il frame corrente e quello immediatamente precedente anziché i dati grezzi Compressione Inter-frame Calcola le differenze tra blocchi dei due frame Utilizza motion estimation per codificare cambiamenti minimi come un vettore DCT - Quantizzazione - Entropy Coding sulla matrice che rappresenta le differenze H.261 - Codifica Inter-frame Generalmente l’informazione contenuta nel frame ottenuto dalla differenza di due frame successivi è nettamente inferiore a quella contenuta nel secondo frame FD = F2 –F1 Il movimento aumenta le differenze tra due frame successivi Codificare il movimento come un vettore Codificare le differenze del blocco spostato con il classico schema DCT- Quantizzazione – Entropy Coding H.261 - Codifica Inter-frame Per tutti i frame successivi al primo, si esegue una predizione di ogni nuovo macro-blocco con uno dei macroblocchi nel frame precedente L’algoritmo di motion-compensation si occupa di determinare quale macro-blocco del precedente frame rappresenta il miglior predittore per il frame corrente Macro-blocco composto da 256 (16x16) campioni di luminanza e da 2x64 (2x8x8) di crominanza H.261 individua il miglior predittore come il macro-blocco del frame precedente che minimizza la differenza tra i macroblocchi del frame corrente e quelli del frame precedente H.261 - Codifica Inter-frame Per ogni macro-blocco viene generato un vettore di movimento L’algoritmo di predizione deve cercare tra tutti i macro-blocchi del frame precedente quelli che occupano una posizione vicina rispetto al macroblocco del frame corrente Non è detto che il macroblocco precedente scelto per codificare il vettore indichi un movimento La ricerca del miglior predittore è un’operazione complessa (richiede molta potenza di calcolo) Lo standard non specifica come eseguire la ricerca H.261 - Codifica Inter-frame L’algoritmo di predizione commette un errore di predizione Errori dei valori di luminanza e crominanza tra il frame corrente e quello predetto Errore codificato utilizzando lo schema DCT – Quantizzazione – Entropy Coding Il valore dell’errore determina l’informazione trasmessa: Basso (ε < th1): solo vettore di movimento Medio (th1 < ε < th2): vettore di movimento ed errore di predizione Alto (ε > th2): solo intra-frame (motion compensation controproducente) H.261 - Codifica Inter-frame Difference image (= (with 0 without motion) motion motion) compensation) DCTencoder + - channel DCTdecoder Frame Motion store compensation Motion estimation Motion vectors H.261 - Codifica Inter-frame Stima del Moto Informazione di moto per ogni macroblocco di 16*16 Vettore di movimento ottimo? Investigare tutte le posizioni in una finestra di ricerca; Selezionare quella con il minimo Mean Square Error; Vettore di movimento = traslazione corrispondente Non standardizzato Predizione e motocompensazione Quando c’è movimento la semplice differenza tra frame fallisce Soluzione praticabile: dividere la frame in blocchi contigui e non sovrapposti e descrivere il movimento di ogni blocco Predizione del movimento e compensazione riducono l’errore di predizione, aumentando la compressione Predizione e motocompensazione Schema a blocchi della codifica H.261 Start Frame Does the macroblock need to be forced intra? yes no Integer Pixel Motion Search Macroblocks loop Did the Motion Estimation find a good match? no yes Encode INTRA Encode INTER End Frame H.261 – Buffer Management La quantità di informazione del flusso video codificato varia nel tempo (tra frame successivi) ed è funzione di diverse componenti: Complessità del frame Movimento Il canale su cui viene trasmesso il flusso video ha un rate di trasmissione costante (CBR) Il buffer può essere soggetto a overflow se non gestito correttamente H.261 – Buffer Management L’algoritmo di gestione del buffer evita l’overflow L’algoritmo agisce sugli intervalli di quantizzazione modificando opportunamente i coefficienti di quantizzazione Se la dimensione del buffer supera una determinata soglia t1, la dimensione degli intervalli si allarga • Aumenta il rapporto di compressione • Diminuisce la qualità del video Se la dimensione del buffer scende sotto una soglia t2, la dimensione degli intervalli si riduce • Diminuisce il rapporto di compressione • Aumenta la qualità del video H.261 - Decodifica Buffer Compressed image data Entropy Decoder Rescaler IDCT + ∑ Video Frame + Motion Vector Motion Compensation Frame Store H.261 - Decodifica Decodifica esegue le operazioni inverse della codifica in ordine inverso Vengono generati 2 frame I macro-blocchi degli errori sono decodificati utilizzando lo schema Entropy Decoding – Rescaler – IDCT per generare la replica del frame delle differenze Utilizzando l’ultimo frame decodificato e il vettore di movimento contenuto nel frame corrente si genera un frame di riferimento (motion-compensated reference frame) La somma dei due frame precedenti permette di generare una replica del frame originale H.261 – Schema completo codificatore H.261 – Schema completo decodificatore H.261 - Bitstream Formato del flusso video codificato (bitstream) H.261 - Bitstream Struttura gerarchica Ogni frame contiene molti GOB (Group Of Block) Ogni GOB contiene a sua volta molti macro-blocchi (4:2:0) Ogni macro-blocco contiene i 6 blocchi 8x8 di luminanza e crominanza e il vettore di movimento Ogni blocco contiene i coefficienti della DCT codificati GOB (Group of Blocks) Contiene diversi macro-blocchi Utilizzato per la sincronizzazione con il flusso video Struttura video H.261 formato CIF Ogni sequenza video è organizzata in frame Ogni frame (o picture) è organizzata in: 12 (2 x 6) Group of Block (punti di sincronizzazione) composti ciascuno da 11x3 macroblock • Macroblock (motion estimation) (4 luminance block + 2 chrominance block, poichè 4:2:0) – Block (DCT) (8x8 pixel) Group Of Blocks MacroBlock DCT block CIF (352x288) (2 x 6) GOB ciascuno (11 x 3) Macroblock Totale frame (22 x 18 Macroblock) H.263 Evoluzione di H.261 Definito per applicazioni con bassi rate di trasmissione Utilizzato in applicazioni Internet-based con vincoli stringenti sul rate di trasmissione (es. Modem 28.8-56 Kbps) Il progetto è derivato da H.261, ma sono introdotte nuove tecniche per migliorare il rapporto di compressione H.263 Versione 1 (1996) composto da una versione Baseline con quattro opzioni negoziabili (Unrestricted Motion Vectors Mode, Advanced Prediction Mode, PB Frame Mode, Syntax-based Arithmetic Coding Mode) H.263 Versione 2 (1998) e Versione 3 (2000), denominate anche “H.263+” e “H.263++” comprendono la Versione 1 oltre ad altre opzioni negoziabili che migliorano il rapporto di compressione e la qualità del video su reti con trasporto inaffidabile (reti a pacchetto e wireless) H.263 H.263 utilizza half-pixel prediction per i vettori di movimento (a differenza della full-pixel utilizzata da H.261) Il vettore di movimento può cadere tra due pixel (il cui valore è ottenuto dalla loro interpolazione) Sono definiti i seguenti 4 miglioramenti Unrestricted Motion Vectors (vettori di movimento che possono cadere oltre la fine del frame) Arithmetic Coding Motion vector separati per ogni blocco di luminanza all’interno di un macroblocco Bidirectional Coding Si utilizzano tutti i 5 formati CIF Formati H.263 Struttura video H.263 Ogni sequenza video è organizzata in frame: ...IPPPP…I... (alternanza di Intra Picture intercalate da Predicted Picture) Ogni frame è divisa in: • Group of Blocks (punti di risincronizzazione). I GOB sono composti da un numero variabile di macroblocks in dipendenza della risoluzione (i.e. per CIF: 1 GOB = 1 riga di 22 macroblock) – Macroblock (motion estimation) (composto da 4 blocks of luminance + 2 blocks of chrominance) » Block (DCT) 8x8 pixel Group Of Block MacroBlock DCT block Schema a blocchi codifica H.263 baseline Start Frame I-picture P-picture MB-INTRA Integer Pixel search MB-INTRA Macroblocks loop MB-INTER Half-Pixel search MB-INTER End Frame MB-INTRA Macroblocks loop Confronto H.261 – H.263 H.263+ e H.263++ H.263+ Seconda versione di H.263 Ridefinisce l’unrestricted vector mode Si usa la struttura Slice per rimpiazzare i GOB Implementa scalabilità temporale, SNR e spaziale Supporta modalità evolute per le PB-frame Usa filtri per ridurre effetto dei blocchi H.263++ L’estensione più recente Enhanced Reference Picture Selection (ERPS) Data Partition Slice (DPS)