Informazioni sui colori estesi

Se si conosce qualcosa sul colore RGB, si sa che (255, 255, 255) è il triplo RGB a 8 bit per il colore bianco. Ma qual è il colore effettivo definito da questa tripletta?

La risposta può essere sorprendente: senza alcune informazioni aggiuntive, questa tripletta non definisce alcun colore particolare! Il significato di qualsiasi valore RGB dipende dallo spazio dei colori. Se non conosciamo lo spazio dei colori, allora in modo rigoroso non sappiamo il colore.

Uno spazio colore definisce il modo in cui la rappresentazione numerica di un determinato valore di colore deve essere riprodotta come luce fisica. Quando il video viene codificato in uno spazio colori ma viene visualizzato in un altro, genera colori distorti, a meno che il video non venga corretto a colori. Per ottenere una fedeltà accurata dei colori, è quindi fondamentale conoscere lo spazio dei colori del video di origine. In precedenza, la pipeline video in Windows non includeva informazioni sullo spazio dei colori previsto. A partire da Windows Vista, DirectShow e Media Foundation supportano informazioni di colore estese nel tipo di supporto. Queste informazioni sono disponibili anche per DirectX Video Acceleration (DXVA).

Il modo standard per descrivere uno spazio di colore matematicamente consiste nell'usare lo spazio dei colori CIE XYZ, definito dalla Commissione internazionale per l'illuminazione (CIE). Non è pratico usare i valori CIE XYZ direttamente nel video, ma lo spazio dei colori CIE XYZ può essere usato come rappresentazione intermedia durante la conversione tra spazi di colore.

Per riprodurre i colori in modo accurato, sono necessarie le informazioni seguenti:

  • Primarie di colore. Le primarie di colore definiscono il modo in cui i valori tristimuli CIE XYZ vengono rappresentati come componenti RGB. In effetti, le primarie di colore definiscono il "significato" di un determinato valore RGB.
  • Funzione di trasferimento. La funzione di trasferimento è una funzione che converte i valori RGB lineari in valori R'G'B' non lineari. Questa funzione è detta anche correzione gamma.
  • Matrice di trasferimento. La matrice di trasferimento definisce la modalità di conversione di R'G'B' in Y'PbPr.
  • Campionamento cromatico. La maggior parte dei video YUV viene trasmessa con una risoluzione minore nei componenti cromatici rispetto all'luma. Il campionamento Chroma è indicato dal FOURCC del formato video. Ad esempio, YUY2 è un formato 4:2:2, ovvero i campioni di cromatica vengono campionati orizzontalmente da un fattore pari a 2.
  • Cromatico. Quando viene campionata la cromatica, la posizione dei campioni di cromatica rispetto ai campioni luma determina come devono essere interpolati i campioni mancanti.
  • Intervallo nominale. L'intervallo nominale definisce il modo in cui i valori Y'PbPr vengono ridimensionati a Y'CbCr.

Spazio colori nei tipi di supporti

DirectShow, Media Foundation e DirectX Video Acceleration (DXVA) hanno modi diversi per rappresentare i formati video. Fortunatamente, è facile tradurre le informazioni sullo spazio dei colori tra loro, perché le enumerazioni pertinenti sono le stesse.

Conversione dello spazio dei colori

La conversione da uno spazio Y'CbCr a un'altra richiede i passaggi seguenti.

  1. Quantizzazione inversa: convertire la rappresentazione Y'CbCr in una rappresentazione Y'PbPr, usando l'intervallo nominale di origine.

  2. Upsampling: converte i valori di cromatica campionati in 4:4:4 interpolando i valori di cromatica.

  3. Conversione da YUV a RGB: convertire da Y'PbPr a R'G'B', usando la matrice di trasferimento di origine.

  4. Funzione di trasferimento inversa: converte R'G'B' non lineare in RGB lineare, usando l'inverso della funzione di trasferimento.

  5. Conversione dello spazio dei colori RGB: usare le primarie dei colori per eseguire la conversione dallo spazio RGB di origine allo spazio RGB di destinazione.

  6. Funzione di trasferimento: converte RGB lineare in R'G'B non lineare, usando la funzione di trasferimento di destinazione.

  7. Conversione da RGB a YUV: convertire R'G'B' in Y'PbPr, usando la matrice di trasferimento di destinazione.

  8. Downsampling: convertire 4:4:4 in 4:2:2, 4:2:0 o 4:1:1 filtrando i valori di cromatica.

  9. Quantizzazione: convertire Y'PbPr in Y'CbCr, usando l'intervallo nominale di destinazione.

I passaggi da 1 a 4 si verificano nello spazio colore di origine e i passaggi da 6 a 9 si verificano nello spazio colore di destinazione. Nell'implementazione effettiva, i passaggi intermedi possono essere approssimativi e i passaggi adiacenti possono essere combinati. In genere esiste un compromesso tra accuratezza e costo di calcolo.

Ad esempio, per eseguire la conversione da RT.601 a RT.709 sono necessarie le fasi seguenti:

  • Quantizzazione inversa: da Y'CbCr(601) a Y'PbPr(601)

  • Upsampling: Y'PbPr(601)

  • DA YUV a RGB: da Y'PbPr(601) a R'G'B'(601)

  • Funzione di trasferimento inversa: R'G'B'(601) a RGB(601)

  • Conversione dello spazio dei colori RGB: RGB(601) in RGB(709)

  • Funzione di trasferimento: RGB(709) a R'G'B'(709)

  • Da RGB a YUV: da R'G'B'(709) a Y'PbPr(709)

  • Downsampling: Y'PbPr(709)

  • Quantizzazione: da Y'PbPr(709) a Y'CbCr(709)

Uso delle informazioni sul colore estese

Per mantenere la fedeltà dei colori in tutta la pipeline, le informazioni sullo spazio dei colori devono essere introdotte nell'origine o nel decodificatore e trasmesse attraverso la pipeline al sink.

Dispositivi di acquisizione video

La maggior parte dei dispositivi di acquisizione analogica usa uno spazio colore ben definito durante l'acquisizione di video. I driver di acquisizione devono offrire un formato con un blocco di formato KS_VIDEOINFOHEADER2 che contiene le informazioni sul colore. Per garantire la compatibilità con le versioni precedenti, il driver deve accettare formati che non contengono le informazioni sul colore. In questo modo il driver funzionerà con i componenti che non accettano le informazioni sul colore estese.

Origini basate su file

Durante l'analisi di un file video, l'origine multimediale (o il filtro parser, in DirectShow) potrebbe essere in grado di fornire alcune informazioni sul colore. Ad esempio, lo strumento di navigazione DVD può determinare lo spazio dei colori in base al contenuto del DVD. Altre informazioni sul colore potrebbero essere disponibili per il decodificatore. Ad esempio, un flusso video elementare MPEG-2 fornisce le informazioni sul colore nel campo sequence_display_extension. Se le informazioni sul colore non sono descritte in modo esplicito nell'origine, potrebbe essere definita in modo implicito dal tipo di contenuto. Ad esempio, le varietà NTSC e PAL del video DV usano spazi di colore diversi. Infine, il decodificatore può usare le informazioni sul colore ottenute dal tipo di supporto dell'origine.

Altri componenti

Altri componenti potrebbero dover usare le informazioni relative allo spazio dei colori in un tipo di supporto:

  • I convertitori di spazi di colore software devono usare informazioni sullo spazio dei colori quando si seleziona un algoritmo di conversione.
  • I mixer video, ad esempio il mixer EVR (Enhanced Video Renderer), devono usare le informazioni sul colore quando si combinano flussi video da diversi tipi di contenuto.
  • Le API di elaborazione video DXVA e le DDI consentono al chiamante di specificare le informazioni sullo spazio dei colori. La GPU deve usare queste informazioni quando esegue la combinazione video hardward.

Tipi di supporti video

Accelerazione video DirectX 2.0