Codificação de vídeo , Notas de estudo de Engenharia Informática
wellington-cassio-faria-8
wellington-cassio-faria-8

Codificação de vídeo , Notas de estudo de Engenharia Informática

13 páginas
50Números de download
1000+Número de visitas
1Número de comentários
Descrição
Codificação de vídeo
60 pontos
Pontos de download necessários para baixar
este documento
Baixar o documento
Pré-visualização3 páginas / 13
Esta é apenas uma pré-visualização
3 mostrados em 13 páginas
Esta é apenas uma pré-visualização
3 mostrados em 13 páginas
Esta é apenas uma pré-visualização
3 mostrados em 13 páginas
Esta é apenas uma pré-visualização
3 mostrados em 13 páginas

CODIFICACÃO DE VÍDEO

O olho humano possui a propriedade de reter imagens por alguns milisegundos após

as mesmas desaparecerem. Assim, se uma sequência de imagens for apresentada ao olho

acima de uma determinada taxa de apresentação, ela não será percebida como uma

sequência de imagens e sim como uma imagem contínua, ou seja, como vídeo. Logo,

podemos dizer que um sinal de vídeo é composto de uma sequência de imagens (denominadas de quadros) apresentada a uma taxa constante (por exemplo, 30 quadros

por segundo).

Na codificação digital, uma imagem é composta de elementos de imagens

denominados de pixels, sendo cada pixel representado por um determinado número de

bits. O número de pixels em um quadro define a resolução da imagem (quanto mais

pixels maior a resolução). Por exemplo, o padrão MPEG2 (Motion Picture Experts

Group) define uma resolução de alta definição com 1920 x 1080 pixels .

A Figura 5.20 ilustra a composição de um sinal de vídeo como uma sequência de

quadros, cada um composto por pixels. Dentro de um quadro temos o que denominamos

de amostras espaciais, enquanto os quadros sucessivos compõem as amostras temporais.

Figura 5.20. Amostras espaciais, temporais, quadro e pixel.

O processo de codificação utiliza um determinado número de bits para representar

cada pixel. Com 1 bit por pixel, por exemplo, poderíamos diferenciar apenas entre as

cores branca e preta. Com 8 bits por pixel, poderíamos representar 256 níveis de cinza.

Para representar as cores, poderíamos utilizar 24 bits por pixel. No entanto, a codificação desta forma resultaria em taxas de transmissão proibitivas. Por exemplo,

com 30 quadros por segundo, cada quadro com 1920 x 1080 pixels e cada pixel com 24

bits, teríamos uma taxa de transmissão de 30 x 1920 x 1080 x 24 = 1.49 Gbps.

Para reduzir as taxas de transmissão, os codificadores de vídeo utilizam a

redundância espacial e a redundância temporal presentes em um sinal de vídeo. A

redundância espacial diz respeito à possível redundância entre pixels de um mesmo

quadro (redundância entre as amostras espaciais na Figura 5.20), enquanto a

redundância temporal diz respeito à possível semelhança entre quadros sucessivos

(redundância entre as amostras temporais na Figura 5.20). O grau de redundância

depende do tipo de imagem. Uma imagem que retrate uma paisagem, por exemplo,

possui muita redundância temporal, pois a paisagem praticamente não muda com o

tempo (mantendo-se o enquadramento da câmera, obviamente), enquanto a largada de

uma corrida de Fórmula 1 possui pouca redundância temporal, pois a imagem é muito

dinâmica. Já a imagem de uma parede branca possui muita redundância espacial, pois

há muita semelhança entre os diversos pixels que compõem um quadro, bem como

muita redundância temporal, pois praticamente não há mudança entre quadros

sucessivos.

A Figura 5.21 ilustra o diagrama em blocos de um codificador de vídeo genérico. O codificador é composto de três blocos básicos: um modelo temporal, um modelo

espacial e um codificador de entropia. O modelo temporal tem por objetivo reduzir a

redundância temporal, usualmente fazendo uma predição do quadro corrente e

subtraindo esta predição do quadro corrente real (uma predição simples seria utilizar o

quadro anterior como predição para o quadro corrente), gerando um quadro residual,

que será entregue ao modelo espacial. A eficiência do modelo será maior se o mesmo

utilizar alguma forma de predição de movimento das imagens entre quadros sucessivos.

Logo, o modelo temporal também tem por saída um conjunto de vetores de movimento

que descrevem como o movimento foi compensado. O modelo espacial tem por

objetivo reduzir a redundância espacial, tipicamente aplicando uma transformada nas

amostras residuais e quantizando o resultado, gerando um conjunto de coeficientes (este

processo será melhor descrito na Seção 5.3.2). Por fim os vetores de movimento e os

coeficientes do modelo espacial são codificados em um codificador de entropia, que

elimina a redundância estatística presente nestes dados. [RICHARDSON,2003]

Figura 5.21 – Diagrama em blocos de um codificador de vídeo básico genérico.

Os principais codificadores de vídeo utilizados hoje são o MPEG2 e o MPEG4. A

análise completa destes codificadores está fora do escopo deste texto. No entanto,

vamos apresentar nas sub-seções seguintes os principais conceitos utilizados nos

mesmos. Para o leitor interessado, recomendamos a referência [RICHARDSON,2003].

5.3.1. Conceitos Básicos sobre Sinais de Vídeo

Antes de iniciarmos a descrição dos princípios de operação do MPEG vamos

apresentar alguns conceitos básicos sobre sinais de vídeo.

Como sabemos, qualquer cor pode ser gerada pela combinação das três cores

denominadas primárias: vermelho, verde e azul, dando origem à representação que denominamos RGB (Red, Green, Blue ou vermelho, verde e azul). O processo de

digitalização, no entanto, é realizado a partir de sinais que são a composição dos sinais

R, G e B, denominados de sinais compostos. Os sinais compostos são combinações

lineares dos sinais RGB, da forma: [RICHARDSON,2003]

(5.13)

O sinal composto Y é denominado de luminância e os sinais Cb, Cr e Cg de sinais

de crominância. As constantes kr, kg e kb variam de um sistema para outro. Por exemplo,

a recomendação ITU-R BT601-7 [ITU-R,2011] estabelece os valores kr = 0.299; kb =

0.114 e kg = 1 – krkb = 0.587.

De fato, o sinal de crominância Cg não precisa ser armazenado ou transmitido, pois

pode ser obtido a partir dos outros sinais. Então, o sinal de vídeo armazenado ou

transmitido é composto de um sinal de luminância, Y, e dois sinais de crominância: Cb e

Cr.

A Tabela 5.1 mostra, a título de ilustração, os valores dos sinais Y, Cr e Cb, como

definido na Equação (5.23),em função da cor do pixel, para as constantes kr e kb

definidas em [ITU-R,2011].

Cor R G B Y Cr Cb

Branco 1 1 1 1 0 0

Preto 0 0 0 0 0 0

Vermel

ho

1 0 0 0.299 0.701 -0.299

Verde 0 1 0 0.587 -0.587 -0.587

Azul 0 0 1 0.114 -0.114 0.886

Amarel o

1 1 0 0.886 0.114 -0.886

Ciano 0 1 1 0.701 -0.701 0.299

Magent

a

1 0 1 0.413 0.587 0.587

Tabela 5.1 – Exemplo de valores de R, G, B, Y, Cr e Cb para algumas cores.

O máximo sinal de luminância corresponde ao branco, em que R = G = B = 1,

resultando em Y = 1, enquanto a luminância mínima corresponde ao preto (R = G = B

= 0), em que Y = 0.

O máximo valor de Cr corresponde ao vermelho (R = 1, G = B = 0), com Cr = 1 –

kr, enquanto seu mínimo valor corresponde à cor ciano (R = 0, G = B = 1), com Cr = –

(1 – kr). Logo, o valor de Cr excursiona entre –(1 – kr) e +(1 – kr). Para fazer com que a

excursão total seja igual a 1 (entre -0,5 e +0,5), basta multiplicar o valor de Cr por 0,5 e

dividir por (1 – kr).

Já o valor máximo de Cb corresponde ao azul (B = 1, G = R = 0), com Cb = 1 – kb,

enquanto seu mínimo valor corresponde à cor amarela (B = 0, G = R = 1), com Cb = –

(1 – kb). Logo, Cb excursiona entre –(1 – kb) e +(1 – kb). Para tornar a excursão total

igual a 1 (entre -0,5 e +0,5), basta multiplicar o valor de Cb por 0,5 e dividir por (1 –

kb).

Após as normalizações acima, os sinais compostos assumem a forma:

[RICHARDSON,2003]

(5.14)

Podemos verificar na Tabela 5.1 que o sinal de luminância varia de 0 a 1, enquanto

o sinal de crominância Cr varia de -0,701 a +0,701 e o sinal de crominância Cb varia de

-0.886 a +0.886. Portanto, neste caso, para que Cr e Cb excursionem entre -0,5 e +0,5,

deve-se dividir Cr por 1,402 e Cb por 1,772. Ou seja, deve-se aplicar as normalizações

apresentadas na Equação (5.14).

Por fim, no processo de quantização dos sinais Y, Cr e Cb, novas alterações podem

surgir na Equação (5.14). Por exemplo, para uma quantização com 8 bits (256 níveis de

quantização), a recomendação BT-601-7 estabelece que o sinal de luminância deve

ocupar apenas 220 níveis de quantização e que a luminância correspondente ao preto

deve corresponder ao nível de quantização 16. Para os sinais de crominância, a mesma

recomendação estabelece que eles devem ocupar apenas 225 níveis de quantização e

que à crominância de magnitude zero deve corresponder o nível de quantização 128.

Estas definições alteram a Equação (5.14) para: [ITU-R,2011]

(5.15)

Há ainda várias outras formas de transformar os sinais RGB nos sinais compostos

Y, Cb e Cr, mas para os objetivos deste texto basta sabermos que Y, Cb e Cr são

transformações lineares dos sinais RGB.

O sistema visual humano é menos sensível aos sinais de crominância que ao sinal

de luminância. Esta característica faz com que a representação YCbCr ofereça uma

importante vantagem sobre a representação RGB: a possibilidade de representar os

sinais Cb e Cr com menos resolução que o sinal Y , reduzindo a quantidade de dados

requerida para representar os sinais de crominância, sem perda significativa de

qualidade visual [Livro]. Por exemplo, o padrão MPEG-4 suporta três formas de

amostragem dos sinais Y, Cb e Cr, denominadas de 4:4:4, 4:2:2 e 4:2:0. Na amostragem

4:4:4, para cada 4 amostras de luminância há 4 amostras de cada sinal de crominância e,

portanto, se preserva totalmente a fidelidade dos sinais de crominância. Na amostragem

4:2:2, na direção horizontal, há duas amostras de Cb e Cr para cada 4 amostras do sinal

Y, ou seja, a resolução horizontal de Cb e Cr é a metade da resolução horizontal de Y. Na

amostragem 4:2:0, cada sinal de crominância tem ¼ do número de amostras do sinal de

luminância, com metade da resolução horizontal e metade da resolução vertical. A

codificação 4:2:0 é largamente utilizada em aplicações comerciais, como vídeo

conferência, TV digital e DVD (Digital Versatile Disk). O número de bits utilizados

para representar um quadro com amostragem 4:2:0 é exatamente a metade do número

utilizado para amostragem 4:4:4. [RICHARDSON,2003]

5.3.2. Discret Cosine Transform (DCT)

O processo de codificação de vídeo utilizado no MPEG utiliza uma técnica de

transformação denominada Transformada Discreta de Coseno (DCT – Discret Cosine

Transform). A DCT é realizada sobre um bloco de N x N pixels e é realizada pela

operação:

(5.16)

onde X é a matriz de amostras, Y é a matriz dos coeficientes da DCT, A é uma

matriz de transformação N x N e AT é a matriz transposta de A, obtida trocando-se em

A as linhas pelas colunas e vice versa. Os elementos de A são dados por:

[RICHARDSON,2003]

(5.17)

Exemplo 5.5 [RICHARDSON,2003]: A matriz, X, abaixo, representa os valores das

amostras de luminância de um bloco de 4 x 4 pixels de um sinal de vídeo. Calcule a

DCT de X.

j

= 0

1 2 3

i =

0

5 11 8 1

0

1 9 8 4 1

2

2 1 10 11 4

3 19 6 15 7

Solução:

Para encontrar Y, precisamos primeiro encontrar a matriz de transformação, A.

Utilizando a Equação (5.17), temos:

ou

Para encontrar Y devemos primeiro fazer Y’ = AX, ou seja:

O produto entre as duas matrizes é feito multiplicando cada linha de A por cada

coluna de X. Por exemplo:

Y’01 = (0,5 x 5) + (0,5 x 9) + (0,5 x 1) + (0,5 x 19) = 17

Y’01 = (0,5 x 11) + (0,5 x 8) + (0,5 x 10) + (0,5 x 6) = 17,5

O resultado final é:

Finalmente, a matriz dos coeficientes da DCT é obtida multiplicando Y’ por AT, ou

seja:

resultando em:

*****

Semelhante à Transformada de Fourier, uma operação de transformação inversa

retorna o sinal para o domínio do tempo. A Transformada Inversa Discreta de Coseno

(IDCT), neste caso, é calculada por:

(5.18)

É importante notar que a DCT em si não resulta em compressão, pois em geral são

necessários mais bits para representar os coeficientes da DCT do que para representar o

valor original das amostras. O processo de compressão é, de fato, resultante da

eliminação dos coeficientes da DCT que são menos relevantes para a recomposição do

sinal original. Para entender melhor esta abordagem, vamos tomar o resultado do

Exemplo 5.5 e calcular a transformada inversa em diversas situações.

Inicialmente, vamos calcular a IDCT mantendo apenas o termo mais significativo

da matriz de coeficientes e fazendo os demais iguais a zero. A matriz resultante possui

todos os termos com um único valor, 8,75, a média dos valores originais dos pixels

[livro]. O resultado é apresentado na matriz X1,a seguir:

Tomando agora a matriz de coeficientes com os dois termos mais significativos,

temos:

Finalmente, tomando a matriz de coeficientes com os cinco termos mais significativos temos:

Comparando X1, X2 e X3, observamos que o resultado da transformada inversa se

aproxima do resultado original à medida que aumentamos o número de termos na

matriz de coeficientes da DCT. Isto mostra que é possível construir uma versão

aproximada da matriz X a partir de um subconjunto dos coeficientes da DCT da matriz

original. Assim, se removermos os coeficientes com magnitude menos significativas,

por exemplo, por quantização da matriz de coeficientes da DCT, podemos representar

os dados com um número reduzido de coeficientes e, consequentemente, com um

número reduzido de bits, ao preço de uma perda de qualidade. Observe que a IDCT

realizada com a matriz de coeficientes completa retorna, praticamente, a matriz X

original (faça esta operação a título de exercício).

Na discussão acima consideramos, por simplicidade, a DCT realizada sobre um

bloco de 4 x 4 pixels. Em geral a DCT é realizada sobre um bloco de 8 x 8 pixels. O

procedimento é exatamente o mesmo descrito acima, apenas trabalhando com matrizes

de maior dimensão.

Para um sinal de vídeo real os coeficientes da DCT tendem a tornarem-se

insignificantes à medida que nos afastamos, tanto verticalmente quanto

horizontalmente, da posição (0,0) (posição correspondente à 1ª linha e 1ª coluna da

matriz de coeficientes), que representa o nível DC do sinal.

5.3.3. Quantização

Um quantizador mapeia o sinal original, que pode assumir um conjunto X de

valores, para um sinal quantizado, que pode assumir um conjunto Y, menor, de valores.

A redução nos valores que o sinal pode assumir permite que o mesmo seja representado por uma quantidade menor de bits.

Os quantizadores podem ser divididos em escalares e vetoriais. Um quantizador

escalar mapeia uma amostra do sinal de entrada para um valor do sinal quantizado,

enquanto um quantizador vetorial mapeia um grupo de amostras de entrada (um vetor)

para um grupo de valores quantizados.

Um quantizador escalar uniforme pode ser representado, de forma geral, pela

equação:

(x)

na qual F 06 4 representa o passo de quantização, X é o sinal na entrada do quantizador

e a função round representa pegar o inteiro mais próximo do argumento da função.

Nos codificadores de vídeo a matriz de coeficientes da DCT passa por um processo

de quantização linear. O objetivo é mapear os coeficientes com valores menos

significativos para zero, permitindo o uso de técnicas de codificação que resultem na

redução do número de bits necessários para transmitir os coeficientes da DCT. Ou seja,

espera-se que a matriz de coeficientes quantizadas seja uma matriz esparsa, com poucos

coeficientes não nulos.

No decodificador, o sinal quantizado passa por um processo inverso, em que se

busca recuperar os valores originais dos coeficientes, com exceção dos coeficientes

transmitidos como zero. No entanto, o processo de quantização não é reversível e os

coeficientes recuperados não possuem os mesmos valores dos coeficientes originais.

Em alguns codificadores de imagem, como no padrão JPEG, o valor de F 06 4 é

especificado em uma matriz, com um valor definido para cada coeficiente da DCT. Em

outros casos, o valor de F 06 4 é fixo para todos os coeficientes da DCT, mas pode variar,

dentro de uma faixa especificada, de um bloco de pixels para outro.

Após a quantização, com o objetivo de agrupar os elementos não nulos da matriz,

os coeficientes quantizados são reordenados. O processo de reordenação leva em conta

a característica, descrita anteriormente, de que os valores dos coeficientes tornam-se

insignificantes à medida que nos afastamos da posição (0,0). Uma forma de reordenação

é denominada de varredura zig-zag, e é ilustrada na Figura 5.22. [RICHARDSON,2003]

Figura 5.22 – Varredura zig-zag para reordenar os coeficientes DCT quantizados.

Após a reordenação os coeficientes podem ser codificados utilizando a técnica denominada run-level, em que cada coeficiente não nulo é representado por um par

(run,level), em que run representa o número de coeficientes nulos que precedem o

coeficiente não nulo e level representa o valor do coeficiente não nulo. Por exemplo, a

sequência 16,0,5,7,0,0,0,0,0,-7,3,0,0,0,0,8.... seria codificada como (0,16), (1,5), (0,7),

(5,-7), (0,3) e (4,8)....

Como a matriz de coeficientes reordenada, normalmente, termina com muitos

coeficientes nulos em sequência, é importante criar uma forma de identificar o último

elemento não nulo da matriz. Uma forma de fazer isto é acrescentar mais um elemento

ao par (run,level), com o objetivo de sinalizar que aquele elemento não nulo é o último

da matriz, dando origem à representação (run,level,last), em que a posição last é feita

igual a 1 para o último elemento não-nulo da matriz. Por exemplo, se na sequência do

parágrafo anterior o coeficiente 8 é seguido apenas de coeficientes nulos (ou seja, ele é

o último não nulo), a codificação resultante seria: (0,16,0), (1,5,0), (0,7,0), (5,-7,0),

(0,3,0) e (4,8,1).

5.3.4. Modelo Temporal

O modelo temporal tem por objetivo reduzir a redundância temporal do sinal. O

processo envolve formar uma predição do quadro e subtrair esta predição do quadro

corrente, formando um quadro residual. Quanto mais eficiente for o modelo temporal, menor será a energia contida no quadro residual. A predição do quadro é feita com base

em um ou mais quadros de referência. Na sua forma mais simples, o quadro anterior é

utilizado como predição para o quadro corrente. Ou seja, o quadro (n – 1) é utilizado

como predição para o quadro n e o quadro residual é utilizado subtraindo o quadro (n

1) do quadro n.

Para melhorar a eficiência do processo de predição utilizam-se algoritmos para

estimação e compensação de movimento o quadro (ou quadros) de referência e o quadro

corrente.

Uma abordagem bastante utilizada para compensação de movimento é a

denominada compensação de movimento baseada em bloco, na qual realiza-se a

operação em seções retangulares de M x N amostras, denominadas blocos, do quadro

corrente. O procedimento, ilustrado na Figura 5.23, consiste basicamente dos seguintes

passos: [RICHARDSON,2003]

1) Para fazer a estimação de movimento o bloco M x N do quadro corrente é

comparado com todas (ou algumas) as possíveis regiões M x N de uma

determinada área de busca (usualmente uma área centrada na posição atual

do bloco) de um quadro de referência1 (que já tenha sido codificado e

transmitido). O objetivo é encontrar o melhor casamento entre o bloco

corrente e a região M x N do quadro de referência. Um critério para definir

o melhor casamento é a energia residual obtida da subtração do bloco

corrente da região M x N candidata; a região M x N que minimiza a energia

residual é escolhida como a região de melhor casamento.

2) A região M x N escolhida no passo 1 é utilizada como preditora para o bloco

M x N corrente. Assim, a região é subtraída do bloco corrente para gerar um bloco residual (que será entregue ao modelo espacial na Figura 5.21). Este

processo é chamado de compensação de movimento.

3) O bloco residual é codificado e transmitido, juntamente com uma

informação que identifica a diferença de posição, denominada vetor de

movimento, entre o bloco corrente e a região M x N escolhida no passo 1.

O decodificador utiliza o vetor de movimento para recriar a região de predição,

decodifica o bloco residual e adiciona o mesmo à região de predição para gerar a versão

decodificada do bloco M x N original.

Figura 5.23 – Ilustração do processo de estimação e compensação de movimento.

1 É interessante observar que o quadro de referência pode ser anterior ou posterior, na ordem de exibição, ao quadro corrente, importando apenas que ele já tenha sido codificado.

Nos principais codificadores de vídeo este processo é realizado em uma região

composta de 16 x 16 pixels, denominada de macrobloco. O tamanho da região influi na

quantidade de energia do quadro residual, com menos energia para menores regiões (o

que permite maior redução na redundância). No entanto, a diminuição do tamanho da

região resulta em mais processamento e, consequentemente, maior complexidade, além

de resultar em um maior número de vetores de movimento. Alguns codificadores, como

o H.264, utilizam tamanhos de bloco adaptativos às características do vídeo, resultando

em um melhor desempenho do processo. [RICHARDSON,2003]

Exercício: A matriz X, abaixo, representa os valores das amostras de luminância de

um sinal de vídeo. Calcule os coeficientes da DCT de X. Reescreva a matriz dos

coeficientes da DCT de X para as seguintes situações: mantendo apenas o coeficiente

mais significativo e fazendo os demais iguais a zero, mantendo os dois mais significativos e fazendo os demais iguais a zero, mantendo os três mais significativos e

fazendo os demais iguais a zero e mantendo os cinco mais significativos e fazendo os

demais iguais a zero. Para cada caso, faça a transformada inversa para recuperar X e

compare a matriz X original com a matriz recuperada.

excelente
Esta é apenas uma pré-visualização
3 mostrados em 13 páginas