ver/abrir - Repositório do Departamento de Ciência da Computação

Transcrição

ver/abrir - Repositório do Departamento de Ciência da Computação
Universidade de Brasília
Instituto de Ciências Exatas
Departamento de Ciência da Computação
Sistema de Correção de Erros em Transmissões de
Vídeo Digital Utilizando Vista Prévia
Diego Carvalho Souza
Monografia apresentada como requisito parcial
para conclusão do Bacharelado em Ciência da Computação
Orientador
Prof. Dr. Bruno Luiggi Macchiavello Espinoza
Brasília
2011
Universidade de Brasília — UnB
Instituto de Ciências Exatas
Departamento de Ciência da Computação
Bacharelado em Ciência da Computação
Coordenador: Prof. Dr. Maurício Lamar
Banca examinadora composta por:
Prof. Dr. Bruno Luiggi Macchiavello Espinoza (Orientador) — CIC/UnB
Prof. Dr. Camilo Chang Dórea — CIC/UnB
Prof. Dr. Alexandre Zaghetto — CIC/UnB
CIP — Catalogação Internacional na Publicação
Souza, Diego Carvalho.
Sistema de Correção de Erros em Transmissões de Vídeo Digital Utilizando Vista Prévia / Diego Carvalho Souza. Brasília : UnB, 2011.
197 p. : il. ; 29,5 cm.
Monografia (Graduação) — Universidade de Brasília, Brasília, 2011.
1. H.264, 2. Codificação, 3. Streaming, 4. Compressão, 5. Vídeo
Digital, 6. Baixa Latência, 7. Robustez à Erros, 8. Ocultamento de
Erros, 9. Alta Definição
CDU 004.4
Endereço:
Universidade de Brasília
Campus Universitário Darcy Ribeiro — Asa Norte
CEP 70910-900
Brasília–DF — Brasil
Universidade de Brasília
Instituto de Ciências Exatas
Departamento de Ciência da Computação
Sistema de Correção de Erros em Transmissões de
Vídeo Digital Utilizando Vista Prévia
Diego Carvalho Souza
Monografia apresentada como requisito parcial
para conclusão do Bacharelado em Ciência da Computação
Prof. Dr. Bruno Luiggi Macchiavello Espinoza (Orientador)
CIC/UnB
Prof. Dr. Camilo Chang Dórea
CIC/UnB
Prof. Dr. Alexandre Zaghetto
CIC/UnB
Prof. Dr. Maurício Lamar
Coordenador do Bacharelado em Ciência da Computação
Brasília, 08 de Fevereiro de 2011
Dedicatória
Eu dedico este trabalho, assim como todas as minhas realizações, única e inequivocamente, à minha mãe. Agradeço por ser meu anjo vigilante, por me oferecer seu amor
infinito, sua dedicação intensa e seu apoio incondicional. Te amo!
i
Agradecimentos
À minha família: meu padrasto João, meu maior professor, por ser meu modelo de
homem. Minhas irmãs Aline e Luana por me suportarem assim como eu suporto meus
sobrinhos João Pedro, Lucca, Geovanna e Sophia, que alegram até meus dias mais mal humorados. E ao meu pai Osvaldo que, mesmo distante, é meu maior exemplo de humildade
e dignidade.
Aos meus amigos de faculdade: Marcos Antônio, meu grande amigo que compartilhou
comigo momentos difíceis de estudos de madrugada e momentos felizes de truco e risadas,
além, é claro, de suas pérolas, as quais a ausência tornaria o curso menos suportável.
E Daniel Saad, pelo companheirismo, por me ajudar diversas vezes durante o curso em
trabalhos infindáveis e dividir comigo os almoços no Careca. Agradeço também àqueles
amigos não tão próximos, mas que compartilharam comigo esses nove semestres de computação: Raul, Zucca, Lino, Zumba, Gabi, Dudu, Cristiano, Luíza, Mayara, Rafa, Melão,
Danete, Asari, Danilo, Capu, Davi, etc.
Aos meus amigos: Danilo, meu grande irmão, simplesmente por estar sempre comigo
e não me deixar desistir e ao meu outro irmão, Índio, à quem eu devo muito na minha
formação por me ajudar diversas vezes, sempre solícito e disponível.
À minha namorada Dedê, que sempre me animou e entendeu minhas ausências e angústias. Obrigado por sempre me dar força, me servir de companhia e, claro, me ajudar a
fazer a correção ortográfica desta monografia. Sem você, tudo ficaria infinitamente mais
difícil.
Aos meus amigos de ensino médio: Tuca, Carol, Cissa, Alice, Nikito, Esmeras, George,
Thiago, etc, que sempre estarão comigo e aos meus amigos de forró e futebol. Obrigado
pelos momentos de descontração que me ajudaram a manter a sanidade.
Ao meu orientador, Dr. Bruno Macchiavello, por ler e responder os mais de 184 emails. Obrigado pela atenção, compreensão, flexibilidade, paciência e por estar sempre
disponível quando precisei de auxílio.
Meus sinceros agradecimentos a todos aqueles que, de alguma maneira, doaram um
pouco de si para tornar este trabalho possível. Vocês estarão sempre guardados no peito
e na memória. Obrigado.
ii
Resumo
Neste trabalho, buscou-se implementar e melhorar um método de ocultamento de erros
em transmissão de sinal de vídeo digital chamado RECAP (Receiver Error Concealment
using Acknowledge Preview ). Este método propõe a estimação de dados perdidos através
de um sinal adicional de baixa resolução e baixa latência (chamado Vista Prévia) que é
enviado em conjunto com o sinal original codificado (chamado Vista Principal). Ambos os
sinais são codificados e enviados separadamente ao decodificador. Este decodifica os sinais
e os envia a um detector de erros que verifica a consistência dos macroblocos e envia as
informações de macroblocos perdidos ou corrompidos à um ocultador de erros que tenta
estimá-los utilizando macroblocos de quadros anteriores decodificados do próprio sinal
original ou macroblocos de quadros correspondentes corretamente decodificados do sinal
da vista prévia. As análises finais aferem que a técnica proposta consegue resultados
satisfatórios tanto para perdas isoladas de macroblocos quanto para perdas integrais de
quadros. Além do método proposto, são apresentados os cenários de simulação de testes,
resultados e contribuições. Também são discutidos problemas, consequências e possíveis
projetos futuros.
Palavras-chave: H.264, Codificação, Streaming, Compressão, Vídeo Digital, Baixa Latência, Robustez à Erros, Ocultamento de Erros, Alta Definição
iii
Abstract
In this project, we aim to implement and improve an error concealment technique
in digital signal video transmission named RECAP (Receiver Error Concealment using
Acknowledge Preview). This technique proposes a data loss estimation using a low-latency
and low-resolution additional signal (referred as the preview view) which is sent jointly
with the coded bit-stream of the original signal (referred as the main view). Both signals
are coded and sent apart to the decoder that decodes these streams and sends them to an
error detector which tests the macroblock’s consistency and sends information about the
lost or corrupted macroblocks to an error concealer. The error concealer tries to estimate
corrupted blocks using macroblocks from previous decoded frames of the main view or colocated macroblocks from the preview view. The results show that the proposed technique
achieves satisfying results for both, isolated and bursty losses. We present the simulation
scenarios, results and contributions. We also discuss the problems, effects and possible
future projects.
Keywords: H.264, Coding, Streaming, Compression, Digital Video, Low Latency, Error
Resiliency, Error Concealment, High Definition
iv
Sumário
1 INTRODUÇÃO
1.1 Apresentação do Problema
1.2 Objetivos Gerais . . . . .
1.3 Objetivos Específicos . . .
1.4 Revisão Bibliográfica . . .
1.5 Organização . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
2
2
3
3
4
2 CODIFICAÇÃO DE DADOS
2.1 Conceitos Fundamentais . . . . . .
2.2 Codificação de Fonte . . . . . . . .
2.2.1 Codificação sem Perdas . . .
2.2.2 Codificação com Perdas . .
2.3 Codificação de Canal . . . . . . . .
2.3.1 Informação Mútua . . . . .
2.3.2 Capacidade do Canal . . . .
2.3.3 Códigos Corretores de Erro
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
6
6
7
7
7
7
8
.
.
.
.
.
.
.
.
.
.
.
.
.
9
9
10
11
12
15
18
20
22
24
27
28
30
30
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3 CODIFICAÇÃO DE VÍDEO DIGITAL
3.1 Conceitos de Vídeo Digital . . . . . . . . . . . .
3.2 Codificação de Vídeo Digital . . . . . . . . . . .
3.2.1 Modelo Temporal . . . . . . . . . . . . .
3.2.2 Estimação e Compensação de Movimento
3.2.3 Modelo Espacial . . . . . . . . . . . . . .
3.2.4 Quantização . . . . . . . . . . . . . . . .
3.2.5 Controle de Erros em Sinal de Vídeo . .
3.2.6 Codificadores de Entropia . . . . . . . .
3.3 H.264/MPEG-4 AVC . . . . . . . . . . . . . . .
3.3.1 Predição Intra . . . . . . . . . . . . . . .
3.3.2 Predição Inter . . . . . . . . . . . . . . .
3.3.3 Transformada e Quantização . . . . . . .
3.3.4 Codificação de Entropia . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4 SISTEMA DE CORREÇÃO DE ERROS UTILIZANDO VISTA PRÉVIA
4.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 RECAP (Receiver Error Concealment Using Acknowledge Preview ) . . . .
4.2.1 Fluxo de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
v
31
31
33
34
4.2.2
4.2.3
4.2.4
4.2.5
4.2.6
Etapa
Etapa
Etapa
Etapa
Etapa
de
de
de
de
de
Codificação . . . . .
Decodificação . . . .
Redimensionamento
Detecção de Erros .
Ocultação de Erros .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
35
38
39
39
44
5 RESULTADOS E ANÁLISES
5.1 Sequências de Teste . . . . . . . . . . . . . . . . . . . . . .
5.1.1 Medida Objetiva de Qualidade . . . . . . . . . . . .
5.2 Cenários de Simulação . . . . . . . . . . . . . . . . . . . .
5.2.1 Simulação de canal de retorno. . . . . . . . . . . . .
5.2.2 Simulação de erros . . . . . . . . . . . . . . . . . .
5.2.3 Simulação com Vetor de Limiares . . . . . . . . . .
5.2.4 Simulação com Limiar baseado no Primeiro Quadro
5.3 Apresentação e análise de testes . . . . . . . . . . . . . . .
5.3.1 Utilizando Vetor de Limiares . . . . . . . . . . . . .
5.3.2 Utilizando Limiar baseado no Primeiro Quadro . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
49
49
51
52
52
52
53
53
55
55
73
6 CONCLUSÃO
83
6.1 Apresentação das Contribuições . . . . . . . . . . . . . . . . . . . . . . . . 84
6.2 Perspectiva para Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . 84
Referências
85
vi
Lista de Figuras
2.1
2.2
Diagrama de um sistema genérico de comunicação. . . . . . . . . . . . . .
Compressão de fonte sem perdas. . . . . . . . . . . . . . . . . . . . . . . .
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
3.10
3.11
3.12
3.13
3.14
3.15
3.16
3.17
3.18
3.19
3.20
Elementos de uma sequência de vídeo digital. . . . . . . . . . . . .
Diagrama de um codificador genérico. . . . . . . . . . . . . . . . . .
Quadros estimados. . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fluxo Óptico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Estimação de Movimento. . . . . . . . . . . . . . . . . . . . . . . .
Predição temporal de quadros. . . . . . . . . . . . . . . . . . . . . .
Resíduos com compensação de movimento. . . . . . . . . . . . . . .
DCT com base 4×4 [1]. . . . . . . . . . . . . . . . . . . . . . . . . .
DCT com base 8×8 [1]. . . . . . . . . . . . . . . . . . . . . . . . . .
Seção de uma imagem com um bloco 4×4 em destaque [1]. . . . . .
Resultado da Transformada [1]. . . . . . . . . . . . . . . . . . . . .
Blocos reconstruídos com um, dois, três e cinco coeficientes [1]. . . .
Codificador Fonte-Canal separado. . . . . . . . . . . . . . . . . . .
Codificador H.264 e suas unidades funcionais básicas. . . . . . . . .
Decodificador H.264 e suas unidades funcionais básicas. . . . . . . .
Perfil Baseline, Main, Extended e High. . . . . . . . . . . . . . . . .
Rótulos das amostras e direções de predição (4×4) [1]. . . . . . . .
Métodos de predição intra para blocos de luminância de 16×16 [1].
Métodos de predição intra para blocos de luminância de 4×4 [1]. . .
Possibilidades de partição de um macrobloco [1]. . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
4.10
4.11
4.12
4.13
Padrão checkerboard do algoritmo FMO em um quadro da sequência
Funcionamento básico do método proposto. . . . . . . . . . . . . . .
Diagrama de Blocos. . . . . . . . . . . . . . . . . . . . . . . . . . .
Informações de codificação. . . . . . . . . . . . . . . . . . . . . . . .
Arquivos de saída da codificação. . . . . . . . . . . . . . . . . . . .
Reordenação dos quadros. . . . . . . . . . . . . . . . . . . . . . . .
Reordenação dos quadros. . . . . . . . . . . . . . . . . . . . . . . .
Decimação - Reconstruído e seu respectivo decimado. . . . . . . . .
Cálculo de Limiares da Vista Prévia. . . . . . . . . . . . . . . . . .
Vetor de Limiares da Vista Prévia. . . . . . . . . . . . . . . . . . .
Cálculo de Limiares da Vista Principal. . . . . . . . . . . . . . . . .
Vetor de Limiares da Vista Principal. . . . . . . . . . . . . . . . . .
Comparação do bloco reconstruído com o bloco do Preview. . . . .
Mobile.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
vii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
6
10
11
12
13
14
15
16
17
18
19
19
20
22
24
25
27
28
29
29
30
32
33
34
36
36
37
38
39
40
40
41
41
42
4.14
4.15
4.16
4.17
4.18
4.19
4.20
4.21
4.22
4.23
Comparação do bloco reconstruído com o bloco do quadro anterior.
Perda de bloco isolado no quadro da vista prévia. . . . . . . . . . .
Perda de bloco isolado no quadro da vista principal. . . . . . . . . .
Perda de bloco correspondente completo em ambas as vistas. . . . .
Perda de quadro completo na vista prévia. . . . . . . . . . . . . . .
Perda de quadro completo na vista principal. . . . . . . . . . . . . .
Perda de quadro correspondente em ambas as vistas. . . . . . . . .
Alta frequência. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exemplo de Janela de Buscas. . . . . . . . . . . . . . . . . . . . . .
Quadros da sequência Foreman. . . . . . . . . . . . . . . . . . . . .
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
5.9
5.10
5.11
5.12
5.13
5.14
5.15
5.16
5.17
5.18
5.19
5.20
5.21
5.22
5.23
5.24
5.25
5.26
5.27
5.28
5.29
5.30
5.31
5.32
5.33
5.34
5.35
Informações básicas das sequências utilizadas. . . . . . . . . . . . . . . . .
Descrição de conteúdo das sequências utilizadas. . . . . . . . . . . . . . . .
Quadros das sequências utilizadas. . . . . . . . . . . . . . . . . . . . . . . .
RECAP modificado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Simulação de canal de retorno na vista prévia. . . . . . . . . . . . . . . . .
Perfis de erros na vista principal e/ou vista prévia. . . . . . . . . . . . . .
Sequência Foreman - Erro na Vista Principal - 1 Quadro de Atraso . . . .
Sequência Foreman - Erros na Vista Principal - 1 Quadro de Atraso . . . .
Sequência Akiyo - Erros na Vista Principal - 1 Quadro de Atraso . . . . .
Sequência Mobile - Erros na Vista Principal - 1 Quadro de Atraso . . . . .
Sequência City - Erros na Vista Principal - 1 Quadro de Atraso . . . . . .
Sequência Foreman - Erro na Vista Principal - 3 Quadros de Atraso . . . .
Sequência Foreman - Erros na Vista Principal - 3 Quadros de Atraso . . .
Sequência Akiyo - Erros na Vista Principal - 3 Quadros de Atraso . . . . .
Sequência Mobile - Erros na Vista Principal - 3 Quadros de Atraso . . . .
Sequência City - Erros na Vista Principal - 3 Quadros de Atraso . . . . . .
Sequência Foreman - Erro na Vista Principal - 6 Quadros de Atraso . . . .
Sequência Foreman - Erros na Vista Principal - 6 Quadros de Atraso . . .
Sequência Akiyo - Erros na Vista Principal - 6 Quadros de Atraso . . . . .
Sequência Mobile - Erros na Vista Principal - 6 Quadros de Atraso . . . .
Sequência City - Erros na Vista Principal - 6 Quadros de Atraso . . . . . .
Sequência Foreman - Perda integral na Vista Principal - 1 Quadro de Atraso
Sequência Foreman - Perda integral na Vista Principal - 1 Quadro de Atraso
Sequência Foreman - Erros na Vista Prévia e Principal - 1 Quadros de Atraso
Sequência Akiyo - Erros na Vista Prévia e Principal - 1 Quadros de Atraso
Sequência Mobile - Erros na Vista Prévia e Principal - 1 Quadro de Atraso
Sequência City - Erros na Vista Prévia e Principal - 1 Quadro de Atraso .
Sequência Foreman - Erros na Vista Prévia e Principal - 3 Quadros de Atraso
Sequência Akiyo - Erros na Vista Prévia e Principal - 3 Quadros de Atraso
Sequência Mobile - Erros na Vista Prévia e Principal - 3 Quadros de Atraso
Sequência City - Erros na Vista Prévia e Principal - 3 Quadros de Atraso .
Sequência Foreman - Erros na Vista Prévia e Principal - 6 Quadros de Atraso
Sequência Akiyo - Erros na Vista Prévia e Principal - 6 Quadros de Atraso
Sequência Mobile - Erros na Vista Prévia e Principal - 6 Quadros de Atraso
Sequência City - Erros na Vista Prévia e Principal - 6 Quadros de Atraso .
viii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
43
44
44
45
45
45
46
46
47
48
49
50
51
52
53
54
55
56
56
57
57
58
58
59
59
60
60
61
61
62
62
63
63
65
65
66
66
67
67
68
68
69
69
70
70
5.36
5.37
5.38
5.39
5.40
5.41
5.42
5.43
5.44
5.45
5.46
5.47
5.48
5.49
5.50
5.51
5.52
5.53
5.54
5.55
Sequência Foreman - Perda integral na Vista Principal/Prévia . . . . . . .
Sequência Foreman - Perda integral na Vista Principal/Prévia . . . . . . .
Sequência Foreman - Perda integral na Vista Principal/Prévia . . . . . . .
Sequência Foreman - Erros na Vista Principal - 1 Quadro de Atraso . . . .
Sequência Akiyo - Erros na Vista Principal - 1 Quadro de Atraso . . . . .
Sequência Foreman - Erros na Vista Principal - 3 Quadros de Atraso . . .
Sequência Akiyo - Erros na Vista Principal - 3 Quadros de Atraso . . . . .
Sequência Foreman - Erros na Vista Principal - 6 Quadros de Atraso . . .
Sequência Akiyo - Erros na Vista Principal - 6 Quadros de Atraso . . . . .
Sequência Foreman - Perda Integral na Vista Principal - 1 Quadro de Atraso
Sequência Foreman - Perda Integral na Vista Principal - 1 Quadro de Atraso
Sequência Foreman - Erros na Vista Prévia e Principal - 1 Quadro de Atraso
Sequência Akiyo - Erros na Vista Prévia e Principal - 1 Quadro de Atraso
Sequência Foreman - Erros na Vista Prévia e Principal - 3 Quadros de Atraso
Sequência Akiyo - Erros na Vista Prévia e Principal - 3 Quadros de Atraso
Sequência Foreman - Erros na Vista Prévia e Principal - 6 Quadros de Atraso
Sequência Akiyo - Erros na Vista Prévia e Principal - 6 Quadros de Atraso
Sequência Foreman - Perda integral na Vista Principal/Prévia . . . . . . .
Sequência Foreman - Perda integral na Vista Principal/Prévia . . . . . . .
Sequência Foreman - Perda integral na Vista Principal/Prévia . . . . . . .
ix
71
71
72
73
73
74
74
75
75
77
77
78
78
79
79
80
80
81
81
82
SIGLAS, ABREVIAÇÕES E
ACRÔNIMOS
AVC
BNM
CABAC
CAVCL
CODEC
DCT
DVD
DWT
FEC
FMO
H.264
IDCT
IEC
IP
ISO
ITU
JPEG2000
LDPC
MPEG
MSE
PRISM
PSNR
QP
RECAP
SEA
SLEP
SNR
TCP
TV
UEP
VCEG
YUV
Advanced Video Coding
Best Neighborhood Matching
Context-based Adaptative Binary Arithmetic Coding
Context-based Adaptative Variable Length Coding
Codificador/Decodificador
Discrete Cosine Transform
Digital Versatile Disc
Discrete Wavelet Transform
Forward Error Correction
Flexible Macroblock Order
Padrão de Codificação de Vídeo
Inverse Discrete Cosine Transform
International Electrotechnical Commission
Internet Protocol
International Organization for Standardization
International Telecommunication Union
Joint Photographic Experts Group 2000
Low-Density Parity-Check Codes
Moving Picture Experts Group
Mean Square Error
Power-efficient Robust high-compression Syndromebased Multimedia coding
Peak Signal-to-Noise Ratio
Quantiser Parameter
Receiver Error Concealment using Acknowledge Preview
Soma de Erros Absolutos
Systematic Lossy Error Protection
Signal-to-Noise Ration
Transmission Control Protocol
Televisão
Unequal Error Protection
Video Coding Experts Group
Espaço de Crominância e Luminância
x
Capítulo 1
INTRODUÇÃO
O processamento digital de sinais é o estudo das regras e características que governam
o comportamento dos sinais discretos, assim com os sistemas utilizados para processar
os sinais [2]. Ele é extremamente útil em muitas áreas, tais como engenharia biomédica,
sistemas de comunicação robótica, sensoriamento remoto, etc. Dada a grande variedade
de sinais existentes na natureza, o processamento digital de sinais pode ser dividido em
sub-áreas como o processamento digital de imagens, processamento digital de áudio, processamento de voz, processamento de sinais biométricos, etc.
Um dos campos mais proeminentes do processamento digital de sinais é o processamento
digital de imagens que, recentemente, vem sendo objeto de grande interesse de vários
ramos da atividade humana, os quais têm sido beneficiados a partir de seus avanços, como
Medicina, Biologia, Geografia, Metereologia, Astronomia, etc. Dentro do processamento
de imagens, uma área importante é a codificação e compressão de imagens e vídeo digital.
Hoje em dia o acesso a imagens e vídeo digital é mais comum e até imprescindível
em algumas aplicações. Muitos aparelhos eletrônicos, como telefones celulares, possuem
câmeras para capturar imagens e/ou vídeo. Logo, uma transmissão ou armazenamento
eficiente destes sinais se torna indispensável. As técnicas de codificação de vídeo e imagens
são baseadas na diminuição da redundância presente no sinal. A codificação pode ser feita
com ou sem perdas, sendo que a codificação com perdas permite que certa informação
(não relevante para uma determinada aplicação) seja eliminada.
Atualmente, com o boom de tecnologias como TV Digital, streaming de vídeo, DVD,
blu-ray e aplicativos de vídeoconferência, a compressão de vídeo se torna essencial para
todas as categorias de mídia digital. Hoje em dia, o padrão mais popular de codificação de
vídeo é o H.264/AVC, que busca prover qualidade semelhante aos seus antecessores, porém
alcançando melhores taxas de compressão, sem ser impraticável computacionalmente nem
inviável economicamente. Além disso, deve suportar transmissão robusta e eficiente de
vídeos para os mais diversos perfis de aplicações, redes e sistemas.
Uma das aplicações potenciais compreendida pelo padrão H.264/AVC é a videoconferência, que se tornou possível utilizando computadores pessoais em meados da década
de 90 e que se popularizou em 2003, coincidindo o lançamento do aplicativo Skype [3].
1
Sabe-se que este perfil de aplicação necessita de alta resolução e baixa latência para que
reproduza uma conversa naturalmente. Logo, faz-se necessário técnicas de detecção e correção de erros caso haja perda ou corrompimento de dados que não inflijam as exigências
da aplicação.
Há três abordagens genéricas de detecção e correção de erros: retransmissão de dados
perdidos, transmissão de dados de paridade e estimação de dados perdidos. A retransmissão de dados aumenta a latência, logo sua utilização é limitada. A transmissão de
dados de paridade aumenta a taxa de dados enviados e é útil somente se os dados chegam
corrompidos, porém não é proveitosa quando há perda de pacotes.
A terceira opção tenta estimar os dados perdidos (ou corrompidos) a partir de dados
recebidos corretamente. Esta estimação pode aumentar a carga computacional do receptor, contudo evita a latência e é capaz de lidar tanto com perdas quanto com a corrupção
de pacotes. Assim, neste trabalho, buscou-se implementar e melhorar uma técnica de
estimação de dados chamada RECAP (Receiver Error Concealment using Akcnowledge
Preview) [4]. Esta é uma tecnica de controle de erros criada por pesquisadores da Universidade de Berkeley em conjunto com pesquisadores dos laboratórios da Hewlett-Packard
na Califórnia e propõe a transmissão de um sinal adicional que representa uma versão em
baixa resolução do sinal de vídeo original.
1.1
Apresentação do Problema
O controle de erros em aplicativos de comunicação de vídeo digital traz, inerentemente,
problemas críticos. Sinais de vídeo comprimidos são bastante suscetíveis a erros de transmissão por duas razões capitais: a predição, temporal e espacial, utiliza a correlação de
suas amostras para codificar as amostras seguintes, logo pode haver propagação de erros
(Drifting Error ). Além disso, erros em códigos de comprimento variável geram dessincronização do decodificador e a perda de grandes partes do sinal codificado [5].
Não obstante, aplicações de comunicação de vídeo, tais como TV Digital, videoconferência e streaming de vídeo, necessitam de um sistema robusto, com baixa latência e alta
qualidade. Entretanto, a exigência de alta qualidade reduz a eficiência da compressão de
dados, já a exigência de baixa latência limita a efetividade de abordagens de correção
de erros não robustas à drifting e àquelas que fazem retransmissão de dados perdidos.
Portanto, faz-se necessário um sistema de ocultamento de erros que satisfaça ambos esses
requisitos de maneira eficiente e viável.
1.2
Objetivos Gerais
O objetivo principal deste trabalho é implementar e melhorar uma técnica chamada
RECAP (Receiver Error Concealment using Akcnowledge Preview). Para tal, busca-se
diminuir ao máximo a taxa de overhead e combinar o sinal de vídeo a ser reproduzido com
quadros previamente decodificados para ocultar erros e realizar este processo sem causar
um atraso perceptível.
2
1.3
Objetivos Específicos
• Propor melhorias no RECAP.
• Estudar o padrão de codificação H.264/AVC.
1.4
Revisão Bibliográfica
O problema de ocultação de erros tem se tornado cada mais importante devido ao
aumento do interesse por sistemas de videocomunicação em canais não-confiáveis. O
efeito de ruído destes canais pode gerar erros durante a transmissão que precisam ser
tratados para que não haja distorções críticas na imagem apresentada ao espectador nem
perda de interatividade.
Há técnicas que visam recuperar dados e outras que visam reconstruir ou ocultar erros. Como exemplo, tem-se o FEC (Forward Error Correction) [6] que envia dados de
paridade para detecção e recuperação de dados perdidos. Há também o UEP (Unequal
Error Protection) [7] que oferece mais proteção a dados mais importantes. O próprio
padrão H.264/AVC possui ferramentas que podem ser usadas para ajudar a ocultar erros,
como o FMO (Flexible Macroblock Ordering) [8] que organiza os macroblocos em padrões
diferentes para codificação. Dessa forma, pode se explorar a redundância espacial das
imagens para ajudar na correção de erros.
Há, também, técnicas mais modernas como o SLEP (Systematic Lossy Error Protection) [9], que provê técnicas de proteção contra perdas isoladas em um quadro, mas não
oferece proteção contra perdas integrais de um ou mais quadros. Há o esquema proposto
por Wang [10], que busca atenuar a propagação de erros, contudo seu desempenho é refém do quadro com erros ocultados usado como referência para codificação dos quadros
seguintes e não é eficaz caso a correlação estatística não seja estimada eficientemente.
No RECAP, utiliza-se uma janela de buscas similar ao PRISM (Power-efficient Robust
high-compression Syndrome based Multimedia coding)[11].
Há métodos que estudam as semelhanças dos macroblocos vizinhos com o macrobloco
corrompido de modo a estimá-lo [12]. Para tanto, identificam-se texturas, bordas, arestas
entre outras características para descobrir padrões e, então, estimar os dados perdidos.
Outra técnica é o BNM (Best Neighborhood Matching) [13], que procura o casamento de
uma região com a vizinhança do macrobloco perdido.
É possível também utilizar os vetores de movimento dos macroblocos vizinhos ao macrobloco perdido para estimá-lo, utilizando polinômios obtidos a partir de fórmulas de
interpolação de Lagrange [14]. Há técnicas contra perda integral de quadros que exploram informações do último quadro reconstruído e do próximo quadro para estimar
vetores de movimento baseados em pixel do quadro perdido utilizando compensação de
movimento de múltiplas hipóteses [15].
3
1.5
Organização
O trabalho está dividido em seis capítulos, incluindo o presente capítulo introdutório.
No capítulo 2, encontram-se conceitos básicos de teoria da informação e codificação de
fonte e canal. O capítulo 3 introduz conceitos e fundamentos da codificação de vídeo
digital e descreve as funções principais do padrão H.264/AVC mais convenientes para o
desenvolvimento deste trabalho. O capítulo 4 apresenta, detalhadamente, a arquitetura
do método RECAP e todas as etapas de ocultamento de erros. Os procedimentos experimentais, cenários de simulação, resultados obtidos, análise e discussões são relatados
no capítulo 5. O último capítulo mostra as conclusões finais com comentários sobre os
resultados e propostas de trabalhos futuros.
4
Capítulo 2
CODIFICAÇÃO DE DADOS
Neste capítulo serão definidos conceitos básicos de teoria da informação. Serão explicados, também, os conceitos de entropia e os teoremas de codificação de fonte e canal. Estes
conceitos são de suma importância para compreensão da aplicação do presente trabalho.
2.1
Conceitos Fundamentais
O problema fundamental da comunicação é tentar transportar uma mensagem de um
determinado ponto até outro dado ponto [16]. Normalmente, essa mensagem é codificada
para ser transmitida por um canal. Para tanto, a teoria da informação responde a duas
questões fundamentais: qual a melhor taxa de compressão possível e qual a melhor taxa
de transmissão de mensagens na comunicação [17].
Figura 2.1: Diagrama de um sistema genérico de comunicação.
Um sistema clássico de comunicação é esquematizado na Figura 2.1. O primeiro bloco
deste modelo é a fonte. Este termo se refere ao processo de geração de um subconjunto
de mensagens de informação sucessivas dentro de um conjunto de mensagens possíveis
[17]. A fonte pode ser vista como uma variável aleatória que transmite símbolos obtidos a
partir de determinado alfabeto. A mensagem pode ter significado, entretanto os aspectos
semânticos são irrelevantes para o problema.
5
Associada a cada fonte existe uma entropia H, que é a medida de incerteza média de
um sinal. No campo da Teoria da Informação, a entropia indica o quanto é desconhecido
do sinal, logo quantifica a informação média que deve ser transmitida para realizar a
comunicação [17]. A entropia é, normalmente, medida em bits por símbolo, podendo ser
expressada também em bits por segundo. Para isso, é necessário saber o tempo médio de
geração de cada mensagem. Segue abaixo equação da entropia de uma variável aleatória
discreta X:
H(X) = −
X
p(x) log2 p(x)
(2.1)
x∈χ
onde χ representa o alfabeto utilizado, p(x) é a função de probabilidade, com x ∈ χ.
Continuando com o modelo clássico de comunicação, a segunda etapa é a codificaçã.
Esta codifica a mensagem da fonte em um sinal adequado para transmissão no canal.
O canal é o meio utilizado para transmitir um sinal de informação por meios físicos,
como cabos, ou por meios lógicos, como canal de rádio. O canal possui uma capacidade
máxima de transmissão de informação, geralmente medida pela sua largura de banda em
Hertz. O bloco decodificador faz o inverso do codificador, reconstruindo a mensagem que é
enviada ao destinatário. O bloco de fonte de ruído é aquele que, durante a transmissão da
mensagem no canal, desorienta o sinal, gerando imperfeições no processo de comunicação.
2.2
Codificação de Fonte
A codificação de fonte se baseia em dois conceitos básicos: a codificação sem perdas e
a codificação com perdas.
2.2.1
Codificação sem Perdas
Shannon, em seu trabalho [16], diz que para se garantir a codificação sem perdas, a
taxa Rx de transmissão ou armazenamento de um sinal X não pode ser inferior a entropia
H(X) deste sinal, isto é:
Rx ≥ H(X)
(2.2)
A Figura 2.2 descreve um sistema básico de codificação e transmissão de uma fonte sem
perda de informação. Nota-se que o sinal recebido é idêntico ao transmitido.
Figura 2.2: Compressão de fonte sem perdas.
6
2.2.2
Codificação com Perdas
O teorema da codificação com perdas indica que para uma determinada distorção aceitável, existe uma taxa mínima associada, de tal forma que a função taxa-distorção é uma
função convexa [18]. A distorção é definida como a função que mede a disparidade entre
a reconstrução de um sinal X, denotada por X 0 . Ou seja, a distorção D pode ser definida
como:
D = d(X; X 0 ),
(2.3)
onde d é uma medida de distorção. Há várias maneiras de medir a distorção, porém a
mais amplamente utilizada na literatura e utilizada neste trabalho é o Erro Quadrático
Médio ou Mean Square Error (MSE) que é definido por:
i
h
0
0 2
(2.4)
d (X; X ) = E (X − X ) ,
onde E [·] indica o valor esperado de uma variável aleatória.
2.3
Codificação de Canal
A codificação de canal tem como objetivo garantir a correta decodificação de um sinal
dada a capacidade deste. Para tanto, devemos definir os conceitos de informação mútua
e capacidade de canal.
2.3.1
Informação Mútua
A informação mútua mede a dependência recíproca de duas variáveis aleatórias, i.e.,
a quantidade de informação aproximada que pode se obter de uma variável aleatória
observando outra [19]. Segue abaixo a equação da informação mútua de duas variáveis
aleatórias X e Y, com função massa de probabilidade conjunta p(x, y) e com funções massa
de probabilidade marginais p(x) e p(y).
XX
p (x, y)
,
(2.5)
I (X; Y ) =
p (x, y) log2
p
(x)
p
(y)
x∈χ x∈γ
onde a informação mútua I(X; Y ) é a entropia relativa entre a distribuição conjunta e o
produto de p(x)p(y).
2.3.2
Capacidade do Canal
A capacidade do canal indica quanta informação pode ser transmitida por um canal
com uma probabilidade de erro próxima de zero [17], i.e., a taxa limite de dados que pode
ser alcançada com uma probabilidade de erro arbitrariamente pequena. A equação da
capacidade do canal é dada por:
C = maxp(x) I(X; C),
7
(2.6)
onde X é a entrada de um código discreto de canal sem memória que gera a saída C e C
é a capacidade do canal.
2.3.3
Códigos Corretores de Erro
Dada uma fonte, podemos então codificar a fonte com ou sem perdas, com o objetivo
de diminuir a taxa de transmissão. Por outro lado, a capacidade do canal indica quanta
informação redundante se deve agregar ao sinal para que a decodificação tenha uma
probabilidade próxima de zero, dada as características do ruído presente no canal.
Os códigos corretores de erro adicionam dados redundantes na mensagem, de modo a
torná-la recuperável pelo receptor. Logo, esta pode ser transmitida eficientemente e de
maneira confiável mesmo através de um canal com ruídos.
Ao trabalhar com sinais reais, é praticamente impossível definir um codificador de fonte
e/ou canal que chegue sempre no limite teórico. Existem diversos algoritmos de codificação
de fonte sem perdas que podem chegar a entropia do sinal, mas não garantidamente. Entre
estes, tem-se o código de Huffman [20], códigos baseados em dicionário [21], códigos
aritméticos [22], etc.
Da mesma forma, há códigos corretores de erro que funcionam adequadamente dado
um conjunto de circunstâncias, por exemplo, os códigos LDPC [23], Turbo Coding [24],
etc. No capítulo seguinte será detalhado especificamente o sinal de vídeo e técnicas de
codificação e compressão para este tipo de sinais.
8
Capítulo 3
CODIFICAÇÃO DE VÍDEO DIGITAL
Neste capítulo, serão discutidos os conceitos de Vídeo Digital e a codificação de um
sinal de vídeo, além do padrão H.264/AVC. Sera explicado, de forma genérica, o que é
um quadro e um pixel. Será descrito como é feita uma codificação de vídeo digital, como
é produzida a estimação de movimento, a quantização e as transformadas e mostrar como
é feita a correção e ocultação de erros.
3.1
Conceitos de Vídeo Digital
Um Vídeo Digital é a representação, tipicamente em três dimensões, de uma cena contínua amostrada no espaço-tempo em formato digital. Cada amostra espacial é chamada
de pixel (do inglês, Picture Element) e possui números que a representam no formato
digital, de forma a descrever o seu brilho (Luminância) e sua cor (Crominância). No
espaço de cores YUV, a componente de luminância é representada pelo valor de Y e pode
ser reproduzida separadamente, obtendo uma imagem monocromática ou em escalas de
cinza. Já as componentes U e V têm informações sobre as cores. Na Figura 3.1 pode-se
ver a sequência de um sinal de vídeo digitalizada.
A tridimensionalidade do vídeo digital se dá pelo fato de que duas dimensões indicam
a disposição espacial (horizontal e vertical) e a terceira dimensão é o próprio tempo.
Quando se faz a amostragem temporal de um vídeo digital, obtém-se um quadro (do
inglês, frame). Este representa todos os pixels de um determinado instante de tempo.
Grosso modo, um quadro é simplesmente uma foto. Ao mostrar-se uma série de quadros
a uma certa velocidade, produz-se a ilusão de movimento.
A resolução temporal de um vídeo é definida pela quantidade de quadros por segundo
deste. Já a resolução espacial é definida pela quantidade de pixels por quadro. Uma alta
taxa de amostragem temporal dá ao espectador uma sensação de suavidade, entretanto
requer mais amostras capturadas e armazenadas.
9
Figura 3.1: Elementos de uma sequência de vídeo digital.
3.2
Codificação de Vídeo Digital
O principal objetivo de codificar um vídeo é comprimi-lo, i.e., representar seus dados
com o menor número de bits possível. Isto se faz necessário para que sua eventual transmissão ou armazenamento, dentro do contexto da aplicação exigente, seja mais eficiente.
A compressão se baseia em um codificador e um decodificador. O codificador converte a
fonte de dados em uma formato melhor para transmissão e armazenamento. Já o decodificador converte esse formato comprimido de volta ao seu estado original ou aproximado.
Esse sistema complementar codificador/decodificador é frequentemente citado como CODEC (do inglês, enCOder -DECoder ). Um modelo ideal de CODEC deveria codificar um
vídeo com o mínimo possível de bits e decodificá-lo fielmente ao vídeo original, contudo
estes objetivos são, em geral, conflitantes, dado que quanto menor a taxa de bits, menor
a qualidade do sinal de saída no decodificador.
Um codificador de vídeo genérico é composto de três unidades principais: um modelo
temporal, um espacial e um codificador de entropia. O modelo temporal tenta reduzir a redundância explorando a semelhança entre quadros vizinhos, geralmente tentando
prever o próximo quadro. Isto é conhecido como codificação inter -quadros. No padrão
H.264/AVC, utilizam-se quadros anteriores e futuros para se obter esta predição e esta
se torna mais eficiente calculando a compensação de movimento entre a predição e os
quadros vizinhos. Geralmente a saída do modelo temporal é uma série de vetores de
10
compensação de movimento, que descrevem como o movimento foi compensado, e o erro
de predição, que é chamado de resíduo.
Já o modelo espacial faz uso da semelhança entre amostras vizinhas com o objetivo de
reduzir a redundância. Isto é feito, normalmente, aplicando uma transformada às amostras residuais e quantizando os resultados. Este processo é conhecido como codificação
intra-quadros. A transformada muda o domínio das amostras nos quais estas são representadas por coeficientes transformados. Estes coeficientes são transformados de modo
a remover eventuais valores insignificantes. Desta forma, tem-se a representação mais
compacta de um quadro residual com menor número de coeficientes significativos.
O codificador de entropia tem como função primordial reduzir a redundância estatística
dos dados de saída do modelo temporal/espacial, i.e., utilizam-se compressores sem perda
para compactar os vetores de compensação de movimento provenientes da saída do modelo
temporal e os coeficientes quantizados provenientes da saída do modelo espacial. Gerando,
assim, uma sequência de bits compactados que consiste de parâmetros de vetores de
movimento, coeficientes residuais codificados e informações de cabeçalho que podem ser
transmitidos e/ou armazenados. Na Figura, 3.2 encontra-se o diagrama de um codificador
genérico.
Figura 3.2: Diagrama de um codificador genérico.
3.2.1
Modelo Temporal
O modelo temporal tem como objetivo principal atenuar a redundância entre quadros,
prevendo um determinado quadro através do quadro previamente codificado (conhecido
11
como Quadro de Referência). Faz-se a diferença entre ambos os quadros gerando um
resíduo. Este é codificado e enviado ao decodificador, que adiciona o resíduo do quadro
de referência. Geralmente utiliza-se apenas o quadro anterior como referência, contudo
pode-se usar um ou mais quadros passados ou futuros para se prever os quadros seguintes.
3.2.2
Estimação e Compensação de Movimento
A Figura 3.3a refere-se ao primeiro quadro de uma sequência de vídeo. A Figura
3.3b refere-se ao quadro seguinte, temporalmente. E a Figura 3.3c refere-se a diferença
(resíduo) entre os dois quadros supracitados. No quadro residual, é adicionada uma
constante para melhor visualização.
(a) Quadro de referência
(b) Quadro Atual
(c) Quadro Residual
Figura 3.3: Quadros estimados.
As regiões mais claras e escuras representam diferenças positivas e negativas, respectivamente, e contêm mais energia. As regiões em tom médio de cinza representam pequenas
diferenças. Quanto mais precisa a predição, menos energia é observada no quadro residual. Pode-se notar que ainda há muita energia no resíduo, uma vez que há diversas
regiões claras e escuras, especialmente na silhueta do objeto.
12
A diferença notada no terceiro quadro pode ter sido causada por diversos fatores: o
movimento do objeto em questão, movimentação da câmera filmadora ou até mesmo
mudanças de intensidade de luz. Todavia o mais comum é a movimentação do objeto
ou da câmera. Desta maneira, a diferença se dá pela movimentação dos pixels entre os
quadros. Na Figura 3.4, encontram-se quatro exemplos de um Fluxo Óptico (do inglês,
Optical Flow ) que estima a trajetória de cada pixel entre dois quadros, com blocos de
diferentes tamanhos [25]. Este fluxo óptico funciona como um campo de trajetórias de
cada pixel. Dado um fluxo óptico apurado, é possível construir uma previsão bastante
precisa da maioria dos pixels do quadro atual apenas movendo cada pixel da posição de
referência de acordo com sua posição no seu campo de trajetórias.
(a) Bloco 16×16
(b) Bloco 8×8
(c) Bloco 4×4
(d) Bloco 2×2
Figura 3.4: Fluxo Óptico.
No entanto, este modelo de fluxo óptico por blocos, em geral, não é eficiente em termos
práticos, uma vez que o cálculo preciso deste necessita de um processamento computacional bastante intenso, muitas vezes através de procedimentos iterativos para cada pixel,
e seria necessário enviar um vetor de movimento de cada pixel para o decodificador. Evidentemente, isto poderia gerar um imenso volume de dados a serem enviados e, assim,
a vantagem de se ter uma grande precisão e pouco resíduo seria anulada pela grande
quantidade de informação em movimento.
13
Uma saída bastante eficaz e amplamente utilizada seria utilizar blocos de pixels ao invés
dos pixels individualmente, como pode ser visto na Figura 3.4. Dessa forma, dividi-se o
quadro atual em blocos retangulares e procura-se em uma janela de busca ao redor do
bloco a ser estimado, no quadro de referência, aquele que melhor se encaixa na posição do
quadro atual. O critério de escolha é baseado na quantidade de energia resisual resultante
da diferença entre os blocos. Costuma-se utilizar a SEA (Soma dos Erros Absolutos)
e suas variantes de função de risco que medem quão próximos são as predições de um
resultado final. O processo de procura da região mais semelhante é chamado de Estimação
de Movimento e o processo de obtenção do bloco residual é chamado Compensação de
Movimento.
Figura 3.5: Estimação de Movimento.
A região que foi escolhida se torna, então, a predição do bloco atual. Através do
processo de estimação de movimento é gerado um vetor de movimento que é codificado
e transmitido junto com o resíduo. Estes dados e as informações do bloco usado como
referência são suficientes para que o decodificador reconstrua os quadros semelhantes aos
originais. Este processo é mostrado na Figura 3.5.
A Compensação de Movimento em blocos é a base do modelo temporal de todos os
padrões de codificação de vídeo utilizados hoje em dia. É um processo viável computacionalmente e de fácil entendimento. Ao mesmo tempo, responde bem, em geral, a
14
transformadas em bloco aplicadas aos resíduos e funcionam bem para variações temporais. Evidentemente, possui também uma série de desvantagens, como por exemplo: cenas
reais nem sempre têm objetos que se encaixem em um formato de blocos, principalmente
quando se trata de objetos que mudam sua forma, rotacionam ou se deslocam em movimentos aleatórios (como fumaça, etc.).
A Figura 3.6 mostra três quadros. A primeira figura representa o primeiro quadro
de uma cena real, a segunda mostra o quadro seguinte e a terceira mostra o resíduo
sem compensação de movimento. Já a Figura 3.7 mostra mais quatro quadros residuais
com compensação de movimento em macroblocos de 16×16, 8×8, 4×4 e 2×2 pixels,
respectivamente.
(a) Quadro 1
(b) Quadro 2
(c) Resíduo
Figura 3.6: Predição temporal de quadros.
É possivel notar facilmente que quanto menor o tamanho do bloco utilizado para fazer
a compensação de movimento, menor é a energia residual. Entretanto, apesar dos ganhos
obtidos, aumenta-se a complexidade da predição, uma vez que há mais buscas a serem
feitas e, também, a quantidade de vetores de movimento, logo há mais informação para
transmitir e/ou armazenar. Por conseguinte, a medida que se reduz o tamanho do bloco
mais se aproxima do problema da utilização do fluxo óptico com precisão de um pixel.
3.2.3
Modelo Espacial
Como já foi dito anteriormente, um vídeo nada mais é que a representação tridimensional de uma cena contínua amostrada no espaço e no tempo, em formato digital. A
amostragem temporal já foi discutida. Agora será detalhada como é feita a codificação
dentro do próprio quadro, i.e., intra-quadro.
Sabe-se que um quadro é uma representação bidimensional de uma cena real em que
cada posição do plano (pixel ) é associado à um valor de intensidade de luz e cor. Imagens
reais são, muitas vezes, difíceis de comprimir em sua forma natural por causa da alta
correlação entre amostras de imagens vizinhas. Já o resíduo da Figura 3.6 é mais fácil de
comprimir, uma vez que possui uma correlação menor entre suas amostras.
15
(a) 16×16
(b) 8×8
(c) 4×4
(d) 2×2
Figura 3.7: Resíduos com compensação de movimento.
Há três processos básicos para converter os dados em um formato que permita maior
eficiência na compressão de dados. Estes são: a tranformada, que descorrelaciona as
amostras; a quantização, que diminui a precisão dos dados transformados permitindo
diminuir o número de bits para compressão; e a reordenação, que rearranja os dados em
grupos de valores significativos.
Em um CODEC, a transformada converte os dados da imagem ou do resíduo para outro
domínio de representação. Esta transformada deve ter dados descorrelacionados em seu
domínio (i.e., amostras minimamente dependentes) e compactos (i.e., a energia em forma
de dados deve estar concentrada no menor número de valores possível). Além disso, a
transformada deve ser computacionalmente viável e eficiente e, por fim, deve possuir uma
inversa.
Há muitas transformadas utilizadas na compressão de vídeo e imagem. No entanto,
as mais populares geralmente se encaixam em duas categorias: transformadas de bloco e
imagem. A transformada de bloco mais comumente utilizada é a DCT (Discrete Cosine
Transform) ou Transformada Discreta de Cosseno. A mais popular no caso das transformadas de imagem é a DWT (Discrete Wavelet Transform) ou Transformada Discreta de
Leve Ondulação, que é bastante eficiente na compressão de imagens estáticas (é, inclusive,
utilizada no padrão JPEG2000 [26]). Contudo, esta última demanda alta disponibilidade
de memória e não funciona efetivamente com compensação de movimento em blocos.
16
A DCT opera em um bloco N ×N de amostras, X, e gera um bloco N ×N de coeficientes,
Y. Tanto a DCT direta quanto sua inversa (IDCT) podem ser descritas através de uma
matriz A, como é mostrado abaixo:
Y = AXAT
(3.1)
X = AT Y A
(3.2)
Os elementos de A são:
Ai,j = Ci cos
onde Ci =
(2j + 1)iπ
2N
,
(3.3)
p
p
1/N , para i = 0, e Ci = 2/N , para i > 0.
Como saída, a DCT direta retorna um conjunto de coeficientes N × N que representam
os dados da imagem em blocos no domínio da DCT e estes coeficientes podem ser vistos
como pesos de um conjunto de padrões de base. Os padrões de base para DCT 4 × 4 e
8 × 8 compostas por combinações de funções cosseno horizontais e verticais podem ser
visualizados na Figura 3.8 e Figura 3.9 respectivamente.
Figura 3.8: DCT com base 4×4 [1].
Não é intuitivamente óbvio as vantagens de se representar um bloco no domínio da
DCT, uma vez que a quantidade de dados permanece a mesma. Porém, ao invés de 16
valores de pixels, há 16 coeficientes da DCT. Fica mais clara a utilidade da transformada
quando o bloco é reconstruído por meio de um subconjunto de coeficientes. A Figura 3.10
apresenta uma imagem com um bloco 4×4 destacado. Já a Figura 3.11 mostra esse mesmo
bloco ampliado e a Figura 3.12 mostra o resultado após a transformada com coeficientes
da DCT.
Fazendo todos os coeficientes iguais a zero, exceto o primeiro (conhecido como coeficiente DC), e aplicando a DCT inversa, obtém-se um bloco em que todos seus elementos
são iguais a média dos valores dos pixels do bloco original. Adicionando-se mais coeficientes antes de calcular a IDCT, produz-se uma precisão progressivamente maior na
17
Figura 3.9: DCT com base 8×8 [1].
reconstrução do bloco original, como pode ser visto na Figura 3.12. Ao adicionar-se cinco
coeficientes, o bloco reconstruído já pode ser considerado uma representação satisfatória
do bloco original, dependendo do perfil de aplicação. Portanto, é possível construir um
bloco semelhante ao original com um subconjunto dos coeficientes da DCT.
3.2.4
Quantização
A fase final do modelo espacial de codificação é a quantização dos coeficientes do bloco
no domínio da DCT. Uma função quantizadora busca mapear um sinal com uma extensão
de valores X para uma com uma extensão de valores reduzida Y. Dessa forma, esperase representar o sinal com menos bits, uma vez que a variação de valores disponíveis é
menor. Há quantizadores escalares que mapeiam elementos individualmente e os vetoriais
que mapeiam um conjunto de elementos.
A quantização escalar é, grosso modo, um arredondamento. Um exemplo bastante
simples de quantização é quando se arredonda um número fracionário para seu inteiro
mais próximo. Este é um processo com perdas e irreversível, dado que não há como saber
qual era o seu valor original. Neste caso, mapeiam-se valores do conjunto dos números
reais para o conjunto dos números inteiros. Como não há preservação do valor original, as
informações são descartadas e é por isso que a quantização reduz a quantidade de dados
no modelo espacial. Um quantizador uniforme genérico é da forma:
X
,
(3.4)
Y = QP.round
QP
18
Figura 3.10: Seção de uma imagem com um bloco 4×4 em destaque [1].
(a) Bloco Original
(b) Coeficientes da DCT
Figura 3.11: Resultado da Transformada [1].
em que X é a extensão de valores originais, Y é a extensão de valores a serem quantizados
e QP é o parâmetro de quantização (do inglês, Quantizer Parameter ). A QP também é
conhecida como Step Size, pois os valores de saída Y são espaçados uniformemente de
19
(a) 1 Coeficiente
(b) 2 Coeficientes
(c) 3 Coeficientes
(d) 5 Coeficientes
Figura 3.12: Blocos reconstruídos com um, dois, três e cinco coeficientes [1].
acordo com o tamanho da QP.
É possível perceber facilmente que o conjunto de valores Y é inversamente proporcional
ao tamanho da QP. Cria-se, então, uma situação crítica na escolha do valor do parâmetro
de quantização do codificador. Há uma dicotomia: um valor grande diminui a extensão de
valores de saída Y e, assim, aumenta a compressão dos dados. Já um valor pequeno tem
menos perda de informação, portanto se aproxima mais da informação original, contudo
reduz a eficiência da compressão.
Geralmente a saída de um quantizador é uma matriz esparsa de coeficientes quantizados,
contendo, na maioria das vezes, zeros. Para facilitar a compressão por parte do codificador
de entropia, agrupam-se os coeficientes nulos, mantendo um número reduzido de valores
significativos (não-nulos). A quantização vetorial é análoga à escalar, com a variação de
que, utiliza-se uma série de padrões de coeficientes (codebook ) como espaço de mapeamento
e o decodificador deve conhecer o codebook para fazer a reconstrução.
3.2.5
Controle de Erros em Sinal de Vídeo
Em todo sistema de comunicação pode haver perda ou alteração da informação na
transmissão de dados devido a problemas de ruído no canal. Estes erros têm um efeito
direto sobre os dados comprimidos, uma vez que qualquer dano a esses dados levam a uma
distorção no sinal decodificado. Além disso, os requisitos para transmissão de vídeo digital
em sistemas interativos ou em tempo-real excluem várias técnicas de implementação em
determinadas aplicações. Por fim, problemas como sincronização de áudio e vídeo e
comunicações multiponto dificultam a recuperação dos erros.
Grosso modo, as transmissões de erros se dão de duas maneiras: erros de bit aleatórios e
erros de apagamento. Os erros de bit aleatórios são causados por imperfeições dos canais
físicos, resultando em inversão, inserção ou deleção de bits. Dependendo dos métodos de
codificação e do conteúdo da informação distorcida, o impacto pode ser desprezível ou
crítico.
Por outro lado, erros de apagamento podem ser causados por perda de dados em redes
de comutação de pacotes, perdas integrais em mídias de armazenamento devido a defeitos
20
físicos ou falhas no sistema por um pequeno período de tempo. De modo geral, há duas
maneiras de se contrapor aos erros de transmissão. Por um lado há o controle tradicional
de erros e esquemas de recuperação para comunicação de dados, que podem ser estendidos
para transmissão de vídeos. Códigos de controle ou correção de erros são inseridos no sinal
codificado para detectar e tentar corrigir os erros encontrados. Essa técnica é útil para
erros de bit aleatório.
Por outro lado, técnicas de reconstrução de sinal e ocultamento de erros procuram
obter, no decodificador, uma aproximação do sinal original com um sinal de saída menos
crítica aos olhos humanos, visto que para estes um certo nível de distorção em sinais de
imagem e vídeo é tolerável. As técnicas de ocultação de erros durante a reconstrução do
sinal são mais úteis para erros de apagamento.
Codificação Fonte-Canal
Há dois tipos de distorção quando se utiliza um canal de transporte com perdas. O
primeiro é o ruído da quantização introduzida pelo codificador de forma de onda e a
segunda é a distorção causada pela transmissão de erros. Um codificador e um canal
de transporte ideais, em princípio, devem ser projetados de tal maneira que a distorção
conjunta devido à quantização e transmissão de erros seja mínima, dado uma largura de
banda e uma taxa de erro de canal característicos.
Os CODEC’s, em geral, seguem o teorema de codificação separada de fonte-canal de
Shannon [16], que estabelece que se pode projetar separadamente o codificador de canal
e o codificador de fonte para alcançar uma perfomance ótima do sistema. Primeiramente,
estes resultados foram demonstrados para fontes e canais estáticos e sem memória e, mais
tarde, foram demonstrados para uma classe mais geral de fontes e canais [27].
Este teorema assume que a complexidade e atrasos de processamento do codificador de
fonte e canal podem ser infinitos, contudo, em aplicações reais, isto não ocorre. Primeiro,
os sinais de fonte e ambientes de canal podem variar rapidamente, logo, não são estáticos.
Segundo, codificadores de fonte e canal devem ser viáveis, i.e., com atraso e complexidade
aceitáveis. Nesta situação, o projeto conjunto do codificador de fonte e canal pode alcançar
um melhor desempenho [27].
Há várias maneiras de se fazer a ocultação de erros. Essencialmente, todas adicionam
um conjunto controlado de dados redundantes no codificador de fonte ou no codificador
de transporte. No primeiro caso, a redundância pode ser inserida no codificador de forma
de onda ou no codificador de entropia. Alguma técnicas exigem cooperação entre os
codificadores de fonte e de transporte, enquanto outros deixam um pouco de redundância
ou adicionam informações aos dados codificados que ajudam a ocultação de erros por
parte do decodificador.
Na Figura 3.13, tem-se um diagrama de blocos de um codificador fonte-canal separado.
O codificador de fonte vai tentar mapear o sinal para um conjunto de símbolos de tal forma
que a taxa de transmissão seja a mais próxima possível da entropia do sinal. Enquanto
21
Figura 3.13: Codificador Fonte-Canal separado.
o codificador de canal vai introduzir redundância, de acordo com a capacidade do canal,
para evitar erros de transmissão.
Códigos Corretores de Erro
Os códigos corretores de erros são um sistema de controle de erros em que a fonte
envia informação redundante na mensagem, que poderá ser, eventualmente, utilizada
pelo receptor para corrigir efeitos de ruído ou interferências durante a transmissão através
do canal.
A redundância inserida na informação permite que o receptor detecte e recupere a informação danificada sem que haja retransmissão de dados perdidos, entretanto é necessária
uma largura de banda maior e a compressão não será tão eficiente.
Os códigos Low-density Parity-check (LDPC) são uma classe importante de códigos
corretores de erro linear. Sua principal vantagem em relação aos outros códigos é que
este provê um desempenho muito próximo da capacidade de vários canais diferentes e
algoritmos complexos de tempo linear [23].
Há também os códigos Turbo Coding, que são uma classe de códigos de correção de
erros que foram introduzidas junto com um algoritmo de decodificação [24]. Sua principal
vantagem em relação aos outros é que este provê uma eficiência muito próxima do limite
teórico predito por Shannon [16] e uma comunicação confiável.
Neste trabalho não detalhamos os diferentes códigos corretores de erro, uma vez que o
método proposto é uma técnica de ocultação de erros de apagamento.
3.2.6
Codificadores de Entropia
Um codificador de entropia , também chamado codificador de fonte, converte um grupo
de símbolos, representando elementos da sequência de vídeo, em um fluxo de bits comprimido adequado para transmissão ou armazenamento. Em um sinal de vídeo, estes
símbolos de entrada podem ser coeficientes quantizados de uma transformada, vetores de
movimento, marcadores, cabeçalhos e outras informações.
22
Codificação Preditiva
Certos símbolos tem alta correlação em certas regiões de uma figura, como o coeficiente
DC e o valor médio de blocos de pixels intra-codificados e seus vizinhos ou os deslocamentos dos vetores de movimento de blocos vizinhos. Nesses casos, pode haver uma melhoria
na eficiência da codificação através da predição de elementos do macrobloco atual a partir de dados previamente codificados e codificando a diferença entre a predição e o valor
atual. Normalmente, em um CODEC de vídeo, a codificação preditiva é feita em uma
etapa anterior ao codificador de entropia.
Codificação de Comprimento Variável
Um codificador de comprimento variável (do inglês, Variable-length Coding) mapeia
símbolos de entrada em uma série de palavras que funcionam como códigos. Cada símbolo
é mapeado em um código e estes podem ter comprimento variável, entretanto devem ter
números inteiros de bits. Os símbolos que ocorrem com maior frequência são representados
com códigos menores enquanto símbolos mais raros são mapeados com códigos maiores.
Sob um número suficientemente grande de símbolos de entrada, isto leva à compressão de
dados.
O codificador de comprimento variável mais conhecido é o Codificador de Huffman
[20]. Este se utiliza da probabilidade de ocorrência de símbolos em um conjunto de
dados a ser comprimido para determinar códigos de tamanho variável para cada símbolo.
Contudo, o codificador de Huffman tem duas grandes desvantagens para um CODEC de
vídeo real: primeiro, o codificador e o decodificador devem utilizar o mesmo conjunto de
códigos e transmitir a tabela de probabilidades ao decodificador elevaria o overhead e,
portanto, reduziria a compressão de dados, especialmente para pequenas sequências de
vídeo. Segundo que a tabela de probabilidades não pode ser calculada até que se tenha
codificado todo o vídeo. Logo, para sequências de vídeo muito grandes, o atraso seria
considerável, de modo que os codificadores de imagem e vídeo atuais definem conjuntos
de códigos baseados em distribuições de probabilidade de vídeos genéricos.
Outra grande desvantagem do codificador de Huffman, e todos os outros baseados na
mesma ideia, é que estes são sensíveis a transmissão de erros, de maneira que se ocorre
um erro em uma sequência de codificação de comprimento variável, isto pode levar o
decodificador a se dessincronizar e não ser possível mais codificar corretamente os códigos
subsequentes, propagando o erro na sequência decodificada.
Codificação Aritmética
A codificação aritmética fornece uma alternativa prática à codificação de Huffman,
aproximando-se mais das taxas de compressão teóricas máximas [28]. Um codificador
aritmético converte uma sequência de símbolos em um número fracionário e pode se aproximar do número fracionário de bits ótimo requisitado para representar cada símbolo. A
grande vantagem é que o número transmitido não é limitado há um número de bits inteiro
para cada símbolo transmitido. Todavia, existem poucas implementações de codificadores
aritméticos binários, sendo as mais conhecidas o Q-coder [29] e o M-coder [30].
23
3.3
H.264/MPEG-4 AVC
O Padrão H.264/MPEG-4 Parte 10, também chamado AVC (do inglês, Advanced Video
Coding), foi desenvolvido pelo MPEG (Moving Pictures Expert Group) da ISO (International Organization for Standardization) e IEC (International Electrotechnical Commission) em conjunto com o VCEG (Video Coding Experts Group) da ITU-T (International
Telecommunication Union). É o padrão de codificação mais utilizado atualmente tanto
em meios comerciais quanto em meios acadêmicos e é mantido conjuntamente pela VCEG
e pela MPEG.
O objetivo do desenvolvimento do padrão era fornecer funcionalidade semelhante aos
padrões anteriores H.263+ e MPEG4 Visual, contudo provendo melhores taxas de compressão à mesma qualidade, adicionar suporte à transmissão robusta em canais de comunicação e sem aumentar a complexidade do projeto a ponto de se tornar inviável de
implementar ou custear. As suas aplicações mais comuns são videoconferência (como o
aplicativo Skype [3]), streaming em redes comutadas por pacotes (como a Internet), armazenamento (como o Blu-ray) e teledifusão em alta definição (nos sistemas de Transmissão
de TV).
O padrão nada mais é que um documento que define uma sintaxe para representar
sequências de vídeo comprimidas e um método de decodificação dessa sintaxe, de modo
que seja feita uma reconstrução correta da sequência. Desta forma, o documento fornece
liberdade aos desenvolvedores para criar suas inovações, pois o documento garante que
os CODEC’s compatíveis com o padrão sejam operáveis entre si. O documento também
apresenta um Decoder e mostra como é feita a decodificação, sendo que cada desenvolvedor
pode criar sua própria versão, desde que seja compatível com o método apresentado.
Figura 3.14: Codificador H.264 e suas unidades funcionais básicas.
24
A Figura 3.14 apresenta um diagrama com os elementos funcionais básicos de um codificador H.264/AVC: bloco preditor, transformação, quantização, codificador de entropia e
um bloco filtrador, que tem como objetivo reduzir o chamado "Efeito de Bloco". Há dois
sentidos de fluxo de dados, um direto, da esquerda para direita e o outro chamado reconstrutor ou decodificador local, da direita para esquerda. A Figura 3.15 mostra o caminho
do fluxo de dados do decodificador, onde pode ser facilmente verificada a semelhança com
o fluxo reconstrutor do codificador.
Figura 3.15: Decodificador H.264 e suas unidades funcionais básicas.
Na Figura 3.14, o quadro de entrada é processado em unidades de macroblocos, cada
qual codificado em modo intra ou inter. Quando se utiliza o modo intra, amostras do
mesmo quadro atual que já tenham sido codificadas, decodificadas e reconstruídas são
utilizadas como referência para as próximas predições. Já no modo inter, as predições
são feitas através da compensação de movimento a partir de blocos de um ou mais quadros previamente codificados, reconstruídos e filtrados, que são usados como referência. É
importante ressaltar que pode-se utilizar como referência quadros anteriores ou posteriores, somente com a ressalva de que se houver a utilização de quadros posteriores, deve-se
garantir que estes foram codificados, reconstruídos e filtrados antes do atual.
A predição é, então, subtraída do bloco atual a fim de produzir um bloco residual que
é transformado para o domínio da DCT e quantizado. Na Figura 3.14, este processo é
descrito pelos blocos identificados por T e Q, respectivamente. Finalmente, os coeficientes quantizados da DCT são reordenados e codificados por um codificador binário sem
perdas ou codificador de entropia. Estes coeficientes codificados formam o bitstream de
saída juntamente com as informações sobre modo de predição, parâmetro de quantização,
vetores de movimento, cabeçalhos, etc.
O codificador possui um decodificador local (Fluxo reconstrutor), como é possível ver
na parte inferior da Figura 3.14. Este decodificador interno reconstrói os quadros para
que estes possam ser usados como referência para futuras predições. Os coeficientes quantizados são escalonados e transformados inversamente, produzindo um bloco diferencial
25
que é somado ao resíduo a fim de formar uma versão reconstruída que é filtrada e utilizada
como quadros de referência.
Na Figura 3.15, o decodificador recebe uma sequência binária comprimida e utiliza o
seu decodificador de entropia para obter os símbolos que representam os coeficientes que
são reordenados, reescalonados e transformados em blocos diferenciais pela transformada
inversa. Com a adição das informações de cabeçalho, vetores de movimento e informações
de modos de predição, um bloco de predição é gerado e somado ao bloco diferencial,
obtendo, assim, o bloco reconstruído que é posteriormente filtrado e armazenado para
criar cada bloco decodificado.
Quando foi concebido, o padrão H.264/AVC definiu um conjunto de três perfis de
configuração, que determina um conjunto específico de técnicas e algoritmos do codificador
e do decodificador concordantes com uma determinada aplicação. Estes perfis respondem
pelo nome de Baseline, Main e Extended e contemplam classes de aplicação específicas.
A modelagem de codificadores e decodificadores utiliza esse tipo de classificação para
serem projetados. As aplicações do perfil Baseline utilizam baixa complexidade computacional e precisam ser suficientemente robustos contra a perda de dados, como videotelefonia, videoconferência e comunicação sem-fio. Já o perfil Main é utilizado em aplicações
em que se faz necessário alta compressão para teledifusão ou armazenamento. O perfil
Extended é como uma mistura entre os dois anteriores, sendo robusto para transmissão
e com alta taxa de compressão, utilizada em aplicações de streaming de vídeo em que a
banda pode ser suficiente, mas perdas são comuns.
Após a definição desses três perfis básicos, foi criada uma extensão do padrão H.264/AVC,
conhecido como FRExt Extention [31]. Essa extensão foi depois incorporada como um
novo perfil, chamado High, que possui sub-perfis e tem o objetivo de codificar sequências
de vídeo de alta qualidade.
Apesar de depender da natureza da utilização, estes perfis são adaptáveis à uma grande
variedade de aplicações, portanto não devem ser analisados como invariáveis. A Figura
3.16 apresenta as relações dos perfis e mostra distintamente que o perfil Baseline é um
subconjunto do perfil Extended, mas não do perfil Main e que todos estes fazem parte do
perfil High.
A seguir será explicado como é feita a predição em blocos inter e intra e para isso é
necessário saber o que é uma figura, um field, um slice e os tipos de macrobloco.
Muitas vezes os termos quadro e figura são usados indiscriminadamente para se referir
a uma mesma coisa. Contudo, figura é uma noção mais gerérica, visto que pode ser um
quadro ou um campo (field ). Um quadro é uma amostra temporal progressiva de um
vídeo. Um campo também é amostrado temporalmente, porém só as linhas de número
par ou de número ímpar por intervalo de amostragem, logo somente metade dos dados
são amostrados.
26
Um slice é um região espacialmente distinta de um figura que é codificada separadamente de todas as outras regiões na figura. O H.264/AVC é um padrão de codificação
orientado a macroblocos e, neste contexto, slice é um conjunto de macroblocos ordenados
em um quadro e possui diferentes disposições como interleaved, dispersa, raster scan, etc
[1].
Os macroblocos podem ser do tipo I (que são codificados com predição intra), do tipo
P (que são codificados com predição inter ) ou do tipo B (que são codificados de modo
bi-preditivo, onde um macrobloco pode ser formado como a média aritmética ou média
ponderada de duas referências). Os slices do tipo I contêm somente macroblocos I. Os
slices do tipo P contêm somente macroblocos I ou P. Há também os slices do tipo SP
(contêm macroblocos P e/ou I) e tipo SI (tipo especial de macrobloco I). Os slices do
tipo B contêm macroblocos I, P ou B.
Figura 3.16: Perfil Baseline, Main, Extended e High.
3.3.1
Predição Intra
A predição intra se alicerça nas correlações espaciais existentes entre macroblocos vizinhos do mesmo slice que já tenham sido codificados e reconstruídos. O codificador tem o
papel de reduzir ao máximo a diferença entre o bloco original e sua predição, ao escolher
o melhor modo de predição. Para cada componente de luminância são formados blocos de
amostras 4×4 (Figura 3.18), 16×16 (Figura 3.19) ou 8×8 (somente no perfil High). Para
cada componente de crominância são formados blocos de amostras 8×8. O que o codificador faz é escolher métodos de interpolação e extrapolação sobre as amostras vizinhas
para gerar um bloco.
Pode-se fazer a predição intra em uma única operação através de amostras de luminância 16×16. Há quatro modos descritos na Figura 3.19: extrapolação das amostras
27
superiores; extrapolação das amostras da esquerda; média entre as amostras superiores e
da esquerda; e uma função linear das amostras superiores e da esquerda. Já a predição
intra, com amostras de luminância de tamanho 8×8, utiliza o mesmo conceito da predição
4×4, isto é, nove modos distintos.
A Figura 3.17 mostra a representação com letras do alfabeto de um bloco 4×4 de luminância a ser estimado. As amostras acima e à esquerda que vão de A a M são amostras
previamente codificadas e reconstruídas e que podem ser usadas para produzir uma predição do bloco adjacente. As amostras representadas por letra minúscula simbolizam o
bloco a ser estimado pela predição. Escolhe-se um dos nove métodos mostrados na Figura
3.18 para, então, calcular as amostras (de a-p) do modo de predição a partir de interpolações ou extrapolações. O Método 2, conhecido como Predição DC, é basicamente uma
média simples entre as amostras que já tiverem sido previamente codificadas. Os modos
restantes só são usados se todas as amostras do bloco de predição requerido estiverem
disponíveis.
Figura 3.17: Rótulos das amostras e direções de predição (4×4) [1].
O método 0 extrapola verticalmente as amostras de A a D. O método 1 extrapola
horizontalmente as amostras I-L. O terceiro método interpola em 45 graus as amostras do
canto superior direito ao canto inferior esquerdo. O quarto método extrapola em 45 graus
as amostras do canto superior esquerda ao canto inferior direito. O método 5 extrapola
em um ângulo aproximado de 26.6 graus para direita verticalmente e o sexto método
faz o mesmo, porém para direita horizontalmente. O penúltimo método extrapola ou
interpola no mesmo ângulo anterior para a esquerda verticalmente e o último utiliza o
mesmo ângulo para interpolar horizontalmente acima e à direita.
A escolha do método indica que mais dados serão inseridos no arquivo de saída, diminuindo a taxa de compressão, contudo este overhead pode ser reduzido estimando-se
o método mais provável para o bloco analisado e é então codificada a diferença entre o
método real e aquele estimado.
3.3.2
Predição Inter
A predição inter utiliza a estimação de blocos a partir de um ou mais quadros previamente codificados e reconstruídos. O padrão H.264/AVC apresenta novos recursos nesta
28
Figura 3.18: Métodos de predição intra para blocos de luminância de 16×16 [1].
Figura 3.19: Métodos de predição intra para blocos de luminância de 4×4 [1].
área como suporte à uma variedade de tamanhos de bloco entre 16×16, como é mostrado
na Figura 3.20a e em sub-macroblocos como é mostrado na Figura 3.20b.
Como há várias possibilidades dentro das possibilidades, este método ficou conhecido
como Compensação de Movimento em Estrutura de Árvore. A Figura 3.20 mostra as divisões para componente Y. Para as outras componentes é análogo, porém com as dimensões
pela metade.
O tipo de partição escolhido pode melhorar ou piorar a compressão do vídeo. De modo
geral, as partições maiores (por exemplo, 16×16) são mais apropriadas para regiões homogêneas da imagem. Ela exige poucos bits indicadores dos vetores de movimento e
29
(a) Macrobloco 16×16
(b) Sub-macrobloco
Figura 3.20: Possibilidades de partição de um macrobloco [1].
tipo de partição, porém pode sobrar muita energia no resíduo da compensação de movimento, caso o macrobloco tenha muitos detalhes. Já no caso de partições menores (por
exemplo, 4×4), há mais vetores de movimento, portanto mais bits a serem transmitidos,
além do tipo de partição, entretanto sobra menos energia no resíduo da compensação de
movimento, logo estas são mais apropriadas para regiões com pouco detalhamento.
3.3.3
Transformada e Quantização
O padrão H.264/AVC utiliza transformada DCT (Discrete Cosine Transform) com coeficientes inteiros, de modo a tornar a etapa da transformação menos computacionalmente
custosa. O parâmetro de quantização é responsável por controlar a qualidade da imagem
reconstruída e a taxa de bits do arquivo de saída do decodificador. O padrão H.264/AVC
realiza a quantização e transformação conjuntamente.
3.3.4
Codificação de Entropia
O padrão se utiliza de duas classes de codificadores de entropia. A primeira é baseada
em códigos de Huffman, chamada CAVLC (do inglês, Context-Adaptative Variable-Length
Coding) e a segunda baseada em codificação aritmética, chamada CABAC (do inglês,
Context-Adaptative Binary Arithmetic Coding). O segundo modelo de codificador de
entropia, CABAC, necessita de mais custo computacional, porém é mais eficiente na
compressão dos dados [32]. O Huffman também melhora o desempenho da codificação
e é mais brando computacionalmente, porém é menos eficiente. Neste trabalho, estes
codificadores não serão detalhados.
30
Capítulo 4
SISTEMA DE CORREÇÃO DE
ERROS UTILIZANDO VISTA
PRÉVIA
O objetivo deste capítulo é apresentar um método de ocultamento de erros em transmissão de vídeo digital utilizando um sinal auxiliar paralelo e independente do sinal original.
Este capítulo irá mostrar o método RECAP, explicar sua arquitetura e detalhar suas
unidades básicas.
4.1
Introdução
Em princípio, a comunicação entre interlocutores utilizando videoconferência deveria
ser uma experiência sensitiva simuladora da comunicação real. Para tanto, faz-se imprescindível que o fluxo de transmissão de vídeo tenha baixa latência e alta qualidade.
Entretanto, a exigência de baixa latência limita a efetividade de abordagens de correção
de erro tradicionais, como a retransmissão de dados. Já o requisito de alta qualidade
diminui a eficiência de compressão de dados e a transferência de um arquivo grande pode
aumentar a probabilidade de perdas de pacote em redes não-seguras.
Neste trabalho, buscou-se implementar uma solução prática para aplicativos de videocomunicação de baixa latência em redes do tipo melhor-esforço, como TCP/IP, adicionandose uma cópia robusta do vídeo, porém de baixa resolução e qualidade. Esta abordagem
impõe taxa mínima de overhead e pode ser combinada com quadros previamente codificados, de forma a ocultar perdas isoladas ou integrais, mesmo sob diminutas restrições de
atraso.
Apesar da utilização de dispositivos eletrônicos (webcam, microfone, etc), uma conversa
entre interlocutores por videoconferência deve se assemelhar à uma conversa real, como
se estivessem frente a frente em um mesmo local. Entretanto, este é um processo bastante
complexo, visto que frequentemente há a necessidade de se utilizar fontes de vídeo de alta
resolução, como 720p ou 1080p, que estressam a rede. Ao mesmo tempo, são inadmissíveis
eventuais congelamentos de imagem que são comuns em streaming de vídeo na Internet.
31
Como já foi visto no Capítulo 3, existem três abordagens genéricas de controle de erros:
a retransmissão, a correção e a estimação de dados perdidos. A primeira não se revela
satisfatória em aplicações que exijam transmissão em tempo-real. Isto ocorre porque,
impreterivelmente, a retransmissão de dados aumenta a latência, que é diretamente proporcional a distância do ponto de codificação ao ponto de decodificação. Logo, uma única
retransmissão de dados poderia causar atrasos, dessincronizar a conversa e suprimir a
naturalidade da videoconferência.
A segunda abordagem também não convém aos propósitos do trabalho. Métodos de
correção de erros, como o FEC (Forward Error Correction [6]), enviam informações redundantes para ajudar a detectar e corrigir erros. Sua variação, o UEP (Unequal Error
Protection [7]), oferece mais proteção a dados mais importantes, como modelos de macrobloco e vetores de movimento. Porém, ambos necessitam utilizar interleaving, que
aumenta a latência, para canais com Bursty Losses, i.e., com perdas integrais. Estes
sistemas de correção de erros são inúteis quando a perda se dá em mais de um quadro.
A terceira abordagem é a que mais se ajusta às requisições de alta qualidade e baixa
latência. Nesta abordagem, não se tenta reenviar ou corrigir os dados perdidos, mas sim,
estimá-los de forma inteligente através de técnicas que serão descritas mais à frente no
capítulo.
Sabe-se que, de modo geral, ocultar erros em áreas pequenas e dispersas do quadro
é mais fácil que ocultá-los em grandes regiões contíguas [33]. Para tanto, o padrão
H.264/AVC definiu um conjunto de ferramentas de controle de erros que proporcionam
maior eficiência no processo de ocultamento.
Figura 4.1: Padrão checkerboard do algoritmo FMO em um quadro da sequência Mobile.
Este é o caso do algoritmo de Ordenação Flexível de Macroblocos (do inglês, Flexible
Macroblock Ordering) que permite que os macroblocos em slices sejam organizados no
padrão checkerboard, como é mostrado na Figura 4.1. Entretanto, o FMO - que utiliza a
correlação especial das suas amostras para ocultar erros - não oferece nenhuma proteção
quando se perde todos os slices de um quadro [8].
32
4.2
RECAP (Receiver Error Concealment Using Acknowledge Preview )
O método sugerido neste trabalho propõe a transmissão de um sinal de baixa resolução
adicional e independente do sinal original, chamado vista prévia (ou Preview ). A diferença
entre o sinal original e o Preview é que o segundo só faz a predição do quadro atual a partir
de quadros passados em que não foram detectados erros, já o primeiro faz a predição a
partir de qualquer quadro anterior ou conforme foi codificado. A principal vantagem de se
usar somente quadros comprovadamente sem erros para predição é que este poderá sempre
ser decodificado corretamente para auxiliar o ocultamento de erros no sinal original.
Figura 4.2: Funcionamento básico do método proposto.
A Figura 4.2 mostra, em laranja, a sequência de quadros decimados (Preview ) e, em
azul, a sequência original correspondente. As setas em azul indicam qual quadro foi
utilizado como referência para codificação do quadro atual, i.e., na sequência principal,
utilizam-se quadros imediatamente anteriores e, na sequência auxiliar, utilizam-se sete
quadros anteriores como referência para codificação. Neste exemplo, o Quadro 0, em
vermelho, é integralmente perdido.
Contudo, seu Preview correspondente 0’ pode ser usado para fazer a ocultação do erro.
E até mesmo se todos os quadros anteriores e seus correspondentes no Preview fossem
perdidos do (0,0’) até o (-6,-6’) e o 1, ainda assim o quadro 1’ poderia ser usado para fazer
o ocultamento de erros do quadro 1. No exemplo, o Preview está sendo codificado com
uma referência de sete quadros anteriores, simulando o tempo que o codificador demorou
para verificar que este determinado quadro foi decodificado sem erros.
33
O RECAP se alicerça em três fundamentos:
• Blocos da sequência principal podem ser aleatoriamente perdidos/corrompidos. Caso
não se tenha perdido/corrompido também o bloco de mesma localização no Preview
correspondente, o decodificador pode utilizar este último para fazer uma pesquisa
dentro de uma janela de buscas no quadro anterior e substituir o bloco perdido pelo
bloco mais semelhante ao seu Preview.
• Seguindo o mesmo caso do item anterior, ao invés de procurar o bloco mais semelhante no quadro anterior, pode-se fazer uma reconstrução rudimentar do bloco
perdido através da interpolação do bloco correspondente no Preview.
• Por ter baixa resolução, o sinal de Preview não eleva consideralmente a taxa de
overhead e por ser codificado usando apenas quadros comprovadamente sem perdas,
é confiável e pode ser utilizado para ocultar erros na sequência principal.
Figura 4.3: Diagrama de Blocos.
4.2.1
Fluxo de Dados
A Figura 4.3 apresenta um diagrama de blocos referente ao modelo proposto. Uma
sequência de vídeo é codificada com o padrão H.264/AVC e gera um bitstream codificado
e a sequência de vídeo reconstruída. O primeiro é enviado ao decodificador e o segundo é
decimado, i.e., suas dimensões são divididas por quatro, logo seu tamanho é 16 vezes menor
34
que o original. Este arquivo decimado é codificado novamente, gerando outro arquivo
bitstream que é enviado, também, ao decodificador. Este segundo bitstream representa a
vista prévia.
Caso se encontre em alguma rede de datagramas não-segura (rede de melhor esforço),
os pacotes dos dois bitstreams podem ser corrompidos ou perdidos. Então, o sinal decodificado é enviado ao detector de erros. O sinal de vista prévia é utilizado tanto para
detectar erros quanto para corrigir o sinal decodificado. Note que o decodificador da vista
prévia possui um canal de retorno (feedback ) que envia uma mensagem ao codificador
indicando se o quadro foi decodificado sem erros.
Dessa forma, pode-se garantir que o sinal de vista prévia não possui erros de drifting.
Como esta comunicação é em um único sentido e o codificador não fica esperando a
mensagem, além de sempre usar o último quadro corretamente decodificado, o canal de
retorno não acrescenta latência ao sistema. Uma demora na transmissão do canal de
retorno vai, no máximo, fazer com que a vista prévia não tenha uma taxa de compressão
tão elevada, visto que os quadros serão codificados utilizando uma referência distante.
Entretanto, como este sinal foi decimado por um fator de 41 , este aumento de taxa não é
significativo ao se comparar com a taxa do sinal principal.
Para encontrar um erro, o detector calcula o MSE (do inglês, Mean Square Error ) entre
o versão decimada do bloco reconstruído e o bloco de mesma localização no seu Preview
correspondente. Se o valor do MSE for maior que um determinado limiar calculado previamente através de blocos consistentes, esse bloco é marcado como perdido ou corrompido.
Então os quadros reconstruídos e seus respectivos Previews são enviados ao corretor de
erros juntamente com informações sobre blocos inconsistentes.
Através das informações de blocos inconsistentes, faz-se a interpolação do bloco de
mesma localização no Preview, i.e., suas dimensões são multiplicadas por 4. Calcula-se,
então, o menor MSE entre este bloco e todos os blocos dentro de uma janela de busca
no quadro anterior do sinal da vista principal, logo este é o bloco mais semelhante ao
correspondente no Preview, tornando-se um candidato a ocultar o erro do reconstruído. Se
o menor MSE for menor que um determinado limiar calculado previamente, então utilizase o bloco do quadro anterior, caso contrário utiliza-se o bloco do Preview interpolado
para ocultar o erro. Cada etapa será explicada em detalhes na próxima seção.
4.2.2
Etapa de Codificação
O codificador H.264 recebe várias informações sobre como proceder na codificação da
sequência de entrada, como pode ser visto na Figura 4.4: nome do arquivo, dimensões do
vídeo, quantidade de quadros, formato de amostragem, parâmetro de quantização e, no
caso do codificador RECAP, qual quadro anterior será utilizado como referência, dentre
outras informações.
35
Figura 4.4: Informações de codificação.
A codificação gera três arquivos de saída: um arquivo codificado (.264 ), que será enviado ao decodificador; um arquivo YUV reconstruído pelo decodificador local do codificador e um arquivo de texto contendo um relatório de codificação, como pode ser visto
na Figura 4.5.
Figura 4.5: Arquivos de saída da codificação.
36
O codificador da vista principal utiliza o quadro anterior como referência para codificação do quadro atual. Já o codificador da vista prévia utiliza-se somente de quadros
comprovadamente sem erros, i.e., aqueles que receberam uma mensagem do canal de retorno. Há duas possibilidades se simular esse tipo de codificação: modificar o código do
padrão H.264 ou fazer uma reordenação dos quadros. A idéia da reordenação é simular o
tempo necessário para que o codificador receba a mensagem de decodificação sem erros.
Neste trabalho, optou-se por reordenar os quadros, por ser considerado mais viável.
Figura 4.6: Reordenação dos quadros.
Para realizar a reordenação, deve-se informar qual será o atraso gerado, em quantidade
de quadros. Então divide-se os quadros em grupos do mesmo tamanho, como é mostrado
na sequência superior da Figura 4.6, para um atraso de três quadros, e reordena-se os
quadros de acordo com o algoritmo mostrado a seguir:
Algorithm 1 Desordena os quadros da sequência decimada.
1: j ←REF+1
2: for i=2 até F do
3:
Y 1(i) ←Y2(j)
4:
U 1(i) ←U2(j)
5:
V 1(i) ←V2(j)
6:
j ←j+REF
7:
if j > F then
8:
j ←j-F+1
9:
end if
10: end for
Neste algoritmo, REF é a variável que guarda em quantos grupos os quadros serão
divididos. Y2 é uma cópia de Y1, que é um vetor de matrizes contendo os valores
da componente Y e o mesmo serve para as outras componentes. Após desordenar-se a
sequência de acordo com o algoritmo proposto, faz-se a codificação normal, i.e., a partir
do quadro anterior, exceto para os REF primeiros quadros, que são codificados no modo
Intra. Produz-se, então, um arquivo decimado codificado que é enviado ao decodificador.
37
4.2.3
Etapa de Decodificação
O decodificador H.264 recebe também várias informações sobre como proceder na decodificação, com algumas diferenças, como por exemplo: nome do arquivo codificado (.264)
recebido do codificador. E, no caso do codificador da vista prévia, qual quadro anterior
será utilizado como referência para fazer a reordenação do vídeo, dentre outras informações. A decodificação gera somente dois arquivos de saída: um arquivo decodificado
YUV, que será enviado ao detector de erros e um arquivo de texto, contendo um relatório
de decodificação.
O decodificador da vista principal utiliza o quadro anterior como referência para decodificação do quadro atual. Já o decodificador da vista prévia se utiliza somente de quadros
comprovadamente sem erros, i.e., aqueles que receberam uma mensagem do canal de retorno. Contudo, o arquivo codificado recebido pelo decodificador está desordenado. Como
mostra a Figura 4.7, faz-se, então, a reordenação para colocar a sequência de vídeo na
sua ordem natural.
Figura 4.7: Reordenação dos quadros.
Cabe enfatizar que esta ordenação é necessária somente porque está sendo simulado o
processo do canal de retorno. Para realizar a reordenação, deve-se informar qual foi o
atraso utilizado. Então seguindo o algoritmo 2, faz-se a reordenação dos quadros, como
mostra o exemplo da Figura 4.7. Após reordenar-se a sequência de acordo com o algoritmo
proposto, o fluxo de dados continua normalmente.
Algorithm 2 Reordena os quadros da sequência decimada.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
j ←round(F/REF)+1
for i=2 até F do
Y 1(i) ←Y2(j)
U 1(i) ←U2(j)
V 1(i) ←V2(j)
j ←j+F/REF
if j > F then
j ←j-F+1
end if
end for
38
4.2.4
Etapa de Redimensionamento
O bloco redimensionador é o mais simples de todos. Ele recebe o arquivo reconstruído
YUV do codificador e redimensiona cada quadro retornando um quadro dezesseis vezes
menor, como mostra a Figura 4.8.
Figura 4.8: Decimação - Reconstruído e seu respectivo decimado.
4.2.5
Etapa de Detecção de Erros
O detector de erros recebe a sequência decodificada da vista principal e a decimada da
vista prévia, além do tamanho do bloco (16×16 e 4×4, respectivamente) e dois limiares
que foram calculados previamente e que irão determinar se um bloco é consistente ou não
com seu respectivo quadro da vista prévia e da vista principal.
4.2.5.1
Limiares de Detecção de Erros
Aqui se faz um parêntese para discussão sobre o cálculo do limiar. No trabalho original
do RECAP [4], não se explicita como esse cálculo foi feito. Portanto, para este trabalho
foram desenvolvidos dois métodos que serão explicados a seguir: um chamado Vetor de
Limiares e outro chamado Limiar baseado no Primeiro Quadro.
Vetor de Limiares: Neste caso, faz-se um pré-processamento do vídeo para descobrir o limiar de erro entre o quadro atual da vista principal e o anterior, assim como entre
o quadro atual da vista principal e seu correspondente decimado e criam-se dois vetores:
um vetor de limiares da vista principal e um vetor de limiares da vista prévia.
Para descobrir o limiar de um quadro em relação ao seu correspondente decimado
(Preview ), redimensiona-se o quadro da vista principal, de tal forma que este fique do
mesmo tamanho do quadro da vista prévia e faz-se o cálculo do MSE, bloco a bloco
(como é mostrado na Figura 4.9), de cada quadro da sequência decodificada com o quadro
correspondente na vista prévia e guarda-se o maior valor no vetor de limiares da vista
prévia, como é mostrado na Figura 4.10.
39
Para descobrir o limiar da vista principal, faz-se o cálculo do MSE, bloco a bloco (como
é mostrado na Figura 4.11), de cada quadro da sequência reconstruída com o quadro
anterior reconstruído. Guarda-se o maior valor do quadro e registra-se no vetor de limiares
da vista principal, como é mostrado na Figura 4.12.
Figura 4.9: Cálculo de Limiares da Vista Prévia.
Cabe salientar duas coisas em relação ao vetor de limiares. Primeiro, o vetor da vista
principal não possui informações na primeira posição, uma vez que este não possui um
quadro anterior para fazer comparações. Segundo, os valores do vetor de limiares da vista
prévia são significativamente menores em relação aos valores do vetor da vista principal,
uma vez que os quadros da vista principal e seus correspondentes decimados são muito
similares.
Figura 4.10: Vetor de Limiares da Vista Prévia.
40
Figura 4.11: Cálculo de Limiares da Vista Principal.
Para obter o vetor de limiares da vista prévia, como os blocos tem tamanhos diferentes,
faz-se necessário decimar o quadro reconstruído de modo que este fique do mesmo tamanho
do bloco do Preview. O processo de calcular o vetor de limiares é mostrado no Algoritmo
3. Neste algoritmo, D1 e D2 são as dimensões dos vídeos e Limiar é o maior MSE do
quadro. Faz-se necessário enfatizar que o processo de calcular o vetor de limiares deve ser
feito antes da codificação. Logo, é um processo offline que não pode ser feito em tempo
real.
Uma vez calculados os limiares para cada quadro, a detecção de erros é feita procurando
erros no quadro atual, fazendo comparações com seu correspondente na vista prévia e
com o quadro anterior da vista principal. No caso de erros no Preview, redimensiona-se
o bloco do quadro reconstruído de forma que ele fique do mesmo tamanho do bloco do
Preview. Então, calcula-se o MSE entre ambos e compara-se este valor com o limiar
correspondente no vetor. Utilizando-se o exemplo da Figura 4.13, redimensiona-se o
bloco A do reconstruído, criando-se o bloco B e compara-se este com o correspondente
Figura 4.12: Vetor de Limiares da Vista Principal.
41
Algorithm 3 Cálculo do Limiar.
1: Limiar ← 0
2: for i=1 até X do
3:
for j=1 até Y do
4:
if D1 6= D2 then
5:
REDIM EN SION A(Y 1, 0.25)
6:
M SE_Atual ←MSE(Y1(i,j),Y2(i,j))
7:
else
8:
M SE_Atual ←MSE(Y1(i,j),Y2(i,j))
9:
end if
10:
if MSE_Atual > Limiar then
11:
Limiar ←MSE_Atual
12:
end if
13:
end for
14: end for
no Preview, bloco A’. Se o valor do MSE é maior que o valor do limiar, o bloco é marcado
como errado ou inconsistente.
Figura 4.13: Comparação do bloco reconstruído com o bloco do Preview.
No trabalho original do RECAP [4], caso o valor encontrado fosse maior que o limiar,
este bloco era diretamente marcado como inconsistente e não se testava se houve erros
com relação ao reconstruído anterior. Neste trabalho, utilizando-se do vetor de limiares
da vista principal, faz-se também a detecção de erros em relação ao quadro anterior,
42
como mostra a Figura 4.14. Calcula-se o MSE entre o bloco B, com o bloco de mesma
localização A, no quadro anterior. Se este valor ultrapassar o limiar correspondente no
vetor de limiares, este bloco é marcado como inconsistente.
A detecção de erro utilizando o quadro anterior da vista principal é importante porque
o quadro da vista prévia pode também conter erros e não ser útil na detecção. Não
é difícil assumir que a vista prévia possa ser enviada por um canal mais seguro, logo
pode estar livre de erros, entretanto, em algumas aplicações esse canal seguro pode não
estar presente, logo, procurar erros também no quadro anterior da vista principal torna
o sistema mais robusto.
Figura 4.14: Comparação do bloco reconstruído com o bloco do quadro anterior.
Limiar baseado no Primeiro Quadro: Neste caso, faz-se o mesmo procedimento
do vetor de limiares, i.e., faz-se um pré-processamento, contudo só para o primeiro quadro
no Preview e só para o segundo quadro da vista principal. O H.264 possui ferramentas que
enviam dados redundantes para garantir que determinados quadros sejam decodificados
corretamente, i.e., há meios de se proteger quadros importantes [34]. Assim, o codificador
pode se utilizar destes meios para se assegurar de que os dois primeiros quadros sejam
corretamente decodificados e, então, calcular o limiar Preview do primeiro e o limiar
reconstruído do segundo quadro.
Estes dois limiares serão multiplicados por uma constante K e K 0 , respectivamente. E
estes serão os limiares para todos os outros quadros. Empiricamente, foi verificado que
para a constante K, da vista prévia, o valor razoável seria 10, uma vez que se um quadro
for consistente com seu Preview não deverá ultrapassar este valor. Já para o reconstruído,
o valor empiricamente verificado é 100, porém, como será visto mais a frente, este limiar
não é utilizado para detectar erros e, sim, para testar candidatos a ocultamento de erros
na etapa de ocultação de erros. Este processo, então, vai automaticamente gerar dois
limiares durante a codificação do sinal.
43
4.2.6
Etapa de Ocultação de Erros
O bloco ocultador de erros recebe o quadro reconstruído atual, o quadro reconstruído
anterior, o quadro Preview e informações como tamanho de bloco, tamanho de janela
de busca, limiares e informações sobre blocos inconsistentes. Durante a transmissão de
dados, as perdas nos canais podem ocorrer em blocos isolados ou em quadros inteiros.
Verifica-se, então, as informações de blocos inconsistentes de forma a casá-las com um dos
seguintes casos:
1. Caso um bloco esteja marcado como inconsistente em relação ao Preview, porém
consistente em relação ao reconstruído anterior, este bloco não será enviado para
correção, visto que o mais provável é que a vista prévia esteja com erros e, não, a
vista principal, como mostra a Figura 4.15.
Figura 4.15: Perda de bloco isolado no quadro da vista prévia.
2. Caso um bloco esteja marcado como inconsistente em relação ao Preview e como
inconsistente em relação ao reconstruído anterior, este bloco será enviado para correção, visto que somente a vista principal contém erros, como mostra a Figura 4.16.
Figura 4.16: Perda de bloco isolado no quadro da vista principal.
3. Caso um bloco esteja marcado como consistente em relação ao Preview, porém inconsistente em relação ao reconstruído anterior, este bloco será enviado para correção,
visto que tanto o Preview quanto a vista principal podem conter erros, como mostra
a Figura 4.17.
44
Figura 4.17: Perda de bloco correspondente completo em ambas as vistas.
4. Caso todos os blocos de um quadro estejam marcados como inconsistentes em relação
ao Preview, mas não em relação ao reconstruído anterior, este bloco não será enviado
para correção, visto que isto indica que o quadro da vista prévia foi perdido, como
mostra a Figura 4.18.
Figura 4.18: Perda de quadro completo na vista prévia.
5. Caso todos os blocos de um quadro estejam marcados como inconsistentes em relação ao Preview e como inconsistentes em relação ao reconstruído anterior, este
bloco será enviado para correção, visto que somente o quadro da vista principal foi
completamente perdido, como mostra a Figura 4.19.
Figura 4.19: Perda de quadro completo na vista principal.
45
6. Caso todos os blocos de um quadro estejam marcados como consistentes em relação
ao Preview, mas não em relação ao reconstruído anterior, este bloco será enviado
para correção, visto que tanto a vista prévia quanto a vista principal contém erros
ou foram perdidos ambos os quadros, como mostra a Figura 4.20.
Figura 4.20: Perda de quadro correspondente em ambas as vistas.
Quando um bloco é marcado como inconsistente e enviado para correção, seu Preview
é redimensionado de modo a ficar do mesmo tamanho do bloco do quadro reconstruído.
Aqui há outra modificação em relação ao trabalho original do RECAP [4]: faz-se a adição
de componentes de alta frequência no bloco redimensionado. A alta frequência enriquece o
Preview redimensionado e ajuda a ocultar mais eficientemente os blocos inconsistentes e é
calculada como mostra a Figura 4.21. Para gerar o quadro de alta frequência, decimou-se
o quadro anterior da vista principal e o resultado foi interpolado e subtraído do quadro
original. No exemplo da Figura 4.21, foi adicionado uma constante de 128 em todos os
pixels de modo a melhor a visualização.
Figura 4.21: Alta frequência.
46
Este bloco redimensionado é utilizado para fazer uma procura dentro de uma janela
de busca no quadro anterior. O bloco mais semelhante ao Preview redimensionado é
escolhido como um dos candidados à subsituição do bloco perdido, como mostra a Figura
4.22. O bloco vai ser comparado com todos os possíveis blocos da janela de buscas, pixel
a pixel.
Essa comparação é feita calculando o MSE entre o bloco redimensionado e o bloco da
janela de buscas e será escolhido o que tiver menor MSE. Para o caso do bloco do Preview
também estar com erro, então o bloco da mesma posição do quandro anterior da vista
principal é utilizado para ocultar o erro. De forma similar, se todo o quadro atual for
perdido, então uma simples interpolação do Preview é utilizada.
Figura 4.22: Exemplo de Janela de Buscas.
Algorithm 4 Escolha do bloco a ser usado para ocultar o erro.
1: if M SEP review < M SEReconstrudo then
2:
BlocoP erdido ← BlocoP review + AltaF requencia
3: else
4:
BlocoP erdido ← BlocoReconstruidoAnterior
5: end if
A Figura 4.23 mostra o quadro original (a), o quadro corrompido (b) e o quadro com
erros ocultados (c) de uma sequência de vídeo.
47
(a) Quadro Original Decodificado
(b) Quadro Corrompido
(c) Quadro Corrigido
Figura 4.23: Quadros da sequência Foreman.
48
Capítulo 5
RESULTADOS E ANÁLISES
Este capítulo apresenta os resultados obtidos nos testes para avaliação de performance
do codificador RECAP modificado mostrado no capítulo anterior. Além disso, são analisados os cenários de simulação de testes, sequências utilizadas e gráficos resultantes.
5.1
Sequências de Teste
Neste trabalho, os testes foram feitos com quatro sequências frequentemente utilizadas
para realizar simulações e testes para mensuração de eficiência e desempenho de codificação de vídeo. A Figura 5.1 apresenta as informações básicas de cada uma delas:
Figura 5.1: Informações básicas das sequências utilizadas.
49
Como as sequências estão no formato CIF YUV 4:2:0, a componente de luminância
possui 352×288 pixels e as componentes de crominância possuem 176×144 pixels, exceto
no caso da sequência City, visto que essa possui resolução 4CIF, logo sua componente
de luminância possui 704×576 pixels e as componentes de crominância possuem 352×288
pixels.
Há diversos fatores que podem influenciar a maneira em que macroblocos perdidos
são percebidos visualmente pelo espectador, tais como mudança de cena e, com bastante
relevância, a quantidade de movimento. Para tanto, foram escolhidas sequências de teste
que abrangem de pouco movimento a muito movimento [35], como mostra a Figura 5.2.
Figura 5.2: Descrição de conteúdo das sequências utilizadas.
É importante notar também que a qualidade do vídeo recuperado é influenciado diretamente pela taxa de compressão, visto que a exigência de alto grau de compactação
compromete a qualidade do vídeo decodificado e pela quantidade de macroblocos codificados por predição intra, uma vez que estes geralmente são melhor recuperados através
de técnicas espaciais de ocultamente de erros.
O padrão H.264 possui também a opção de utilizar particionamento de dados, onde as
informações são divididas em nível de importância [34]. Os dados que contêm macroblocos
Intra são mais importantes do que aqueles que contêm informações de movimento (Vetores
de Movimento), que são mais importantes que aqueles que contêm informação de textura
(resíduo) dos macroblocos inter. Desta forma, a utilização de codificação redundante [34]
pode ser aplicada somente a certos dados, dependendo da importância.
50
5.1.1
Medida Objetiva de Qualidade
Para fazer a avaliação dos resultados experimentais, foi utilizada a PSNR (peak signalto-noise ratio), que é a medida de qualidade objetiva mais comumente utilizada na literatura. A PSNR é definida como:
H−1
−1
XW
X
1
[I(i, j) − K(i, j)]2
M SE =
H ∗ W i=0 j=0
M AX 2
P SN RdB = 10 · log10
M SE
(5.1)
(5.2)
onde I(i, j) e K(i, j) representam os valores dos pixels na posição (i, j) de duas imagens
monocromáticas I e K, com resolução H×W, em que uma das imagens é considerada a
aproximação da outra e M AX é o máximo valor possível para um pixel da imagem.
Os cálculos de PSNR foram feitos, na maioria dos casos, comparando somente as componentes de luminância das sequências. Isto se dá devido à condição do ser humano de
ser mais sensível à brilho do que a cor [36], logo preterimos as componentes de crominância. Entretanto, para apenas um cenário de simulação, foi realizado um teste utilizando
a média aritmética simples total das três componentes em função da taxa.
A Figura 5.3 mostra um quadro de cada uma das sequências utilizadas para testes.
Figura 5.3: Quadros das sequências utilizadas.
51
5.2
Cenários de Simulação
Na Figura 5.4, encontra-se a arquitetura do RECAP com as modificações realizadas
utilizado para realização dos testes, i.e., com o bloco simulador do canal de retorno e com
a adição de alta frequência na etapa de ocultamento de erros.
Figura 5.4: RECAP modificado.
5.2.1
Simulação de canal de retorno.
A Figura 5.5 apresenta a simulação do canal de retorno utilizando um, três e seis quadros
de atraso em azul-claro, laranja e verde, respectivamente. Considerando-se 300 quadros,
no primeiro caso se utiliza codificação (IPPPP), no segundo caso se utiliza codificação
(IIIPPPP) e, no caso de simulação com atraso de seis quadros, utiliza-se codificação
(IIIIIIPPPP). A simulação do canal de retorno através de atraso temporal dos quadros
reconstruídos pode ser vista no bloco em laranja do diagrama do RECAP modificado da
Figura 5.4.
5.2.2
Simulação de erros
Para os erros de transmissão, foram simulados diferentes cenários. Inicialmente, simulamos a perda de alguns macroblocos em todas as componentes YUV. A seguir foi feita a
simulação de perda de um quadro inteiro.
52
Figura 5.5: Simulação de canal de retorno na vista prévia.
A Figura 5.6a apresenta a simulação de erros na vista prévia e principal, com perda
de três macroblocos aleatórios por quadro e QP variando de dois em dois de 20 a 38.
Já a Figura 5.6b segue a mesma forma, porém com perdas somente na vista principal,
assumindo que o sinal do preview foi enviado por um canal mais seguro.
Nas simulações de perda integral de quadro, utilizou-se um número menor de quadros,
QP = 30, com perda de três macroblocos por quadro e a perda integral de apenas um
quadro. A Figura 5.6c apresenta a simulação de perda de um quadro completo somente
no sinal do reconstruído, assumindo novamente que o sinal do preview foi enviado através
de um canal mais seguro e, por último, a Figura 5.6d apresenta a simulação de perda de
um quadro completo correspondente tanto na vista principal quanto na vista prévia.
5.2.3
Simulação com Vetor de Limiares
Neste cenário de simulação, foi utilizado um Vetor de Limiares para pré-processar a
sequência de vídeo a fim de guardar os resultados de limiar reconstruído e preview para
posterior detecção e ocultação de erros.
5.2.4
Simulação com Limiar baseado no Primeiro Quadro
Neste cenário de simulação, foi utilizado o Limiar baseado no Primeiro Quadro para
calcular o limiar que seria usado posteriormente para detectar e ocultar erros nos quadros
subsequentes.
53
(a) Erro em ambas as vistas.
(b) Erro na vista principal.
(c) Perda integral da vista principal.
(d) Perda integral de ambas as vistas.
Figura 5.6: Perfis de erros na vista principal e/ou vista prévia.
54
5.3
Apresentação e análise de testes
Aqui serão apresentados os gráficos obtidos através da utilização do método RECAP
modificado e estes serão analisados de acordo com o cenário de simulação em que estão
inseridos. Os resultados obtidos serão apresentados em gráficos de Distorção × Taxa,
sendo a PSNR a medida de distorção utilizada. Normalmente serão mostrados os resultados para a componente de luminância (Y). Entretanto, é importante ressaltar que os
sistemas e testes foram elaborados para as três componentes (YUV), porém como o sinal
de brilho possui mais detalhes, a sua análise foi considerada mais importante.
5.3.1
Utilizando Vetor de Limiares
5.3.1.1
Simulando erros somente na Vista Principal
1 Quadro de Atraso:
Figura 5.7: Sequência Foreman - Erro na Vista Principal - 1 Quadro de Atraso
Pode-se visualizar nas Figuras 5.7 e 5.8, 5.12 e 5.13 e 5.17 e 5.18 que a diferença entre
o sinal sem erros e o corrigido é mais acentuada se considerarmos somente a componente
de luminância (Y). Isto se deve ao fato de que as componentes de crominância são mais
suaves, logo os erros são mais fáceis de serem ocultados.
Pode-se notar que o resultado das Figuras 5.8 a 5.11 foram satisfatórios, principalmente
para a sequência Akiyo. A sequência que teve pior ocultamento de erros foi a Mobile, porém, mesmo no pior caso, o sinal corrigido tem uma relação taxa-distorção muito superior
ao sinal com erros, especialmente para QP’s mais altas.
55
Figura 5.8: Sequência Foreman - Erros na Vista Principal - 1 Quadro de Atraso
Figura 5.9: Sequência Akiyo - Erros na Vista Principal - 1 Quadro de Atraso
56
Figura 5.10: Sequência Mobile - Erros na Vista Principal - 1 Quadro de Atraso
Figura 5.11: Sequência City - Erros na Vista Principal - 1 Quadro de Atraso
57
3 Quadros de Atraso:
Figura 5.12: Sequência Foreman - Erro na Vista Principal - 3 Quadros de Atraso
Figura 5.13: Sequência Foreman - Erros na Vista Principal - 3 Quadros de Atraso
58
Figura 5.14: Sequência Akiyo - Erros na Vista Principal - 3 Quadros de Atraso
Figura 5.15: Sequência Mobile - Erros na Vista Principal - 3 Quadros de Atraso
Os resultados para três quadros de atraso mostrados nas Figuras 5.13 a 5.16 é bastante
parecido com os resultados para atraso de um quadro. Observa-se que, como a maioria
dos blocos são corrigidos por quadros da vista prévia, usar três ou seis quadros de atraso
não geram perdas significativas, provando que o RECAP vai funcionar adequadamente
mesmo se existir um retardo considerável no canal de retorno.
59
Figura 5.16: Sequência City - Erros na Vista Principal - 3 Quadros de Atraso
6 Quadros de Atraso:
Figura 5.17: Sequência Foreman - Erro na Vista Principal - 6 Quadros de Atraso
Novamente, os resultados mostrados nas Figuras 5.18 a 5.21 evidenciam que o aumento
no atraso do canal de retorno não reflete negativamente no desempenho do sistema.
60
Figura 5.18: Sequência Foreman - Erros na Vista Principal - 6 Quadros de Atraso
Figura 5.19: Sequência Akiyo - Erros na Vista Principal - 6 Quadros de Atraso
61
Figura 5.20: Sequência Mobile - Erros na Vista Principal - 6 Quadros de Atraso
Figura 5.21: Sequência City - Erros na Vista Principal - 6 Quadros de Atraso
62
5.3.1.2
Simulando perda de quadro completo somente na Vista Principal
1 Quadro de Atraso:
Figura 5.22: Sequência Foreman - Perda integral na Vista Principal - 1 Quadro de Atraso
1 Quadro de Atraso:
Figura 5.23: Sequência Foreman - Perda integral na Vista Principal - 1 Quadro de Atraso
63
Neste cenário de simulação, perdeu-se apenas o quadro do meio integralmente. Vale
ressaltar que, a fim de testar o algoritmo ao máximo, quando se testou perda integral de
quadros, continuou havendo perdas isoladas de macroblocos. Logo, o gráfico da Figura
5.22 segue o mesmo padrão das sequências anteriores. Já no gráfico da Figura 5.23, que
representa a PSNR de cada um dos quadros codificados, pode-se notar que, quando há
a perda integral de quadro, a PSNR diminui significativamente, entretanto recupera-se
rapidamente sem propagar o erro para os quadros posteriores.
Como não houve como fazer a simulação real de perda de pacotes, não foi possível
simular o drifting, portanto é importante notar que os resultados são melhores que esses
mostrados no gráfico, porque caso se tivesse feito a simulação real, haveria propagação de
erros para os quadros seguintes , i.e., a curva da sequência com erros não se recuperaria
tão rapidamente como no gráfico apresentado, enquanto o RECAP consegue evitar a
propagação dos erros [4].
64
5.3.1.3
Simulando erros na Vista Principal e na Vista Prévia
1 Quadro de Atraso:
Figura 5.24: Sequência Foreman - Erros na Vista Prévia e Principal - 1 Quadros de Atraso
Figura 5.25: Sequência Akiyo - Erros na Vista Prévia e Principal - 1 Quadros de Atraso
Os resultados dos gráficos das Figuras 5.24 a 5.27 foram similares àqueles com perda
isolada de macroblocos somente na vista principal. Mesmo considerando que o canal
65
Figura 5.26: Sequência Mobile - Erros na Vista Prévia e Principal - 1 Quadro de Atraso
Figura 5.27: Sequência City - Erros na Vista Prévia e Principal - 1 Quadro de Atraso
por onde foi transmitida a vista prévia é tão inseguro quanto o canal da vista principal,
o sistema proposto consegue corrigir os erros adequadamente. Um dos motivos foi a
decodificação proposta neste trabalho, em que os erros são procurados tanto na vista
prévia quanto no quadro anterior da vista principal.
66
3 Quadros de Atraso:
Figura 5.28: Sequência Foreman - Erros na Vista Prévia e Principal - 3 Quadros de Atraso
Figura 5.29: Sequência Akiyo - Erros na Vista Prévia e Principal - 3 Quadros de Atraso
Das Figuras 5.28 a 5.31, pode-se notar que, para a sequência Akiyo, os resultados
foram muito bons, porém houve um afastamento maior em relação a curva da sequência
codificada sem erros quando a QP aumenta.
67
Figura 5.30: Sequência Mobile - Erros na Vista Prévia e Principal - 3 Quadros de Atraso
Figura 5.31: Sequência City - Erros na Vista Prévia e Principal - 3 Quadros de Atraso
68
6 Quadros de Atraso:
Figura 5.32: Sequência Foreman - Erros na Vista Prévia e Principal - 6 Quadros de Atraso
Figura 5.33: Sequência Akiyo - Erros na Vista Prévia e Principal - 6 Quadros de Atraso
Os gráficos apresentados nas Figuras 5.32 a 5.35 foram bastante similares àqueles com
atraso de três quadros. Isto mostra a robustez do sistema mesmo com alto atraso do canal
de retorno e erro em ambas as vistas.
69
Figura 5.34: Sequência Mobile - Erros na Vista Prévia e Principal - 6 Quadros de Atraso
Figura 5.35: Sequência City - Erros na Vista Prévia e Principal - 6 Quadros de Atraso
70
5.3.1.4
Simulando perda de quadro completo na Vista Principal e Prévia
1 Quadro de Atraso:
Figura 5.36: Sequência Foreman - Perda integral na Vista Principal/Prévia
3 Quadros de Atraso:
Figura 5.37: Sequência Foreman - Perda integral na Vista Principal/Prévia
71
6 Quadros de Atraso:
Figura 5.38: Sequência Foreman - Perda integral na Vista Principal/Prévia
Das Figuras 5.36 a 5.38, observa-se que mesmo com a perda integral da vista prévia e
da vista principal, os resultados foram satisfatórios para as três quantidades de atraso e
bastante similar aos resultados com perda integral apenas da vista principal. É possível
notar que a queda na qualidade do quador perdido não é tão brusca quanto no sinal sem
correção. Inclusive, o quadro corrigido, após ser totalmente perdido em ambas as vistas,
tem uma qualidade objetiva similar a de um quadro com alguns blocos perdidos, já que a
PSNR deste quadro é similar a PSNR dos quadros com erros isolados em apenas alguns
blocos.
72
5.3.2
Utilizando Limiar baseado no Primeiro Quadro
5.3.2.1
Simulando erros somente na Vista Principal
1 Quadro de Atraso:
Figura 5.39: Sequência Foreman - Erros na Vista Principal - 1 Quadro de Atraso
Figura 5.40: Sequência Akiyo - Erros na Vista Principal - 1 Quadro de Atraso
73
3 Quadros de Atraso:
Figura 5.41: Sequência Foreman - Erros na Vista Principal - 3 Quadros de Atraso
Figura 5.42: Sequência Akiyo - Erros na Vista Principal - 3 Quadros de Atraso
74
6 Quadros de Atraso:
Figura 5.43: Sequência Foreman - Erros na Vista Principal - 6 Quadros de Atraso
Figura 5.44: Sequência Akiyo - Erros na Vista Principal - 6 Quadros de Atraso
75
Dos resultados das Figuras 5.39 a 5.44, é importante notar que para a sequência Foreman, os resultados obtidos foram praticamente os mesmo daqueles utilizando vetor de
limiares. Isto não ocorre para a sequência Akiyo com três e seis quadros de atraso. É
possivel perceber um distanciamento maior entre a curva codificada original e a corrigida,
para QP’s mais altas. Isso se deve ao fato de que, como há pouco movimentação no vídeo,
logo consegue-se altas taxas de compressão, portanto o envio do sinal adicional da vista
prévia é significativo para esta sequência.
Porém, é importante ressaltar que o método proposto para a seleção automática do limiar baseado na análise do primeiro quadro consegue resultados similares à pré-processar
a sequência inteira em busca do limiar ótimo. Nas Figuras 5.45 a 5.55 serão mostrados resultados análogos àqueles utilizando vetor de limiares, porém utilizando o método
automático de seleção do limiar. Como pode ser visto, não existem diferenças muito
significativas entre ambos.
76
5.3.2.2
Simulando perda de quadro completo somente na Vista Principal
1 Quadro de Atraso:
Figura 5.45: Sequência Foreman - Perda Integral na Vista Principal - 1 Quadro de Atraso
1 Quadro de Atraso:
Figura 5.46: Sequência Foreman - Perda Integral na Vista Principal - 1 Quadro de Atraso
77
5.3.2.3
Simulando erros na Vista Principal e na Vista Prévia
1 Quadro de Atraso:
Figura 5.47: Sequência Foreman - Erros na Vista Prévia e Principal - 1 Quadro de Atraso
Figura 5.48: Sequência Akiyo - Erros na Vista Prévia e Principal - 1 Quadro de Atraso
78
3 Quadros de Atraso:
Figura 5.49: Sequência Foreman - Erros na Vista Prévia e Principal - 3 Quadros de Atraso
Figura 5.50: Sequência Akiyo - Erros na Vista Prévia e Principal - 3 Quadros de Atraso
79
6 Quadro de Atraso:
Figura 5.51: Sequência Foreman - Erros na Vista Prévia e Principal - 6 Quadros de Atraso
Figura 5.52: Sequência Akiyo - Erros na Vista Prévia e Principal - 6 Quadros de Atraso
80
5.3.2.4
Simulando perda de quadro completo na Vista Principal e na Vista
Prévia
1 Quadro de Atraso:
Figura 5.53: Sequência Foreman - Perda integral na Vista Principal/Prévia
3 Quadros de Atraso:
Figura 5.54: Sequência Foreman - Perda integral na Vista Principal/Prévia
81
6 Quadros de Atraso:
Figura 5.55: Sequência Foreman - Perda integral na Vista Principal/Prévia
82
Capítulo 6
CONCLUSÃO
O RECAP é um método de ocultamento de erros baseado na estimação de dados perdidos através de um sinal adicional de baixa qualidade e baixa latência (vista prévia) que
é enviado em conjunto com o sinal original codificado (vista principal). Ambos os sinais
são codificados e enviados separadamente ao decodificador. Este decodifica os sinais e os
enviam a um detector de erros. Através de técnicas como Vetor de Limiares e Limiar
baseado no Primeiro Quadro, os blocos inconsistentes são detectados e enviados para um
ocultador de erros. Nesta etapa, os blocos inconsistentes são estimados, usando macroblocos de quadros anteriores decodificados do próprio sinal original ou macroblocos de
quadros correspondentes corretamente decodificados do sinal da vista prévia.
Para testar o método supracitado, foram utilizadas sequências de testes que abrangem
pouco, médio e muito movimento [35]. Os cenários de teste envolvem perda de macroblocos apenas na vista principal e em ambas as vistas. Foram feitos, também, testes
simulando um atraso de codificação de um, três e seis quadros. Pode-se verificar também
como foi o comportamento do método em perdas integrais de quadro, tanto somente da
vista principal, quanto de ambas as vistas.
De modo geral, o resultado foi bastante satisfatório. Os testes mostraram que, por muitas vezes, o método chegou muito próximo do ideal. Quando foi testada a perda completa
de quadro, pôde-se notar que o algoritmo também foi muito eficiente, ocultando o erro
sem propagá-lo para os quadros seguintes. O uso do limiar baseado no primeiro bloco não
foi tão eficaz quanto o vetor de limiares, porém foi bastante próximo e é computacionalmente mais simples e viável. Já o vetor de limiares é extremamente eficiente, mas à um
custo algorítmico elevado e só é útil em aplicações off-line.
Já o atraso de um, três ou seis quadros não influenciou expressivamente os resultados.
Evidentemente, a utilização de atrasos de apenas um quadro retorna melhores efeitos,
visto que a correlação entre amostras temporais imediatas é maior do que entre três e
seis quadros, respectivamente. Logo, o aumento do atraso vai aumentar a taxa do sinal
da vista prévia, porém como esse sinal possui uma resolução muito inferior à da vista
principal, o aumento na taxa não é tão significativo.
83
6.1
Apresentação das Contribuições
Foram feitas três modificações significativas em relação ao projeto original, que podem
ser vistas na seção 5.2, na Figura 5.4. A primeira é a adição da alta frequência no macrobloco interpolado, melhorando visualmente a imagem ocultada. A segunda é a detecção de
erros não só em relação à vista prévia, mas também em relação à vista principal, no caso
da utilização de Vetor de Limiares. E a terceira é um método para selecionar os limiares
automaticamente, baseada na correta codificação dos primeiros quadros da sequência.
6.2
Perspectiva para Trabalhos Futuros
A fim de alcançar resultados mais satisfatórios, propõe-se o estudo mais avançado da
etapa de detecção de erros. Para tanto, sugerem-se pesquisas no campo de identificação
de mudança de cena e limiares baseados na correlação temporal de amostras. Podese usar, também, o framework de para vídeos escaláveis [37] para estimar macroblocos
perdidos e uma camada Wyner-Ziv adicional para melhorar a qualidade do quadro com
erros ocultados [38].
Pode-se fazer também uma análise da complexidade computacional do algoritmo de
modo a torná-lo mais eficiente. Também é possível aumentar o número de cenários de
simulação e variar as sequências de teste, além, é claro, de mudar as configurações do
padrão H.264 para que o torne mais eficiente e adequado ao método proposto. Pode-se,
realmente, simular a perda de pacotes em redes não confiáveis. Outra ideia seria usar
uma janela de buscas hexagonal ao redor do macrobloco corrompido de acordo com o
método proposto por Kang [39] que faz uma busca centralizada em pontos específicos do
hexágono.
84
Referências
[1] I. Richardson, H. 264 and MPEG-4 video compression: video coding for nextgeneration multimedia. John Wiley & Sons Inc, 2003. vii, 17, 18, 19, 20, 27,
28, 29, 30
[2] P. Diniz, E. A. B. da Silva, and S. Lima Netto, Digital signal processing. Cambridge
University Press, 2010. 1
[3] Skype. (2003, Aug.) Skype 5.1. [Online]. Available: http://www.skype.com 1, 24
[4] C. Yeo, W. Tan, and D. Mukherjee, “Receiver error concealment using acknowledge
preview (RECAP)-An approach to resilient video streaming,” in Acoustics, Speech and Signal Processing, 2009. ICASSP 2009. IEEE International Conference on.
IEEE, 2009, pp. 785–788. 2, 39, 42, 46, 64
[5] Y. Wang, S. Wenger, J. Wen, and A. Katsaggelos, “Error resilient video coding
techniques,” Signal Processing Magazine, IEEE, vol. 17, no. 4, pp. 61–82, 2002. 2
[6] C. Wang, D. Sklar, and D. Johnson, “Forward error-correction coding,” Crosslink,
vol. 3, no. 1, pp. 26–29, 2001. 3, 32
[7] S. Zheng, “Unequal Error Protection: Some fundamental limits and optimal strategies.” 3, 32
[8] P. Lambert, W. De Neve, Y. Dhondt, and R. Van de Walle, “Flexible macroblock ordering in H. 264/AVC,” Journal of Visual Communication and Image Representation,
vol. 17, no. 2, pp. 358–375, 2006. 3, 32
[9] S. Rane, P. Baccichet, and B. Girod, “Modeling and optimization of a systematic
lossy error protection system based on H. 264/AVC redundant slices,” in Picture
Coding Symposium, Beijing, China. Citeseer, 2006. 3
[10] J. Wang, A. Majumdar, K. Ramchandran, and H. Garudadri, “Robust video transmission over a lossy network using a distributed source coded auxiliary channel,” in
Proc. Picture Coding Symposium (PCS). Citeseer, 2004. 3
[11] R. Puri, A. Majumdar, and K. Ramchandran, “PRISM: A video coding paradigm
with motion estimation at the decoder,” IEEE transactions on image processing,
vol. 16, no. 10, pp. 2436–2448, 2007. 3
85
[12] S. Tsekeridou and I. Pitas, “MPEG-2 error concealment based on block-matching
principles,” Circuits and Systems for Video Technology, IEEE Transactions on,
vol. 10, no. 4, pp. 646–658, 2002. 3
[13] Z. Wang, Y. Yu, and D. Zhang, “Best neighborhood matching: an information loss
restoration technique for block-based image coding systems,” Image Processing, IEEE
Transactions on, vol. 7, no. 7, pp. 1056–1061, 2002. 3
[14] J. Zheng and L. Chau, “A temporal error concealment algorithm for H. 264 using
Lagrange interpolation,” in Circuits and Systems, 2004. ISCAS’04. Proceedings of
the 2004 International Symposium on, vol. 2. IEEE, 2004. 3
[15] Y. Chen, K. Yu, J. Li, and S. Li, “An error concealment algorithm for entire frame
loss in video transmission,” in Proc. PCS. Citeseer, 2004. 3
[16] C. Shannon, “A mathematical theory of communication,” ACM SIGMOBILE Mobile
Computing and Communications Review, vol. 5, no. 1, pp. 3–55, 2001. 5, 6, 21, 22
[17] T. Cover, J. Thomas, and J. Wiley, Elements of information theory.
Library, 1991, vol. 1. 5, 6, 7
[18] D. MacKay, Information theory, inference, and learning algorithms.
Univ Pr, 2003. 7
Wiley Online
Cambridge
[19] S. Kullback, Information theory and statistics. Dover Pubns, 1997. 7
[20] D. Huffman, “A method for the construction of minimum-redundancy codes,” Proceedings of the IRE, vol. 40, no. 9, pp. 1098–1101, 1952. 8, 23
[21] J. Ziv and A. Lempel, “A universal algorithm for sequential data compression,” Information Theory, IEEE Transactions on, vol. 23, no. 3, pp. 337–343, 2002. 8
[22] G. Langdon, “An introduction to arithmetic coding,” IBM Journal of Research and
Development, vol. 28, no. 2, pp. 135–149, 1984. 8
[23] B. Leiner, “LDPC Codes–a brief Tutorial,” Stud. ID.: 53418L April, vol. 8, 2005. 8,
22
[24] C. Heegard and S. Wicker, Turbo coding. Kluwer Academic Pub, 1999. 8, 22
[25] A. Sadka, Compressed video communications. Wiley, 2002. 13
[26] D. Taubman, M. Marcellin, and M. Rabbani, “JPEG2000: Image compression fundamentals, standards and practice,” Journal of Electronic Imaging, vol. 11, p. 286,
2002. 16
[27] S. Vembu, S. Verdu, and Y. Steinberg, “The source-channel separation theorem revisited,” Information Theory, IEEE Transactions on, vol. 41, no. 1, pp. 44–54, 2002.
21
[28] I. Witten, R. Neal, and J. Cleary, “Arithmetic coding for data compression,” Communications of the ACM, vol. 30, no. 6, pp. 520–540, 1987. 23
86
[29] W. Pennebaker, J. Mitchell, G. Langdon, and R. Arps, “An overview of the basic
principles of the Q-coder adaptive binary arithmetic coder,” IBM Journal of research
and development, vol. 32, no. 6, pp. 717–726, 2010. 23
[30] D. Marpe and T. Wiegand, “A highly efficient multiplication-free binary arithmetic
coder and its application in video coding,” in Image Processing, 2003. ICIP 2003.
Proceedings. 2003 International Conference on, vol. 2. IEEE, 2003. 23
[31] H. Schwarz, D. Marpe, and T. Wiegand, “Overview of the scalable video coding
extension of the H. 264/AVC standard,” IEEE Transactions on Circuits and Systems
for Video Technology, vol. 17, no. 9, pp. 1103–1120, 2007. 26
[32] R. Osorio and J. Bruguera, “Arithmetic coding architecture for H. 264/AVC CABAC
compression system,” 2004. 30
[33] Y. Dhondt and P. Lambert, “Flexible Macroblock Ordering: an error resilience tool
in H. 264/AVC,” in Fifth FTW Ph. D. Symposium,(106), 2004. 32
[34] H. Kalva, “The H. 264 video coding standard,” IEEE multimedia, vol. 13, no. 4, pp.
86–90, 2006. 43, 50
[35] B. Espinoza, “Codificador distribuído de vídeo com complexidade variável a partir
de codificação em resolução espacial mista.” 2009. 50, 83
[36] R. Gonzalez, R. Woods, and S. Eddins, Digital image processing using MATLAB.
Prentice Hall Upper Saddle River, NJ, 2004, vol. 624. 51
[37] K. Rose and S. Regunathan, “Toward optimality in scalable predictive coding,” Image
Processing, IEEE Transactions on, vol. 10, no. 7, pp. 965–976, 2002. 84
[38] D. Mukherjee, B. Macchiavello, and R. de Queiroz, “A simple reversed-complexity
Wyner-Ziv video coding mode based on a spatial reduction framework,” in Proc. of
SPIE Visual Communications and Image Processing, vol. 6508. Citeseer, p. 65. 84
[39] L. Kang and J. Leou, “A hybrid error concealment scheme for MPEG-2 video transmission based on best neighborhood matching algorithm,” Journal of Visual Communication and Image Representation, vol. 16, no. 3, pp. 288–310, 2005. 84
87

Documentos relacionados