H.261

 

 

            A norma H.261 define métodos de codificação e descodificação de vídeo para transmissões digitais sobre ISDN a débitos entre 64 kbit/s e 1920 kbit/s. Esta recomendação tem como objectivo satisfazer as necessidades dos utilizadores para videofone e videoconferência. Esta norma foi ratificada em 1990.

            A estrutura de codificação do H.261 é similar ao do codec genérico apresentando na introdução. Ou seja, é uma codificação baseada em técnicas de interframe DCT. A predição interframe é primeiro realizada no domínio do pixel. O erro de predição é depois transformado para o domínio da frequência, onde é feita a quantização para reduzir a largura de banda. A compensação de movimento pode ser incluída na etapa da predição, sendo no entanto opcional. Este tipo de técnica reduz a redudancia temporal através da predição interframe e a redundância espacial através da codificação de transformada.

Estrutura e formato do vídeo.

Ilustração 2 - Diagrama de blocos de um codificador de Audio-Video.

A figura anterior representa o diagrama de blocos de um sistema áudio-visual H.261, onde o pré-processador converte vídeo CCIR-601 (vídeo proveniente do output de uma camera) para um novo formato. Os parâmetros de codificação do sinal de vídeo comprimido são multiplexados e depois combinados com o áudio, data e sinalização ponto – a – ponto para transmissão. O buffer de transmissão controla o débito binário, seja através da alteração do passo de quantificação no codificador, ou em casos mais severos através da redução da frame rate, sendo esta redução feita a nível do pré-processador. A norma H.261 deixa que se interpole até 3 imagens entre as imagens transmitidas, de modo a reduzir a frame rate até 15, 10 e 7,5.

            Nas resoluções CIF e QCIF, os blocos DCT estão agrupados em MB de 4 blocos de luminância e 2 blocos de crominância (Cb e Cr). Os MB por sua vez estão agrupados em camadas (layers) denominadas por GOB (Group of Blocks). Uma imagem com a resolução CIF contem 12 GOBs, enquanto uma QCIF contem 3 GOBs.

Estrutura-se uma imagem em macroblocos e em GOBS, de modo a obter os seguintes objectivos:

·         Codificação intra/inter similar da luminância e crominância na mesma área;

·         Uso de um MV para os blocos de luminancia e crominancia;

·         Codificação eficiente de um largo numero de blocos DCT 8 x 8, em que se espera que estes não estejam codificados durante a codificação interframe. Isto é implementado utilizando código VLC (Variable Lenght Enconding) para CBP (coded block pattern) e endereçamento de MB;

·         Permitir que a sincronização seja restabelecida, devido a bits corrompidos, através da inserção de códigos de sincronização no cabeçalho dos GOB. Isto é, devido aos coeficientes serem codificados com VLC, então qualquer erro durante a transmissão faz com que o resto da codificação VLC não seja possível de descodificar. Logo, utilizando os GOBs, só apenas uma parte da imagem é que é degradada;

·         Permitir o transporte adicional de informação relevante para os GOB, macroblocos ou então camadas superiores. Nisto está incluído formato da imagem, referências temporais, tipo de MB, número de passo de quantização, etc.

Ilustração 3 - Bloco, MB e GOB do formato CIF e do QCIF.

 

Algoritmos de codificação do Vídeo.

 

Ilustração 4 - Diagrama de Blocos do Codificador do H.261


COMP – Comparador para decidir se se utiliza o modo inter/intra de codificação para o MB;

Th – Threshold, serve para estender o range de codificação;

T – Codificação de transformada;

T-1 – Transformada inversa;

Q – Quantização dos coeficientes DCT;

Q-1 – Quantização inversa;

P – Memoria de imagem com compensação de movimento com atraso variável;

F – Filtro Loop;

p – Flag para Inter/Intra;

t – Flag para transmitido ou não;

q – Índex de quantização para os coeficientes da transformada

qz – Indicador de quantização;

v – Informação do vector de movimento

f – Controlador de actividade do filtro loop.


 

Tal como apresentado no capítulo 1, o codificador da imagem 5.3 é muito semelhante ao codificador de vídeo genérico.

Os elementos principais são a predição que inclui a MC, codificação de transformada, quantificação, VLC e controlo de débito. O erro de predição (modo inter) ou a imagem (modo intra) está subdividido em MB de pixels de 16 x 16, que podem ser ou não transmitidos. Os MB que são para ser transmitidos estão divididos em blocos 8 x 8 pixels, que são codificados por transformada (DCT), quantificados e codificadas por VLC para transmissão.

Predição

 

A predição é uma inter-imagem, que pode incluir MC, já que isso é opcional no H.261. O descodificador aceita apenas um MV por MB. As componentes vertical e horizontal deste vector, têm valores inteiros que não excedem ± 15 pixels/imagem. A estimação de movimento é baseada apenas nos pixels de luminância. O MV é usado para compensar o movimento de todos os quatro blocos de luminancia no MB. Os MV da crominancia são obtidos, diminuindo os valores das componentes do vector e depois truncando estes em direcção ao zero. Os vectores de movimento estão restringidos de modo a que todas as referências aos pixels codificados por eles estejam dentro da área codificada.

Para a transmissão dos vectores de movimento, são transmitidas a suas diferenças, que são codificadas em VLC. A técnica diferencial é baseada na predição unidimensional, que é a diferença entre vectores movimento sucessivos numa fila de GOBs. Para o primeiro MB no GOB, o vector inicial é posto a zero.

Decisão de Compensação de Movimento ou não.

 

Nem todos os MB da imagem são compensados com MV. A decisão se o MB deve ou não ser compensado depende se a predição devido à MC, irá reduzir substancialmente o erro de predição.

Ilustração 5 - Caracteristica da MC/NO_MC

A figura anterior mostra onde a MC é preferida. Nesta figura os valores absolutos da diferença de imagens, fd, e os da imagem compensada por movimento, mfd, normalizados para os 16 x 16=256 pixels de dentro do MB, que são comparados.

Através da observação da figura, nota-se que se o erro da MC é menor, mas pouco, que o erro da não MC, é preferível não usar a MC. Isto deve-se a que a MC traz consigo um vector overhead (mesmo que este seja zero), logo esta diferença entre MC e não-MC não justifica os bits extra, não existindo vantagem em usar MC neste caso.

 

Decisão Inter/Intra.

Ás vezes é mais vantajoso codificar um MB com intraframe do que com interframe. Existindo duas razões fortes para o fazer:

1) Cortes de cena ou movimentos rápidos. Nestes casos o erro de predição da codificação interframe pode não ser menor que o da intraframe. Onde imagens intraframe podem ser codificadas a bit rates menores;

2) Imagens codificadas com intraframe, possuem melhor resiliência aos erros de canal. Tendo em conta que, em codificação interframe, no descodificador os dados recebidos são adicionados aos da imagem anterior de modo a reconstruir a imagem codificada. No caso de erro de canal, os erros propagam-se para as imagens seguintes. Se essa parte da imagem não é actualizada, o erro pode persistir durante muito tempo.

 

Tal como na decisão de usar MC ou não, pode-se fazer a decisão de codificar um MB em modo inter ou intra. Neste caso a variação intraframe do MB é comparada com a variação da inter (seja MC ou não). Neste caso a menor é escolhida.

Ilustração 6 - Caracteristica do Inter/Intra

A figura acima representa a característica da função que faz as decisões inter/intra. Onde para grandes variações, não existe preferência entre os dois modos, no entanto, para variações pequenas o interframe é preferido. A razão é que, no modo intra, os coeficientes DC dos blocos tem que ser quantificados sem um quantificador de dead zone e com 8-bit de resolução. Isto aumenta o bit rate comparando com o do modo interframe, logo o modo inter é preferido.

 

Actualização forçada

 

            A codificação intraframe dos MB aumenta a resiliência do codec H.261 a erros de canal. No caso da decisão inter/intra nos MB, o modo intra não é escolhido, mas alguns dos MB numa imagem são forçados a ser codificados no modo intra. A especificação recomenda que um MB deve ser actualizado pelo menos uma vez em cada 132 imagems. Isto significa que para o formato CIF (common intermediate format) com 396 MB por imagem, em média 3 MBs de cada imagem são codificados no modo intra. Isto tem um impacto importante na qualidade da imagem devido aos erros. Por exemplo, em imagens CIF a 10 Hz, o efeito de erros de canal, podem corromper até 132 imagens, e serem visíveis até 13 s.

Tipos de MacroBlocos

 

Na norma H.261 estão definidos pelo menos 8 MBs diferentes:

1) Inter coded: MB codificados no modo interframe sem MC ou então com MV de comprimento nulo;

2) MC coded: MB com MC, onde o erro devido à MC e significativo, logo o MB também tem que ser codificado em DCT;

3) MC not coded: MB com MC, onde o erro de MC é insignificante, logo não à necessidade de ser codificado em DCT;

4) Intra: MB codificados no modo intraframe;

5) Not-coded: se todos os 6 blocos dentro do MB, não são MC e tem uma energia insignificante, estes não são codificados. Estes MBs são normalmente chamados por “Skipped”, “Not-coded” ou “Fixed” MBs. Estes tipos de MBs normalmente occorem em partes estáticas da sequencia de imagens. Os MBs fixos não são transmitidos, sendo no descodificador, copiados da imagem anterior.

 

Como os passos de quantização são determinados no início de cada GOB ou linha de GOBs, estes tem que ser transmitidos ao receptor. Logo o primeiro MB de cada GOB tem que ter esta informação. Logo existem também estes tipos de MB:

6) Inter coded + Q;

7) MC coded + Q;

8) Intra coded + Q;

 

Endereçamento de MacroBlocos:

 

Se todos os componentes quantificados de um dos blocos do MB forem zero, o bloco é declarado not coded. No caso dos seis blocos não serem codificados, o MB é considerado not coded (fixed MB ou skipped MB). Noutros casos os MB são declarados coded, sendo codificados com VLC. O código mais curto é atribuído ao MB do modo inter enquanto a palavra mais comprida é atribuída ao intra+Q, sendo estes respectivamente o mais frequente e o mais raro.

Como cada MB tem seis blocos, quatro de luminância e dois de crominância, logo irão haver 64 combinações diferentes de blocos coded/non-coded. Exceptuando o caso do MB que tem todos os blocos como non-coded, os 63 MB remanescentes estão identificados em 63 padrões diferentes. A informação do padrão consiste num conjunto de 63 CBP que indicam blocos codificados e não codificados dentro do MB. Com ordem de codificação de Y0, Y1, Y2, Y3, Cb e Cr, sendo a informação do padrão de bloco ou numero de padrão definida por,

Na equação os blocos codificados e não codificados são assinalados a “1” e a “0” respectivamente. Cada padrão é depois codificado em VLC. Tendo-se em conta se um MB é codificado em modo intra ou intra+Q, então a sua informação de padrão não é transmitida. Isto deve-se a que, na codificação do MB no modo intra, os blocos vão ter todos energia significante e irão ser codificados, ou seja, não haverá blocos non-coded num MB codificado no modo intra.

 

Ilustração 7 - Exemplo de Padrão de Bits para indicar se os blocos estão ou não codificados no MB (Branco codificado, Preto não codificado)

Estando o tipo de MB identificado e codificado em VLC, tem que se determinar a sua posição no do GOB. Considerando que o H.261 foi desenvolvido para ser utilizado em videoconferências, sendo usado para codificar imagens de “cabeça em ombros”, então é mais provável que os MB codificados estejam no foreground da imagem. Sendo estes normalmente agrupados em regiões. Logo a informação no cabeçalho para endereçamento das posições dos MB codificados é minimizada se estes estiverem associados uns aos outros. A associação (relative adressing) é representada em runlengths, que representam o número de MBs fixos até ao próximo MB codificado.

Ilustração 8 - Endereçamento relativo dos MB codificados.

A figura representa um exemplo de endereçamento de MBs codificados dentro de um GOB. Os números representam o valor do endereçamento relativo dos MBs fixos que precedem um MB não fixo. O código de começo do GOB indica o começo do GOB. O endereçamento relativo é codificado em VLC.

Quantificação e codificação.

 

Cada um dos seis blocos de um determinado MB é codificado por transformada com uma DCT a 2D. Os coeficientes DCT de cada bloco são então quantificados e codificados. Na norma H.261 são utilizados dois tipos de quantificador:

1.       Sem dead zone, sendo usado para quantificar os coeficientes DC do MB intra, sendo este quantificador de passo fixo de tamanho 8.

2.       Com dead zone, sendo utilizado para codificar coeficientes AC e DC do MB codificado em modo inter (com ou sem MC). Pode ser adicionado um threshold à escala do quantizador, de modo a aumentar a dead zone, transformando mais coeficientes a zero, o que vai tornar a compressão mais eficiente. Este quantificador pode utilizar passos entre 2 e 62 (31 valores de codificação).

Codificação VLC de duas dimensões.

 

Para transmitir os índices de quantificação, é definida uma ordem especial que aumenta a eficiência de captura de componentes diferentes de zero. Começa-se no coeficiente DC no canto superior esquerdo da matriz 8 x 8 de coeficientes, sendo feito o varrimento por uma sequência em zig-zag.

A razão pela qual se faz o varrimento desta maneira é que nas imagens naturais a energia principal dos coeficientes das transformadas está concentrada nas baixas frequências (canto superior esquerdo). Onde os coeficientes que tem normalmente valores grandes são varridos primeiro. O varrimento pára quando se atinge o ultimo coeficiente diferente de zero.

De modo a aumentar a eficiência de codificação, foi adoptado um código bidimensional de comprimento variável (2D-VLC). Este é realizado em duas etapas. Na primeira etapa, é produzido um evento para cada índex diferente de zero. O evento é uma combinação da magnitude do índex e o número de zeros que precedem esse índex (run). Tal como se pode observar na seguinte figura:

Ilustração 9 - Varrimento em Zig Zag dos Coeficientes da transformada.

Depois do varrimento em zigzag, os coeficientes são quantificados. Para uma dead zone de th=16, os valores dos coeficientes menores que th são postos a zero. Valores maiores são quantificados segundo a característica de quantização.

Ilustração 10 - Niveis de Quantização com threshold

Loop Filter

 

Quando se tem bit rates baixos, o passo de quantificação é normalmente grande. Porque isso irá forçar muitos dos coeficientes DCT a zero. Se depois da quantificação só sobrarem o coeficiente DC e poucos AC, ao reconstruir-se a imagem observa-se o efeito de bloco. Quando as posições das áreas com efeito bloco variam de um lado para outro, ao longo da sequência de imagens, este efeito aparece como ruído de alta-frequência.

O filtro de Loop foi introduzido depois da MC de modo a melhorar a predição. Note-se no entanto que o filtro Loop tem um efeito de blur na imagem. Só devendo ser activado quando se tem blocos que se movem, porque senão, as partes da imagem que são estáticas são repetidamente filtradas nas imagens seguintes, o que provoca que a imagem fique com um efeito de blur. Como depende do movimento, o filtro Loop e utilizado no MB tendo uma resposta impulsiva dada por,

para pixels dentro da imagem. Para pixels nas bordas da imagem, ou cantos, pode-se usar outra função.

O filtro Loop está apenas definido no H.261 (mais nenhum vídeo codec o usa) sendo activado para todos os 6 blocos DCT do MB. A filtragem deve ser utilizada para codificar débitos menores do que 6 x 64 kbit/s = 386kbit/s, devendo ser desligado para débitos superiores. A débitos superiores o filtro não melhora a qualidade subjectiva da imagem. O MPEG-1 não específica a necessidade do uso do filtro, pois as imagens codificadas com o MPEG-1 estão a débitos muito maiores do que 386 kbit/s.

 

Controlo de débito

 

O débito binário resultante da codificação baseada no algoritmo DCT flutua de acordo com a natureza da sequência de vídeo. Variações na velocidade dos objectos, do seu tamanho e textura são a causa principal da variação do débito binário. O objectivo do controlo de débito é atingir um débito constante para transmissão sobre uma rede de comutação de circuitos. O buffer de transmissão é usado para suavizar a flutuação do bit rate, que são inerentes ao esquema de codificação interframe.

O método usual para controlar o débito binário é monitorizar a ocupação do buffer e consequentemente variar o tamanho do passo de quantificação. Tal como foi descrito na introdução.

 

Conclusão

 

A norma H.261, foi desenvolvida para comunicações audiovisuais sobre ISDN. Tendo sido a primeira norma de vídeo, veio trazer pela primeira vez ao mundo a interoperabilidade entre dispositivos, e isso foi um grande salto nas comunicações audiovisuais, ponto a ponto.