BR112016030696B1 - Métodos e aparelhos de codificação e decodificação de conteúdo de tela - Google Patents

Métodos e aparelhos de codificação e decodificação de conteúdo de tela Download PDF

Info

Publication number
BR112016030696B1
BR112016030696B1 BR112016030696-1A BR112016030696A BR112016030696B1 BR 112016030696 B1 BR112016030696 B1 BR 112016030696B1 BR 112016030696 A BR112016030696 A BR 112016030696A BR 112016030696 B1 BR112016030696 B1 BR 112016030696B1
Authority
BR
Brazil
Prior art keywords
index
color
string
current
encoding
Prior art date
Application number
BR112016030696-1A
Other languages
English (en)
Other versions
BR112016030696A2 (pt
Inventor
Haoping Yu
Zhan Ma
Wei Wang
Meng Xu
Original Assignee
Huawei Technologies Co., Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co., Ltd filed Critical Huawei Technologies Co., Ltd
Publication of BR112016030696A2 publication Critical patent/BR112016030696A2/pt
Publication of BR112016030696B1 publication Critical patent/BR112016030696B1/pt

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/186Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a colour or a chrominance component
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • H04N19/105Selection of the reference unit for prediction within a chosen coding or prediction mode, e.g. adaptive choice of position and number of pixels used for prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/146Data rate or code amount at the encoder output
    • H04N19/147Data rate or code amount at the encoder output according to rate distortion criteria
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/182Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a pixel
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/593Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving spatial prediction techniques
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/93Run-length coding

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

CODIFICAÇÃO DE CONTEÚDO DE TELA AVANÇADO COM MÉTODOS E APARELHOS DE CODIFICAÇÃO DE MAPA DE ÍNDICES E TABELA DE PALETAS MELHORADOS. Um aparelho (100) é configurado para executar um método (1700) para codificar conteúdo de tela. O método inclui derivar (1701) um mapa de índices de cor (311, 601, 1301, 1600) com base em uma unidade de codificação atual (CU) (101, 213, 401, 501). O método também inclui codificar (1703) o mapa de índices de cor, em que pelo menos uma porção do mapa de índices de cor é codificado utilizando uma primeira técnica de codificação, em que um primeiro indicador indica uma distância significativa da primeira técnica de codificação. O método inclui ainda combinar (1705) o mapa de índices de cor codificado e o primeiro indicador para transmissão para um receptor (200).

Description

CAMPO TÉCNICO
[001] A presente divulgação refere-se, de um modo geral, à codificação de conteúdo de tela e, mais particularmente, à codificação de conteúdo de tela avançada com codificação de tabela de cores (paleta) e de mapa de índices melhorada.
FUNDAMENTOS
[002] Codificação de conteúdo de tela cria novos desafios para compressão de vídeo devido às suas características de sinal distintas em comparação com os sinais de vídeo convencionais. Existem várias técnicas existentes para codificação de conteúdo de tela avançada, por exemplo, pseudocorrespondência de cadeia de caracteres, codificação de paleta de cores e compensação intramovimento ou cópia intrabloco. Entre essas técnicas, pseudocorrespondência de cadeia de caracteres mostra o maior ganho de codificação sem perdas, mas com sobrecarga de complexidade significativa e dificuldades no modo de codificação com perdas. A codificação de paleta de cores é desenvolvida para conteúdo de tela sob a suposição de que conteúdo capturado não por câmera (por exemplo, conteúdo gerado por computador) normalmente contém um número limitado de cores distintas, em vez dos tons de cor contínuos ou quase contínuos encontrados em muitas sequências de vídeo. Mesmo que os métodos de codificação de paleta de cores e pseudocorrespondência de cadeia de caracteres tenham apresentado grande potencial, compensação intramovimento ou cópia intrabloco foram adotadas na versão 4 do projeto de trabalho (WD) e no software de referência da extensão de intervalo de Codificação de Vídeo de Alta Eficiência (HEVC) para codificação de conteúdo de tela. No entanto, o desempenho de codificação da cópia intrabloco é limitado devido à sua decomposição de bloco fixa. Realizar correspondência de bloco (semelhante à estimativa de movimento em intraimagem) também aumenta a complexidade de codificador de forma significativa tanto na computação como no acesso à memória.
SUMÁRIO
[003] De acordo com uma modalidade, é fornecido um método para codificação de conteúdo de tela. O método inclui derivar um mapa de índices de cor com base em uma unidade de codificação (CU) atual. O método também inclui codificar o mapa de índices de cor, em que pelo menos uma porção do mapa de índices de cor é codificada utilizando uma primeira técnica de codificação, em que um primeiro indicador indica uma distância significativa da primeira técnica de codificação. O método inclui ainda combinar o mapa de índices de cor codificado e o primeiro indicador para transmissão para um receptor.
[004] De acordo com outra modalidade, é fornecido um método para decodificação de conteúdo de tela. O método inclui receber um fluxo de bits de vídeo compreendendo um mapa de índices de cor. O método também inclui receber um primeiro indicador. O método inclui ainda decodificar pelo menos uma porção do mapa de índices de cor utilizando uma primeira técnica de decodificação, em que o primeiro indicador indica uma distância significativa da primeira técnica de decodificação. Além disso, o método inclui reconstruir pixels associados a uma unidade de codificação (CU) atual com base no mapa de índices de cor.
[005] Outras modalidades incluem aparelhos configurados para executar estes métodos.
BREVE DESCRIÇÃO DOS DESENHOS
[006] Para uma compreensão mais completa da presente descrição, e das suas vantagens, faz-se agora referência às seguintes descrições tomadas em conjunto com os desenhos anexos, em que números semelhantes designam objetos semelhantes e em que: A Figura 1 ilustra um diagrama de blocos funcional de um transmissor de exemplo que executa um processo de codificação de conteúdo de tela de acordo com esta divulgação; A Figura 2 ilustra um diagrama de blocos funcional de um receptor de exemplo que executa um processo de decodificação de conteúdo de tela de acordo com esta divulgação; A Figura 3 ilustra um exemplo de vários módulos e fluxo de processamento utilizando uma tabela de paletas e mapa de índices, de acordo com esta divulgação; A Figura 4 ilustra um exemplo de unidade de codificação (CU) com componentes de cor mostrados separadamente e embalados; A Figura 5A ilustra uma tabela de paletas de referência e uma tabela de paletas atual para utilização em um processo de codificação de conteúdo de tela; A Figura 5B ilustra um exemplo de previsão de tabela de paletas utilizando blocos reconstruídos vizinhos; A Figura 6 ilustra um exemplo de mapa de índices de cor para uma CU de 64x64 em que varredura horizontal ou vertical pode ser utilizada; A Figura 7 ilustra uma porção de um vetor de índice de cor unidimensional (1D) após uma pesquisa 1D utilizando varredura horizontal; A Figura 8 ilustra um exemplo de uma unidade de processamento de pixel básica, denominada módulo U_PIXEL; A Figura 9 ilustra um exemplo de um módulo U_ROW; A Figura 10 ilustra um exemplo de um módulo U_CMP; A Figura 11 ilustra um exemplo de um módulo U_COL; A Figura 12 ilustra um exemplo de módulo U_2D_BLOCK; A Figura 13 ilustra exemplos de varredura horizontal e vertical para processamento de mapa de índices; As Figuras 14A e 14B ilustram exemplos de formatos de amostragem de croma 4:2:0 e 4:4:4; A Figura 15 ilustra um exemplo de um processo de interpolação de 4:4:4 a 4:2:0 e vice-versa; A Figura 16 ilustra um exemplo de processamento de mapa de índices de cor utilizando um buffer de linha de índice superior ou um buffer de linha de índice esquerdo; A Figura 17 ilustra um método para codificação de conteúdo de tela de acordo com esta divulgação; e A Figura 18 ilustra um método para decodificar conteúdo de tela de acordo com esta divulgação.
DESCRIÇÃO DETALHADA
[007] As Figuras 1 a 18, discutidas abaixo, e as várias modalidades utilizadas para descrever os princípios da presente invenção neste documento de patente são apenas a título de ilustração e não devem ser interpretadas de qualquer forma para limitar o âmbito da invenção. Os especialistas na técnica compreenderão que os princípios da invenção podem ser implementados em qualquer tipo de dispositivo ou sistema adequadamente disposto.
[008] Os seguintes documentos e descrições padrões são aqui incorporados na presente divulgação como se estivessem totalmente aqui descritos: T. Lin, S. Wang, P. Zhang, K. Zhou, “AHG7: dicionário croma completa (YUV444) + extensão de codificador dual híbrido de HEVC”, documento JCT-VC, JCTVC-K0133, Xangai, China, outubro de 2012 (doravante "REF1"); W. Zhu, J. Xu, W. Ding, “RCE3 Teste 2: Mapa de Índices e Cor de base de múltiplos estágios”, Documento JCT-VC, JCTVC-N0287, Viena, Áustria, Julho de 2013 (daqui em diante, "REF2"); L. Guo, M. Karczewicz, J. Sole, "RCE3: Resultados de Teste 3.1 em Modo de Paleta para Codificação de Conteúdo de Tela", documento JCT-VC, JCTVC-N0247, Viena, Áustria, Julho de 2013 (daqui em diante "REF3"); L. Guo, M. Karczewicz, J. Sole, R.Joshi, "Não RCE3: Modo de Paleta Modificado para Codificação de Conteúdo de Tela", Documento JCT-VC, JCTVC-N0249, Viena, Áustria, Julho de 2013 (daqui em diante "REF4"); D.-K. Kwon, M. Budagavi, "RCE3: Resultados do teste 3.3 em compensação intramovimento, documento JCT-VC, JCTVC- N0205, Viena, Áustria, Julho de 2013 (daqui em diante "REF5"); C. Pang, J. Sole, L. Guo, M. Karczewicz, R. Joshi, "Não RCE3: Compensação Intramovimento com 2-D MVs", Documento JCT-VC, JCTVC-N0256, Viena, Áustria, Julho de 2013 (daqui em diante "REF6"); C. Pang, J. Sole, L. Guo, M. Karczewicz, R. Joshi, "Não RCE3: Compensação Intramovimento Amigável de Canal", Documento JCT-VC, JCTVC-N0254, Viena, Áustria, Julho de 2013 (daqui em diante "REF7"); D. Flynn, J. Soel e T. Suzuki, "Rascunho de Extensão de Intervalo 4", JCTVC-L1005, Agosto de 2013 (daqui em diante "REF8"); e H. Yu, K. McCann, R. Cohen e P. Amon, "Chamada de rascunho para propostas para codificação de conteúdo de tela e conteúdo visual médico", ISO / IEC JTC1 / SC29 / WG11 N13829, Julho de 2013 (daqui em diante "REF 9").
[009] Modalidades desta descrição fornecem um processo de codificação de conteúdo de tela avançada com codificação de tabela de paletas e mapa de índices melhorado. As modalidades divulgadas superam significativamente a versão atual da Codificação de Vídeo de Alta Eficiência (HEVC Versão 2). As modalidades divulgadas incluem múltiplos algoritmos que são especificamente para codificar conteúdo de tela. Esses algoritmos incluem representação de pixels utilizando uma tabela de paletas (ou equivalentemente, tabela de cores), compressão de tabela de paletas, compressão de mapa de índices de cor, correspondência de cadeia de caracteres e compressão de resíduo. As modalidades aqui reveladas são desenvolvidas, harmonizadas e integradas com a Extensão de Intervalo de HEVC (RExt) como extensões de HEVC futuras para suportar codificação de conteúdo de tela eficiente. No entanto, estas modalidades podem adicionalmente ou alternativamente ser implementadas com padrões de vídeo existentes ou quaisquer outros padrões de vídeo adequados. Para facilitar a explicação, HEVC RExt é aqui utilizado como um exemplo para descrever as várias modalidades. Do mesmo modo, o software de HEVC RExt é utilizado para implementar as várias modalidades para mostrar a eficiência de compressão.
[010] A Figura 1 ilustra um diagrama de blocos funcional de um transmissor de exemplo que executa um processo de codificação de conteúdo de tela de acordo com esta divulgação. A Figura 2 ilustra um diagrama de blocos funcional de um receptor de exemplo que executa um processo de decodificação de conteúdo de tela de acordo com esta divulgação. As modalidades do transmissor 100 e receptor 200 são apenas ilustrativas. Podem ser utilizadas outras modalidades do transmissor 100 e receptor 200 sem sair do âmbito desta descrição.
[011] O transmissor 100 é configurado para executar um processo de compressão de paleta de cores (CPC) de alta eficiência que pode ser realizado em cada unidade de codificação (CU) ou unidade de árvore de codificação (CTU) em um fluxo de bits. Conforme ilustrado na Figura 1, o transmissor 100 começa com uma CU 101 em um fluxo de bits. Uma CU é uma unidade operacional básica em HEVC e HEVC RExt, e é um bloco quadrado de pixels que inclui três componentes de cor (por exemplo, RGB, YUV, XYZ ou semelhante, como é conhecido na técnica). Um exemplo de CU 101 é mostrado na Figura 3. A CU 101 é uma CU de 8 pixels x 8 pixels que inclui um valor de cor explícito (por exemplo, 47, 48, 49, etc.) para cada pixel. Noutras modalidades, o tamanho da CU 101 pode ser diferente de 8x8 pixels (por exemplo, 16x16 pixels, 32x32 pixels, etc.). Em algumas modalidades, o transmissor 100 pode começar com uma CTU 101 em vez de uma CU 101. Para facilitar a explicação, o transmissor 100 será descrito com uma CU 101. Os especialistas na técnica entenderão que o transmissor 100 pode executar substancialmente o mesmo processo com uma CTU 101.
[012] Um bloco de criação de tabela de paletas 103 utiliza a CU 101 para derivar ou gerar uma tabela de paletas (por vezes referida como uma tabela de cores). Um exemplo de tabela de paletas 303 é mostrado na Figura 3. Para derivar a tabela de paletas 303, o bloco de criação de tabela de paletas 103 ordena os valores de cor de acordo com uma ou mais regras de ordenação. A tabela de paletas 303 pode ser ordenada de acordo com uma frequência de ocorrência de cada valor de cor, a intensidade de cor real de cada pixel da CU 101 ou qualquer outra métrica (s) de ordenação adequada para aumentar a eficiência das seguintes operações de codificação.
[013] Com base na tabela de paletas derivada 303, um bloco de classificador de cor 105 utiliza a CU 101 para atribuir as cores ou valores de pixel da CU 101 para o mapa de índices de cor 311 e um ou mais mapas de resíduo de previsão 313. Um bloco de codificação de tabela 107 recebe a tabela de paletas 303 e codifica as entradas na tabela de paletas 303. Um bloco de codificação de mapa de índices 109 codifica o mapa de índices de cor 311 criado pelo bloco de classificador de cor 105. Estas operações são descritas em maior detalhe abaixo.
[014] Um bloco de codificação de resíduo 111 codifica cada mapa de resíduo de previsão 313 criado pelo bloco de classificador de cor 105. Em algumas modalidades, o bloco de codificação de resíduo 111 executa binarização de resíduo de comprimento fixo ou comprimento variável adaptativa, como indicado em 321 na Figura 3. Em seguida, um bloco de multiplexação (MUX) 113 gera o fluxo de bits comprimido utilizando as correspondências de cadeia de caracteres / bloco 319 e os resíduos de previsão codificados 321. Em algumas modalidades, pode utilizar-se um método de codificação aritmética binária adaptativa de contexto (CABAC) 323 para combinar a cadeia de caracteres / bloco 319 e os resíduos de previsão codificados 321, como mostrado na Figura 3.
[015] Voltando à Figura 2, o receptor 200 é configurado para executar um processo de decodificação de conteúdo de tela análogo ao processo de codificação de conteúdo de tela realizado pelo transmissor 100, como descrito acima. O receptor 200 recebe o fluxo de bits de vídeo comprimido e, em seguida, utilizando o demultiplexador 201, analisa o fluxo de bits em uma tabela de paletas codificada, mapa de índices de cor, e resíduos de previsão codificados. O bloco de decodificação de tabela 203 e o bloco de criação de tabela de paletas 209 executam processos opostos do bloco de codificação de tabela 107 e o bloco de criação de tabela de paletas 103 para reconstruir, para cada CU, uma tabela de paletas completa. De modo semelhante, o bloco de decodificação de mapa de índices 205 e o bloco de decodificação de resíduo 207 executam processos opostos ao bloco de codificação de mapa de índices 109 e o bloco de codificação de resíduo 111 para reconstruir o mapa de índices de cor. O bloco de desclasificador de cor 211 deriva o valor de pixel em cada posição por combinar o mapa de índices de cor e a tabela de paletas, reconstruindo assim uma CTU ou CU 213.
[016] Embora as Figuras 1 e 2 ilustrem exemplos de um transmissor 100 e receptor 200 para realizar codificação e decodificação de conteúdo de tela, podem ser feitas várias alterações às Figuras 1 e 2. Por exemplo, vários componentes nas Figuras 1 e 2 poderiam ser combinados, subdivididos, ou omitidos, podendo ser adicionados componentes adicionais de acordo com necessidades particulares. Como exemplo particular, vários componentes podem ser dispostos em conjunto em um alojamento ou em uma placa de circuito, ou podem ser realizados por um único processador ou unidade de processamento.
[017] Com base na tabela de paletas derivada 303, cada pixel na CU original 101 pode ser convertida para seu índice de cor dentro da tabela de paletas 303. Modalidades desta descrição fornecem métodos para comprimir eficientemente a tabela de paletas 303 e o mapa de índices de cor 311 (descrito abaixo) para cada CU 101 no fluxo. No lado de receptor, o fluxo de bits comprimido pode ser analisado para reconstruir, para cada CU 101, a tabela de paletas completa 303 e o mapa de índices de cor 311 e, depois, derivar o valor de pixel em cada posição por combinar o índice de cor e a tabela de paletas.
[018] A Figura 4 ilustra outro exemplo de uma CU 401 com os componentes de cor mostrados separadamente e embalados. A CU 401 pode representar a CU 101. Como mostrado na Figura 4, a CU 401 é uma CU de 8 pixels x 8 pixels. Naturalmente, a CU 401 poderia ter NxN pixels, onde N = 8, 16, 32, 64 para compatibilidade com HEVC. Cada pixel da CU 401 inclui três componentes de cor, com diferentes proporções de amostragem (por exemplo, 4:4:4, 4:2:2, 4:2:0). Ou seja, a CU 401 inclui componentes de cor vermelha (R) 402, componentes de cor verde (G) 403 e componentes de cor azuis (B) 404 separados. Em outras modalidades, os componentes de cor podem ser Y, Cb, Cr ou X, Y Z ou outra combinação adequada de componentes.
[019] Para simplificar, sequências de 4:4:4 são utilizadas na divulgação. Para vídeos de 4:2:2 e 4:2:0, amostragem de croma pode ser aplicada para obter as sequências de 4:4:4 ou cada componente de croma 402-404 pode ser processado independentemente. No caso de vídeos monocromáticos 4:0:0, estes podem ser tratados como um plano individual de 4:4:4 sem os outros dois planos. Todos os métodos para 4:4:4 podem ser aplicados diretamente.
[020] Os componentes de cor 402-404 podem ser intercalados em conjunto em um processo de empacotamento, resultando na CU 401 embalada. Em uma modalidade, uma bandeira chamada enable_packed_component_flag é definida para cada CU 101 para indicar se a CU 101 é processada utilizando o modo embalado (Resultando assim na CU 401) ou no modo planar convencional (isto é, os componentes G, B, R ou Y, U, V 402-404 são processados independentemente).
[021] Tanto o modo embalado como o modo planar podem ter vantagens e desvantagens. Por exemplo, o modo planar suporta processamento de componentes de cores paralelo para G / B / R ou Y / U / V. No entanto, modo planar pode resultar em codificação de baixa eficiência. O modo embalado pode compartilhar as informações de cabeçalho (como a tabela de paletas 303 e o mapa de índices de cor 311) para a CU 101 entre componentes de cores diferentes. No entanto, o modo embalado pode impedir que vários componentes de cores sejam processados simultaneamente ou de forma paralela. Um método simples para decidir se a CU atual 101 deve ser codificada no modo embalado é medir o custo de distorção de taxa (R-D).
[022] O enable_packed_component_flag é utilizado para sinalizar explicitamente o modo de codificação para o decodificador. Além de definir o enable_packed_component_flag no nível de CU para tratamento de baixo nível, a bandeira pode ser duplicada no cabeçalho de fatia ou mesmo o nível da sequência (por exemplo, o Conjunto de Parâmetros de Sequência ou o Conjunto de Parâmetros de Imagem) para permitir tratamento de nível de fatia ou nível de sequência, dependendo da exigência de aplicação específica.
TABELA DE PALETA E DERIVAÇÃO DE MAPA DE ÍNDICES
[023] O que segue descreve operações no bloco de criação de tabela de paletas 103 e o bloco de codificação de tabela 107 na Figura 1. Para cada CU 101, localizações de pixel são percorridas e a tabela de paletas 303 e o mapa de índices de cor 311 para o processamento subsequente são derivados. Cada cor distinta é ordenada na tabela de paletas 303, dependendo de seu histograma (isto é, frequência de ocorrência), ou sua intensidade, ou qualquer método arbitrário para aumentar a eficiência do processo de codificação que segue. Por exemplo, se o processo de codificação utiliza um método de modulação de código de pulso diferencial (DPCM) para codificar a diferença entre pixels adjacentes, o resultado de codificação ótimo pode ser obtido se os pixels adjacentes são atribuídos com o índice de cor adjacente na tabela de paletas 303.
[024] Será agora descrita uma nova derivação de tabela de paletas baseada em “hash”, que pode ser utilizada para determinar eficazmente as cores principais e reduzir o erro. Para cada CU 101, o bloco de criação de tabela de paletas 103 examina o valor de cor de cada pixel na CU 101 e cria um histograma de cor utilizando os três componentes de cor juntos, isto é, G, B, R embalados ou Y, Cb, Cr embalados de acordo com a frequência de ocorrência de cada cor em ordem decrescente. Para representar cada cor de 24 bits, os componentes de cores G e B (ou componentes de cores Y e Cb) podem ser deslocados de bits correspondentemente. Isto é, cada cor embalada pode ser representada de acordo com um valor (G << 16) + (B << 8) + (R) ou (Y << 16) + (Cb << 8) + (Cr), onde << x é uma operação de deslocamento de bit à esquerda. O histograma é ordenado de acordo com a frequência de ocorrência de cor em ordem decrescente.
[025] Para codificação com perdas, o bloco de criação de tabela de paleta 103 aplica então um processo de agrupamento de cores vizinhas baseado em “hash” nos dados de cor ordenados por histograma para obter uma representação de tabela de paletas mais compacta. Para cada componente de cor, os X bits menos significativos (dependendo do parâmetro de quantização (QP)) são apagados e uma representação de “hash” correspondente é gerada utilizando uma função “hash” (G >> X << (16 + X)) | (B >> X << (8 + X)) | (R >> X << X) ou (Y >> X << (16 + X)) | (Cb >> X << (8 + X)) | (Cr >> X << X), onde >> x é uma operação de deslocamento de bit à direita e X é determinado com base em QP. Uma tabela “hash” ou, alternativamente, uma estrutura de dados de árvore de pesquisa binária (BST) é explorada para busca rápida de cores tendo o mesmo valor de “hash”. Para quaisquer dois valores de “hash”, sua distância é definida como a diferença absoluta máxima dos componentes de cor correspondentes.
[026] Durante agrupamento de cores vizinho, o bloco de criação de tabela de paleta 103 processa cores embaladas em ordem decrescente da frequência de ocorrência, até N cores terem sido processadas. Se o número de cores na CU atual for menor que N, então todas as cores na CU atual serão processadas. N é limitado por um número máximo predeterminado de cores (max_num_of_colors). Em algumas modalidades, max_num_of_colors = 128, isto é, N <= 128. Depois do agrupamento de cores baseado em “hash”, as N cores escolhidas (ou todas as cores no caso do número de cores na CU atual ser menor que N) são então reordenadas por classificar as cores em ordem crescente com base no valor de cada cor embalada. O resultado é uma tabela de paletas tal como a tabela de paletas 303 ilustrada na Figura 3. A tabela de paletas 303 tem um tamanho de quatro cores (isto é, N = 4). Em muitas modalidades, N > 4. Contudo, para facilitar a explicação, N é selecionado como 4 na Figura 3.
[027] Quando o número de cores representado na CU 101 é maior do que o número de cores N na tabela de paletas 303, as cores ocorrendo com menor frequência são dispostas como resíduos fora da tabela de paletas 303. Por exemplo, os valores de cor 49, 53, 50 e 51 fazem parte da tabela de paletas 303, enquanto os valores de cor 48, 52, 47, 54, 55 e 56 são cores residuais 305 fora da tabela de paletas 303.
[028] A derivação da tabela de paletas 303, tal como realizado pelo bloco de criação de tabela de paletas 103, pode ser descrita pelo seguinte pseudocódigo. (Pseudocódigo): H = DeriveHistogram(); H’ = C reate EmptyHistorgraniQ; processedcolorcount = 0; while( processed color count < N and H is not empty) C = GetMostFrequentColor( H ); if( lossy coding ) hash = ComputeHash( C, QP ); find all colors Cx satisfying: dist( hash, ComputeHash( Cx, QP ) ) <= 1; merge all colors in Cx to C; remove Cx from H; } save C to H’ and remove C from H; } H = H’; Rcordcrl H);
[029] No pseudocódigo acima, ComputeHash(C, QP) aplica a função “hash” (G >> X << (16 + X)) | (B >> X << (8 + X)) | (R >> X << X) ou (Y >> X << (16 + X)) | (Cb >> X << (8 + X)) | (Cr >> X << X) para gerar o valor de “hash”, em que X é dependente de QP. Dist(hash1, hash2) obtém a diferença absoluta máxima dos componentes de cor correspondentes em hash1 e hash2. Aqui, dados de tabela de “hash” e estruturas de árvore de pesquisa binária são utilizados para encontrar rapidamente as cores que satisfazem uma determinada condição com base no seu valor de “hash”.
[030] Conforme discutido acima, com base na tabela de paletas derivada 303, o bloco de classificador de cores 105 utiliza a CU 101 para atribuir as cores ou valores de pixel da CU 101 para o mapa de índices de cor 311 e um ou mais mapas de resíduo de previsão 313. Isto é, o bloco de classificador de cores 105 atribui cada cor na tabela de paletas 303 a um índice de cor dentro da tabela de paletas 303. Por exemplo, como indicado em 307 na Figura 3, a cor 49 é atribuída com o índice de cor 0 (ColorIdx = 0), cor 53 é atribuído com índice de cor 1, cor 50 é atribuído com índice de cor 2 e cor 51 é atribuído com índice de cor 3 (ColorIdx = 3). Uma vez que as cores na tabela de paletas 303 são atribuídas a um índice, o mapa de índices de cor 311 pode ser gerado a partir da CU 101 utilizando os índices de cada cor. O processamento do mapa de índices de cor 311 é descrito em maior detalhe abaixo. Da mesma forma, cada cor de resíduo 305 fora da tabela de paletas 303 é atribuída a um valor de resíduo de previsão, como indicado em 309. Uma vez que as cores de resíduo 305 são atribuídas a um valor de resíduo de previsão, o mapa de resíduo de previsão 313 pode ser gerado a partir da CU 101.
[031] Para uma CU planar, cada componente de cor pode ter sua própria tabela de paletas individual, tal como colorTable_Y, colorTable_U, colorTable_V ou colorTable_R, colorTable_G, colorTable_B. Em algumas modalidades, a tabela de paletas para um componente principal pode ser derivada, tal como Y em YUV ou G em GBR, e esta tabela pode ser compartilhada para todos os componentes. Normalmente, utilizando uma tabela de paletas Y ou G compartilhada, componentes de cores diferentes de Y ou G teriam alguma incompatibilidade em relação às cores de pixel originais daquelas na tabela de paletas compartilhada. O mecanismo de resíduo (tal como métodos de codificação de coeficientes de HEVC) pode então ser aplicado para codificar estes resíduos não correspondidos. Em outras modalidades, para uma CU embalada, uma única tabela de paletas pode ser compartilhada entre todos os componentes.
[032] O seguinte pseudocódigo exemplifica a tabela de paletas e a derivação de mapa de índices. (Pseudocódigo): deriveColorTablelndexMapQ der iveC olorT able (); der ive!iidexMap(); deriveColorTablefsrc, cuWidth, cuHeight, maxColorNum) { ' // src - input video source in planar or packed mode // cuWidth, cuHeight - width and height of current CU /* maxColorNum - max num of colors allowed in palette table*/ /* transverse */ // memset(colorHist, 0. (l«bitDepth)*sizeof(UINT)) pos=0; cuS ize=cuWidth* cuHeight; while (pos<cuSize) { colorHist[src[pos++]]++; } ' " " /*just pick non-zero entry in colorHistf] for color intensity ordered table*/ j=0; ' for( i=0;i<( 1 «bitD epth): i++) { if(colorHist[i] !=0) colorTableIntensitv[j++] = colorHist[i]; } ’ ' colorNum=j; *quicksort for histgram*/ colorTableHist = quickSort(colorTableIntensity, colorNum); /*if maxColorNum >= colorNum, all colors will be picked* /*if maxColorNum < colorNum, only maxColorNum colors will be picked for colorTableHist. In this case, all pixels will find its best matched color and corresponding index with difference (actual pixel and its corresponding color) coded by the residual engine.*/ /*Best number of colors in palette table could be determined by iterative R-D cost derivation!*/ } derivelndexMapO { ' pos=0; cuSize=cuWidth*cuHeight; while ( pos < cuSize) { ‘ minErr=MAX_UINT; for (i=0;i<colorNum;i++) { err = abs(src[pos] - colorTable[i]); if (err<minErr) minErr = err; idx = i; } } idxMap[pos] = idx; } * }
PROCESSAMENTO DE TABELA DE PALETA
[033] Para cada CU 101, o transmissor 100 pode derivar a tabela de paletas 303 a partir da CU atual 101 (referida como transporte de tabela de paletas explícito) ou o transmissor 100 pode derivar a tabela de paletas 303 a partir de um vizinho esquerdo ou superior da CU atual 101 (referido como transporte de tabela de paletas implícito). O bloco de codificação de tabela 107 recebe a tabela de paletas 303 e codifica as entradas na tabela de paletas 303.
[034] O processamento de tabela de paletas envolve codificar o tamanho da tabela de paletas 303 (ou seja, o número total de cores distintas) e cada cor em si. A maioria dos bits é consumida pela codificação de cada cor na tabela de paletas 303. Portanto, o foco será colocado na codificação de cor (isto é, a codificação de cada entrada na tabela de paletas 303).
[035] O método mais direto para codificar as cores em uma tabela de paletas é utilizar um algoritmo de estilo de modulação de código de pulso (PCM), em que cada cor é codificada independentemente. Alternativamente, a previsão mais próxima para cor sucessiva pode ser aplicada, e então o delta de previsão pode ser codificado em vez da intensidade de cor padrão, que é o chamado estilo de DPCM (PCM diferencial). Ambos os métodos podem ser posteriormente codificados por entropia utilizando um modelo de probabilidade igual ou modelo de contexto adaptativo, dependendo da troca entre custos de complexidade e eficiência de codificação.
[036] As modalidades desta descrição fornecem um outro esquema avançado, denominado Fusão de Tabelas de Paleta Vizinhas, em que color_table_merge_flag é definido para indicar se a CU atual (por exemplo, a CU 101) utiliza a tabela de paletas associada com seu vizinho de CU esquerdo ou seu vizinho de CU superior. Se não, a CU atual carrega a sinalização de tabela de paletas explicitamente. Este processo também pode ser referido como compartilhamento de tabela de paletas vizinha. Com este processo de fusão, uma bandeira color_table_merge_direction indica a direção de fusão, que é a partir da CU superior ou a partir da CU esquerda. Naturalmente, os candidatos de direção de fusão poderiam estar em direções diferentes da CU superior ou CU esquerda (por exemplo, superior esquerdo, superior direito e similares). Contudo, a CU superior e CU esquerda são utilizadas nesta divulgação para exemplificar o conceito. Cada pixel na CU atual é comparado com as entradas na tabela de paletas existente associada com a CU esquerda ou CU superior e atribuído com um índice gerando a menor diferença de previsão (ou seja, pixel subtrai a cor mais próxima na tabela de paletas) via pseudocódigo deriveIdxMap() mostrado acima. Para o caso em que a diferença de previsão é diferente de zero, todos os resíduos são codificados utilizando o mecanismo de resíduo de Extensão de Intervalo de HEVC (RExt). A decisão de usar ou não o processo de fusão de tabelas pode ser determinada pelo custo de R-D.
[037] Quando uma tabela de cores é transportada explicitamente no fluxo de bits, pode ser codificada sequencialmente para cada componente de cor. O preenchimento de paleta intertabela ou DPCM de cor intratabela é aplicado como descrito abaixo para codificar cada entrada sequencialmente para todos os três componentes de cor.
ENCHIMENTO DE PALETA INTERTABELA
[038] Mesmo quando o método de compartilhamento de tabela de paletas não é utilizado, podem ainda existir cores que são comuns entre a tabela de paletas 303 e o previsor de paleta. Portanto, aplicação de uma técnica de enchimento de paleta intertabela entrada por entrada pode melhorar ainda mais eficiência de codificação. Aqui, o previsor de paleta é derivado de um bloco vizinho, como uma CU vizinha esquerda ou uma CU vizinha superior. A Figura 5A ilustra um previsor de paleta 551 e uma tabela de paletas atual 553 que podem ser utilizados com a técnica de enchimento de paleta intertabela de acordo com esta divulgação. A tabela de paletas atual 553 pode representar a tabela de paletas 303 da Figura 3. O previsor de paleta 551 pode ser construído a partir da CU vizinha esquerda da CU atual. No lado de decodificador, a paleta é atualizada adequadamente de acordo com o previsor de paleta 551 a partir de vizinhos de referência. Em algumas modalidades, o previsor de paleta poderia ser inferido a partir de uma CU vizinha reconstruída ou unidade de árvore de codificação (CTU) ou a partir de uma tabela global na fatia ou nível de sequência. Tal como é conhecido na técnica, uma fatia inclui múltiplas CUs em uma imagem. Uma imagem pode incluir uma ou múltiplas fatias. Uma sequência inclui múltiplas fatias.
[039] Deixe c(i) e r(j) representarem a i-ésima entrada na tabela de paletas atual 553 e a j-ésima entrada no previsor de paleta 551, respectivamente. Note novamente que cada entrada contém três componentes de cor (GBR, YCbCr, ou semelhantes). Para cada entrada de cor c(i), i <= N, na tabela atual 553, o bloco de codificação de tabela 107 encontra uma correspondência r(j) idêntica a partir do previsor de paleta 551. Em vez de sinalizar c(i), j é codificado predicativamente. O previsor é determinado como o menor índice k que é maior do que j previamente reconstruído e que satisfaz r(k)[0]> = c(i - 1)[0]. A diferença de previsão (j - k) é sinalizada no fluxo de bits. Uma vez que a diferença (j - k) não é negativa, nenhum bit de sinal é necessário.
[040] Note que um modelo adaptativo de contexto ou um modelo de derivação pode ser utilizado para codificar (j- k), como é conhecido na técnica. Tipicamente, um modelo adaptativo de contexto é usado para propósitos de alta eficiência, enquanto um modelo de derivação é usado para requisitos de alto rendimento e baixa complexidade. Em algumas modalidades desta descrição, podem ser utilizados dois modelos adaptativos de contexto para codificar a diferença de predição de índice (j-k), utilizando um esquema de binarização unitário truncado dinâmico.
DPCM DE COR INTRATABELA
[041] Se não for encontrada qualquer correspondência no previsor de paleta 551 para a i-ésima entrada na tabela de paletas atual 553, o valor da i-ésima entrada é subtraído da entrada anterior (a (i-1)-ésima entrada) e a diferença absoluta (| d(i) |) é codificada utilizando DPCM de cor para cada componente. Em geral, serão produzidos e codificados menos bits para a diferença preditiva absoluta e um bit de sinal utilizando DPCM de cor intratabela. Um modelo adaptativo de contexto ou um modelo de derivação pode ser usado para codificar a diferença preditiva absoluta e caixa de sinal associada, como é conhecido na técnica. Além disso, o bit de sinal pode ser ocultado ou não codificado para alguns casos. Por exemplo, uma vez que a tabela de paletas atual 553 já está ordenada em ordem crescente, a diferença de componente Y (ou G) não requer um bit de sinal no geral. Da mesma forma, a diferença de componente Cb (ou B) não precisa do bit de sinal se a diferença de Y (ou G) correspondente for zero. Além disso, a diferença de componente Cr (ou R) não necessita do bit de sinal se ambas as diferenças de Y (ou G) e Cb (ou B) forem zero. Como outro exemplo, o bit de sinal pode ser oculto se a diferença absoluta é zero. Como ainda outro exemplo, o bit de sinal pode ser oculto se a seguinte condição de contorno é satisfeita: c[i-1] - | d(i) | <0 ou c [i-1] + | d(i) | > 255.
[042] Para a primeira entrada c(0) da tabela atual 553, se a técnica de enchimento de paleta intertabela não é utilizada, cada componente de c(0) pode ser codificado utilizando um modelo de contexto de derivação de 8 bits fixo. Adicionalmente ou alternativamente, pode ser codificado utilizando um modelo de contexto adaptativo para melhorar ainda mais o desempenho.
[043] Para melhor ilustrar as técnicas de enchimento de paleta intertabela e DPCM de cor intratabela, vai agora ser descrito um exemplo utilizando os dados na tabela de paleta atual 553.
[044] A partir da primeira entrada c(0) da tabela de paleta atual 553, ou seja, (G, B, R) = (0, 0, 192), pode ser visto que c(0) não tem uma correspondência no previsor de paleta 551, por conseguinte, c(0) é codificado independentemente. A segunda entrada c(1) da tabela de paletas atual 553 ((G, B, R) = (0, 0, 240) também não tem uma correspondência no previsor de paleta 551. Tendo em conta que a primeira entrada c(0) já foi codificada, apenas a diferença de previsão entre c(1) e c(0) deve ser realizada no fluxo de bits, ou seja, (0, 0, 240) - (0, 0, 192) = (0, 0, 48). Para a terceira entrada c(2) da tabela atual 553, uma correspondência exata é identificada no previsor de paleta 551 onde j = 1. O índice preditivo utilizando a entrada de cor previamente codificada é 0, portanto, apenas (1 - 0) = 1 precisa ser codificado. Estas técnicas de codificação são aplicadas até que a última entrada da tabela atual 553 (ou seja, idx = 12 na Figura 5A) seja codificada. A tabela 1 fornece um passo a passo de ilustração sobre como aplicar compartilhamento intertabela e DPCM intratabela na tabela atual 553 utilizando o previsor de paleta disponível 551. Tabela 1: Método de codificação para tabela exemplar na Figura 5A
[045] A codificação explícita da tabela de cores é resumida no pseudocódigo seguinte, onde N e M são o número de entradas na tabela de cor de referência e atual, respectivamente. (Pseudocódigo): encodeN; prev j = 0; for (i = 0; i < N; i++ ) { if exist j such that r(j) = = c(i) // inter-table palette stuffing inter_table_sharing_flag = 1; encode inter table sharing flag; if(j = = O) k = 0; else k = minimum x satisfying x > pre\j and r(k)[0] >= c(i - 1 )[0]; prev _j = k; delta = j - k; encode delta; } else // intra-table color DPCM { if ( prev_j < M ) inter table sharing flag = 0; encode intertablesharingflag; if(i = = 0) _ encode c(i); else { delta = c(i) - c(i 1); encode delta; } }
[046] A decodificação explícita da tabela de cores é resumida no seguinte pseudocódigo. (Pseudocódigo): decode N; prevj = 0; inter Jable_sharing_flag = 0; for (i = 0; i < N; i++ ) { if ( prevj < M ) decode interJable_shanng_flag; if ( decode inter table sharmg flag = = 1 ) decode delta; if (.1 — 0) k = 0; else k = minimum x satisfying x > prevj and r(k)[0] >— c(i - l)[0] prevj = k: j = k + delta; c(i) = r(j); } else // mtra-table color DPCM { if(i = = 0) decode c(i); else { decode delta; c(i) c(i 1) I delta; } } i i
[047] Existem vários métodos para gerar as tabelas de paletas vizinhas para utilização no processo de fusão em codificação da CU atual. Dependendo da implementação, um dos métodos (referido como Método A para facilidade de explicação) requer atualização em ambos o codificador e o decodificador. Outro método (designado por Método B) é um processo apenas de lado de codificador. Serão agora descritos ambos os métodos: Método A: Neste método, as tabelas de paletas de CUs vizinhas são geradas sobre os pixels reconstruídos disponíveis, independentemente da profundidade de CU, tamanho de CU, etc. Para cada CU, as reconstruções são recuperadas por sua CU vizinha com o mesmo tamanho e mesma profundidade (assumindo que a similaridade de cores seria maior neste caso).
[048] A Figura 5B ilustra um exemplo de regeneração de tabela de paletas utilizando o Método A, de acordo com a presente divulgação. Como mostrado na Figura 5B, uma CU atual 501 é um bloco de 16x16 com uma profundidade = 2. CUs vizinhas da CU atual 501 incluem uma CU superior 502 e uma CU esquerda 503. A CU superior 502 é um bloco de 32x32 com uma profundidade = 1. A CU superior 502 inclui um bloco superior 504 de 16x16. A CU esquerda 503 é um bloco de 8x8 com uma profundidade = 3, e faz parte de um bloco de 16x16 505. Utilizando Método A, independentemente da partição de suas CUs vizinhas (por exemplo, a CU esquerda de 8x8 503 ou a CU superior 502 de 32x32), o deslocamento de pixel (= 16) vai ser localizado a partir da origem da CU atual 501 para a direção esquerda para processar o bloco esquerdo 505 de 16x16 e para a direção superior para processar o bloco superior 504 de 16x16. Tanto o codificador e o decodificador mantém esse deslocamento. Método B: Neste método, o processo de fusão ocorre quando uma CU atual compartilha o mesmo tamanho e profundidade que sua CU vizinha superior e / ou sua CU vizinha esquerda. As tabelas de paletas dos vizinhos disponíveis são usadas para derivar o mapa de índices de cor da CU atual para operações subsequentes. Por exemplo, para uma CU de 16x16 atual, se sua CU vizinha (isto é, ou a sua vizinha superior ou a sua vizinha esquerda) é codificada utilizando o método de índice e tabela de paletas, a tabela de paletas da CU vizinha é utilizada para a CU atual para derivar o custo de R-D. Este custo de fusão é comparado com o caso em que a CU atual deriva sua tabela de paletas explicitamente (assim como outros modos convencionais que podem existir na HEVC ou HEVC Rext). Seja qual for o caso que produz o menor custo de R-D é selecionado como o modo a ser escrito para o fluxo de bits de saída. No Método B, apenas o codificador é necessário para simular diferentes modos possíveis. No decodificador, a bandeira color_table_merge_flag e color_table_merge_direction indicam a decisão de fusão e direção de fusão sem a necessidade de processamento adicional pelo decodificador.
PREVISOR DE PALETA
[049] Para reduzir ainda mais a complexidade, uma paleta de previsor é usada para armazenar em cache as cores que vêm da tabela de paletas previamente codificada ou outra paleta de previsor, que eventualmente vem da tabela de paletas previamente codificada. Em uma modalidade, as entradas na paleta de previsor vem a partir da paleta de previsor ou tabela de paletas codificada da CU esquerda ou superior da CU atual. Depois de uma CU ser codificada com uma paleta de cores, a paleta de previsor é atualizada se este tamanho de CU é maior do que ou igual ao tamanho de CU associado com a paleta de previsor e a paleta atual é diferente a partir da paleta de previsor. Se a CU atual não é codificada utilizando o modo de paleta, não há nenhuma mudança para a paleta de previsor. Isto também é referido como a propagação de paleta de previsor. Esta paleta de previsor pode ser resetada no início de cada imagem ou fatia ou cada linha de CU.
[050] Um número de métodos estão disponíveis para construção do previsor de paleta. Em um primeiro método, para cada codificação de CU, a paleta de previsor é construída a partir da paleta de previsor da sua CU esquerda ou CU superior. Neste método, uma tabela de paletas previsor é guardada para cada CU.
[051] Um segundo método é diferente do primeiro método em que a tabela de paletas, em vez da tabela de paleta de previsor, associada com a CU superior é utilizada no processo de previsão.
PROCESSAMENTO / CODIFICAÇÃO DE MAPA DE ÍNDICES DE COR
[052] O bloco de codificação de mapa de índices 109 codifica o mapa de índices de cor 311 criado pelo bloco de classificador de cor 105. Para codificar o mapa de índices de cor 311, o bloco de codificação de mapa de índices 109 executa pelo menos uma operação de varredura (horizontal 315 ou vertical 317) para converter o mapa de índices de cor bidimensional (2D) 311 para uma cadeia de caracteres unidimensional (1D). Em seguida, o bloco de codificação de mapa de índices 109 executa um algoritmo de pesquisa de cadeia de caracteres (descrito abaixo) para gerar uma pluralidade de correspondências. Em algumas modalidades, o bloco de codificação de mapa de índices 109 executa operações de varredura horizontal e vertical separadas e executa o algoritmo de pesquisa de cadeia de caracteres para determinar que fornece melhores resultados. A Figura 6 ilustra um exemplo de operações de varredura horizontal e vertical. Na Figura 6, um exemplo de mapa de índices de cor 2D 601 é mostrado. O mapa de índices de cor 601 pode representar o mapa de índices de cor 311 da Figura 3. O mapa de índices de cor 601 é um mapa de 64x64, mas outros tamanhos de mapa de índices de cor são possíveis. Como mostrado na Figura 6, varredura horizontal (ou pesquisa) 602 ou varredura vertical (ou pesquisa) 603 pode ser realizada no mapa de índices de cor 601.
[053] Modalidades da presente divulgação fornecem uma técnica de correspondência de cadeia de caracteres 1D e uma variação 2D para codificar o mapa de índices de cor 311. Em cada posição, a técnica de codificação encontra um ponto correspondente e grava a distância e comprimento correspondentes para a correspondência de cadeia de caracteres 1D, ou registra a largura e altura da correspondência para a correspondência de cadeia de caracteres 2D. Para uma posição não correspondida, sua Intensidade de Índice, ou em alternativa, o valor de delta entre sua intensidade de índice e intensidade de índice prevista, pode ser codificado diretamente.
[054] Um método de pesquisa 1D simples pode ser realizado sobre o mapa de índices de cor 601. Por exemplo, a Figura 7 ilustra uma parte de um vetor de índice de cor 1D 700 depois de uma pesquisa 1D utilizando varredura horizontal a partir da primeira posição de índice do mapa de índices de cor 601. Uma pesquisa de cadeia de caracteres é então aplicada ao vetor de índice de cor 1D 700. Observando a primeira posição 701 do vetor de índice de cor 700 (que é "14" como mostrado na Figura 7), uma vez que não há nenhuma referência armazenada em buffer ainda, a primeira posição 701 é tratada como um "par ímpar". O par não correspondido são valores atribuídos -1 e 1 para sua distância e comprimento correspondentes, notado como (dist, len) = (-1, 1). A segunda posição 702 é outro '14'. A segunda posição 702 é o primeiro índice codificado como referência. Por conseguinte, a distância do par correspondido, dist = 1. Porque existe um outro '14' na terceira posição 703, o comprimento do par correspondido é 2, ou seja, len = 2. Movendo ao longo para a quarta posição 704, um valor de '17' é encontrado, que não tenha sido visto antes. Assim, a quarta posição 704 é codificada como um outro par não correspondido, ou seja, (dist, len) = (-1, 1). Para cada par não correspondido, a bandeira correspondida / não correspondida é codificado para sinalizar que não existe um índice correspondido encontrado para o índice atual, e esta bandeira é seguida pelo valor real do índice (por exemplo, a primeira aparição de '14', '17', '6', etc.). Para cada par correspondido, a bandeira correspondida / não correspondida é codificada para sinalizar que uma cadeia de caracteres de índice correspondida foi encontrada, e esta bandeira é seguida pelo comprimento da cadeia de caracteres correspondida.
[055] O que segue é um conjunto de resultados para a técnica de codificação utilizando a parte do vetor de índice de cor 1D 700 mostrado na Figura 7. dist = -1, len = 1, idx = 14 (não correspondido) dist = 1, len = 2 (correspondido) dist = -1, len = 1, idx = 17 (não correspondido) dist = 1, len = 3 (correspondido) dist = -1, len = 1, idx = 6 (não correspondido) dist = 1, len = 25 (correspondido) dist = 30, len = 4 (correspondido) / * para o "17" que apareceu antes * /
[056] O seguinte pseudocódigo é dado para essa derivação de par correspondida. (Pseudocódigo): Void deriveMatchedPairs ( TComDataCU* pcCU, Pel* pldx, Pel* pDist, Pel* pLen, Ulnt uiWidth, UInt uiHeight) { ' // pldx is a idx CU bounded within uiWidth*uiHeight UInt uiTotal = uiWidth*uiHeight; UInt uildx = 0; Intj =0; hit len = 0; // first pixel coded as itself if there isn’t left/upper buffer pDistfuildx] = -1; pLenfuildx] = 0; uildx++; while (uildx < uiTotal) { len = 0; dist = -l; for (j=uildx-l; j >= 0; j--) { . // if finding matched pair, currently exhaustive search is applied // fast string search could be applied if (pldx[j ] == pldx [uildx]) ' { ' for (len = 0; len < (uiTotal-uildx); len++ ) { if ( pldx[j+len] != pldx[len+uildx]) break; } } if (len > maxLen ) /^better to change with R-D decision*/ { ' maxLen = len; dist = (uildx-j); } ' ' } pDistfuildx] = dist; pLen[uiIdx] = maxLen; uildx = uildx + maxLen: } }
CODIFICAÇÃO DE MAPA DE ÍNDICE DE COR SIMPLIFICADA
[057] Em algumas modalidades, as seguintes operações podem ser realizadas como um método simplificado para processamento de mapa de índices de cor em uma forma 1D. Como descrito acima, o mapa de índices de cor 601 pode ser representado por pares correspondidos ou não correspondidos. Para pares correspondidos, o par de distância e comprimento correspondidos de índices de grupo é um sinal para o receptor.
[058] Há um número de cenários bastante perceptível quando uma unidade de codificação inclui apenas umas poucas cores. Isto pode resultar em uma ou mais grandes seções consecutivas ou adjacentes que têm o mesmo valor de índice. Em tais casos, sinalizar um par (distância, comprimento) pode introduzir mais sobrecarga do que o necessário. Para abordar esta questão, o método de processamento de mapa de índices de cor simplificado descrito abaixo reduz ainda mais o número de bits consumidos ao codificar o mapa de índices de cor.
[059] Como na solução de codificação de mapa de índices 1D, o conceito de "distância" pode ser separado em duas categorias principais: distância significativa e distância normal. Distância normal é codificada utilizando contextos. Em seguida, comprimentos associados são codificados sequencialmente.
[060] Modalidades do presente método usam distância significativa. Existem dois tipos de distância significativa para este método. Um deles é a distância = blockWidth. O outro é a distância = 1. Estes dois tipos de distância significativa refletem a observação que esta distância = 1 e distância = blockWidth são associadas com a percentagem mais significativa da distribuição de distância geral. Os dois tipos de distância significativa vão agora ser descritos a título de ilustração.
[061] O método de codificação utilizando distância = blockWidth é também referido como codificação CopyAbove. Para ilustrar o método de codificação CopyAbove, o mapa de índices de cor de 64x64 601 da Figura 6 é novamente considerado. O mapa de índices de cor 601 tem blockWidth = 64. Dentro do mapa de índices de cor de 64x64 601 existem duas cadeias de caracteres 611-612 de índices indicados pela linha tracejada. Os valores de índice na cadeia de caracteres 612 são idênticos aos valores de índice correspondidos na cadeia de caracteres 611 imediatamente acima. Porque os valores de índice na cadeia de caracteres 612 são os mesmos que os valores de índice na cadeia de caracteres 611, os valores de índice na cadeia de caracteres 612 podem ser codificados por referenciar os valores de índice na cadeia de caracteres 611. Quando o mapa de índices de cor 601 é convertido para um vetor de índice de cor 1D utilizando varredura horizontal (como mostrado no vetor de índice de cor 1D 700 da Figura 7), a "distância" ao longo do vetor de índice de cor 1D entre valores de índice correspondidos nas cadeias de caracteres 611-612 é igual a 64, que é a largura de bloco do mapa de índices de cor 601. Por exemplo, quando o mapa de índices de cor 601 é convertido para um vetor de índice de cor 1D tendo 64 x 64 = 4096 elementos, a distância ao longo do vetor entre o valor de índice '6' que é o primeiro valor na cadeia de caracteres 611, e o valor de índice '6', que é o primeiro valor na cadeia de caracteres 612, é 64. O comprimento das cadeias de caracteres correspondidas 611612 é 27, porque cada cadeia de caracteres 611-612 inclui valores de índice 27. Assim, a cadeia de caracteres 612 pode ser codificada simplesmente através da indicação do método de codificação CopyAbove e um comprimento de valores de índice 27.
[062] O método de codificação utilizando a distância = 1 é também referido como codificação IndexMode ou codificação CopyLeft. Para ilustrar a codificação IndexMode, considere a cadeia de caracteres 613 dos índices no mapa de índices de cor 601. A cadeia de caracteres 613 inclui um primeiro valor de índice '14' seguido por 51 subsequentes valores de índice '14'. Porque cada um dos valores de índice na cadeia de caracteres 613 é o mesmo, os 51 valores de índice da cadeia de caracteres 613 após o primeiro '14' podem ser codificados em conjunto utilizando a distância = 1 (que indica que o valor de índice que é uma distância de um para a esquerda do valor de índice atual tem o mesmo valor). O comprimento da cadeia de caracteres correspondida 613 é 51. Assim, a cadeia de caracteres 613 pode ser codificada simplesmente indicando o método de codificação IndexMode e um comprimento de 51 valores de índice.
[063] Conforme descrito acima, para este método simplificado de codificação de mapa de índices de cor, a distância utilizada para codificação pode ser limitada para apenas as posições significativas; isto é, a distância para estas modalidades pode ser limitada a apenas 1 ou blockWidth. Para reduzir ainda mais a sobrecarga, o comprimento do índice correspondido também pode ser limitado à largura de unidade de codificação. Utilizando esta definição, o par de distância e comprimento pode ser sinalizado utilizando apenas duas bandeiras binárias (isto é, 2 caixas) sem enviar a sobrecarga de comprimento e distância (é inferido que a largura de bloco). Por exemplo, uma primeira bandeira pode indicar se codificação utiliza distância significativa ou não utiliza distância significativa. Se a primeira bandeira indica que a codificação utiliza distância significativa, em seguida, uma segunda bandeira pode indicar se a distância significativa é 1 (isto é, IndexMode) ou blockWidth (isto é, CopyAbove). Uma vez que a cadeia de caracteres correspondida ocorre linha por linha (ou fileira por fileira) em uma unidade de codificação, quaisquer índices em uma linha que não sejam correspondidos pela distância = 1 ou a distância = blockWidth são tratados como índices incomparáveis. Tais índices não correspondidos são codificados um a um individualmente. Para estes índices não correspondidos, os métodos de previsão acima descritos podem ser empregues para melhorar a eficiência.
[064] O decodificador pode executar operações de decodificação análogas às técnicas de codificação CopyAbove e codificação IndexMode descritas acima. Por exemplo, o decodificador pode receber a segunda bandeira, e com base no valor da segunda bandeira, o decodificador sabe decodificar de acordo com a técnica de decodificação CopyAbove ou IndexMode.
[065] Uma variação 2D da técnica de correspondência de cadeia de caracteres 1D acima descrita pode também ser utilizada. A técnica de correspondência 2D inclui os seguintes passos: Passo 1: A localização do pixel atual e um pixel de referência são identificados como um ponto de partida. Passo 2: Uma pesquisa de cadeia de caracteres horizontal 1D é aplicada à direção direita do pixel atual e um pixel de referência. O comprimento de pesquisa máximo é limitado pela extremidade da linha horizontal atual. O comprimento de pesquisa máximo pode ser gravado como right_width. Passo 3: Uma pesquisa de cadeia de caracteres horizontal 1D é aplicada à direção esquerda do pixel atual e o pixel de referência. O comprimento de pesquisa máximo é limitado pelo início da linha horizontal atual, e pode também ser limitado por right_width de uma correspondência 2D anterior. O comprimento de pesquisa máximo pode ser gravado como left_width. Passo 4: A mesma pesquisa de cadeia de caracteres 1D é realizada na próxima linha, utilizando pixels abaixo do pixel atual e o pixel de referência como o novo pixel de referência e pixel atual. Passo 5: Pare quando right_width == left_width == 0. Passo 6: Para cada height[n] = {1, 2, 3...}, existe uma matriz correspondente de largura[n] (por exemplo, {left_width[1], right_width[1]}, {left_width[2], right_width[2]}, {left_width[3], right_width[3]}...}. Passo 7: Uma nova matriz min_width é definida como {{lwidth[1], rwidth[1]}, {lwidth[2], rwidth[2]}, {lwidth[3], rwidth[3]}... } para cada height[n], onde lwidth[n] = min(left_width[1: n-1]), rwidth[n] = min(right_width[1: n-1]). Passo 8: Uma matriz de tamanho {size[1], size[2], size[3]...} é também definida, onde size[n] = height[n] x (lwidth[n] + hwidth[n]). Passo 9: Assumindo que size[n] mantém o valor máximo na matriz de tamanho, a largura e altura da correspondência de cadeia de caracteres 2D são selecionadas utilizando os {lwidth[n], rwidth[n], height[n]} correspondentes.
[066] Uma técnica para otimizar a velocidade de uma pesquisa 1D ou 2D é a utilização de um execução de “hash”. Em algumas modalidades, uma estrutura de execução de “hash” de 4 pixels pode ser usada. Uma execução de “hash” é calculada para cada pixel na direção horizontal para gerar uma matriz de “hash” horizontal running_hash_h[]. Outra execução de “hash” é calculada no topo de running_hash_h[] para gerar um matriz de “hash” 2D running_hash_hv[]. Cada correspondência de valor na matriz de “hash” 2D running_hash_hv[] representa uma correspondência de bloco de 4x4. Para realizar uma correspondência 2D, correspondências de bloco de 4x4 são encontrados antes de realizar uma comparação tipo pixel para os seus vizinhos. Uma vez que uma comparação tipo pixel é limitada a 1-3 pixels, a velocidade de pesquisa pode ser aumentada dramaticamente.
[067] A partir da descrição acima, as larguras correspondidas de cada linha são diferentes de cada outra, portanto, cada linha precisa ser processada separadamente. Para conseguir eficiência e baixa complexidade, modalidades da presente divulgação fornecem um algoritmo baseado em bloco que pode ser utilizado em ambas as implementações de hardware e software. Similar em alguns aspectos à estimativa de movimento padrão, esse algoritmo processa um bloco de retângulo de cada vez.
[068] A Figura 8 ilustra um exemplo de uma unidade de processamento de pixel básica neste algoritmo, que é chamado o módulo U_PIXEL 800. O módulo U_PIXEL 800 recebe um sinal codificado 801 e um sinal de entrada 802, e inclui uma pluralidade de portas lógicas 803-806. O sinal codificado 801 é uma bandeira que indica se o pixel de referência já foi codificado a partir da operação de correspondência de cadeia de caracteres anterior. Opcionalmente, o sinal de entrada 802 (Cmp[n-1]) pode ser forçado a "0", o que permite a remoção da última porta "OU" 806 do módulo U_PIXEL 800.
[069] Tome um bloco de 4x4 como exemplo. O primeiro passo é processar cada linha em paralelo. Cada pixel em uma linha do retângulo é atribuída a um módulo U_PIXEL 800. Uma unidade de processamento para processamento de cada linha é chamada um módulo U_ROW. A Figura 9 ilustra um exemplo de um módulo U_ROW 900. O módulo U_ROW 900 inclui uma pluralidade de módulos U_PIXEL 800. Para o caso de um bloco de 4x4, o módulo U_ROW 900 inclui quatro módulos U_PIXEL 800. Como mostrado na Figura 9, o módulo U_ROW 900 está processando a primeira linha, linha 0, como indicado em 901.
[070] Quatro módulos U_ROW 900 são utilizados para processar as quatro linhas do bloco 4x4. Os quatro módulos U_ROW 900 podem ser dispostos em paralelo em um módulo U_CMP. A Figura 10 ilustra um exemplo de um módulo U_CMP 1000 que inclui quatro módulos U_ROW 900. A saída do módulo U_CMP 1000 é um matriz cmp[4][4].
[071] O próximo passo do algoritmo consiste em processar cada coluna da matriz cmp em paralelo. Cada cmp em uma coluna da matriz cmp é processada por um módulo U_COL. A Figura 11 ilustra um exemplo de um módulo U_COL 1100 que recebe quatro colunas da matriz cmp 1101-1104. Quatro módulos U_COL 1100 podem ser utilizados para processar as quatro colunas do bloco 4x4. Os quatro módulos U_COL 1100 podem ser dispostos em paralelo em um módulo U_2D_BLOCK. A Figura 12 ilustra um exemplo do módulo U_2D_BLOCK 1200 que inclui quatro módulos U_COL 1100. A saída do módulo U_2D_BLOCK 1200 é uma matriz rw[4][4].
[072] O número de zeros em cada linha da matriz rw[n][0-3] é então contado e os quatro resultados são registrados em uma matriz r_width[n]. A matriz r_width[n] é a mesma que a matriz rwidth[n] no passo 7 da técnica correspondente 2D descrita acima. A matriz l_width[n] é gerada da mesma maneira. A matriz min_width no passo 7 pode ser obtida como {{l_width[1], r_width[1]}, {l_width[2], r_width[2]}, {l_width[3], r_width[3]}...}.
[073] Este algoritmo pode ser implementado em hardware ou em uma combinação de hardware e software para trabalhar na estrutura de processamento paralela de qualquer CPU moderna (unidade de processamento central), DSP (processador de sinal digital), ou GPU (unidade de processamento gráfica). Um pseudocódigo simplificado para implementação de software rápida está listado abaixo. (Pseudocódigo): // 1. Generate array C [] [ | For(y = 0; y < height; ++y) Forfx = 0; x < width; ++x) { tmp 1 = cur_pixel A ref_pixel; Imp 2 = tmplfO] I tmplfl] tmpl[2] | tmpl[3] | tmpl[4] | tmpl[5] tmpl[6] I tmpl[7]; C[y][x] = tmp2 & (!coded[y][x]); } // 2. Generate array CMP[][] For(y = 0; y < height; ++y) { CMP[v][0] = C[y][0]; } For(x = I ; x < width; ++x) For(y = 0; y < height; ++y) { CMP[y][x] = C[y][x] | CMP[y][x-l] } // 3. Generate array RW[][] or LW[][] For(x = 0; x < width; ++x) RW[0][x] =CMP[0][x]; } For(y = 1; y < height; ++y) For(x = 0; x < width; ++x) RW[y][x] = CMP[y][x] | RW[y-l][x]; i } // 4. Convert RW[][] to R_WIDTH[] For(y = θ; V < height; ++y) // count zero, or leading zero detection R_WIDTH[y] = LZD(RW[y][0], RW[y][l], RW[y][2], RW[y][3]); }
[074] Conforme mostrado no pseudocódigo acima, não existe dependência de dados em cada loop FOR assim métodos de processamento paralelos de software típicos, como desdobramento de loop ou MMX / SSE, podem ser aplicados para aumentar a velocidade de execução.
[075] Este algoritmo pode também aplicar-se a uma pesquisa 1D se o número de linhas é limitado a um. Um pseudocódigo simplificado para implementação de software rápida de uma pesquisa baseada em 1D de comprimento fixo é listado abaixo: // 1. Generate array C[] For(x = 0; x < width; ++x) tmpl = cur pixel A ref_pixel; tmp2 = tmpl[0] I tmplfl] | tmpi[2] tmpl[3] | tmpl[4] | tmpl[5] | tmpl[6] tmpl [7]; C[x] = tmp2 & (!coded[x]); } ' ' ' // 2. Generate array RW[] or LW[] If (last “OR” operation in U PIXEL module is removed) Assign RW[] = C[] Else { RW |()| C|0|: Forfx = 1; x < width; ++x) { RW [x] = C[x] I RW [x-1] ] ’ // 3. Convert RW[][] to R_WIDTH[] // count zero, or leading zero detection If(last “OR” operation in U PIXEL module is removed) R WIDTH = LZD(RW[0], RW[1], RW[2], RW[3]); Else R WIDTH[y] = COUNT ZERO(RW[0], RW[1], RW[2], RW[3]);
[076] Depois de tanto a pesquisa 1D e a pesquisa 2D serem concluídas, o máximo de (comprimento 1D, tamanho 2D (largura x altura)) é selecionado como o "vencedor". Se o lwidth(left width) da correspondência 2D é diferente de zero, o comprimento da correspondência 1D anterior (length = length - lwidth) pode ser ajustado para evitar uma sobreposição entre a correspondência 1D anterior e a correspondência 2D atual. Se o comprimento da correspondência 1D anterior torna-se zero após o ajuste, este deve ser removido da lista de correspondência.
[077] Em seguida, um local de partida é calculado utilizando current_location + length se a correspondência anterior é uma correspondência 1D, ou current_location + (lwidth + rwidth) se a correspondência anterior é uma correspondência 2D. Quando uma pesquisa 1D é realizada, se qualquer pixel a ser correspondido cai em qualquer região de correspondência 2D anterior onde sua localização já foi coberta por uma correspondência 2D, o próximo pixel ou pixels são varridos até um pixel ser encontrado que não tenha sido codificado por uma correspondência anterior.
[078] Após a obtenção dos pares correspondidos, um mecanismo de entropia pode ser aplicado para converter estes elementos de codificação para o fluxo binário. Em algumas modalidades, o mecanismo de entropia pode usar um modelo de probabilidade igual. Um modelo de contexto adaptativo avançado pode ser aplicado também para uma melhor eficiência de compressão. O pseudocódigo seguinte é um exemplo do processo de codificação para cada par correspondido. (Pseudocódigo): . loop for each CU, uiTotal=uiWidth*uiHeight, uildx=θ; while ( uildx < uiTotal) { // *pDist: store the distance value for each matched pair // *pldx: store the index value for each matched pair // *pLen: store the length value for each matched pair // encodeEP() and eneodeEPsQ are reusing HEVC or similar by-pass entropy coding. if (pDist[ui!dx] == -1 ) { //encode one-bin with equal-probability model to indicate the //whether current pair is matched or not. unmatchedPairFlag = TRUE; enc o deE P(unmatchedP airFlag); //uilndexBits is controlled by the palette table size // i.e., for 24 different colors, we need 5 bits, for 8 colors, 3 bits enco deEPs (pldx [uildx], uilndexBits); uildx++; else { unmatchedPairFlag= FALSE; encodeEP(unmatchedPairFlag); /*bound binarization with max possible value*/ UInt uiDistBits =0; // offset is used to add additional references from neighboring blocks // here, we first let offset=0; while( (l«uiDistBits)<= (uildx+offset)) { ' uiDistBits++; } encodeEPs(pDist[uiIdx], uiDistBits); /*bound binarization with max possible value*/ UInt uiLenBits =0; while( (l«uiLenBits)<= (uiTotal-uildx)) uiLenBits++; } enc o deEPs (p Len [uildx], uiLenB its); uildx += pLenfuildx];
[079] Do mesmo modo, o processo de decodificação para o par correspondido é fornecido no seguinte pseudocódigo. (Pseudocódigo): // loop for each CU, uiTotal=uiWidth*uiHeight, uildx=θ; I while ( uildx < uiTotal) { // *pDist: store the distance value for each matched pair // *pldx: store the index value for each matched pair // *pLen: store the length value for each matched pair // parseEP() and parseEPs() are reusing HEVC or similar by-pass entropy coding. // parse the unmatched pair flag par seEP(&uiU nmatche dPa irF lag); if (uiUnmatchedPairFlag ) I { ' parseEPs( uiSymbol, uilndexBits ); pldx[uildx] = uiSymbol; uildx++; else { /*bound binarization with max possible value*/ UInt uiDistBits =0; // offset is used to add additional references from neighboring blocks // here, we first let offset=0; while( (l«uiDistBits)<= (uildx+offset)) uiDistBits++; UInt uiLenBits =0; while( (l«uiLenBits)<= (uiTotal-uildx)) uiLenBits++; parseEPs( uiSymbol, uiDistBits); pDist[uiIdx] = uiSymbol; parseEPsf uiSymbol, uiLenBits); pLen[uiIdx] = uiSymbol; for(UInt 1=0; i< pLen[uiIdx]; i++) pldx[i+uildx] = pldx[i+uildx- pDistfuildx]]; uildx += pLen[uiIdx]; } 1 L }
[080] Note que apenas os pixels em posições não correspondidas serão codificados no fluxo de bits. Para ter um modelo estatístico mais preciso, algumas modalidades podem usar apenas estes pixels e os seus vizinhos para a derivação de tabela de paletas, em vez de usar todos os pixels na CU.
[081] Para modos de codificação que determinam uma saída de delta ou índice, os resultados de codificação geralmente contêm um número limitado de valores únicos. Modalidades da presente divulgação fornecem uma segunda tabela de paletas de delta para utilizar esta observação. Esta tabela de paletas de delta pode ser criada depois de todos os dados literais serem obtidos na CU atual. A tabela de paletas de delta pode ser sinalizada explicitamente no fluxo de bits. Alternativamente, pode ser criada de forma adaptativa durante o processo de codificação, de modo que a tabela não precisa ser incluída no fluxo de bits. O delta_color_table_adaptive_flag é fornecido para esta escolha.
[082] Em algumas modalidades, é fornecido outro esquema avançado, denominado Fusão de Tabelas de Paletas de Delta Vizinhas. Para geração de paleta de delta adaptativo, o codificador pode usar a paleta de delta a partir da CU superior ou esquerda como um ponto de partida inicial. Para geração de paleta não adaptativa, o codificador também pode usar a paleta de delta a partir da CU superior ou esquerda e, em seguida, comparar o custo de R-D entre as Cus superior, esquerda e atual.
[083] Um delta_color_table_merge_flag é definido para indicar se a CU atual utiliza a tabela de paleta de delta a partir de sua CU esquerda ou superior. A CU atual carrega a sinalização de tabela de delta delta explicitamente somente quando delta_color_table_adaptive_flag == 0 e delta_color_table_merge_flag == 0 ao mesmo tempo. Para o processo de fusão, se delta_color_table_merge_flag for afirmado, outra bandeira, delta_color_table_merge_direction, é definida para indicar se o candidato de fusão é a partir de ou CU superior ou CU esquerda.
[084] Se delta_color_table_adaptive_flag == 1, o seguinte é um exemplo de um processo de codificação para geração de paleta de delta adaptativa. No lado de decodificador, sempre que o decodificador recebe dados literais, o decodificador pode então regenerar a paleta de delta utilizando os passos inversos: Passo 1: As matrizes palette_table[] e palette_count[] são definidas. Passo 2: A matriz palette_table[] é inicializada como palette_table(n) = n(n = 0 ... 255). Como alternativa, o palette_table[] a partir da CU superior ou esquerda pode ser usado como um valor inicial. Passo 3: A matriz palette_count[] é inicializada como palette_count(n) = 0 (n = 0 ... 255). Alternativamente, o palette_count[] a partir da CU superior ou esquerda pode ser usado como um valor inicial. Passo 4: Para qualquer valor de delta c', as seguintes operações são realizadas: a) Localizar n de modo que palette_table(n) == delta c’; b) Utilizar n como novo índice de delta c’; c) ++ palette_count(n); d) Classificar palette_count[] de modo que esteja em ordem decrescente; e e) Classificar palette_table[] em conformidade. Passo 5: O processo retorna ao passo 1 e o processo é repetido até que todos os delta c’ na CU atual sejam processados.
[085] Para qualquer bloco que inclui texto e gráficos, pode utilizar-se uma bandeira de máscara para separar a seção de texto e a seção de gráficos. A seção de texto pode ser comprimida utilizando o método de compressão descrito acima; a seção de gráficos pode ser compactada por outro método de compressão. Porque o valor de qualquer pixel coberto pela bandeira de máscara foi codificado pela camada de texto sem perdas, cada pixel na seção de gráficos pode ser considerado como um "pixel não importa". Quando a seção de gráficos é compactada, qualquer valor arbitrário pode ser atribuído a um pixel não importa para obter uma eficiência de compressão ótima.
[086] O mapa de índices e resíduos são gerados durante o processo de derivação de tabela de paletas. Comprimir o mapa de índices sem perdas permite processamento eficiente utilizando a pesquisa de sequência de cadeias 1D ou 2D. Em algumas modalidades, a pesquisa de cadeias de caracteres 1D ou 2D é restrita dentro da CU atual; No entanto, a janela de pesquisa pode ser estendida além da CU atual. A distância correspondida pode ser codificada utilizando um par de vetores de movimento na direção horizontal e vertical, por exemplo, (MVy = matched_distance / cuWidth, MVy = matched_distance-cuWidth * MVy).
[087] Porque a imagem pode ter diferentes orientações de textura espacial em regiões locais, a pesquisa 1D pode ser realizada na direção horizontal ou vertical com base no valor de um indicador color_idx_map_pred_direction. A direção de varredura de índice ótima pode ser determinada com base no custo de R-D. A Figura 13 ilustra um exemplo de operações de varredura horizontal e vertical. Na Figura 13, um mapa de índices de cor 2D de exemplo 2 1301 é ilustrado. O mapa de índices de cor 1301 pode representar o mapa de índices de cor 311 da Figura 3. O mapa de índices de cor 1301 é um mapa de 8x8, mas são possíveis outros tamanhos de mapa de índices de cor. Conforme ilustrado na Figura 13, a varredura horizontal 1302 ou varredura vertical 1303 podem ser realizadas no mapa de índices de cor 1301. Em algumas modalidades, os passos de codificação de entropia associados e deriveMatchPairs() são realizados duas vezes para varredura horizontal e varredura vertical. Em seguida, a direção de varredura final é escolhida como a direção com o menor custo de R-D.
BINARIZAÇÃO MELHORADA
[088] Conforme ilustrado acima, a tabela de paletas e um par de informação correspondida para o mapa de índices de cor podem ser codificados utilizando binarização de comprimento fixo. Alternativamente, binarização de comprimento variável pode ser usada. Por exemplo, para codificação de tabela de paletas, a tabela de paletas pode ter 8 valores de cor diferentes. Portanto, o mapa de índices de cor correspondente pode conter apenas 8 índices diferentes. Em vez de usar 3 caixas fixas para codificar cada valor de índice igualmente, apenas uma caixa pode ser usada para representar o pixel de fundo. Por exemplo, o pixel de fundo pode ser representado como 0. Em seguida, os 7 valores de pixel restantes podem ser representados utilizando palavras de código de comprimento fixo tais como 1000, 1001, 1010, 1011, 1100, 1101 e 1110 para codificar o índice de cor. Isso é, baseado no fato de que a cor de fundo pode ocupar a maior porcentagem da imagem e, portanto, uma palavra de código distinta de apenas um bit para a cor de fundo poderia economizar espaço global. Esse cenário ocorre normalmente para o conteúdo de tela. Como exemplo, considere uma CU de 16x16. Utilizando binarização de 3 caixas fixa, o mapa de índices de cor requer 3x16x16 = 768 caixas. Alternativamente, deixe a cor de fundo, que ocupa 40% da imagem, ser indexada como 0, enquanto as outras cores são igualmente distribuídas. Neste caso, o mapa de índices de cor requer apenas 2,8x16x16 < 768 caixas.
[089] Para codificação de pares correspondidos, o valor máximo possível da distância e comprimento correspondidos pode ser utilizado para ligar sua binarização, dadas as restrições atuais da tecnologia dentro da área da CU atual. Matematicamente, a distância e comprimento correspondidos poderiam ser tão longos quanto 64x64 = 4K em cada caso. No entanto, isso normalmente não ocorreria em conjunto. Para cada posição correspondida, a distância correspondida é limitada pela distância entre a posição atual e a primeira posição no buffer de referência (por exemplo, a primeira posição na CU atual), que pode ser indicada como L. Portanto, as caixas máximas para a binarização de distância é log2(L) +1 (em vez de comprimento fixo), e as caixas máximas para a binarização de comprimento é log2(cuSize-L) + 1 com cuSize = cuWidth * cuHeight.
[090] Além da tabela de paletas e o mapa de índices, codificação de coeficientes de resíduo poderia ser significativamente melhorada por diferentes métodos de binarização. Quanto às versões HEVC RExt e HEVC, o coeficiente de transformação é binarizado utilizando o comprimento variável com base na observação de que o coeficiente produzido após a previsão, transformação e quantização utilizando métodos convencionais tem geralmente magnitude próxima a zero, e os valores não nulos são normalmente localizados no canto superior esquerdo da unidade de transformação. No entanto, após introdução da ferramenta de codificação de salto de transformação em HEVC RExt que permite desviar todo o processo de transformação, a distribuição de magnitude de resíduo mudou. Especialmente quando se habilita o salto de transformação no conteúdo de tela com cores distintas, geralmente existem coeficientes com valores grandes (isto é, valores não próximos a zero, como '1', '2' ou '0') e o valores não zero podem ocorrer em locais aleatórios dentro da unidade de transformação. Se a binarização de coeficiente de HEVC atual é usada, isto pode resultar em uma palavra de código muito longa. Alternativamente, binarização de comprimento fixo pode ser usada, o que poderia salvar comprimento de código para os coeficientes de resíduo produzidos pelo modo de codificação de índice e tabela de paletas.
NOVO MÉTODO DE GERAÇÃO DE PIXEL PREDITIVO
[091] Conforme descrito acima, uma pesquisa de cadeia de caracteres 1D / 2D é realizada em codificar o mapa de índices de cor. Em qualquer localização no mapa de índices de cor onde se encontrou um índice correspondido, o decodificador toma o pixel no local correspondido e subtrai-o do pixel original para gerar um pixel de resíduo. Esse procedimento pode ser realizado utilizando a cor correspondente na tabela de paletas de cores representada pelo índice de cor no local correspondido, ou utilizando o pixel reconstruído no local correspondido.
[092] Existem dois métodos para gerar o valor de previsão com base nos dois métodos descritos acima. No primeiro método, para qualquer localização de pixel alvo, um valor de RGB é derivado da tabela de paletas pelo índice de cor principal na localização correspondida, e este valor de RGB é usado como o valor de previsão do pixel alvo. No entanto, este método força o decodificador a executar um procedimento de derivação de índice de cor para os pixels que estão fora da CU atual, resultando em um aumento do tempo de decodificação.
[093] Para evitar o procedimento de derivação de índice de cor no primeiro método, um segundo método é aplicado onde, para qualquer localização de pixel alvo, o valor de pixel reconstruído na localização correspondida é utilizado como o valor de previsão. Neste método, o valor reconstruído não é válido quando o pixel de previsão está dentro da CU atual. Neste caso, entretanto, um índice de cor está disponível e sua cor correspondente na tabela de paletas de cores pode ser usada como o pixel de previsão.
[094] O valor de resíduo de qualquer pixel na CU atual pode ser derivado subtraindo o seu valor de previsão do valor original. Em seguida, é quantificado e codificado para o fluxo de bits. O valor reconstruído de qualquer pixel na CU atual pode ser derivado adicionando seu valor de previsão e o valor de resíduo quantizado.
MODO DE COR ÚNICA
[095] Uma CU de cor única pode ser uma CU com apenas uma cor em cada localização de pixel ou uma CU tendo uma única cor na sua paleta com um mapa de índices de valor único uniforme. Existem vários métodos para comprimir uma única CU de cor no modo de paleta. Em um método, ou seja, Modo de Cor Única, somente essa informação de paleta de cor única é codificada e incluída no fluxo de bits. Toda a seção de mapa de índices de cor é ignorada. Isto está em contraste com a codificação e transmissão do mapa de índices todo zero uniforme. No lado de decodificador, se houver apenas uma única cor na paleta sem um mapa de índices, cada local de pixel na CU atual será preenchido com a cor na paleta.
CÓPIA DE CADEIA DE CARACTERES DE DOMÍNIO DE PIXEL
[096] Conforme descrito acima, a cópia de cadeia de caracteres 1D / 2D é aplicada no domínio de mapa de índices de cor. A cópia de cadeia de caracteres 1D / 2D também pode ser aplicada no domínio de pixel. Em comparação com a cópia de cadeia de caracteres de domínio 1D / 2D no mapa de índices, a cópia de cadeia de caracteres 1D / 2D no domínio de pixel inclui múltiplas alterações. As alterações são as seguintes: 1. O processo de geração de mapa de índices e tabela de paletas não são necessários e podem ser ignorados. Como alternativa, toda a geração de tabela de paletas, geração de mapa de índices e pesquisa de cadeia de caracteres 1D / 2D no domínio de índice ainda são executadas, mas a tabela de paletas não é gravada no fluxo de bits. Um mapa codificado é gerado com base no comprimento da correspondência de cadeias de caracteres 1D ou na largura e altura da correspondência de cadeias de caracteres 2D. O mapa codificado indica se um local de pixel é coberto por uma correspondência anterior. O local de partida seguinte é o primeiro local que não é coberto por uma correspondência anterior. 2. Ao codificar dados não correspondidos, seu valor de RGB (em vez do valor de índice de cor) é escrito no fluxo de bits. Ao codificar dados não correspondentes, um método de codificação de índice de pixel também pode ser aplicado onde uma bandeira de um bit é adicionada na frente deste valor de RGB na tabela de sintaxe. Se esse valor de RGB for exibido pela primeira vez, a bandeira é definida como 1 e este valor de RGB em si é codificado para o fluxo de bits. Esse valor de RGB é adicionado a uma tabela de pesquisa depois disso. Se esse valor de RGB for exibido novamente, a bandeira será definida como 0 e o valor de índice de tabela de pesquisa em vez deste valor de RGB será codificado. 3. O método de geração de pixel preditivo utiliza Opção 2 do modo de cor única (o valor de pixel reconstruído a partir do local de pixel de previsão é utilizado como o valor de previsão). 4. Para uma CU de cor única, Opção 1 ou Opção 2 do modo de cor única pode selecionada. Quando Opção 1 é selecionada, o valor de RGB da cor principal é escrito na seção de tabela de paletas do fluxo de bits. Quando Opção 2 é selecionada, se nenhuma linha superior for usada na pesquisa 1D e nenhuma opção 2D for permitida para a CU atual, o valor de RGB da cor principal será gravado na seção de tabela de paletas do fluxo de bits.
[097] Em geral, a cópia de cadeia de caracteres 2D é um algoritmo flexível; pode executar operações em blocos de diferentes larguras e alturas para encontrar um bloco de correspondência. Quando a cópia de cadeia de caracteres 2D é restrita à largura e altura da CU, a cópia de cadeia de caracteres 2D torna-se uma cópia de bloco de largura / altura fixa. A cópia intrabloco (IBC) é substancialmente idêntica a este caso particular da cópia de cadeia de caracteres 2D que opera no bloco de largura / altura fixa. Na cópia de cadeia de caracteres fixa de largura / altura 2D, o resíduo também é codificado. Isto é também substancialmente idêntico ao método de codificação de resíduo utilizado pela IBC.
AMOSTRAGEM DE CROMA ADAPTATIVA PARA CONTEÚDO MISTURADO
[098] As modalidades descritas acima fornecem múltiplas técnicas para codificação de conteúdo de tela de alta eficiência sob a estrutura do HEVC / HEVC-RExt. Na prática, além de conteúdo de tela puro (como texto, gráficos) ou vídeo natural puro, há também conteúdo contendo material de tela gerado por computador e vídeo natural capturado por câmera. Isso é referido como conteúdo misto. Atualmente, conteúdo misto é processado com amostragem de croma 4:4:4. No entanto, para a porção de vídeo natural capturada por câmara incorporada em um tal conteúdo misto, a amostragem de croma 4:2:0 pode ser suficiente para fornecer uma qualidade perceptivelmente sem perdas. Isto é devido ao fato que a visão humana é menos sensível às mudanças espaciais em componentes de croma em comparação com a dos componentes de luma. Assim, subamostragem é tipicamente realizada nos componentes de croma (por exemplo, o formato de vídeo 4:2:0 popular) para conseguir uma redução visível de taxa de bits, enquanto mantendo a mesma qualidade visual reconstruída.
[099] Modalidades desta divulgação fornecem uma bandeira, enable_chroma_subsampling, que é definida e sinalizada no nível de CU recursivamente. Para cada CU, o codificador determina se está sendo codificada utilizando 4:2:0 ou 4:4:4 de acordo com o custo de distorção de taxa. As Figuras 14A e 14B ilustram exemplos de formatos de amostragem de croma 4:2:0 e 4:4:4. A Figura 14A ilustra um exemplo de amostragem 4:2:0 e a Figura 14B mostra um exemplo de amostragem 4:4:4.
[100] No lado de codificador, para cada CU, assumindo que a entrada é a fonte 4:4:4 mostrada na Figura 14B, o custo de distorção de taxa é derivado diretamente utilizando o procedimento de codificação 4:4:4 com enable_chroma_subsampling = 0 ou FALSO. Em seguida, o processo subamostra amostras 4:4:4 para 4:2:0 para derivar o seu consumo de bits. O formato 4:2:0 reconstruído é interpolado de volta ao formato 4:4:4 para medição de distorção (por exemplo, utilizando soma do erro quadrático (SSE) ou soma de diferença absoluta (SAD)). Juntamente com o consumo de bit, o custo de distorção de taxa é derivado ao codificar a CU no espaço 4:2:0 e compará-la com o custo ao codificar a CU em 4:4:4. Qualquer método de codificação que resulta em um custo de distorção de taxa mais baixo é então escolhido para a codificação final.
[101] A Figura 15 ilustra um exemplo do processo de interpolação de 4:4:4 a 4:2:0 e vice-versa. Normalmente, o processo de conversão de formato de amostragem de cores de vídeo pode requerer um grande número de filtros de interpolação. Para reduzir a complexidade de implementação, um filtro de interpolação de HEVC (isto é, DCT-IF) pode ser utilizado. Conforme ilustrado na Figura 15, as caixas quadradas representam as amostras originais 4:4:4. A partir de 4:4:4 para 4:2:0, os pixels de meio pel (representados pelos círculos) são interpolados utilizando DCT-IF verticalmente para os componentes de croma. Também estão ilustrados na Figura 15 as posições de quarto de pel, que são representadas pelos diamantes. Os círculos sombreados cinzas são selecionados para formar as amostras 4:2:0. Para a interpolação de 4:2:0 a 4:4:4, o processo começa com os círculos cinza nos componentes de croma, as posições de meio pel são interpoladas horizontalmente para obter todos os círculos e as caixas quadradas são interpoladas utilizando DCT-IF verticalmente. Todas as caixas quadradas interpoladas são selecionadas para formar o sinal reconstruído 4:4:4.
CONTROLE DE CODIFICADOR
[102] Conforme discutido acima, múltiplas bandeiras são fornecidas para controlar o processamento de baixo nível no codificador. Por exemplo, enable_packed_component_flag é usado para indicar se a CU atual utiliza seu formato embalado ou um formato planar convencional para codificar o processamento. A decisão de habilitar ou não o formato embalado pode depender do custo de R-D calculado no codificador. Em algumas implementações de codificador, uma solução de baixa complexidade poderia ser alcançada analisando o histograma da CU e encontrando o melhor limiar para a decisão.
[103] O tamanho da tabela de paletas tem um impacto direto na complexidade. Um parâmetro maxColorNum é introduzido para controlar a troca entre complexidade e eficiência de codificação. A maneira mais direta é escolher a opção que resulta no menor custo de R-D. A direção de codificação de mapa de índices pode ser determinada por otimização de R-D, ou utilizando uma orientação espacial local (por exemplo, estimativa de direção de borda utilizando um operador de Sobel).
[104] Algumas das modalidades descritas acima podem limitar o processamento dentro de cada CTU ou CU. Na prática, esta restrição pode ser relaxada. Por exemplo, para processamento de mapa de índices de cor, pode utilizar-se o buffer de linha a partir da CU superior ou CU esquerda, tal como ilustrado na Figura 16. A Figura 16 ilustra um exemplo de processamento de mapa de índices de cor utilizando um buffer de linha de índice superior ou um buffer de linha de índice esquerdo. Com o buffer superior e o buffer esquerdo, a pesquisa pode ser estendida para melhorar ainda mais a eficiência de codificação. Dado que os buffers superior e esquerdo são formados utilizando os pixels reconstruídos a partir das CU vizinhas, estes pixels (bem como os seus índices correspondentes) estão disponíveis para referência antes do processamento do mapa de índices de CU atual. Por exemplo, como mostrado na Figura 16, após reordenação, o mapa de índices CU atual 1600 poderia ser 14, 14, 14, ... 1, 2, 1 (apresentado como uma cadeia de caracteres 1D). Sem uma referência de buffer de linha, o primeiro "14" pode ser codificado como um par não correspondido. No entanto, com um buffer de linha vizinho, o primeiro "14" corresponde ao "14" no buffer de linha de índice superior ou o buffer de linha de índice esquerdo. Assim, a cópia de cadeia de caracteres pode começar no primeiro pixel.
SÍNTESE DE DECODIFICADOR
[105] As informações fornecidas abaixo podem ser utilizadas para descrever as operações de decodificação do receptor 200 ilustrado na Figura 2. A sintaxe mostrada abaixo está alinhada com um rascunho de comitê de HEVC RExt. 7.3.5.8 Sintaxe de unidade de codificação:
[106] A Figura 17 ilustra um método para codificação de conteúdo de tela de acordo com esta divulgação. O método 1700 ilustrado na Figura 17 baseia-se nos conceitos chave descritos acima. O método 1700 pode ser realizado pelo transmissor 100 da Figura 1. Contudo, o método 1700 pode também ser utilizado com qualquer outro dispositivo ou sistema adequado.
[107] Em operação 1701, um dispositivo deriva um mapa de índices de cor com base em uma CU atual. Em operação 1703, o dispositivo codifica o mapa de índices de cor. O dispositivo codifica pelo menos uma porção do mapa de índices de cor utilizando uma primeira técnica de codificação. Um primeiro indicador indica uma distância significativa da primeira técnica de codificação. Por exemplo, em algumas modalidades, um primeiro valor do primeiro indicador indica uma técnica de codificação IndexMode que utiliza uma distância significativa igual a 1 e um segundo valor do primeiro indicador indica uma técnica de codificação CopyAbove que utiliza uma distância significativa igual a uma largura de bloco da CU atual.
[108] A porção do mapa de índices de cor que o dispositivo codifica utilizando a primeira técnica de codificação é ou uma primeira cadeia de caracteres de índices que tem uma segunda cadeia de caracteres de índices correspondentes imediatamente acima da primeira cadeia de caracteres de índices na CU atual ou uma terceira cadeia de caracteres de índices que todos têm o mesmo valor que um valor de índice de referência imediatamente à esquerda de um primeiro índice entre a terceira cadeia de caracteres de índices na CU atual.
[109] Em operação 1705, o dispositivo combina o mapa de índices de cor codificado e o primeiro indicador para transmissão para um receptor.
[110] Embora a Figura 17 ilustre um exemplo de um método 1700 para codificação de conteúdo de tela, podem ser feitas múltiplas alterações à Figura 17. Por exemplo, enquanto mostrado como uma série de passos, vários passos mostrados na Figura 17 podem se sobrepor, ocorrer em paralelo, ocorrer em uma ordem diferente, ou ocorrer múltiplas vezes. Além disso, alguns passos poderiam ser combinados ou removidos e passos adicionais poderiam ser adicionados de acordo com necessidades particulares.
[111] A Figura 18 ilustra um método para decodificar conteúdo de tela de acordo com esta divulgação. O método 1800 ilustrado na Figura 18 baseia-se nos conceitos chave descritos acima. O método 1800 pode ser realizado pelo receptor 200 da Figura 2. Contudo, o método 1800 pode também ser utilizado com qualquer outro dispositivo ou sistema adequado.
[112] Em operação 1801, um dispositivo recebe um fluxo de bits de vídeo comprimido a partir de um transmissor. O fluxo de bits de vídeo inclui um mapa de índices de cor codificado. O dispositivo também recebe um primeiro indicador. O primeiro indicador indica uma distância significativa de uma primeira técnica de decodificação. Por exemplo, em algumas modalidades, um primeiro valor do primeiro indicador indica uma técnica de decodificação IndexMode que utiliza uma distância significativa igual a 1, e um segundo valor do primeiro indicador indica uma técnica de decodificação CopyAbove que utiliza uma distância significativa igual a uma largura de bloco da CU atual.
[113] Em operação 1803, o dispositivo decodifica pelo menos uma porção do mapa de índices de cor utilizando a primeira técnica de decodificação, em que o primeiro indicador indica a distância significativa da primeira técnica de decodificação. Mais tarde, em operação 1805, o dispositivo reconstrói pixels associados a uma CU atual com base no mapa de índices de cor.
[114] Embora a Figura 18 ilustre um exemplo de um método 1800 para decodificar conteúdo de tela, podem ser feitas múltiplas alterações à Figura 18. Por exemplo, enquanto mostrado como uma série de passos, vários passos mostrados na Figura 18 podem se sobrepor, ocorrer em paralelo, ocorrer em uma ordem diferente, ou ocorrer múltiplas vezes. Além disso, alguns passos poderiam ser combinados ou removidos e passos adicionais poderiam ser adicionados de acordo com necessidades particulares.
[115] Em algumas modalidades, algumas ou todas as funções ou processos do um ou mais dos dispositivos são implementados ou suportados por um programa de computador que é formado a partir de código de programa legível por computador e que é incorporado em um meio legível por computador. A frase "código de programa legível por computador" inclui qualquer tipo de código de computador, incluindo código fonte, código de objeto e código executável. A expressão "meio legível por computador" inclui qualquer tipo de meio capaz de ser acessado por um computador, tal como memória somente de leitura (ROM), memória de acesso aleatório (RAM), uma unidade de disco rígido, um disco compacto (CD), disco digital de vídeo (DVD) ou qualquer outro tipo de memória.
[116] Pode ser vantajoso estabelecer definições de certas palavras e frases utilizadas ao longo deste documento de patente. Os termos "inclui" e "compreende", bem como os seus derivados, significam inclusão sem limitação. O termo "ou" é inclusivo, significando e / ou. As expressões "associado com" e "associado com o mesmo", bem como seus derivados, significam incluir, ser incluído dentro, interconectar com, conter, ser contido dentro, conectar a ou com, acoplar a ou com, ser comunicável com, cooperar com, intercalar, justapor, ser próximo a, ser ligado ou com, ter, ter uma propriedade de, ou semelhante.
[117] Embora esta descrição tenha descrito certas modalidades e métodos geralmente associados, alterações e permutações destas modalidades e métodos serão evidentes para os especialistas na técnica. Em conformidade, a descrição acima das modalidades exemplares não define ou restringe esta divulgação. Outras alterações, substituições e alterações são também possíveis sem se afastar do espírito e âmbito desta divulgação, tal como definido pelas reivindicações seguintes.

Claims (24)

1. Método para codificação de conteúdo de tela, o método caracterizado pelo fato de que compreende: derivar (1701) um mapa de índices de cor com base em uma unidade de codificação (CU) atual; codificar (1703) o mapa de índices de cor, em que pelo menos uma porção do mapa de índices de cor é codificada utilizando uma primeira técnica de codificação, em que um primeiro indicador indica uma distância significativa da primeira técnica de codificação; e combinar (1705) o mapa de índices de cor codificado e o primeiro indicador para transmissão para um receptor; um primeiro valor do primeiro indicador indica uma técnica de codificação IndexMode que utiliza uma distância significativa igual a 1, e um segundo valor do primeiro indicador indica uma técnica de codificação CopyAbove que utiliza uma distância significativa igual a uma largura de bloco da CU atual.
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a pelo menos porção do mapa de índices de cor que é codificado utilizando a primeira técnica de codificação é um de: uma primeira cadeia de caracteres de índices que tem uma segunda cadeia de caracteres correspondente de índices imediatamente acima da primeira cadeia de caracteres de índices na CU atual; ou uma terceira cadeia de caracteres de índices que todas têm o mesmo valor que um valor de índice de referência imediatamente à esquerda de um primeiro índice entre a terceira cadeia de caracteres de índices na CU atual.
3. Método, de acordo com a reivindicação 2, caracterizado pelo fato de que a primeira cadeia de caracteres de índices é codificada utilizando a técnica de codificação CopyAbove, e uma saída da técnica de codificação CopyAbove compreende um comprimento da primeira cadeia de caracteres de índices.
4. Método, de acordo com a reivindicação 2, caracterizado pelo fato de que a terceira cadeia de caracteres de índices é codificada utilizando a técnica de codificação IndexMode, e uma saída da técnica de codificação IndexMode compreende um comprimento da terceira cadeia de caracteres de índices.
5. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que um segundo indicador indica que a pelo menos porção do mapa de índices de cor é codificada utilizando a primeira técnica de codificação em vez de uma segunda técnica de codificação.
6. Método, de acordo com a reivindicação 5, caracterizado pelo fato de que: o primeiro e segundo indicadores compreendem primeira e segunda bandeiras binárias, respectivamente; a segunda bandeira binária indica que a primeira técnica de codificação é utilizada; a primeira bandeira binária indica que a distância significativa é igual a uma largura de bloco da CU atual; e uma linha codificada da CU atual que é idêntica à linha acima é sinalizada utilizando apenas a primeira e segunda bandeiras binárias.
7. Aparelho configurado para codificação de conteúdo de tela, o aparelho caracterizado pelo fato de que compreende: pelo menos uma memória; e pelo menos um processador acoplado a pelo menos uma memória, o pelo menos um processador configurado para: derivar um mapa de índices de cor com base em uma unidade de codificação (CU) atual; codificar o mapa de índices de cor, em que pelo menos uma porção do mapa de índices de cor é codificada utilizando uma primeira técnica de codificação, em que um primeiro indicador indica uma distância significativa da primeira técnica de codificação; e combinar o mapa de índices de cor codificado e o primeiro indicador para transmissão para um receptor; um primeiro valor do primeiro indicador indica uma técnica de codificação IndexMode que utiliza uma distância significativa igual a 1 e um segundo valor do primeiro indicador indica uma técnica de codificação CopyAbove que utiliza uma distância significativa igual a Uma largura de bloco da CU atual.
8. Aparelho, de acordo com a reivindicação 7, caracterizado pelo fato de que a pelo menos porção do mapa de índices de cor que é codificado utilizando a primeira técnica de codificação é um de: uma primeira cadeia de caracteres de índices que tem uma segunda cadeia de caracteres correspondente de índices imediatamente acima da primeira cadeia de caracteres de índices na CU atual; ou uma terceira cadeia de caracteres de índices que todas têm o mesmo valor que um valor de índice de referência imediatamente à esquerda de um primeiro índice entre a terceira cadeia de caracteres de índices na CU atual.
9. Aparelho, de acordo com a reivindicação 8, caracterizado pelo fato de que a primeira cadeia de caracteres de índices é codificada utilizando a técnica de codificação CopyAbove e uma saída da técnica de codificação CopyAbove compreende um comprimento da primeira cadeia de caracteres de índices.
10. Aparelho, de acordo com a reivindicação 8, caracterizado pelo fato de que a terceira cadeia de caracteres de índices é codificada utilizando a técnica de codificação IndexMode e uma saída da técnica de codificação IndexMode compreende um comprimento da terceira cadeia de caracteres de índices.
11. Aparelho, de acordo com a reivindicação 7, caracterizado pelo fato de que um segundo indicador indica que a pelo menos porção do mapa de índices de cor é codificada utilizando a primeira técnica de codificação em vez de uma segunda técnica de codificação.
12. Aparelho, de acordo com a reivindicação 11, caracterizado pelo fato de que: o primeiro e segundo indicadores compreendem primeira e segunda bandeiras binárias, respectivamente; a segunda bandeira binária indica que a primeira técnica de codificação é utilizada; a primeira bandeira binária indica que a distância significativa é igual a uma largura de bloco da CU atual; e uma linha codificada da CU atual que tem um valor idêntico é sinalizada utilizando apenas a primeira e segunda bandeiras binárias.
13. Método para decodificar conteúdo de tela, o método caracterizado pelo fato de que compreende: receber (1801) um fluxo de bits de vídeo compreendendo um mapa de índices de cor; receber um primeiro indicador; decodificar (1803) pelo menos uma porção do mapa de índices de cor utilizando uma primeira técnica de decodificação, em que o primeiro indicador indica uma distância significativa da primeira técnica de decodificação; e reconstruir (1805) pixels associados com uma unidade de codificação (CU) atual com base no mapa de índices de cor; um primeiro valor do primeiro indicador indica uma técnica de decodificação IndexMode que utiliza uma distância significativa igual a 1, e um segundo valor do primeiro indicador indica uma técnica de decodificação CopyAbove que utiliza uma distância significativa igual uma largura de bloco da CU atual.
14. Método, de acordo com a reivindicação 13, caracterizado pelo fato de que a pelo menos porção do mapa de índices de cor que é decodificado utilizando a primeira técnica de decodificação é um de: uma primeira cadeia de caracteres de índices que tem uma segunda cadeia de caracteres de correspondência de índices imediatamente acima da primeira cadeia de caracteres de índices na CU atual; ou uma terceira cadeia de caracteres de índices que todas têm o mesmo valor que um valor de índice de referência imediatamente à esquerda de um primeiro índice entre a terceira cadeia de caracteres de índices na CU atual.
15. Método, de acordo com a reivindicação 14, caracterizado pelo fato de que a primeira cadeia de caracteres de índices é decodificada utilizando a técnica de decodificação CopyAbove, e uma entrada da técnica de decodificação CopyAbove compreende um comprimento da primeira cadeia de caracteres de índices.
16. Método, de acordo com a reivindicação 14, caracterizado pelo fato de que a terceira cadeia de caracteres de índices é decodificada utilizando a técnica de decodificação IndexMode, e uma entrada da técnica de codificação IndexMode compreende um comprimento da terceira cadeia de caracteres de índices.
17. Método, de acordo com a reivindicação 13, caracterizado pelo fato de que um segundo indicador recebido indica que a pelo menos porção do mapa de índices de cor é decodificada utilizando a primeira técnica de decodificação em vez de uma segunda técnica de decodificação.
18. Método, de acordo com a reivindicação 17, caracterizado pelo fato de que: o primeiro e segundo indicadores compreendem primeira e segunda bandeiras binárias, respectivamente; a segunda bandeira binária indica que a primeira técnica de decodificação é utilizada; a primeira bandeira binária indica que a distância significativa é igual a uma largura de bloco da CU atual; e uma linha codificada da CU atual que é idêntica à linha acima é sinalizada utilizando apenas a primeira e segunda bandeiras binárias.
19. Aparelho configurado para decodificar conteúdo de tela, o aparelho caracterizado pelo fato de que compreende: pelo menos uma memória; e pelo menos um processador acoplado à pelo menos uma memória, o pelo menos um processador configurado para: receber um fluxo de bits de vídeo compreendendo um mapa de índices de cor; receber um primeiro indicador; decodificar pelo menos uma porção do mapa de índices de cor utilizando uma primeira técnica de decodificação, em que o primeiro indicador indica uma distância significativa da primeira técnica de decodificação; e reconstruir pixels associados com uma unidade de codificação (CU) atual com base no mapa de índices de cor; um primeiro valor do primeiro indicador indica uma técnica de decodificação IndexMode que utiliza uma distância significativa igual a 1, e um segundo valor do primeiro indicador indica uma técnica de decodificação CopyAbove que utiliza uma distância significativa igual uma largura de bloco da CU atual.
20. Aparelho, de acordo com a reivindicação 19, caracterizado pelo fato de que a pelo menos porção do mapa de índices de cor que é decodificado utilizando a primeira técnica de decodificação é um de: uma primeira cadeia de caracteres de índices que tem uma segunda cadeia de caracteres de correspondência de índices imediatamente acima da primeira cadeia de caracteres de índices na CU atual; ou uma terceira cadeia de caracteres de índices que todas têm o mesmo valor que um valor de índice de referência imediatamente à esquerda de um primeiro índice entre a terceira cadeia de caracteres de índices na CU atual.
21. Aparelho, de acordo com a reivindicação 20, caracterizado pelo fato de que a primeira cadeia de caracteres de índices é decodificada utilizando a técnica de decodificação CopyAbove, e uma entrada da técnica de decodificação CopyAbove compreende um comprimento da primeira cadeia de caracteres de índices.
22. Aparelho, de acordo com a reivindicação 20, caracterizado pelo fato de que a terceira cadeia de caracteres de índices é decodificada utilizando a técnica de decodificação IndexMode, e uma entrada da técnica de codificação IndexMode compreende um comprimento da terceira cadeia de caracteres de índices.
23. Aparelho, de acordo com a reivindicação 19, caracterizado pelo fato de que um segundo indicador indica que a pelo menos porção do mapa de índices de cor é decodificada utilizando a primeira técnica de decodificação, em vez de uma segunda técnica de decodificação.
24. Aparelho, de acordo com a reivindicação 23, caracterizado pelo fato de que: o primeiro e segundo indicadores compreendem primeira e segunda bandeiras binárias, respectivamente; a segunda bandeira binária indica que a primeira técnica de decodificação é utilizada; a primeira bandeira binária indica que a distância significativa é igual a uma largura de bloco da CU atual; e uma linha codificada da CU atual que tem um valor idêntico é sinalizada utilizando apenas a primeira e segunda bandeiras binárias.
BR112016030696-1A 2014-06-27 2015-06-25 Métodos e aparelhos de codificação e decodificação de conteúdo de tela BR112016030696B1 (pt)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201462018349P 2014-06-27 2014-06-27
US62/018,349 2014-06-27
US14/749,138 US20150381994A1 (en) 2014-06-27 2015-06-24 Advanced screen content coding with improved palette table and index map coding methods
US14/749,138 2015-06-24
PCT/US2015/037779 WO2015200690A1 (en) 2014-06-27 2015-06-25 Advanced screen content coding with improved palette table and index map coding methods

Publications (2)

Publication Number Publication Date
BR112016030696A2 BR112016030696A2 (pt) 2018-07-17
BR112016030696B1 true BR112016030696B1 (pt) 2023-11-21

Family

ID=54931999

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112016030696-1A BR112016030696B1 (pt) 2014-06-27 2015-06-25 Métodos e aparelhos de codificação e decodificação de conteúdo de tela

Country Status (10)

Country Link
US (1) US20150381994A1 (pt)
EP (1) EP3143766A4 (pt)
JP (1) JP6524118B2 (pt)
KR (1) KR101906740B1 (pt)
CN (1) CN106797457B (pt)
AU (1) AU2015279791A1 (pt)
BR (1) BR112016030696B1 (pt)
CA (1) CA2953505C (pt)
RU (1) RU2654200C1 (pt)
WO (1) WO2015200690A1 (pt)

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105765974B (zh) 2013-10-14 2019-07-02 微软技术许可有限责任公司 用于视频和图像编码和解码的帧内块复制预测模式的特征
KR102318785B1 (ko) 2013-10-14 2021-10-27 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 비디오 및 영상 코딩 및 디코딩에 대한 기본 색상 인덱스 맵 모드의 특징
US11109036B2 (en) 2013-10-14 2021-08-31 Microsoft Technology Licensing, Llc Encoder-side options for intra block copy prediction mode for video and image coding
EP3090553B1 (en) 2014-01-03 2022-07-06 Microsoft Technology Licensing, LLC Block vector prediction in video and image coding/decoding
US11284103B2 (en) 2014-01-17 2022-03-22 Microsoft Technology Licensing, Llc Intra block copy prediction with asymmetric partitions and encoder-side search patterns, search ranges and approaches to partitioning
US10542274B2 (en) 2014-02-21 2020-01-21 Microsoft Technology Licensing, Llc Dictionary encoding and decoding of screen content
US9924175B2 (en) 2014-06-11 2018-03-20 Qualcomm Incorporated Determining application of deblocking filtering to palette coded blocks in video coding
US10136141B2 (en) * 2014-06-11 2018-11-20 Qualcomm Incorporated Determining quantization parameter (QP) values and delta QP values for palette coded blocks in video coding
KR102413529B1 (ko) 2014-06-19 2022-06-24 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 통합된 인트라 블록 카피 및 인터 예측 모드
US9955157B2 (en) * 2014-07-11 2018-04-24 Qualcomm Incorporated Advanced palette prediction and signaling
US10812817B2 (en) * 2014-09-30 2020-10-20 Microsoft Technology Licensing, Llc Rules for intra-picture prediction modes when wavefront parallel processing is enabled
CN105491379A (zh) * 2014-10-01 2016-04-13 财团法人工业技术研究院 解码器、编码器、解码方法、编码方法与编解码系统
KR102150979B1 (ko) * 2014-12-19 2020-09-03 에이치에프아이 이노베이션 인크. 비디오 및 이미지 코딩에서의 비-444 색채 포맷을 위한 팔레트 기반 예측의 방법
WO2016150343A1 (en) * 2015-03-20 2016-09-29 Mediatek Singapore Pte. Ltd. Methods of palette coding with inter-prediction in video coding
WO2016175550A1 (ko) * 2015-04-27 2016-11-03 엘지전자 주식회사 비디오 신호의 처리 방법 및 이를 위한 장치
EP3298785A4 (en) * 2015-06-03 2019-02-13 MediaTek Inc. METHOD AND APPARATUS FOR RESOURCE SHARING BETWEEN INTRA BLOCK COPY MODE AND INTER-PREDICTION MODE IN VIDEO CODING SYSTEMS
EP3308540B1 (en) 2015-06-09 2020-04-15 Microsoft Technology Licensing, LLC Robust encoding/decoding of escape-coded pixels in palette mode
US10148977B2 (en) 2015-06-16 2018-12-04 Futurewei Technologies, Inc. Advanced coding techniques for high efficiency video coding (HEVC) screen content coding (SCC) extensions
EP3560200A4 (en) * 2016-12-23 2019-11-13 Telefonaktiebolaget LM Ericsson (publ) CHROMINANCE ADJUSTMENT WITH COLOR COMPONENTS IN VIDEO ENCODED COLOR SPACES
US10863190B2 (en) * 2018-06-14 2020-12-08 Tencent America LLC Techniques for memory bandwidth optimization in bi-predicted motion vector refinement
US11695919B2 (en) * 2018-08-28 2023-07-04 Google Llc Lossy image compression using palettization of locally mixed colors
CN117915109A (zh) 2018-09-19 2024-04-19 华为技术有限公司 根据基于双线性插值的解码端运动矢量修正的片相似度不执行修正的方法
EP3935581A4 (en) 2019-03-04 2022-11-30 Iocurrents, Inc. DATA COMPRESSION AND COMMUNICATION USING MACHINE LEARNING
US11503311B2 (en) * 2019-03-08 2022-11-15 Sony Group Corporation Hybrid palette-DPCM coding for image compression
WO2020182113A1 (en) * 2019-03-10 2020-09-17 Beijing Bytedance Network Technology Co., Ltd. Combined screen content coding mode
US11202101B2 (en) * 2019-03-13 2021-12-14 Qualcomm Incorporated Grouped coding for palette syntax in video coding
US11070816B2 (en) 2019-06-18 2021-07-20 Tencent America LLC Conversion of decoded block vector for intra picture block compensation
MX2022002617A (es) 2019-09-12 2022-03-25 Bytedance Inc Uso de predictor de paleta en codificacion de video.
US20220337843A1 (en) * 2019-09-23 2022-10-20 Lg Electronics Inc. Image encoding/decoding method and apparatus using user-defined palette entry, and method for transmitting bitstream
CA3155112A1 (en) * 2019-09-23 2021-04-01 Lg Electronics Inc. Image encoding/decoding method and device using palette mode, and method for transmitting bitstream
CN111225214B (zh) * 2020-01-22 2022-08-12 北京字节跳动网络技术有限公司 视频处理方法、装置及电子设备
KR20240024301A (ko) * 2020-03-27 2024-02-23 베이징 다지아 인터넷 인포메이션 테크놀로지 컴퍼니 리미티드 팔레트 모드를 사용한 비디오 코딩 방법 및 장치
US11595694B2 (en) * 2020-04-01 2023-02-28 Tencent America LLC Method and apparatus for video coding
US11496731B2 (en) * 2020-06-08 2022-11-08 Tencent America LLC String matching with single color value
WO2022117104A1 (en) * 2020-12-06 2022-06-09 Zhejiang Dahua Technology Co., Ltd. Systems and methods for video processing

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6819793B1 (en) * 2000-06-30 2004-11-16 Intel Corporation Color distribution for texture and image compression
US7016547B1 (en) * 2002-06-28 2006-03-21 Microsoft Corporation Adaptive entropy encoding/decoding for screen capture content
US8386628B1 (en) * 2005-05-23 2013-02-26 Glance Networks, Inc. Method and apparatus for reducing the amount of information that must be transmitted to slower viewers over a remote viewing session
US7548657B2 (en) * 2005-06-25 2009-06-16 General Electric Company Adaptive video compression of graphical user interfaces using application metadata
US8199812B2 (en) * 2007-01-09 2012-06-12 Qualcomm Incorporated Adaptive upsampling for scalable video coding
US7864193B2 (en) * 2007-07-02 2011-01-04 International Business Machines Corporation RGB color conversion palettes
WO2010017166A2 (en) * 2008-08-04 2010-02-11 Dolby Laboratories Licensing Corporation Overlapped block disparity estimation and compensation architecture
US8254704B2 (en) * 2008-10-30 2012-08-28 Microsoft Corporation Remote computing platforms providing high-fidelity display and interactivity for clients
US8180165B2 (en) * 2008-12-19 2012-05-15 Microsoft Corp. Accelerated screen codec
US20120106650A1 (en) * 2010-08-24 2012-05-03 Siegman Craig S Method and System for Block and DVC Compression
EP3087743A4 (en) * 2013-12-27 2017-02-22 HFI Innovation Inc. Method and apparatus for major color index map coding

Also Published As

Publication number Publication date
CA2953505A1 (en) 2015-12-30
RU2654200C1 (ru) 2018-05-17
JP6524118B2 (ja) 2019-06-05
BR112016030696A2 (pt) 2018-07-17
CN106797457A (zh) 2017-05-31
EP3143766A4 (en) 2017-05-17
CA2953505C (en) 2019-05-21
AU2015279791A1 (en) 2017-01-12
EP3143766A1 (en) 2017-03-22
JP2017525204A (ja) 2017-08-31
CN106797457B (zh) 2018-10-30
KR101906740B1 (ko) 2018-10-10
WO2015200690A1 (en) 2015-12-30
US20150381994A1 (en) 2015-12-31
KR20170016958A (ko) 2017-02-14

Similar Documents

Publication Publication Date Title
BR112016030696B1 (pt) Métodos e aparelhos de codificação e decodificação de conteúdo de tela
EP3053339B1 (en) Advanced screen content coding with improved palette table and index map coding methods
US10097845B2 (en) Method, apparatus and system for encoding and decoding video data using a block dictionary
WO2020253831A1 (zh) 一种编解码方法、装置及存储介质
CN113853785B (zh) 用于残差编解码的上下文建模
US10694187B2 (en) Method and device for deriving block structure in video coding system
US11979554B2 (en) Intra prediction-based video signal processing method and device
KR20220123713A (ko) 양자화 관련 파라미터의 시그널링
KR20180107687A (ko) 움직임벡터를 부호화 또는 복호화하기 위한 장치 및 방법
US20230171415A1 (en) Tile and slice partitioning in video processing
CN112823526A (zh) 通过使用交叉分量线性模型来处理视频信号的方法和设备
JP2024050704A (ja) 映像符号化におけるパレット予測子の使用
CN117354519A (zh) 视频编解码中的重要系数信令
CN113497935A (zh) 视频编解码方法及设备
GB2577350A (en) Image data encoding and decoding
GB2580106A (en) Image data encoding and decoding
KR102585317B1 (ko) 비디오 코딩을 위한 인-루프 필터
WO2023131299A1 (en) Signaling for transform coding
WO2021136486A1 (en) Palette size signaling in video coding
CN114125470A (zh) 视频编码方法和设备以及视频解码方法和设备
GB2580108A (en) Image data encoding and decoding
BR112016011471B1 (pt) Método e sistema para codificar conteúdo de tela em um fluxo de bits
BR112016011471A2 (pt) Solução de codificação de conteúdo de tela avançada

Legal Events

Date Code Title Description
B06F Objections, documents and/or translations needed after an examination request according [chapter 6.6 patent gazette]
B06U Preliminary requirement: requests with searches performed by other patent offices: procedure suspended [chapter 6.21 patent gazette]
B09A Decision: intention to grant [chapter 9.1 patent gazette]
B16A Patent or certificate of addition of invention granted [chapter 16.1 patent gazette]

Free format text: PRAZO DE VALIDADE: 20 (VINTE) ANOS CONTADOS A PARTIR DE 25/06/2015, OBSERVADAS AS CONDICOES LEGAIS