Formato de codificação de compressão de vídeo HEVC (H.265) e seu princípio

introdução

Recentemente, comecei a estudar a detecção de recodificação de vídeo, então fiz uma anotação para registrar o conhecimento relacionado à codificação de vídeo que aprendi. O objetivo da codificação de vídeo é compactar o vídeo original. A ideia principal da compactação é remover informações redundantes de várias perspectivas principais, como espaço, tempo, codificação e visão. H.265 (HEVC) é atualmente um formato de codificação de compressão de vídeo comumente usado. Este artigo apresentará principalmente o formato e a função de sua unidade de codificação.

Problemas com a codificação AVC

Antes de introduzir a codificação HEVC, haverá uma questão de "por que introduzir um novo padrão de codificação?" Isso ocorre porque ainda existem alguns problemas na codificação AVC, e o HEVC é otimizado para esses problemas e sua taxa de compactação é melhor que a do AVC encoding. , então vamos dar uma olhada em alguns dos problemas com a codificação AVC.

O tamanho do macrobloco AVC é muito pequeno

insira a descrição da imagem aqui
No passado, um tamanho de macrobloco de 16 × 16 era considerado uma compensação razoável entre requisitos de memória e eficiência de codificação. Mas pesquisas recentes descobriram que o uso de tamanhos de bloco maiores pode melhorar significativamente a eficiência de codificação de vídeo de alta resolução, porque o tamanho de 16 × 16 não é suficiente para capturar a maior correlação espacial do conteúdo de resolução mais alta, conforme mostrado na tabela acima, Vídeo 4K A área do macrobloco 16×16 no meio tem uma proporção muito pequena, por isso o macrobloco HEVC (CTU) foi projetado para ser 64×64.

A profundidade do macrobloco AVC é limitada

insira a descrição da imagem aquiA Figura 1 mostra a estrutura de divisão de bloco usada para predição e transformação em H.264/A VC. Embora existam várias partições não quadradas, a arquitetura de partição de bloco em H.264/A VC pode ser aproximadamente equivalente a uma estrutura quadtree de três níveis com 4×4 a 16×16 nós, e a profundidade da estrutura é limitada.
Em H.264/A VC, mb-type é um elemento de sintaxe definido usado para especificar se um macrobloco de tamanho 16×16 deve ser dividido e como deve ser previsto. Além disso, sub-mb-type especifica se submacroblocks de tamanho 8×8 devem ser divididos mais. No entanto, essa combinação de segmentação e predição é ineficiente em HEVC devido ao grande número de combinações, adotando assim uma sintaxe uniforme e consistente em todos os tamanhos.

Diferença de adaptabilidade entre esquemas de predição inter e intra

No AVC, cada macrobloco pode ser especificado para usar um esquema de predição intraquadro ou interquadro, mas o esquema de predição de partição menor que o tamanho do macrobloco (16 × 16) não pode ser adaptativo.

Existe uma dependência entre previsão e transformação

H.264/A VC suporta dois tamanhos de TB, 4×4 e 8×8, conforme mostrado na Figura 1. Dois tamanhos de transformação podem ser usados ​​de forma adaptativa para cada macrobloco, com o elemento de sintaxe adicional transform-size-8x8-flag ; no entanto, isso depende fortemente de como o bloco é particionado.
Ao usar um esquema de previsão inter, uma transformação 4x4 deve ser usada para todos os blocos em um macrobloco se pelo menos um bloco for menor que 8x8. Mesmo no outro caso, todas as transformações dentro de um macrobloco devem ser do mesmo tamanho. Ao usar um esquema de predição intra, o tamanho da transformada deve ser igual ao tamanho do bloco, exceto para o modo intra−16×16. Enquanto no modo intra−16×16, após a aplicação de 16 transformações 4×4 na região 16×16, uma transformada de Hadamard de tamanho 4×4 é aplicada ao valor DC. Essa forte dependência entre o modo de previsão e o tamanho da transformação e do tamanho do bloco complica o design geral, especialmente quando aplicado à codificação HEVC, que permite mais variações de tamanho de bloco.

formato de codificação HEVC

H.265, também conhecido como formato de codificação de vídeo de alta eficiência (HEVC), é um novo padrão lançado após 10 anos desde que o padrão H.264 atual foi padronizado em 2003 e se tornará o suporte de imagem nos próximos dez anos Compressão de vídeo Tecnologia para Serviços e Produtos. Sua característica é que suporta resoluções 4K×2K e 8K×4K acima de 1080p e aumenta a taxa de compressão de vídeo para cerca de 2 vezes a do H.264. Em outras palavras, a mesma qualidade de vídeo pode ser enviada com metade da velocidade de codificação original. Por exemplo, conteúdo de vídeo no formato H.264 enviado a 20 Mbit/s precisa apenas de velocidade de 10 Mbit/s no formato HEVC nas mesmas condições de qualidade.

Em termos de ordem e estrutura de codificação, o H.265 primeiro divide um vídeo em várias sequências (geralmente sequências de vídeo no formato YUV), uma sequência é dividida em vários grupos de imagens (GOP) e cada GOP representa um conjunto de quadros de vídeo contínuos. Quando o H.265 realiza codificação preditiva e codificação de transformação em uma imagem, ele primeiro divide a imagem e o método de particionamento é uma quadtree. Ao dividir o quadtree, todo o quadro de vídeo será dividido em vários blocos de árvore de codificação quadrada (CTB), CTB pode continuar a ser dividido em blocos de codificação (CB) e CB também pode ser dividido em blocos de previsão (PB) e blocos de transformação (TB), os blocos luma e chroma correspondentes cooperam com os elementos de sintaxe correspondentes para formar uma unidade de codificação.

Por exemplo, uma CTU inclui luma CTB e chroma CTB, que são usados ​​para dividir a imagem em blocos menores para codificação e transmissão mais eficientes. O elemento de sintaxe correspondente inclui sua posição e tamanho e informações como estimativa de movimento e parâmetros de quantização relacionados à CTU. Esses elementos de sintaxe são usados ​​durante a codificação e decodificação para garantir que as imagens sejam codificadas e decodificadas corretamente.

A divisão da estrutura de H.265 para vídeo é mostrada na figura abaixo: insira a descrição da imagem aquiComparada com a estrutura de macrobloco de tamanho fixo 16×16 de H.264/AVC, a estrutura de partição de bloco HEVC mencionada acima é considerada a mais importante em comparação com padrões de codificação de vídeo anteriores Uma das mudanças.

Em termos de processo de codificação, a estrutura de codificação do H.265 é mostrada na figura abaixo:insira a descrição da imagem aqui

A razão pela qual o diagrama de quadro de codificação é mostrado é para aprofundar a compreensão da partição do bloco de unidade de codificação. Como diferentes etapas operam em diferentes objetos no processo de codificação, uma sequência de vídeo será gradualmente subdividida em diferentes blocos de unidade . Cada tipo de unidade de codificação e seu papel são descritos em detalhes abaixo.

Unidade de Árvore de Codificação (CTU)

CTU é a unidade básica de processamento do HEVC , onde um bloco (CTB) é um local para armazenar dados, e muitos blocos mais elementos de sintaxe formam uma unidade (CTU). Esta unidade de processamento é semelhante a um macrobloco em H.264/Advanced Video Coding (AVC). O tamanho da unidade da árvore de codificação pode ser de 16x16 a 64x64, usando uma unidade de processamento maior que H.264 para obter melhor efeito de compressão.
insira a descrição da imagem aqui

A figura acima é um exemplo de diagrama de uma divisão típica e ordem de processamento da CTU. A figura ao lado mostra a estrutura quadtree adotada pela CTU, que pode flexibilizar a divisão de blocos dentro da CTU. Como pode ser visto na Figura 2, o tamanho da CTU é 64 × 64, e o tamanho da menor UC é 8 × 8.

Unidade de Codificação (CU)

Uma unidade de codificação CU é um nó interno de uma árvore de codificação. A Codificação de Vídeo de Alta Eficiência (HEVC) usa uma unidade de codificação CU para indicar se a unidade pertence à predição intra (Previsão Intra) ou predição inter (Previsão Inter). CUs no mesmo nível devem ser 4 blocos do mesmo tamanho, podendo haver até 4 níveis de decomposição, ou seja, 64×64 (LCU), 32×32, 16×16 e 8×8 (SCU). Se não for dividida, esta CTU contém apenas uma UC. Cada CU inclui um bloco de codificação luma (Blocos de Codificação, CB), dois CBs cromáticos e elementos de sintaxe correspondentes. O tamanho da CU e as características da imagem são auto-adaptáveis. Na área relativamente plana da imagem, uma CU relativamente grande é selecionada, enquanto na borda da imagem ou área de textura complexa, uma CU relativamente pequena é selecionada , que é propício para melhorar a eficiência de codificação: CU pode ser dividido
insira a descrição da imagem aqui
em Existem dois tipos: CU ignorado (CU ignorado) e CU comum:
CU ignorado só pode usar o modo de previsão entre quadros e o vetor de movimento gerado e as informações residuais da imagem não precisam ser transmitidos para o decodificador;
CU comum pode Previsão intraquadro e predição interquadro são usadas para predição e, em seguida, dados residuais e informações de controle adicionais são codificados.
Quando um CTU é codificado, o CU é codificado em uma ordem de profundidade, semelhante ao z-scan, então a metade esquerda da imagem CTU anterior é a ordem de codificação do CU.

O HEVC oferece suporte a CTUs de tamanho arbitrário, o que permite que o codec otimize rapidamente para diferentes conteúdos, aplicativos e dispositivos. Em comparação com o uso de um macrobloco de tamanho fixo (macrobloco), o suporte a CTUs de vários tamanhos é uma das vantagens do HEVC em termos de eficiência de codificação e adaptabilidade. Esse recurso é especialmente útil para serviços de vídeo de baixa resolução que ainda são amplamente usados. Ao escolher um tamanho de CTU apropriado e a profundidade máxima da camada, a estrutura de partição de bloco em camadas pode ser otimizada para o aplicativo de destino.
insira a descrição da imagem aqui
A Figura 4 mostra exemplos de vários tamanhos de CTU e tamanhos de CU (Unidade de Codificação) para diferentes resoluções e tipos de conteúdo. Por exemplo, para um aplicativo que usa conteúdo 1080p conhecido por conter apenas atividade de movimento global simples, um tamanho de CTU de 64 e uma profundidade de 2 pode ser uma escolha apropriada. Para conteúdo 1080p mais geral, possivelmente incluindo pequenas áreas de atividade de movimento complexo, um tamanho de CTU de 64 e uma profundidade máxima de 4 seria uma escolha melhor.

Unidade de Previsão (PU)

A CU determina o modo de predição do bloco de nó folha de uma árvore de codificação, mas esta informação de predição não é transmitida diretamente da CU para o decodificador. Uma unidade de codificação (UC) pode ser dividida em uma, duas ou quatro unidades de predição de acordo com o tipo de divisão do modo de predição, ou seja, uma PU só pode ser um nó folha. PU é a unidade básica para compartilhar informações de previsão . Apenas uma camada de divisão é permitida de CU para PU, e a menor PU é 4×4. O particionamento pode ser simétrico ou assimétrico. Um 2N×2N (N pode ser 4, 8, 16, 32) CU pode ser dividido em 8 maneiras de conter PUs. A PU pode ser quadrada ou retangular, para melhor distinguir o fundo do objeto, como na figura a seguir: Em outras palavras, a UC fornece
insira a descrição da imagem aqui
a opção de modo de previsão e a PU é usada para transmitir informações de previsão para o codificador . CU e PU estão em um relacionamento de contenção e um CU pode conter um ou mais PUs. Uma CU contém todas as informações sobre uma PU, incluindo informações de movimento, informações residuais e informações do modo de previsão.

Unidade de Transformação (Unidade de Transformação, TU)

Uma vez que a previsão codificada é feita, precisamos codificar o resíduo (ou seja, a interpolação da imagem prevista e a imagem real), usando uma transformada do tipo DCT. Novamente, o CU pode ser muito grande, pois o CU pode conter partes detalhadas de alta frequência, bem como partes planas de baixa frequência. Portanto, uma CU pode ser dividida em uma TU. Portanto, uma TU é uma unidade básica de transformada e quantização , e é um bloco representativo básico com resíduos ou coeficientes de transformada para aplicação de transformada inteira e quantização. A TU também adota a estrutura de partição quadtree e o tamanho suportado varia de 4 × 4 a 32 × 32. Depois que o bloco residual é obtido por meio do processo de previsão baseado no tipo de partição PU, ele é particionado em várias TUs de acordo com a estrutura quadtree. Para cada TU, uma transformação inteira é aplicada. Essa árvore é chamada de transform tree ou quadtree residual (RQT), porque o bloco residual é dividido por uma estrutura quadtree:
insira a descrição da imagem aqui
de acordo com as características de variação local do resíduo de predição, o TU pode selecionar adaptativamente o modo ótimo. O modo TU grande pode concentrar melhor a energia e o modo TU pequeno pode preservar mais detalhes da imagem. Essa estrutura de segmentação flexível pode comprimir totalmente a energia residual transformada para melhorar ainda mais o ganho de codificação.

Em particular, no HEVC, tanto o tamanho de PU quanto o tamanho de TU podem atingir o mesmo tamanho da CU correspondente. Isso leva ao fato de que o tamanho de TU pode ser maior que o tamanho de PU na mesma UC, ou seja, os resíduos de diferentes PUs na mesma UC podem ser transformados juntos.
Por exemplo, quando o tamanho da TU é igual ao tamanho da CU, a transformação é aplicada ao bloco residual cobrindo toda a CU, independentemente do tipo de partição da PU. Observe que este caso só existe para CUs codificadas entre si, uma vez que a predição é sempre acoplada ao particionamento de TU para UCs com codificação intra.

Na previsão inter, o codificador pode usar vários modos de previsão para prever os valores de pixel do bloco atual, como previsão de vetor de movimento (MVP) de um quadro de referência ou previsão de bloco de vizinhança (previsão intra) de outros blocos. ). A seleção desses modos de previsão não é restrita pela estrutura interna do bloco atual, portanto, CU, PU e TU podem ser configurados independentemente para o mesmo tamanho, portanto, a situação acima pode ocorrer.

Na previsão intraquadro, como os valores de pixel dentro do bloco atual devem ser previstos, o bloco atual precisa ser dividido para uma melhor previsão. Especificamente, o bloco atual precisa ser dividido em um ou mais PUs, e cada PU é ainda dividido em um ou mais TUs. Este método de divisão tem diferentes condições de aplicação para diferentes tamanhos de bloco, conteúdo de pixel e complexidade de textura, portanto, o tamanho não pode ser definido arbitrariamente. Portanto, na predição intra, os tamanhos de CU, PU e TU são geralmente diferentes e CU>=PU>=TU.

Essas duas imagens podem entender melhor a estrutura de PU e TU acima:
insira a descrição da imagem aquiinsira a descrição da imagem aqui

Vantagens da estrutura quadtree aninhada HEVC

Embora o uso de estruturas quadtree na compactação de vídeo não seja um conceito novo, a abordagem da árvore de codificação em HEVC pode trazer vantagens adicionais de eficiência de codificação usando os conceitos quadtree PU e TU para compactação de vídeo.

Na estrutura quadtree, os nós de folha da árvore podem ser mesclados ou combinados, de modo que a segmentação de movimento em forma de L ou retangular possa ser realizada pela fusão e combinação de nós. No entanto, na estrutura de divisão de blocos HEVC, para atingir tal formato, blocos menores devem ser usados ​​para o processo de fusão após a divisão posterior. PU aborda esses casos em HEVC em vez de dividir uma camada para mesclar e combinar. No HEVC, PU adota padrões de partição predefinidos (PART-2N×2N, PART-2N×N e PART-N×2N) e testa o melhor padrão de partição nos nós folha da árvore. Os PUs ainda podem compartilhar informações de movimento por meio do modo de mesclagem. Embora a estrutura quadtree geral possa ser aplicada ao HEVC removendo os modos de partição retangular simétrica (PART-2N×N e PART-N×2N) e substituindo os sinalizadores de mesclagem correspondentes, sua eficiência de codificação e complexidade provaram ser inferiores às existentes projetos.

Outra vantagem é o uso de quadtrees em TUs. O tamanho do bloco de transformação e o tamanho do bloco de compensação de movimento no padrão de codificação de vídeo tradicional são fixos, mas o bloco de transformação e o bloco de compensação de movimento em HEVC usam uma estrutura quadtree mais flexível e os dois podem ser alterados de forma síncrona. No entanto, o tamanho do bloco de transformação e o tamanho do bloco de compensação de movimento ainda estão correlacionados porque devem ser consistentes para garantir uma codificação correta e consistente.
A árvore de transformação dessa estrutura de quadtree aninhada é estabelecida a partir dos nós de folha da árvore de codificação; portanto, quando o HEVC é usado para codificação, essa estrutura de quadtree aninhada pode fazer uso total das informações de profundidade para codificação de entropia, melhorando assim a eficiência da codificação.

Uma vantagem final é o uso de informações de profundidade para codificação de entropia. Em que as informações de profundidade se referem à profundidade da quadtree e essas informações de profundidade podem ser usadas para codificação de entropia mais refinada. Por exemplo, para alguns elementos de sintaxe no padrão HEVC, como inter-pred-idc, split-transform-flag, cbf-luma, cbf-cb e cbf-cr, as informações de profundidade podem ser usadas para codificação de entropia. Essa técnica de derivação de contexto baseada em informações de profundidade pode melhorar a eficiência da codificação e reduzir o buffer de linha necessário na implementação de hardware, porque as informações da CTU superior não precisam ser armazenadas. Portanto, o padrão HEVC faz uso total de informações de profundidade para codificação de entropia, melhorando assim a eficiência da codificação.

Especificamente, usar informações de profundidade para codificação de entropia refere-se ao cálculo da distribuição de probabilidade de símbolos de acordo com a profundidade do nó e atribuir um código apropriado a cada símbolo de acordo com a probabilidade, para que possa ser expresso com menos bits. Usando informações de profundidade para codificação de entropia, o HEVC pode efetivamente representar dados de vídeo com o mínimo de bits possível, melhorando assim a eficiência da codificação. Além disso, este método pode reduzir o número de buffers de linha necessários na implementação de hardware, pois não há necessidade de armazenar as informações da CTU acima, o que pode reduzir o custo de hardware do codificador.

Acho que você gosta

Origin blog.csdn.net/qq_39969848/article/details/129003896
Recomendado
Clasificación