Em artigo anterior (TEL138) fizemos uma breve introdução aos processos de compressão, verificando porque eles são necessários e quais as vantagens do MPEG no caso específico da TV digital. Nesse segundo artigo, em que ontinuamos a abordar o tema, veremos os princípios em se baseia a compressão de vídeo, os quais são baseados justamente na nossa percepção visual. O tema terá uma abordagem introdutória, mas com os elementos essenciais para que o leitor, por conta própria, possa depois se aprofundar no assunto procurando literatura especializada.
Este artigo é de 2006 quando ainda não estava definido o padrão de TV digital a ser usado em nosso país.
Esta série é formada pelos artigos TEL138 a TEL143
Codificação Espacial ou Temporal
No artigo da edição passada, verificamos que para a compressão de um sinal de vídeo pode-se aproveitar tanto a redundância espacial como temporal.
A redundância espacial ocorre quando numa mesma imagem temos largas regiões com as mesmas características, caso de um fundo extenso da mesma cor.
A redundância temporal ocorre quando detalhes de uma imagem não mudam na passagem de quadro a quadro.
No MPEG, a redundância temporal é reduzida em primeiro lugar aproveitando-se as semelhanças entre imagens sucessivas.
Quando essa técnica é usada, é preciso apenas enviar como informação as diferenças entre as duas imagens, e essa diferença passa então por uma compressão especial.
A compressão espacial se baseia nas semelhanças entre pixéis adjacentes de grandes áreas de uma imagem, além das freqüências especiais das áreas dominantes.
Codificação Espacial
Para se fazer a codificação espacial de um sinal, o primeiro passo consiste em se fazer uma análise das freqüências espaciais usando uma transformada.
A saída de uma transformada consiste num conjunto de coeficientes que descreve como as diversas harmônicas que formam esse sinal e as freqüências que ele contém se distribuem.
Se esses coeficientes forem manuseados com precisão suficiente, a sua utilização para recuperar a forma de onda original dá excelentes resultados.
A transformada mais utilizada nesse tipo de aplicação é a transformada de Fourier.
Essa transformada localiza cada freqüência componente do sinal de entrada multiplicando a forma de onda de entrada por uma amostra de uma freqüência alvo, denominada função base.
Depois, produto é integrado, conforme mostra a figura 1.
Os resultados podem ser como os mostrados se a componente de freqüência está em fase com a função-base.
Entretanto, se a componente de freqüência está em quadratura com a função-base, a integral ainda será zero.
Por isso, é necessário realizar duas buscas para cada freqüência, com funções-base em quadratura, uma em reação a outra, de tal forma que todas as fases do sinal de entrada sejam detectadas.
A transformada de Fourier tem a desvantagem de precisar de coeficientes tanto para a componente seno como cosseno de cada frequência.
Na transformada do cosseno, a forma de onda de entrada, é espelhada no tempo em relação a ela mesma antes da multiplicação pelas funções-base.
A figura 2 mostra que esse espelhamento cancela todas as componentes senoidais e dobra todas as componentes cossenoidais.
A função base senoidal é desnecessária e apenas um coeficiente se torna necessário para cada freqüência.
A Transformada Discreta de Cosseno (DCT) é a versão amostrada da transformada de cosseno e usada intensamente na forma de duas dimensões do MPEG.
Um bloco de 8 x 8 pixéis é transformado num bloco de 8 x 8 de coeficientes.
Como a transformada exige a multiplicação por frações, existe uma extensão do comprimento da palavra, resultando em coeficientes que tem um comprimento maior do que os valores dos pixéis.
Tipicamente, um bloco de pixéis de 8 bits resulta num bloco de coeficientes de 11 bits. Assim, a DCT não proporciona compressão, mas sim um aumento da quantidade de bits.
No entanto, nesse formato, a compressão torna-se possível.
Na figura 3 temos os resultados de uma transformada inversa para cada um dos coeficientes individuais de uma DCT de 8 x 8 bits.
No caso do sinal de luminância, o coeficiente do topo à esquerda é o brilho médio ou a componente DC do bloco inteiro.
Movendo para a direita na fila superior, a freqüência espacial horizontal aumenta.
Movimento para baixo na coluna da esquerda, a freqüência espacial aumenta nas imagens reais, freqüências verticais e horizontais diferentes podem ocorrer simultaneamente e com isso um coeficiente em algum ponto dentro de bloco vai representar todas as combinações horizontais e verticais possíveis.
Fica claro para imagens em cores, que as amostragens de diferença de cor também precisam ser manuseadas.
Dados Y, Cb e Cr são montados em conjuntos diferentes de 8 x 8 e transformados individualmente.
Ponderação
A figura 4 mostra um gráfico em que temos a percepção humana ao ruído em função da freqüência espacial.
Através desse gráfico é possível perceber que mais ruído é tolerado nas altas freqüências espaciais.
Também no caso de ruídos de vídeo, temos efetivamente o mascaramento pelo detalhes mais finos de uma imagem, enquanto nas áreas planas, esse ruído se torna claramente visível.
A compressão reduz a precisão dos coeficientes e tem um efeito semelhante quando se usa uma amostragem mais curta em PCM. Isso significa que o nível de ruído aumenta.
Em PCM por se diminuir o tamanho das palavras o nível de ruído aumenta da mesma forma em todas as freqüências.
Como a DCT divide o sinal em diversas freqüências, torna-se possível controlar o espectro do ruído.
Assim, nesse processo os coeficientes das baixas freqüências são deixados de uma maneira mais precisa do que os das altas freqüências através de um processo de ponderação.
Na figura 5 temos o modo como o processo de ponderação funciona.
Nesse processo de ponderação, os coeficientes da DCT são divididos por constantes que são função da freqüência bidimensional.
Os coeficientes das baixas frequências são divididos por pequenos números e os das altas freqüências são divididos por números maiores.
Seguindo a divisão o resultado é truncado até o inteiro mais próximo.
Esse corte é uma forma de requantizar.
Na ausência de ponderação a requantização tem por efeito aumentar uniformemente o tamanho do passo de quantização, mas com a ponderação, ele aumenta com passos de acordo com o fator de divisão.
O resultado é que os coeficientes representando as baixas freqüências espaciais são requantizados com passos pequenos e com isso sofrem apenas um pequeno aumento do ruído.
Já os coeficientes que representam freqüências espaciais mais elevadas são requantizados com passos maiores e por isso estão sujeitos a mais ruído.
No decodificador, zeros de baixa ordem são adicionados para recuperar os coeficientes às suas magnitudes corretas.
Eles serão então multiplicados pelos fatores inversos de ponderação.
Seguindo a ponderação inversa, os coeficientes terão seu valor original de saída na DCT mais o erro de requantização, que será maior nas altas freqüências do que nas baixas.
Fica claro que o grau de compressão obtido e na verdade, a taxa de saída de bits obtida é função do grau em que o processo de requantização é aplicado.
Taxas de bits diferentes vão exigir diferentes tabelas de ponderação.
No MPEG é possível usar diversas tabelas de ponderação e a tabela em uso pode ser transmitida ao decodificador, de tal forma que a correta decodificação seja assegurada.
Varredura
Num material de programa típico, os coeficientes DCT mais significativos são normalmente encontrados perto do canto superior esquerdo da matriz.
Depois da ponderação, os coeficientes de baixos valores podem ser arredondados para zero.
Uma transmissão mais eficiente pode ser obtida se todos os coeficientes que não forem zero forem transmitidos antes, seguindo-se um código que informa que os coeficientes restantes são zero.
A varredura é uma técnica que aumenta a probabilidade de se alcançar esse resultado, porque ela envia os coeficientes em ordem decrescente de valor.
Na figura 6(a) mostra que num sistema não entrelaçado a probabilidade é maior para um coeficiente com um valor maior tendo um valor mais alto no canto superior esquerdo e menor para um coeficiente no canto direito inferior.
Uma linha diagonal em ziguezague em 45 graus é a melhor seqüência para ser usada nesse caso.
Na figura 6(b) uma alternativa de padrão de varredura podendo ser usada para fontes entrelaçadas.
Se uma imagem entrelaçadas, um bloco de 8 x 8 DCT de um campo se estende por duas vezes a área vertical da tela, então para um certo detalhe de imagem, as freqüências verticais vão aparecer duas vezes maiores do que as freqüências horizontais.
Codificação de Entropia
No vídeo real nem todas as freqüências espaciais estão presentes simultaneamente.
Isso significa que a matriz de coeficientes DCT deverá conter termos que são zeros.
A requantização vai aumentar o número de zeros eliminando os valores pequenos.
Apesar de se usar a varredura, os coeficientes zero vão aparecer entre os valores significantes.
O RLC (Run Length Code) permite que esses coeficientes sejam manuseados de uma forma mais eficiente.
Onde existem valores que se repetem, como no caso de uma sequência de zeros, o RLC simplesmente transmite o número de zeros em lugar de cada bit individualmente.
Um Codificador Espacial
A figura 7 mostra os conceitos que envolvem um quantizador espacial.
Os sinais de entrada são do tipo 4:2:2 SDI (Serial Digital Interface) os quais podem ter de 8 a 10 bits de comprimento por palavra. MPEG utiliza apenas resolução de 8 bits, o que significa que um estágio de arredondamento será necessário para quando o sinal SDI conter palavras de 10 bits.
A maioria dos perfis MPEG opera com amostragem 4:2:0, o que significa que um filtro/estágio de interpolação será necessário.
O formato de raster de entrada escaneado deve ser armazenado para que possa ser convertido em blocos de 8 x 8 pixéis.
O estágio DCT transforma a informação de imagem no domínio das freqüências.
A DCT por si só não consegue nenhuma compressão. Seguindo a DCT, os coeficientes são ponderados e truncados, proporcionando uma primeira compressão significativa.
Os coeficientes são escaneados em ziguezague para aumentar a probabilidade de que coeficientes significativos ocorram antes na varredura.
Depois os últimos coeficientes que não sejam zero, e um EOB (fim de bloco ou End of Block) é gerado.
Os dados de coeficientes são depois comprimidos pela codificação run-length e code-length.
Num sistema de taxa de bits variável, a quantização deve ser fixa, mas num sistema de taxa de bits fixa, um buffer de memória é usado para absorver as variações na dificuldade de codificação.
No decodificador, a corrente de bits é desserializada e a codificação de entropia revertida para reproduzir os coeficientes ponderados.
Os coeficientes são colocados na matriz de acordo com a varredura em ziguezague e uma ponderação inversa é aplicada para criar o bloco original d e coeficientes DCT.
Seguindo uma transformada inversa, o bloco de 8 x 8 pixéis é recriado.
Para obter uma saída do raster escaneado, os blocos são armazenados numa RAM, que é lida linha por linha.
Para obter uma saída 4:2:2 de dados 4:2:0, um processo de interpolação vertical é necessário, sendo realizado conforme mostra a figura 8.
As amostragens de croma 4:2:0 são posicionadas a meio caminho das amostragens de luminância no eixo vertical de tal forma de que elas sejam igualmente espaçadas quando uma fonte entrelaçada é usada.
Codificação Temporal
A redundância temporal pode ser separada por intercodificação ou então ser transmitidas as diferenças entre as imagens.
A figura 9 mostra que o intervalo de uma imagem combinado com uma subinformação pode computar as diferenças entre as imagens.
A diferença de imagem é uma imagem por si só e pode ser comprimida pelo codificador espacial como descrevemos anteriormente.
O decodificador reverte a codificação especial e adiciona a diferença de imagem para a imagem anterior de modo a obter a imagem seguinte.
Existem algumas desvantagens nesse simples sistema.
Em primeiro lugar como devem ser enviadas apenas diferenças, é impossível começar a decodificação depois do início da transmissão.
Uma solução para esse problema consiste em seu utilizar um sistema que não seja completamente diferencial.
Na figura 10 mostramos como isso pode ser feito.
O sistema não transmite indefinidamente a diferença entre as imagens.
De tempos em tempos, a imagem completa é enviada. Esse sistema é denominado “intra-coded pictures” ou i-pictures, sendo obtido por compressão especial apenas.
Se um erro ocorre ou ainda uma mudança de canal é possível interromper a decodificação e começar de nodo na próxima imagem.
Compensação de Movimento
O movimento reduz as similaridades entre as imagens e aumenta a quantidade de dados necessária para criar uma imagem diferença.
A compensação de movimento é usada para aumentar a similaridade. Na figura 11 mostramos o princípio de funcionamento desse processo.
Quando um objeto se move na tela da TV, ele pode aparecer em diferentes lugares a cada imagem sucessiva, mas não muda muito sua própria aparência.
A imagem diferença pode ser reduzida pela medida do movimento no codificador. Essa informação é enviada ao codificador na forma de um vetor.
O decodificador usa esse vetor para deslocar parte da imagem anterior para um novo local, obtendo-se assim a nova imagem.
Um vetor que controla o deslocamento de uma área inteira da imagem é conhecido como “macrobloco”.
O tamanho do macroblock é determinado pela codificação DCT e pela estrutura da subamostragem de cor.
A figura 12(a) mostra que, com um sistema 4:2:0, o espaçamento vertical e horizontal das amostragens de cor são exatamente duas vezes o espaçamento da luminância.
Um bloco único de amostragem de cor DCT de 8 x 8 se estende pela mesma área com quatro blocos 8 x 8 de luminância. Essa é a menor área de imagem que pode ser deslocada por um vetor.
Um macrobloco contém quatro blocos de luminância, dois blocos Cb e dois blocos Cr.
O avaliador de movimento opera comparando os dados de luminância de duas imagens sucessivas.
Um macrobloco na primeira imagem é usado como referência.
A correlação entre a referência e a imagem seguinte é medida em todos os modos de deslocamento possíveis com uma resolução de meio pixel em toda a faixa varrida.
Quando a maior correlação é encontrada, essa correlação é assumida para representar o movimento correto.
O vetor deslocamento tem uma componente vertical e uma componente horizontal.
Num material típico de programa, um objeto que se move pode se estender por um certo número de macroblocos.
Codificação Bidirecional
Quando um objeto se move, ele descobre o fundo, revelando seus detalhes em seu trajeto.
O fundo revelado precisa de novos dados para ser transmitido, porque não existem informações prévias sobre ela na imagem anterior enviada.
O MPEG ajuda a minimizar esse problema usando codificação bidirecional, que permitem que informação sejam obtidas de imagens antes e depois da imagem que está sendo reproduzida.
Se um fundo está sendo revelado, ele deverá estar presente na imagem seguinte e a informação pode ser movida “para trás” no tempo para se criar parte da imagem anterior.
A figura 13 mostra esse conceito de codificação bidirecional.
Numa base de macrobloco individual, uma imagem codificada bidrecionalmente pode obter dados compensados em movimento de uma imagem anterior ou posterior, ou mesmo usar uma média entre as duas.
A codificação bidirecional reduz significativamente a quantidade de diferença de dados implementando um certo grau de predição.
Imagens I-, P- e B
Para o MPEG três tipos diferentes de imagem são necessárias para poderem aceitar a codificação diferencial e bidirecional, minimizando os erros de propagação.
As imagens I ou I-pictures são imagens intra-codificadas que não precisam de informações adicionais.
Elas precisam de uma grande quantidade de dados quando comparadas a outros tipos de imagem e, além disso, não são freqüentemente usadas.
Elas consistem primariamente de coeficientes de transformada e não têm nenhum vetor.
As imagens I são decodificadas sem referência em relação a nenhuma outra imagem, o que significa que se pode mudar de canal sem que ocorram erros de propagação.
As imagens P ou P-pictures possuem uma previsão da imagem seguinte em relação à imagem anterior, que eventualmente pode ser uma imagem I ou outra imagem P.
Os dados da imagem P consistem em vetores descrevendo onde, na imagem anterior, cada macrobloco se encontrava, e coeficientes de transformada que descrevem a correção ou diferença que deve ser adicionada ao macrobloco.
Quando nenhum casamento apropriado pode ser encontrado num macrobloco pela procura de compensação de movimento, dados intra (intra data) são enviados para codificar o macrobloco.
As imagens P exigem aproximadamente metade dos dados de uma imagem I.
As imagens B são previstas bidirecionalmente em relação às imagens posterior e anterior, as quais podem ser imagens I, imagens B ou outra imagem P.
Elas também contém dados intra codificados que proporcionam as correções necessárias. Novamente se não houver nenhum casamento de macroblocos de imagens anterior e posterior que se casem com a imagem atual, intra-dados são enviados para codificar o macrobloco.
A figura 14 mostra o conceito de GOP. O GOP apresenta a estrutura de imagens I-, P- e B- na seqüência.
Geralmente a estrutura GOP repete através da seqüência, mas o comprimento GOP e estrutura pode mudar a qualquer momento.
Não existem limites formais para o comprimento de uma GOP, mas para efeito de transmissão, o comprimento típico é de 12 a 15 imagens.
Existem dois tipos de GOP: aberto e fechado. Um GOP fechado não exige nenhuma referência fora dele.
Na ordem de apresentação, ele pode começar com uma imagem I e terminar com uma imagem P.
Na ordem de transmissão normalmente temos imagens B seguindo a última imagem P, mas as imagens que serão apresentadas antes serão as últimas P.
É possível começar e terminar um GOP fechado com imagens B (na ordem de apresentação), mas nesse caso as imagens B do começo e fim devem ser codificadas usando apenas uma direção de previsão.
As imagens B do início de um GOP fechado devem ser previstas apenas para frente, e as do final apenas para trás.
Um GOP aberto não tem essas restrições em relação aos vetores de predição.
Por exemplo, as imagens B no final de um GOP podem ser usadas para predição da última imagem P, e as previsão para trás da primeira imagem I do GOP seguinte pode ser usada.
Essa estrutura é sensivelmente mais eficiente, mas as predições podem cruzar os contornos de qualquer imagem.
Um Compressor MPEG
Na figura 15 temos o diagrama de blocos que representa a estrutura de um compensador de movimento direcional típico.
O vídeo pré-processado entra no circuito com uma série de frames que são armazenados e passados adiante para que sua ordem possa ser alterada.
Os dados entram então no subtractor e no avaliador de movimento. Para criar uma imagem I, o final do retardo de entrada é selecionado e o subtractor é desligado de tal forma que os dados passam diretamente através do circuito para serem codificados especialmente.
A saída de dados do subtractor passam então para um armazenador de frame que podem manusear diversas imagens.
A imagem I é mantida armazenada.
Para codificar uma imagem P, as imagens B no buffer de entrada são passadas adiante de tal forma que a imagem futura possa ser selecionada, conforme mostra a figura 16.
O avaliador de movimento compara a imagem I no armazenamento de saída com a imagem P no armazenamento de entrada de modo a criar os vetores de movimento.
Os macroblocos de imagem I são deslocados por esses vetores para fazer uma imagem P.
A imagem P prevista é subtraída da imagem P atual de modo a produzir o erro de predição, que é espacialmente codificado e enviado com os vetores.
O armazenamento de saída contém então uma imagem I e uma imagem P. Uma imagem B do buffer de entrada pode ser agora selecionada.
O compensador de movimento vai comparar a imagem B com a imagem I que a precede e a imagem P que a segue, de modo a obter os vetores bidirecionais, conforme mostra a figura 17.
A compensação para frente e para trás do movimento é realizada de modo a produzir duas imagens B previstas.
Essas são subtraídas da imagem atual B.
Numa base de macrobloco para macrobloco, os dados adiante e anteriores são selecionados de acordo com os que representam as menores diferenças.
As diferenças entre as imagens são então especialmente codificadas e enviadas com os vetores.
Pré-processamento
Um compressor tem por finalidade eliminar a redundância na imagem e entre imagens.
Qualquer coisa que reduz a redundância aparente, ou seja, o conteúdo da imagem é indesejável.
Ruído e granulação dos filmes são especialmente problemáticos porque ocorrem em toda a extensão de uma imagem.
Depois do processo DCT, o ruído resulta em mais coeficientes que sejam não nulos, e o codificador não pode distinguir essa informação da verdadeira informação que corresponde a imagem
Uma quantização pesada será então necessária para codifica todos os coeficientes, reduzindo assim a qualidade da imagem.
O ruído também reduz as semelhanças entre as imagens sucessivas, aumentando assim os dados dessa diferença que precisam ser enviados.
Na maioria das aplicações do MPEG-2 o processo de amostragem 4:2:0 é o usado, exigindo um processo de baixa amostragem de croma se a fonte de sinal é 4:2:2. No MPEG-1, a luminância e o cromo também são amostrados para produzir uma imagem de entrada ou CIF (common image format) que tem apenas 352 pixéis de largura.
Wavelets
Todas as transformadas sofrem com o problema da incerteza porque, por mais precisa que seja o conhecimento do domínio de freqüência, menos precisamente será conhecido o domínio de tempo (e vice-versa).
Na maioria das transformadas, como a discreta de Fourier (DFT), e a discreta de cosseno (DCT), o comprimento do bloco é fixado, de tal forma que a resolução de tempo e freqüência também é fixa.
Os coeficientes de freqüência representam valores igualmente espaçados numa escala linear. Infelizmente, como os sentidos humanos são logarítmicos, a escala completa de uma DCT ou DFT fornece uma resolução de freqüência inadequada num extremo, com excesso de resolução no outro.
A transformada de ondinha (wavelet) não é afetada por esse problema, pois suas resolução de freqüência é uma fração fixa de uma oitava e então tem características logarítmicas.
Isso é obtido mudando o comprimento do bloco em função da freqüência.
Quando a freqüência diminui, o bloco se torna mais longo.
Assim, uma característica da transformada de ondinha e que todas as funções base contém o mesmo número de ciclos, e esses ciclos são simplesmente escalados ao longo do eixo do tempo para diferentes freqüências.
A figura 19 compara os tamanhos dos blocos DFT/DCT com os blocos variáveis das ondinhas.
Para a codificação de vídeo, as ondinhas têm a vantagem de produzir sinais de resolução escalável sem nenhum esforço extra.
No vídeo em movimento, as vantagens das ondinhas podem ser um pouco diminuídas dada maior dificuldade em se identificar vetores de movimento em blocos de comprimento variável.
Conclusão
Vimos nesse artigo que existem três tipos de imagens que são usadas de diversas formas no MPEG para se obter a possibilidade de uma compressão dos dados enviados.
Vimos também os eventuais problemas que podem ocorrer em alguns casos e como eles são solucionados.
No próximo artigo dessa série analisaremos a codificação dos sons e quais são os padrões MPEG que existem assim como sua aplicação na TV digital.
Índice
Introdução à TV Digital (CUR9000)