• No results found

2 Background

2.3 Environmental footprints

Tipicamente, predições interquadros são utilizadas em todos os quadros de uma sequência de vídeo que não o primeiro quadro, denominado um random access point. O padrão H.264/AVC especifica vários tipos de codificação por compensação de movimento para P-slices. Cada macrobloco do tipo P, com tamanho de 16x16 pixels, é particionado em blocos de tamanho fixo usados para a descrição do movimento. São suportados particionamentos com tamanhos de bloco luma de 16x16, 16x8, 8x16 e 8x8, com as respectivas amostras chroma associadas, os quais correspondem, respectivamente, a tipos de macrobloco P Inter-16x16, Inter-16x8, Inter-8x16 e Inter-8x8. Assim, há quatro distribuições possíveis: uma partição 16x16, duas partições 8x16, duas partições 16x8 ou quatro partições 8x8. O particionamento em 16x16 (Inter-16x16) cobre todo o macrobloco, por ter exatamente o seu tamanho (ver Figura 2.9) [24].

Quando um macrobloco é particionado em blocos de amostras luma de tamanho 8x8 (com as amostras chroma associadas), são criados quatro submacroblocos. Cada um desses submacroblocos subdivide-se em uma partição de submacrobloco, com tamanho 8x8 (igual ao do submacrobloco), em duas partições com tamanhos 4x8 ou 8x4, ou em quatro partições com tamanho 4x4. Nesse caso, um elemento extra de sintaxe tem de ser transmitido para cada um das quatro partições de submacroblocos. A função desse elemento é especificar se cada partição de submacrobloco está codificada usando predição por compensação de movimento com blocos luma de tamanho 8x8, 8x4, 4x8 ou 4x4 [24].

25

Figura 2.9: Particionamento de macroblocos e submacroblocos.

Uma partição de macrobloco ou de submacrobloco de uma slice P possui um vetor de movimento que aponta para uma área de mesmo tamanho em um quadro de referência. Sendo uma slice B, no entanto, a partição pode ter um ou dois quadros de referência e, consequentemente, um ou dois vetores de movimento. O(s) vetor(es) de movimento devem apontar para uma área de mesmo tamanho da partição sendo predita. A seleção de quais quadros de referência serão usados é feita no nível das partições do macrobloco. Diferentes partições de macrobloco podem referenciar quadros distintos para gerarem suas predições. As partições de submacrobloco, no entanto, devem referenciar sempre o(s) mesmo(s) quadro(s) [24].

Como exemplo, se um macrobloco for codificado usando-se o tipo Inter-8x8, e, por sua vez, cada partição de submacrobloco for codificado usando-se o tipo Inter-4x4, dezesseis vetores de movimento seriam transmitidos para um único macrobloco P-slice. Um macrobloco luma de 16x16 seria, então, particionado em 16 blocos de tamanho 4x4.

O esquema de subparticionamento descrito exige um maior número de bits para a descrição dos vetores de movimento e para os dados extras do tipo de partição. Em compensação, tendo sido feita a escolha correta de particionamento, reduzem-se os dados residuais a serem transmitidos. Assim, a escolha do tipo de particionamento depende diretamente das características do vídeo de entrada. De forma geral, tamanhos maiores de sub-blocos são indicados para áreas homogêneas de um quadro, ao passo que tamanhos menores normalmente se mostram mais adequados para áreas com mais detalhes. Alguns formatos antecessores, como o H.263 e o MPEG-4 Visual, suportam apenas blocos de dois tamanhos, 16x16 e 8x8 [18]. particionamentos dos macroblocos particionamentos dos submacroblocos 16x16 16x8 8x16 8x8 8x8 8x4 4x8 4x4 submacrobloco

26

O sinal de predição para cada bloco luma MxN é obtido deslocando-se uma área do quadro de referência correspondente. Essa área é especificada por um vetor de movimento translacional e um índice de referência de quadro. Esse vetor de movimento pode apontar para posições que sejam amostras inteiras, metade de amostras ou mesmo 1/4 de amostras dos componentes luma de um quadro de referência. As amostras fracionadas (1/2 e 1/4) são calculadas pela interpolação de amostras do quadro de referência. Cada vetor de movimento é diferencialmente codificado a partir de vetores de movimento de quadros vizinhos [24].

Essa citada interpolação dos quadros de referência se dá da forma a seguir descrita. Cada partição de um macrobloco intercodificado é predito a partir de uma área do mesmo tamanho pertencente ao quadro de referência. O vetor de movimento (distância relativa entre as duas áreas) tem resolução de 1/4 de pixel, para o componente luma, e 1/8 de pixel, para os componentes chroma, no formato 4:2:0. As amostras luma e chroma em posições subpixel, por não existirem no quadro de referência, são criadas por meio de interpolação de regiões vizinhas do quadro de referência. Se os componentes vertical e horizontal do vetor de movimento são inteiros, as amostras relevantes no bloco de referência existem, e podem ser diretamente referenciadas. Se um ou ambos os componentes do vetor de movimento têm valores fracionados, as amostras preditas são geradas por meio de interpolação entre amostras adjacentes no quadro de referência [24].

A sintaxe do padrão H.264/AVC geralmente permite vetores de movimento irrestritos, ou seja, permite que os vetores de movimento apontem para fora da área de imagem. Quando isso ocorre, o quadro de referência é estendido para além dos limites da imagem. Isso é feito repetindo-se os pixels da fronteira da imagem antes da interpolação. Uma ressalva é que predições por compensação de movimento não podem extrapolar os limites da slice [24].

Os vetores de movimento são calculados e transmitidos para cada bloco, e têm a função de informar qual área de um de um determinado quadro já codificado foi usada para a predição. Em padrões MPEG anteriores, o quadro de referência é o quadro prévio mais recente. O padrão H.264/AVC, no entanto, abre a possibilidade de referências a múltiplos quadros. Assim, um bloco pode ser predito a partir de uma única região de um quadro de referência, no caso de macroblocos P ou B, ou a partir de duas regiões pertencentes a dois quadros de referência, no caso de macroblocos B (bipredição) [24].

27

Outra forma de predição, denominada predição “com peso” (weighted prediction), é usada em macroblocos pertencentes a slices P ou B. A ideia é atribuir um fator (peso) a cada amostra antes de predição a ser calculada. O cálculo do fator se dá de duas formas distintas: explícito ou implícito. No modo explícito, suportado tanto por slices P quanto por

slices B, o fator é calculado pelo codificador e transmitido no cabeçalho da slice. No modo

implícito, suportado somente por slices B, o fator é calculado com base nas posições temporais dos quadros de referência. Assim, um fator mais pesado pode ser aplicado se o quadro de referência está temporalmente próximo do quadro atual. Quadros temporalmente mais distantes recebem, dessa forma, fatores mais leves. Ambas as formas, explícita e implícita, têm a função de permitir controle sobre as contribuições relativas dos quadros de referência. Um uso típico seria na transição entre duas cenas com efeito de fading [30].

A transmissão de um vetor de movimento para cada partição de macrobloco ou de submacrobloco tem um impacto negativo no tamanho do bitstream. Quanto mais particionados forem os macroblocos, maior será o custo em bits. Ocorre que, com grande frequência, partições vizinhas têm vetores de movimento bastante correlacionados. Utilizando-se dessa correlação, os vetores de movimento podem ser preditos a partir de outros vetores já calculados para partições vizinhas. O que é codificado e transmitido, nesse caso, é a diferença entre o vetor atual (que deve ser calculado) e o vetor predito. Esse tipo de predição de vetor de movimento, para ser utilizado, depende da disponibilidade de vetores de movimento próximos e do tamanho das partições [18].

Macroblocos P-slice (macroblocos do tipo P) podem ser codificados em um modo conhecido como skip. Um macrobloco é marcado como skipped se i) contiver somente coeficientes da transformada quantizados que tenham valor zero e ii) possuir características que permitam que seu movimento seja predito a partir do movimento de macroblocos vizinhos (predição espacial). O ganho de eficiência se dá porque se retira a necessidade de transmissão dos vetores de movimento, dos parâmetros do índice de referência e do sinal quantizado do erro de predição. Uma vantagem desse modo em relação a modos similares de padrões antecessores é o fato de o vetor de movimento usado para a reconstrução do macrobloco skipped ser inferido das propriedades de movimento de macroblocos vizinhos, ao invés de ser deduzido como zero. A decodificação se dá de maneira similar à de um macrobloco predito de tamanho 16x16 que referencie o quadro, localizado na posição zero do índice do buffer [24].

28

Em macroblocos do tipo B-slice, as predições temporais podem ser calculadas através de dois vetores de movimento representando duas estimativas do movimento por partição de macrobloco ou de submacrobloco. São utilizados, nesse caso, dois buffers de quadros de referência, gerenciados pelo controle de buffer. Em uma inovação em relação a padrões anteriores, no H.264/AVC essas predições podem se dar a partir de quadros de referência tanto anteriores quanto posteriores na ordem de exibição. A predição, nesse caso, é calculada através de uma média ponderada dos valores dos pixels dos quadros de referência. Assim como ocorre com as P-slices, há um limite máximo no número de quadros utilizáveis para essa estimativa de movimento, especificado para cada nível (level), e as partições de submacrobloco devem referenciar os mesmos quadros [24].