• Nenhum resultado encontrado

4.1 Arquitetura Desenvolvida para a Predição de Movimento entre

4.1.3 Arquitetura para a Predição de Movimento

Na arquitetura do módulo de predição de movimento, a predição dos vetores de movimento é realizada usando os vetores de movimento da camada de resolução menor sobreamostrados.

Uma vez que os vetores de movimento de todas as camadas são altamente correlacionados, os vetores de movimento da camada de enriquecimento podem ser derivados a partir dos blocos co-localizados da camada base quando ambos macroblocos da camada base e da camada de enriquecimento são codificados com o modo inter.

O particionamento de macrobloco é obtido pelo upsampling da partição do bloco correspondente na camada base, como mostrado na Figura 4.6. Por exemplo, na Figura 4.6(a), os tamanhos de blocos 8x16 e 8x8 da camada de enriquecimento são obtidos a partir dos blocos 4x8 e 4x4 correspondentes da camada de base. A Figura 4.6(b) demonstra que um macrobloco (16x16) da camada base, quando continua 16x16 ou é quebrado em dois blocos de tamanho 16x8, dois blocos 8x16 ou sofre uma predição direta (16 blocos de tamanho 4x4), é mapeado na camada de enriquecimento para quatro macroblocos (16x16).

(a) (b)

Figura 4.6: Predição das partições de macrobloco entre camadas (Modificada a partir de (LIU et al., 2007)).

Para as partições de macrobloco obtidas, os mesmos índices de referência usados nas partições de submacroblocos correspondentes da camada base são usados na camada de enriquecimento e os vetores de movimento associados são escalonados por um fator de 2, como ilustrado com as setas vbase e v’base na Figura 4.7. Adicionalmente, um refinamento de quarto de pixel pode ser transmitido para cada vetor de movimento. Além disso, um vetor de movimento pode, também, ser predito a partir de seus vizinhos espaciais no macrobloco, como será explicado no decorrer desta subseção.

58

Figura 4.7: Predição dos vetores de movimento entre camadas (Modificada a partir de (LEE et al., 2008)).

A Figura 4.8 apresenta, de forma resumida, como os vetores de movimento e os modos de particionamento devem ser preditos, a partir da camada base, para a camada de enriquecimento. No exemplo da Figura 4.8 é apresentado o caso diádico entre as camadas, mostrando como ocorre a predição de movimento entre elas.

Figura 4.8: Predição das informações de movimento a partir da camada base (Modificada a partir de (AN; NGUYEN, 2006)).

Um macrobloco da camada de enriquecimento pode explorar a predição entre camadas usando os dados de movimento da camada base através do modo

base_layer_mode. O uso deste modo é definido quando base_mode_flag é igual a “1”,

dessa forma, o macrobloco da camada de enriquecimento é reconstruído com dados de movimento deduzidos a partir da camada base. Este modo fica disponível para os macroblocos da camada de enriquecimento somente se houverem blocos co-localizados na camada base.

No entanto, se base_mode_flag é igual a “0” ainda é possível que os dados da camada base sejam usados como referência e isso será determinado pelo valor do elemento sintático motion_prediction_flag, como será explicado nos próximos parágrafos.

A Figura 4.9 mostra as operações de somas e deslocamentos que foram implementadas para encontrar a posição do bloco 4x4 co-localizado na camada base.

59

Figura 4.9: Localização de um bloco 4x4 co-localizado na camada base.

A partir das coordenadas (x, y) de um bloco 4x4 da camada de enriquecimento, representadas como b4xE e b4yE na Figura 4.9(a), são calculadas as coordenadas do

pixel superior esquerdo desse bloco 4x4 (x0, y0) e, a partir dessas coordenadas, é

possível calcular as coordenadas do pixel do bloco co-localizado na base (xB, yB). A partir das coordenadas (xB, yB) do pixel do bloco 4x4 da base é possível calcular, a posição (mbxB, mbyB) do macrobloco co-localizado na base, conforme as equações (3.5) e (3.6) apresentadas na subseção 3.2.1.

De posse destas informações, é possível calcular as coordenadas dos blocos 8x8 (b8xB, b8yB) e 4x4 (b4xB, b4yB) co-localizados na camada base. Como exemplo, a Figura 4.9(b) apresenta o cálculo da coordenada x de um bloco 8x8 co-localizado na camada base, em consonância com a equação (3.7) e, a Figura 4.9(c) apresenta o cálculo da coordenada x de um bloco 4x4 co-localizado na base, de acordo com a equação (3.9). Ambas as equações (3.7) e (3.9) estão apresentadas na subseção 3.2.1 desta dissertação. Depois de calcular a posição do bloco 4x4 co-localizado na base, considerando que

base_mode_flag = 1 ou motion_prediction_flag igual a “1”, é necessário encontrar esse

bloco na memória, e comparar se o endereço (posição) do bloco 4x4 armazenado na memória é igual à posição do bloco 4x4 calculada, conforme ilustrado no fluxograma da Figura 4.10. No fluxograma, é exemplificada somente a pesquisa em memória da coordenada x do bloco 4x4 co-localizado, representada por b4xB.

Encontrado o bloco correspondente, é realizado um teste no último bit da palavra de memória selecionada, para verificar se o macrobloco que contém esse bloco é intra ou inter e, consequentemente, se o bloco em questão é inter ou intra. Caso seja intra, não será possível realizar a predição de movimento, que é restrita a blocos decodificados com o modo inter. Caso o macrobloco seja inter, segue-se o caminho indicado no fluxograma da Figura 4.10. Desta forma, quando base_mode_flag é igual a “1” e

motion_prediction_flag é igual a “0”, os vetores de movimento (MVs) e índices de

referência (Refs) são derivados a partir da camada base e não há refinamento (ITU-T, 2007).

60

Figura 4.10: Fluxograma do módulo de predição de movimento entre camadas. Quando base_mode_flag é igual a “0” e motion_prediction_flag é igual a “1”, os vetores de movimento são preditos a partir da camada base e as informações de particionamento do macrobloco e refinamento dos vetores são transmitidos no

bitstream.

Para identificar o refinamento é necessário verificar o valor do vetor de movimento diferencial (mvd), que é transmitido no bitstream. Este mvd é o mesmo que é transmitido no H.264/AVC, exceto que no H.264/SVC, quando motion_prediction_flag é igual a “1”, o mvd transmitido no bitstream é adicionado aos vetores de movimento escalonados a partir da camada base, e não aos vetores de movimento preditos a partir dos vizinhos espaciais. Este refinamento só ocorre quando base_mode_flag é igual a “0” e motion_prediction_flag é igual a “1”.

Somente quando base_mode_flag igual a “0” e motion_predicition_flag igual a “0”, os dados de movimento da camada de enriquecimento são preditos a partir de seus vizinhos espaciais, conforme o padrão H.264/AVC. O caso em que base_mode_flag igual a “1” e motion_predicition_flag igual a “1” não ocorre no H.264/SVC (ITU-T, 2007).