BR112021016677A2 - Método e aparelho para predição inter baseada em afim de sub-blocos de croma - Google Patents

Método e aparelho para predição inter baseada em afim de sub-blocos de croma Download PDF

Info

Publication number
BR112021016677A2
BR112021016677A2 BR112021016677-7A BR112021016677A BR112021016677A2 BR 112021016677 A2 BR112021016677 A2 BR 112021016677A2 BR 112021016677 A BR112021016677 A BR 112021016677A BR 112021016677 A2 BR112021016677 A2 BR 112021016677A2
Authority
BR
Brazil
Prior art keywords
sub
luma
chroma
block
blocks
Prior art date
Application number
BR112021016677-7A
Other languages
English (en)
Inventor
Vasily Alexeevich Rufitskiy
Timofey Mikhailovich SOLOVYEV
Alexey Konstantinovich Filippov
Jianle Chen
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 BR112021016677A2 publication Critical patent/BR112021016677A2/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/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors
    • 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/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors
    • H04N19/517Processing of motion vectors by encoding
    • H04N19/52Processing of motion vectors by encoding by predictive encoding
    • 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/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/537Motion estimation other than block-based
    • H04N19/54Motion estimation other than block-based using feature points or meshes
    • 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/157Assigned coding mode, i.e. the coding mode being predefined or preselected to be further used for selection of another element or parameter
    • H04N19/159Prediction type, e.g. intra-frame, inter-frame or bidirectional frame 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/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/30Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability
    • 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/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/527Global motion vector estimation
    • 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/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Color Television Systems (AREA)

Abstract

método e aparelho para predição inter baseada em afim de sub-blocos de croma. a presente invenção diz respeito a método e aparelho para derivação de vetor de movimento para predição inter baseada em afim de sub-blocos de croma com base em formato de croma. o método inclui: determinar fatores de escala de croma em direções horizontal e vertical com base em informação de formato de croma, em que a informação de formato de croma indica um formato de croma de uma imagem atual à qual o bloco de imagem atual pertence; determinar um conjunto (s) de sub-blocos de luma do bloco de luma com base em valores dos fatores de escala de croma; determinar um vetor de movimento para um sub-bloco de croma do bloco de croma com base em vetores de movimento de um ou mais sub-blocos de luma no conjunto (s) de sub-blocos de luma.

Description

“MÉTODO E APARELHO PARA PREDIÇÃO INTER BASEADA EM AFIM DE SUB-BLOCOS DE CROMA” REFERÊNCIA CRUZADA PARA PEDIDOS RELACIONADOS
[001] Este pedido de patente reivindica a prioridade para o pedido de patente provisório US 62/809,551, depositado 22 de fevereiro de 2019, a prioridade para o pedido de patente provisório US 62/823,653, depositado 25 de março de 2019 e a prioridade para o pedido de patente provisório US 62/824,302, depositado 26 de março de 2019. As divulgações dos pedidos de patente mencionados acima estão incorporadas a este documento pela referência nas suas totalidades.
CAMPO TÉCNICO
[002] Modalidades da presente divulgação de uma maneira geral dizem respeito ao campo de processamento de imagem e mais particularmente à predição inter baseada em afim (compensação de movimento afim), em particular, método e aparelho para derivação de vetor de movimento para predição inter baseada em afim de sub-blocos de croma com base em formato de croma, e método e aparelho para predição inter baseada em afim de sub-blocos de croma.
ANTECEDENTES
[003] Codificação de vídeo (codificação e/ou decodificação de vídeo) é usada em uma faixa ampla de aplicações de vídeo digital, por exemplo, TV digital de difusão, transmissão de vídeo pela Internet e redes móveis, aplicações de conversação em tempo real tais como chat de vídeo, videoconferência, DVD e discos Blu-ray, sistemas de aquisição e edição de conteúdo de vídeo, e câmeras de vídeo de aplicações de segurança.
[004] A quantidade de dados de vídeo necessários para representar um vídeo mesmo relativamente curto pode ser substancial, o que pode resultar em dificuldades quando os dados devem ser transferidos em streaming ou comunicados de outro modo através de uma rede de comunicações com capacidade de largura de banda limitada.
Assim, dados de vídeo de uma maneira geral são comprimidos antes de serem comunicados através de redes de telecomunicações atuais.
O tamanho de um vídeo também pode ser um problema quando o vídeo é armazenado em um dispositivo de armazenamento porque recursos de memória podem ser limitados.
Dispositivos de compressão de vídeo frequentemente usam software e/ou hardware na origem para codificar os dados de vídeo antes da transmissão ou armazenamento, diminuindo desse modo a quantidade de dados necessários para representar imagens de vídeo digital.
Os dados comprimidos são então recebidos no destino por um dispositivo de descompressão de vídeo que decodifica os dados de vídeo.
Com recursos de rede limitados e demandas sempre crescentes para qualidade de vídeo mais alta, técnicas de compressão e descompressão aperfeiçoadas com uma razão de compressão maior e pouco a nenhum sacrifício em qualidade de imagem são desejáveis.
Particularmente, o codificador de Codificação de Vídeo Versátil e Modelo de Teste (VTM) atual suporta principalmente o formato de croma 4:2:0 como o formato de imagem de entrada.
A falha de codificador VTM pode acontecer quando o formato de croma de entrada se torna 4:4:4. Para evitar tal problema, um codificador que suporta outros formatos de croma (tais como 4:4:4 ou 4:2:2) é muito desejável e mesmo obrigatório para uma grande variedade de aplicações.
SUMÁRIO
[005] Por causa dos desafios mencionados acima, uma modificação para processo de codificação de vídeo para suportar múltiplos formatos de croma é proposta na presente divulgação. Em particular, modalidades do presente pedido visam fornecer um aparelho, um codificador, um decodificador e métodos correspondentes para derivação de vetor de movimento para predição inter baseada em afim de sub-blocos de croma com base em um formato de croma, que pode ser um de múltiplos formatos de croma suportados, a fim de melhorar desempenho de codificação.
[006] Modalidades da invenção são definidas pelos recursos das reivindicações independentes, e implementações vantajosas adicionais das modalidades pelos recursos das reivindicações dependentes.
[007] Modalidades particulares são delineadas nas reivindicações independentes anexadas, com outras modalidades nas reivindicações dependentes.
[008] Os indicados anteriormente e outros objetivos são alcançados pela matéria em questão das reivindicações independentes. Formas de implementação adicionais são evidentes a partir das reivindicações dependentes, da descrição e das figuras.
[009] De acordo com um primeiro aspecto da presente divulgação, é fornecido um método de derivação de vetor de movimento croma usado em predição inter baseada em afim de um bloco de imagem atual que compreende um bloco de luma e um bloco de croma colocalizado, o método compreendendo determinar fatores de escala de croma (isto é, o valor dos fatores de escala de croma) em direções horizontal e vertical com base em informação de formato de croma, em que a informação de formato de croma indica um formato de croma de uma imagem atual à qual o bloco de imagem atual pertence; determinar um conjunto (S) de sub-blocos de luma do bloco de luma com base em valores dos fatores de escala de croma; e determinar um vetor de movimento para um sub-bloco de croma do bloco de croma com base em vetores de movimento de um ou mais sub-blocos de luma (por exemplo, um ou dois sub-blocos de luma) no conjunto (S) de sub-blocos de luma.
[010] Na divulgação apresentada, porque um bloco ou sub-bloco (luma ou croma) pode ser representado por meio de sua localização, posição ou índice, selecionar/determinar um bloco ou sub-bloco significa que a posição ou localização ou o índice do bloco ou sub-bloco é selecionado ou determinado.
[011] É notado que o termo “bloco”, “bloco de codificação” ou “bloco de imagem” usado na presente divulgação pode representar uma unidade de transformada (TU), uma unidade de predição (PU), uma unidade de codificação (CU), etc. Em Codificação de Vídeo Versátil (VVC), unidades de transformada e unidades de codificação de uma maneira geral são alinhadas umas com as outras exceto quando peça de TU ou transformada de sub-bloco (SBT) é usada. Como tal, os termos “bloco”, “bloco de imagem”, “bloco de codificação” e “bloco de transformada” podem ser usados de modo permutável na presente divulgação; e os termos “tamanho de bloco” e “tamanho de bloco de transformada” podem ser usados de modo permutável na presente divulgação. Os termos “amostra” e “pixel” também podem ser usados de modo permutável na presente divulgação.
[012] A presente divulgação diz respeito a um método para considerar o formato de croma da imagem ao obter vetores de movimento croma a partir de vetores de movimento luma. Ao utilizar uma média de vetores de movimento luma, subamostragem linear de campo de movimento luma é realizada. Quando planos de cores croma têm a mesma altura do plano luma, é julgado mais apropriado selecionar vetores de movimento de blocos de luma que são adjacentes horizontalmente, de maneira que eles têm a mesma posição vertical. Selecionar vetores de movimento luma dependendo do formato de croma de imagem resulta em um campo de movimento croma mais preciso por causa de uma subamostragem de campo de vetor de movimento luma mais precisa. Esta dependência em formato de croma capacita selecionar os blocos de luma mais apropriados ao calcular a média de vetores de movimento luma para gerar o vetor de movimento croma. Como uma consequência de uma interpolação de campo de movimento mais precisa, erro de predição é reduzido, o que leva a um resultado técnico de um melhoramento de desempenho de compressão, assim desempenho de codificação é aperfeiçoado.
[013] Em uma forma de implementação possível do método de acordo com o primeiro aspecto, o conjunto (S) de sub- blocos de luma é determinado com base em valores dos fatores de escala de croma em direções horizontal e vertical; isto é, o um ou mais sub-blocos de luma (tal como um ou dois sub-blocos de luma) são determinados com base em valores dos fatores de escala de croma em direções horizontal e vertical.
[014] Em uma forma de implementação possível do método de acordo com o primeiro aspecto, os fatores de escala de croma em direções horizontal e vertical são representados pelas variáveis SubWidthC e SubHeightC.
[015] Em uma forma de implementação possível do método de acordo com o primeiro aspecto, uma posição de cada um dos sub-blocos de luma é representada por um índice de sub- bloco em uma direção horizontal e um índice de sub-bloco em uma direção vertical, e uma posição de cada um dos sub- blocos de croma é representada por um índice de sub-bloco na direção horizontal e um índice de sub-bloco na direção vertical.
[016] Em uma forma de implementação possível do método de acordo com o primeiro aspecto, a posição de cada um do um ou mais sub-blocos de luma (tal como um ou dois sub- blocos de luma) no conjunto (S) é representada por um índice de sub-bloco em uma direção horizontal e um índice de sub-bloco em uma direção vertical.
[017] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal, se ambas as variáveis SubWidthC e SubHeightC forem iguais a 1, o conjunto de sub-blocos de luma (S) compreende: um sub-bloco de luma indexado por S0 = (xSbIdx, ySbIdx); se pelo menos um de SubWidthC e SubHeightC não for igual a 1, o conjunto de sub-blocos de luma (S) compreende: um primeiro sub-bloco de luma indexado por S0 = (( xSbIdx >> ( SubWidthC − 1 ) << ( SubWidthC − 1 )), ( ySbIdx
>> ( SubHeightC − 1 ) << ( SubHeightC − 1 ))), e um segundo sub-bloco de luma indexado por S1 = (( xSbIdx >> (SubWidthC − 1 ) << ( SubWidthC − 1)) + ( SubWidthC − 1 ), ( ySbIdx >> ( SubHeightC − 1 ) << ( SubHeightC − 1 )) + ( SubHeightC − 1 )) em que SubWidthC e SubHeightC representam respectivamente os fatores de escala de croma em direções horizontal e vertical; xSbIdx e ySbIdx representam um índice de sub-bloco na direção horizontal e um índice de sub-bloco na direção vertical para um sub-bloco de luma no conjunto (S), respectivamente; “<<” representa um deslocamento aritmético para a esquerda e “>>” representa um deslocamento aritmético para a direita; e xSbIdx = 0..numSbX − 1 e ySbIdx = 0..numSbY − 1, e numSbX indica o número dos sub-blocos de luma no bloco de luma ao longo da direção horizontal e numSbY indica o número dos sub-blocos de luma no bloco de luma ao longo da direção vertical.
[018] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal, os números dos sub- blocos de croma em direções horizontal e vertical são os mesmos que os números dos sub-blocos de luma em direções horizontal e vertical, respectivamente.
[019] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal, em que se ambos de SubWidthC e SubHeightC forem iguais a 1, o conjunto de sub- blocos de luma (S) compreende:
um sub-bloco de luma indexado por S0 = (xCSbIdx, yCSbIdx); se pelo menos um de SubWidthC e SubHeightC não for igual a 1, o conjunto de sub-blocos de luma (S) compreende: um primeiro sub-bloco de luma indexado por S0 = (( xCSbIdx >> ( SubWidthC − 1 ) << ( SubWidthC − 1 )), ( yCSbIdx >> ( SubHeightC − 1 ) << ( SubHeightC − 1 ))), e um segundo sub-bloco de luma indexado por S1 = ( xCSbIdx >> ( SubWidthC − 1 ) << ( SubWidthC – 1 )) + ( SubWidthC − 1 ), ( yCSbIdx >> ( SubHeightC − 1 ) << ( SubHeightC − 1 )) + ( SubHeightC − 1 )) em que as variáveis SubWidthC e SubHeightC representam respectivamente os fatores de escala de croma em direções horizontal e vertical; xCSbIdx e yCSbIdx representam um índice de sub-bloco em direção horizontal e um índice de sub-bloco em direção vertical, respectivamente, para um sub-bloco de luma no conjunto (S); e xCSbIdx = 0..numCSbX − 1 e yCSbIdx = 0..numCSbY − 1, e numCSbX indica o número dos sub-blocos de croma no bloco de croma ao longo da direção horizontal e numCSbY indica o número dos sub-blocos de croma no bloco de croma ao longo da direção vertical.
[020] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal, em que um tamanho de cada um dos sub-blocos de croma é o mesmo que um tamanho de cada um dos sub-blocos de luma. É permitido que quando um número de sub-blocos de croma é definido para ser igual ao número de sub-blocos de luma, e quando um tamanho de plano de cor croma é igual ao tamanho de plano luma (tal como o formato de croma da imagem de entrada sendo 4:4:4), vetores de movimento de sub-blocos de croma adjacentes podem assumir o mesmo valor. Ao implementar esta etapa de processamento, uma otimização pode ser realizada ao saltar a etapa de cálculo de valores repetidos.
[021] A invenção proposta divulga um método para definir um tamanho de sub-bloco de croma igual a um tamanho de sub-bloco de luma. Neste caso, implementação pode ser simplificada ao uniformizar processamento de luma e croma, e cálculos de vetores de movimento redundantes são evitados naturalmente.
[022] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal, no caso em que um tamanho de cada um dos sub-blocos de croma é o mesmo que um tamanho de cada um dos sub-blocos de luma, o número de sub- blocos de croma na direção horizontal depende do número dos sub-blocos de luma na direção horizontal e do valor do fator de escala de croma na direção horizontal; o número de sub-blocos de croma em direção vertical depende do número dos sub-blocos de luma na direção vertical e do valor do fator de escala de croma na direção vertical.
[023] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal, xCSbIdx é obtido com base em xSbIdx e em um valor de passo de SubWidth; e yCSbIdx é obtido com base em ySbIdx e em um valor de passo de SubHeightC.
[024] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal, numCSbX = numSbX >>(SubWidthC−1) numCSbY = numSbY >>( SubHeightC −1); numCSbX e numCSbY representam o número de sub-blocos de croma em direções horizontal e vertical, respectivamente; e numSbX e numSbY representam o número dos sub-blocos de luma no bloco de luma em direções horizontal e vertical, respectivamente.
[025] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal, para o bloco de croma, o conjunto de sub-blocos de luma (S) compreende um ou mais de sub-blocos indexados por: S0 = (xSbIdxL, ySbIdxL) S1 = (xSbIdxL, ySbIdxL + (SubHeightC-1)) S2 = (xSbIdxL + (SubWidthC-1), ySbIdxL) S3 = (xSbIdxL + (SubWidthC-1), ySbIdxL + (SubHeightC- 1)) em que a posição ou índice de bloco de luma S0 é representado por um índice de sub-bloco xSbIdxL na direção horizontal e um índice de sub-bloco ySbIdxL na direção vertical; para a posição de bloco de croma (tal como [ xSbIdxL ][ ySbIdxL ] em mvCLX[ xSbIdxL ][ ySbIdxL ], a posição ou índice de bloco de luma S1 é representado por um índice de sub-bloco na direção horizontal, xSbIdxL, e um índice de sub-bloco na direção vertical, ySbIdxL + (SubHeightC-1); a posição ou índice de bloco de luma S2 é representado por um índice de sub-bloco na direção horizontal, xSbIdxL +
(SubWidthC-1), e um índice de sub-bloco na direção vertical, ySbIdxL; a posição ou índice de bloco de luma S3 é representado por um índice de sub-bloco na direção horizontal, xSbIdxL + (SubWidthC-1), e um índice de sub-bloco em direção vertical, ySbIdxL + (SubHeightC-1).
[026] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal, em que o conjunto de sub-blocos de luma (S) compreende dois sub-blocos de luma indexados por: S0 = (xSbIdxL, ySbIdxL) S1 = (xSbIdxL + (SubWidthC-1), ySbIdxL + (SubHeightC- 1)) em que a posição ou índice de bloco de luma S0 é representado por um índice de sub-bloco xSbIdxL na direção horizontal e um índice de sub-bloco ySbIdxL na direção vertical; a posição ou índice de bloco de luma S1 é representado por um índice de sub-bloco na direção horizontal, xSbIdxL + (SubWidthC-1), e um índice de sub-bloco na direção vertical, ySbIdxL + (SubHeightC-1).
[027] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal, em que no caso em que o formato de croma é 4:4:4, o conjunto (S) compreende (consiste de) um sub-bloco de luma que é colocalizado com o sub-bloco de croma; em que no caso que o formato de croma é 4:2:2, o conjunto (S) compreende dois sub-blocos de luma que são adjacentes horizontalmente; em que no caso que o formato de croma é 4:2:0, o conjunto (S) compreende dois sub-blocos de luma que são diagonais.
[028] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal, em que se existirem mais de um sub-bloco de luma no conjunto (S), determinar um vetor de movimento para o sub-bloco de croma com base no vetor de movimento de pelo menos um sub-bloco de luma em um conjunto (S) de sub-blocos de luma compreende: calcular a média de vetores de movimento dos sub-blocos de luma no conjunto S; e derivar o vetor de movimento para o sub-bloco de croma com base no vetor de movimento luma médio.
[029] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal, calcular a média de vetores de movimento dos sub-blocos de luma no conjunto S compreende: calcular a média de componentes horizontais dos vetores de movimento dos sub-blocos de luma no conjunto S; e/ou, calcular a média de componentes verticais dos vetores de movimento dos sub-blocos de luma no conjunto S.
[030] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal, em que calcular a média de vetores de movimento dos sub-blocos de luma no conjunto S compreende verificar se uma soma de vetores de movimento dos sub-blocos de luma no conjunto S é maior que ou igual a 0.
[031] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal, em que calcular a média de vetores de movimento dos sub-blocos de luma no conjunto S compreende: mvAvgLX = ∑ mvLX[𝑆 ][𝑆 ] se mvAvgLX[ 0 ] é maior que ou igual a 0 então mvAvgLX[ 0 ] = ( mvAvgLX[ 0 ] + ( N>>1 ) – 1) >> log2(N), de outro modo, mvAvgLX[ 0 ] = − ((− mvAvgLX[ 0 ] + ( N>>1 ) – 1) >> log2(N)) se mvAvgLX[ 1 ] é maior que ou igual a 0 então mvAvgLX[ 1 ] = ( mvAvgLX[ 1 ] + ( N>>1 ) – 1) >> log2(N), de outro modo, mvAvgLX[ 1 ] = − ((− mvAvgLX[ 1 ] + ( N>>1 ) – 1 ) >> log2(N)), onde mvAvgLX é um resultado de cálculo de média, mvAvgLX[ 0 ] é um componente horizontal do vetor de movimento mvAvgLX, mvAvgLX[ 1 ] é um componente vertical de vetor de movimento mvAvgLX, 𝑆 e 𝑆 são índices horizontal e vertical de sub-bloco Si no conjunto de sub-blocos de luma (S) em matriz de vetores de movimento, mvLX[𝑆 ][𝑆 ] é um vetor de movimento de sub-bloco de luma com índices 𝑆 e 𝑆 , N é um número de elementos (por exemplo, de sub-blocos de luma) no conjunto de sub-blocos de luma (S), log2(N) representa o logaritmo de N na base 2 e é a potência à qual o número 2 é elevado para obter o valor N e “>>” é um deslocamento aritmético para a direita.
[032] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal, N é igual a 2.
[033] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal, calcular a média de vetores de movimento dos sub-blocos de luma no conjunto S compreende: mvAvgLX = mvLX[( xSbIdx >> ( SubWidthC − 1 ) << ( SubWidthC − 1 ))] [(ySbIdx >> ( SubHeightC − 1 ) << ( SubHeightC − 1 ))] + mvLX[( xSbIdx >> (SubWidthC − 1 ) << ( SubWidthC − 1)) + ( SubWidthC − 1 )] [( ySbIdx >> ( SubHeightC − 1 ) << ( SubHeightC − 1 )) + ( SubHeightC − 1 )] se mvAvgLX[ 0 ] >= 0 então mvAvgLX[ 0 ] = ( mvAvgLX[ 0 ] + 1 – ( mvAvgLX[ 0 ] >= 0 )) >> 1 se mvAvgLX[ 1 ] >= 0 então mvAvgLX[ 1 ] = ( mvAvgLX[ 1 ] + 1 – ( mvAvgLX[ 1 ] >= 0 )) >> 1 em que mvAvgLX[ 0 ] é um componente horizontal do vetor de movimento médio mvAvgLX, mvAvgLX[ 1 ] é um componente vertical do vetor de movimento médio mvAvgLX; em que SubWidthC e SubHeightC representam os fatores de escala de croma em direções horizontal e vertical respectivamente; xSbIdx e ySbIdx representam um índice de sub-bloco em direção horizontal e direção vertical, respectivamente, para um sub-bloco de luma no conjunto (S), “<<” é um deslocamento aritmético para a esquerda e “>>” é um deslocamento aritmético para a direita.
[034] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal, se Caso 1: mvAvgLX[ 0 ] >= 0, então o valor para “( mvAvgLX[ 0 ] >= 0 )” = 1; se caso 2:mvAvgLX[ 0 ] < 0, então o valor para “( mvAvgLX[ 0 ] >= 0 )” = 0.
[035] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal, calcular a média de vetores de movimento dos sub-blocos de luma no conjunto S compreende: quando a soma de vetores de movimento dos sub-blocos de luma no conjunto S é maior que ou igual a 0, a soma de vetores de movimento dos sub-blocos de luma no conjunto S é dividida por operação de deslocamento para a direita dependendo do número de elementos (por exemplo, de sub- blocos de luma) no conjunto de sub-blocos de luma (S).
[036] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal, determinar fatores de escala de croma em direções horizontal e vertical com base em informação de formato de croma compreende: determinar os fatores de escala de croma em direções horizontal e vertical com base em um mapeamento entre a informação de formato de croma e os fatores de escala de croma em direções horizontal e vertical.
[037] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal, compreendendo adicionalmente gerar uma predição do sub-bloco de croma com base no vetor de movimento determinado.
[038] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal, o formato de croma compreende um de um formato YUV 4:2:2, um formato YUV 4:2:0 ou um formato YUV 4:4:4.
[039] O método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal implementado por meio de um dispositivo de codificação.
[040] O método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal implementado por meio de um dispositivo de decodificação.
[041] De acordo com um segundo aspecto da invenção, um aparelho para predição inter baseada em afim de um bloco de imagem atual que compreende blocos de luma e de croma colocalizados é fornecido, em que o aparelho compreende: um módulo de determinação configurado para determinar fatores de escala de croma em direções horizontal e vertical com base em informação de formato de croma, em que a informação de formato de croma indica um formato de croma de uma imagem atual à qual o bloco de imagem atual pertence; e determinar um conjunto (S) de sub-blocos de luma do bloco de luma com base em valores dos fatores de escala de croma; e um módulo de derivação de vetor de movimento configurado para determinar um vetor de movimento para um sub-bloco de croma do bloco de croma com base em vetores de movimento de um ou mais sub-blocos de luma no conjunto (S) de sub-blocos de luma.
[042] O método de acordo com o primeiro aspecto da invenção pode ser realizado pelo aparelho de acordo com o segundo aspecto da invenção. Recursos e formas de implementação adicionais do aparelho de acordo com o segundo aspecto da invenção correspondem aos recursos e formas de implementação do método de acordo com o primeiro aspecto da invenção.
[043] De acordo com um terceiro aspecto a invenção diz respeito a um aparelho para decodificar um fluxo de vídeo que inclui um processador e uma memória. A memória está armazenando instruções que induzem o processador para realizar o método de acordo com o primeiro aspecto.
[044] De acordo com um quarto aspecto a invenção diz respeito a um aparelho para codificar um fluxo de vídeo que inclui um processador e uma memória. A memória está armazenando instruções que induzem o processador para realizar o método de acordo com o primeiro aspecto.
[045] De acordo com um quinto aspecto, um meio de armazenamento legível por computador tendo instruções armazenadas no mesmo que quando executadas induzem um ou mais processadores configurados para codificar dados de vídeo é proposto. As instruções induzem o um ou mais processadores para realizar um método de acordo com o primeiro aspecto ou qualquer modalidade possível do primeiro aspecto.
[046] De acordo com um sexto aspecto, a invenção diz respeito a um programa de computador compreendendo código de programa para realizar o método de acordo com o primeiro ou segundo aspecto ou qualquer modalidade possível do primeiro quando executado em um computador.
[047] Detalhes de uma ou mais modalidades são expostos nos desenhos anexos e na descrição a seguir. Outros recursos, objetivos e vantagens estarão aparentes a partir da descrição, desenhos e reivindicações.
DESCRIÇÃO RESUMIDA DOS DESENHOS
[048] No exposto a seguir modalidades da invenção são descritas com mais detalhes com referência para as figuras e desenhos anexos, nos quais: a figura 1A é um diagrama de blocos mostrando um exemplo de um sistema de codificação de vídeo configurado para implementar modalidades apresentadas neste documento; a figura 1B é um diagrama de blocos mostrando outro exemplo de um sistema de codificação de vídeo configurado para implementar modalidades apresentadas neste documento; a figura 2 é um diagrama de blocos mostrando um exemplo de um codificador de vídeo configurado para implementar modalidades apresentadas neste documento; a figura 3 é um diagrama de blocos mostrando uma estrutura de exemplo de um decodificador de vídeo configurado para implementar modalidades apresentadas neste documento; a figura 4 é um diagrama de blocos ilustrando um exemplo de um aparelho de codificação ou um aparelho de decodificação; a figura 5 é um diagrama de blocos ilustrando outro exemplo de um aparelho de codificação ou um aparelho de decodificação; a figura 6a mostra um exemplo de posições de vetores de movimento de ponto de controle para modelo de movimento afim de 4 parâmetros;
a figura 6b mostra um exemplo de posições de vetores de movimento de ponto de controle para modelo de movimento afim de 6 parâmetros; a figura 7 mostra um exemplo de um campo de vetor de movimento de sub-bloco para modelo de movimento afim; a figura 8 é um diagrama de blocos ilustrando compensação de movimento usando modelo de movimento afim; a figura 9A mostra um exemplo de localizações verticais e horizontais nominais de amostras de luma e de croma de 4:2:0 em uma imagem; a figura 9B mostra um exemplo de localizações verticais e horizontais nominais de amostras de luma e de croma de 4:2:2 em uma imagem; a figura 9C mostra um exemplo de localizações verticais e horizontais nominais de amostras de luma e de croma de 4:4:4 em uma imagem; a figura 9D ilustra vários padrões de amostragem; a figura 10A mostra um exemplo ilustrando blocos de luma e de croma colocalizados que estão incluídos em um bloco de imagem atual de uma imagem atual, onde o formato de croma da imagem atual é 4:2:0; a figura 10B mostra um exemplo ilustrando blocos de luma e de croma colocalizados que estão incluídos em um bloco de imagem atual de uma imagem atual, onde o formato de croma da imagem atual é 4:2:2; a figura 10C mostra um exemplo ilustrando blocos de luma e de croma colocalizados que estão incluídos em um bloco de imagem atual de uma imagem atual, onde o formato de croma da imagem atual é 4:4:4; a figura 11A é um exemplo ilustrando posições de dois sub-blocos de luma para uma dada posição de um sub-bloco de croma durante derivação de vetores de movimento croma a partir de vetores de movimento luma quando o formato de croma da imagem atual é 4:2:0 tal como mostrado na figura 10A; a figura 11B é um exemplo ilustrando posições de dois sub-blocos de luma para uma dada posição de um sub-bloco de croma durante derivação de vetores de movimento croma a partir de vetores de movimento luma quando o formato de croma da imagem atual é 4:2:2 tal como mostrado na figura 10B; a figura 11C é um exemplo ilustrando uma posição de um sub-bloco de luma para uma dada posição de um sub-bloco de croma durante derivação de vetores de movimento croma a partir de vetores de movimento luma quando o formato de croma da imagem atual é 4:4:4 tal como mostrado na figura 10C; a figura 12A mostra vários exemplos de um subconjunto S que compreende posições de sub-blocos de luma para uma dada posição de sub-bloco de croma quando o formato de croma é definido para 4:4:4; a figura 12B mostra vários exemplos de um subconjunto S, no qual sub-blocos de croma localizados no contorno de um bloco de croma têm posições correspondentes no bloco de luma tal como no quarto caso “D” mostrado na figura 12A; a figura 13A mostra um exemplo ilustrando a seleção de dois sub-blocos de luma para derivar o vetor de movimento para um dado sub-bloco de croma durante derivação de vetores de movimento croma a partir de vetores de movimento luma quando o formato de croma da imagem atual é 4:2:0;
a figura 13B mostra um exemplo ilustrando a seleção de dois sub-blocos de luma para um dado sub-bloco de croma durante derivação de vetores de movimento croma a partir de vetores de movimento luma quando o formato de croma da imagem atual é 4:2:2; a figura 13C mostra um exemplo ilustrando a seleção de um sub-bloco de luma para um dado sub-bloco de croma durante derivação de vetores de movimento croma a partir de vetores de movimento luma quando o formato de croma da imagem atual é 4:4:4; a figura 14A mostra um exemplo de subdivisão de um bloco de luma 16x16 em sub-blocos e a subdivisão de um bloco de croma colocalizado com o bloco de luma quando o formato de croma é YUV 4:2:0; a figura 14B mostra um exemplo de subdivisão de um bloco de luma 16x16 em sub-blocos e a subdivisão de um bloco de croma colocalizado com o bloco de luma quando o formato de croma é YUV 4:2:2; a figura 14C mostra um exemplo de subdivisão de um bloco de luma 16x16 em sub-blocos e a subdivisão de um bloco de croma colocalizado com o bloco de luma quando o formato de croma é YUV 4:4:4; a figura 15 mostra um fluxograma representando um processo exemplar para derivação de vetor de movimento para predição inter baseada em afim de sub-blocos de croma com base em um formato de croma de acordo com alguns aspectos da presente divulgação; a figura 16 mostra um fluxograma representando outro processo exemplar para derivação de vetor de movimento para predição inter baseada em afim de sub-blocos de croma com base em um formato de croma de acordo com alguns aspectos da presente divulgação; a figura 17 mostra um diagrama esquemático de um dispositivo para predição inter baseada em afim de acordo com alguns aspectos da presente divulgação; a figura 18 é um diagrama de blocos mostrando uma estrutura de exemplo de um sistema de fornecimento de conteúdo que realiza um serviço de entrega de conteúdo; e a figura 19 é um diagrama de blocos mostrando uma estrutura de um exemplo de um dispositivo terminal.
[049] No exposto a seguir números de referência idênticos se referem a recursos idênticos ou pelo menos equivalentes funcionalmente se não especificado explicitamente de outro modo.
DESCRIÇÃO DETALHADA DAS MODALIDADES
[050] Na descrição seguinte, referência é feita para as figuras anexas, as quais formam parte da divulgação, e que mostram, a título de ilustração, aspectos específicos de modalidades da invenção ou aspectos específicos nos quais modalidades da presente invenção podem ser usadas. É entendido que modalidades da invenção podem ser usadas em outros aspectos e compreendem mudanças estruturais ou lógicas não representadas nas figuras. A descrição detalhada a seguir, portanto, não é para ser considerada com um sentido de limitação, e o escopo da presente invenção é definido pelas reivindicações anexas.
[051] Por exemplo, é entendido que uma divulgação em conexão com um método descrito também pode ser verdadeira para um dispositivo ou sistema correspondente configurado para realizar o método e vice-versa. Por exemplo, se uma ou uma pluralidade de etapas de método específicas for descrita, um dispositivo correspondente pode incluir uma ou uma pluralidade de unidades, por exemplo, unidades funcionais, para realizar a uma ou pluralidade de etapas de método descrita (por exemplo, uma unidade realizando a uma ou pluralidade de etapas, ou cada uma de uma pluralidade de unidades realizando uma ou mais da pluralidade de etapas), mesmo se tal uma ou mais unidades não estiverem descritas ou ilustradas explicitamente nas figuras. Por outro lado, por exemplo, se um aparelho específico for descrito com base em uma ou uma pluralidade de unidades, por exemplo, unidades funcionais, um método correspondente pode incluir uma etapa para realizar a funcionalidade da uma ou pluralidade de unidades (por exemplo, uma etapa realizando a funcionalidade da uma ou pluralidade de unidades, ou cada uma de uma pluralidade de etapas realizando a funcionalidade de uma ou mais da pluralidade de unidades), mesmo se tal uma ou pluralidade de etapas não estiver descrita ou ilustrada explicitamente nas figuras. Além disso, é entendido que os recursos das várias modalidades e/ou aspectos exemplares descritos neste documento podem ser combinados uns com os outros, a não ser que notado especificamente de outro modo.
[052] Codificação de vídeo tipicamente se refere ao processamento de uma sequência de imagens, as quais formam o vídeo ou sequência de vídeo. Em vez de o termo “imagem” (“picture”) o termo “quadro” ou “imagem” (“image”) pode ser usado como sinônimo no campo de codificação de vídeo. Codificação de vídeo (ou codificação de uma maneira geral) compreende duas partes codificação de vídeo e decodificação de vídeo. Codificação de vídeo é realizada no lado de origem, tipicamente compreendendo processar (por exemplo, por meio de compressão) as imagens de vídeo originais para reduzir a quantidade de dados exigidos para representar as imagens de vídeo (para armazenamento e/ou transmissão mais eficiente). Decodificação de vídeo é realizada no lado de destino e tipicamente compreende o processamento inverso comparado ao do codificador para reconstruir as imagens de vídeo. Modalidades se referindo à “codificação” de imagens de vídeo (ou imagens de uma maneira geral) devem ser entendidas como se relacionando com “codificação” ou “decodificação” de imagens de vídeo ou de respectivas sequências de vídeo. A combinação da parte de codificação e a parte de decodificação é também referida como CODEC (Codificação e Decodificação).
[053] No caso de codificação de vídeo sem perda, as imagens de vídeo originais podem ser reconstruídas, isto é, as imagens de vídeo reconstruídas têm a mesma qualidade das imagens de vídeo originais (assumindo nenhuma perda de transmissão ou outra perda de dados durante armazenamento ou transmissão). No caso de codificação de vídeo com perda, compressão adicional, por exemplo, por meio de quantização, é realizada para reduzir a quantidade de dados representando as imagens de vídeo, as quais não podem ser reconstruídas completamente no decodificador, isto é, a qualidade das imagens de vídeo reconstruídas é inferior ou pior comparada à qualidade das imagens de vídeo originais.
[054] Vários padrões de codificação de vídeo pertencem ao grupo de “codecs de vídeo híbridos com perda” (isto é, combinam predição espacial e temporal no domínio da amostra e codificação de transformada 2D para aplicar quantização no domínio da transformada). Cada imagem de uma sequência de vídeo tipicamente é particionada em um conjunto de blocos sem sobreposição e a codificação tipicamente é realizada em um nível de bloco. Em outras palavras, no codificador o vídeo tipicamente é processado, isto é, codificado, em um nível de bloco (bloco de vídeo), por exemplo, ao usar predição espacial (intraimagem) e/ou predição temporal (interimagem) para gerar um bloco de predição, subtrair o bloco de predição do bloco atual (bloco processado atualmente/a ser processado) para obter um bloco residual, transformar o bloco residual e quantizar o bloco residual no domínio da transformada para reduzir a quantidade de dados a ser transmitidos (compressão), enquanto que no decodificador o processamento inverso comparado ao do codificador é aplicado ao bloco codificado ou comprimido para reconstruir o bloco atual para representação. Além disso, o codificador duplica o loop de processamento de decodificador de tal maneira que ambos gerarão predições (por exemplo, predições intra e inter) e/ou reconstruções idênticas para processar, isto é, codificar, os blocos subsequentes.
[055] A presente divulgação diz respeito a melhoramentos no processo de predição inter. Em particular, a presente divulgação diz respeito a melhoramentos no processo de derivação para vetores de movimento croma. Particularmente, a presente divulgação diz respeito a melhoramentos no processo de derivação de vetor de movimento de blocos de croma afins (tais como sub-blocos de croma). Mais particularmente, a presente divulgação diz respeito a melhoramentos no processo de derivação de vetor de movimento para predição inter baseada em afim de sub- blocos de croma com base em formato de croma.
[056] São divulgados neste documento mecanismos aperfeiçoados para suportar múltiplos formatos de croma para processo de derivação para vetores de movimento croma.
[057] No exposto a seguir modalidades de um sistema de codificação de vídeo 10, de um codificador de vídeo 20 e de um decodificador de vídeo 30 são descritas com base nas figuras 1 a 3.
[058] A figura 1A é um diagrama de blocos esquemático ilustrando um sistema de codificação de exemplo 10, por exemplo, um sistema de codificação de vídeo 10 (ou resumidamente sistema de codificação 10) que pode utilizar técnicas do presente pedido. O codificador de vídeo 20 (ou resumidamente o codificador 20) e o decodificador de vídeo 30 (ou resumidamente o decodificador 30) do sistema de codificação de vídeo 10 representam exemplos de dispositivos que podem ser configurados para realizar técnicas de acordo com vários exemplos descritos no presente pedido.
[059] Tal como mostrado na figura 1A, o sistema de codificação 10 compreende um dispositivo de origem 12 configurado para fornecer os dados de imagem codificados 21, por exemplo, para um dispositivo de destino 14 para decodificar os dados de imagem codificados 21.
[060] O dispositivo de origem 12 compreende um codificador 20, e adicionalmente, isto é, opcionalmente, pode compreender uma fonte de imagem 16, um pré-processador (ou unidade de pré-processamento) 18, por exemplo, um pré-
processador de imagem 18 e uma interface de comunicação ou unidade de comunicação 22.
[061] A fonte de imagem 16 pode compreender ou ser qualquer tipo de dispositivo de captura de imagem, por exemplo, uma câmera para capturar uma imagem de mundo real, e/ou qualquer tipo de um dispositivo de geração de imagem, por exemplo, um processador gráfico de computador para gerar uma imagem animada por computador, ou qualquer tipo de outro dispositivo para obter e/ou fornecer uma imagem de mundo real, uma imagem gerada por computador (por exemplo, um conteúdo de tela, uma imagem de realidade virtual (VR)) e/ou qualquer combinação das mesmas (por exemplo, uma imagem de realidade aumentada (AR)). A fonte de imagem pode ser qualquer tipo de memória ou armazenamento armazenando qualquer uma das imagens mencionadas anteriormente.
[062] Em distinção ao pré-processador 18 e ao processamento realizado pela unidade de pré-processamento 18, a imagem ou dados de imagem 17 também pode ser referido como imagem bruta ou dados de imagem bruta 17.
[063] O pré-processador 18 é configurado para receber os dados de imagem (bruta) 17 e para realizar pré- processamento nos dados de imagem 17 para obter uma imagem pré-processada 19 ou os dados de imagem pré-processados 19. Pré-processamento realizado pelo pré-processador 18 pode compreender, por exemplo, corte, conversão de formato de cor (por exemplo, de RGB para YCbCr), correção de cor ou remoção de ruído. Pode ser entendido que a unidade de pré- processamento 18 pode ser componente opcional.
[064] O codificador de vídeo 20 é configurado para receber os dados de imagem pré-processados 19 e fornecer os dados de imagem codificados 21 (detalhes adicionais serão descritos a seguir, por exemplo, com base na figura 2).
[065] A interface de comunicação 22 do dispositivo de origem 12 pode ser configurada para receber os dados de imagem codificados 21 e para transmitir os dados de imagem codificados 21 (ou qualquer versão processada adicionalmente dos mesmos) por meio do canal de comunicação 13 para outro dispositivo, por exemplo, o dispositivo de destino 14 ou qualquer outro dispositivo, para armazenamento ou reconstrução direta.
[066] O dispositivo de destino 14 compreende um decodificador 30 (por exemplo, um decodificador de vídeo 30), e adicionalmente, isto é, opcionalmente, pode compreender uma interface de comunicação ou unidade de comunicação 28, um pós-processador 32 (ou unidade de pós- processamento 32) e um dispositivo de exibição 34.
[067] A interface de comunicação 28 do dispositivo de destino 14 é configurada para receber os dados de imagem codificados 21 (ou qualquer versão processada adicionalmente dos mesmos), por exemplo, diretamente do dispositivo de origem 12 ou de qualquer outra origem, por exemplo, um dispositivo de armazenamento, por exemplo, um dispositivo de armazenamento de dados de imagens codificados, e fornecer os dados de imagem codificados 21 para o decodificador 30.
[068] A interface de comunicação 22 e a interface de comunicação 28 podem ser configuradas para transmitir ou receber os dados de imagem codificados 21 ou os dados codificados 21 por meio de um enlace de comunicação direta entre o dispositivo de origem 12 e o dispositivo de destino
14, por exemplo, uma conexão com fio ou sem fio direta, ou via qualquer tipo de rede, por exemplo, uma rede com fio ou sem fio ou qualquer combinação dos mesmos, ou qualquer tipo de rede privada e pública, ou qualquer tipo de combinação dos mesmos.
[069] A interface de comunicação 22, por exemplo, pode ser configurada para empacotar os dados de imagem codificados 21 em um formato apropriado, por exemplo, pacotes, e/ou processar os dados de imagem codificados usando qualquer tipo de codificação de transmissão ou processamento para transmissão por meio de um enlace de comunicação ou rede de comunicação.
[070] A interface de comunicação 28, formando a contraparte da interface de comunicação 22, por exemplo, pode ser configurada para receber os dados transmitidos e processar os dados de transmissão usando qualquer tipo de decodificação ou processamento e/ou desempacotamento de transmissão correspondente para obter os dados de imagem codificados 21.
[071] Ambas da interface de comunicação 22 e a interface de comunicação 28 podem ser configuradas como interfaces de comunicação unidirecional tal como indicado pela seta para o canal de comunicação 13 na figura 1A apontando do dispositivo de origem 12 para o dispositivo de destino 14, ou interfaces de comunicação bidirecional, e podem ser configuradas, por exemplo, para enviar e receber mensagens, por exemplo, para configurar uma conexão, para confirmar e trocar qualquer outra informação relacionada com o enlace de comunicação e/ou transmissão de dados, por exemplo, transmissão de dados de imagem codificados.
[072] O decodificador 30 é configurado para receber os dados de imagem codificados 21 e fornecer os dados de imagem decodificados 31 ou uma imagem decodificada 31 (detalhes adicionais serão descritos a seguir, por exemplo, com base na figura 3 ou na figura 5).
[073] O pós-processador 32 do dispositivo de destino 14 é configurado para pós-processar os dados de imagem decodificados 31 (também chamados de dados de imagem reconstruídos), por exemplo, a imagem decodificada 31, para obter os dados de imagem pós-processados 33, por exemplo, uma imagem pós-processada 33. O pós-processamento realizado pela unidade de pós-processamento 32 pode compreender, por exemplo, conversão de formato de cor (por exemplo, de YCbCr para RGB), correção de cor, corte ou reamostragem, ou qualquer outro processamento, por exemplo, para preparar os dados de imagem decodificados 31 para exibição, por exemplo, pelo dispositivo de exibição 34.
[074] O dispositivo de exibição 34 do dispositivo de destino 14 é configurado para receber os dados de imagem pós-processados 33 para exibir a imagem, por exemplo, para um usuário ou espectador. O dispositivo de exibição 34 pode ser ou compreender qualquer tipo de tela para apresentar a imagem reconstruída, por exemplo, uma tela ou monitor integrado ou externo. As telas, por exemplo, podem compreender telas de cristal líquido (LCD), telas de diodos orgânicos emissores de luz (OLED), telas de plasma, projetores, telas de microLEDs, cristal líquido em silício (LCoS), processador de luz digital (DLP) ou qualquer tipo de outra tela.
[075] Embora a figura 1A represente o dispositivo de origem 12 e o dispositivo de destino 14 como dispositivos separados, modalidades de dispositivos também podem compreender ambos ou ambas as funcionalidades, o dispositivo de origem 12 ou funcionalidade correspondente e o dispositivo de destino 14 ou funcionalidade correspondente. Em tais modalidades o dispositivo de origem 12 ou funcionalidade correspondente e o dispositivo de destino 14 ou funcionalidade correspondente podem ser implementados usando o mesmo hardware e/ou software ou por meio de hardware e/ou software separado ou qualquer combinação dos mesmos.
[076] Tal como ficará aparente para uma pessoa versada na técnica com base na descrição, a existência e divisão (exata) de funcionalidades das diferentes unidades ou funcionalidades dentro do dispositivo de origem 12 e/ou do dispositivo de destino 14 tal como mostrado na figura 1A podem variar dependendo do dispositivo e aplicação real.
[077] O codificador 20 (por exemplo, um codificador de vídeo 20) ou o decodificador 30 (por exemplo, um decodificador de vídeo 30) ou ambos de o codificador 20 e o decodificador 30 podem ser implementados por meio de conjunto de circuitos de processamento tal como mostrado na figura 1B, tal como um ou mais microprocessadores, processadores de sinais digitais (DSPs), circuitos integrados de aplicação específica (ASICs), matrizes de portas programáveis em campo (FPGAs), lógica discreta, hardware, codificação de vídeo dedicada ou quaisquer combinações dos mesmos. O codificador 20 pode ser implementado por meio do conjunto de circuitos de processamento 46 para incorporar os vários módulos tais como discutidos em relação ao codificador 20 da figura 2 e/ou qualquer outro sistema ou subsistema codificador descrito neste documento. O decodificador 30 pode ser implementado por meio do conjunto de circuitos de processamento 46 para incorporar os vários módulos tais como discutidos em relação ao decodificador 30 da figura 3 e/ou qualquer outro sistema ou subsistema decodificador descrito neste documento. O conjunto de circuitos de processamento pode ser configurado para realizar as várias operações tais como discutidas mais tarde. Tal como mostrado na figura 5, se as técnicas forem implementadas parcialmente em software, um dispositivo pode armazenar instruções para o software em um meio de armazenamento não transitório legível por computador adequado e pode executar as instruções em hardware usando um ou mais processadores para realizar as técnicas desta divulgação. Um e outro de o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser integrados como parte de um codificador/decodificador (CODEC) combinado em um único dispositivo, por exemplo, tal como mostrado na figura 1B.
[078] O dispositivo de origem 12 e o dispositivo de destino 14 podem compreender qualquer um de uma faixa ampla de dispositivos, incluindo quaisquer tipos de dispositivos portáteis ou estacionários, por exemplo, notebooks ou laptops, telefones móveis, smartphones, tablets ou computadores, câmeras, computadores de mesa, conversores de sinais, televisões, dispositivos de exibição, reprodutores de mídia digital, consoles de videogame, dispositivos de streaming de vídeo (tais como servidores de serviços de conteúdo ou servidores de entrega de conteúdo), dispositivo receptor de difusão, dispositivo transmissor de difusão, ou algo semelhante e pode usar ou não qualquer tipo de sistema operacional. Em alguns casos, o dispositivo de origem 12 e o dispositivo de destino 14 podem ser equipados para comunicação sem fio. Assim, o dispositivo de origem 12 e o dispositivo de destino 14 podem ser dispositivos de comunicação sem fio.
[079] Em alguns casos, o sistema de codificação de vídeo 10 ilustrado na figura 1A é meramente um exemplo e as técnicas do presente pedido podem ser aplicadas para configurações de codificação de vídeo (por exemplo, codificação de vídeo ou decodificação de vídeo) que não incluem necessariamente qualquer comunicação de dados entre os dispositivos de codificação e de decodificação. Em outros exemplos, dados são recuperados de uma memória local e transferidos por meio de uma rede ou algo semelhante. Um dispositivo de codificação de vídeo pode codificar e armazenar dados em memória, e/ou um dispositivo de decodificação de vídeo pode recuperar e decodificar dados de memória. Em alguns exemplos, a codificação e decodificação são realizadas por dispositivos que não comunicam um com o outro, mas simplesmente codificam dados em memória e/ou recuperam e decodificam dados de memória.
[080] Por conveniência de descrição, modalidades da invenção são descritas neste documento, por exemplo, por meio de referência para Codificação de Vídeo de Alta Eficiência (HEVC) ou para o software de referência da Codificação de Vídeo Versátil (VVC), o padrão de codificação de vídeo de próxima geração desenvolvido pela Equipe de Colaboração Conjunta em Codificação de Vídeo
(JCT-VC) do Grupo de Especialistas em Codificação de Vídeo (VCEG) ITU-T e Grupo de Especialistas de Imagens em Movimento (MPEG) ISO/IEC. Uma pessoa de conhecimento comum na técnica entenderá que modalidades da invenção não estão limitadas a HEVC ou VVC. Codificador e Método de Codificação
[081] A figura 2 mostra um diagrama de blocos esquemático de um codificador de vídeo de exemplo 20 que é configurado para implementar as técnicas do presente pedido. No exemplo da figura 2, o codificador de vídeo 20 compreende uma entrada 201 (ou interface de entrada 201), uma unidade de cálculo de residual 204, uma unidade de processamento de transformada 206, uma unidade de quantização 208, uma unidade de quantização inversa 210, uma unidade de processamento de transformada inversa 212, uma unidade de reconstrução 214, uma unidade de filtro de loop 220, um armazenamento temporário (buffer) de imagens decodificadas (DPB) 230, uma unidade de seleção de modo 260, uma unidade de codificação de entropia 270 e uma saída 272 (ou interface de saída 272). A unidade de seleção de modo 260 pode incluir uma unidade de predição inter 244, uma unidade de predição intra 254 e uma unidade de particionamento 262. A unidade de predição inter 244 pode incluir uma unidade de estimativa de movimento e uma unidade de compensação de movimento (não mostradas). Um codificador de vídeo 20 tal como mostrado na figura 2 também pode ser referido como codificador de vídeo híbrido ou um codificador de vídeo de acordo com um codec de vídeo híbrido.
[082] A unidade de cálculo de residual 204, a unidade de processamento de transformada 206, a unidade de quantização 208 e a unidade de seleção de modo 260 podem ser referidas como formando um caminho de sinal para frente do codificador 20, enquanto que a unidade de quantização inversa 210, a unidade de processamento de transformada inversa 212, a unidade de reconstrução 214, o armazenamento temporário 216, o filtro de loop 220, o armazenamento temporário de imagens decodificadas (DPB) 230, a unidade de predição inter 244 e a unidade de predição intra 254 podem ser referidos como formando um caminho de sinal para trás do codificador de vídeo 20, em que o caminho de sinal para trás do codificador de vídeo 20 corresponde ao caminho de sinal do decodificador (ver o decodificador de vídeo 30 na figura 3). A unidade de quantização inversa 210, a unidade de processamento de transformada inversa 212, a unidade de reconstrução 214, o filtro de loop 220, o armazenamento temporário de imagens decodificadas (DPB) 230, a unidade de predição inter 244 e a unidade de predição intra 254 também são referidos como formando o “decodificador incorporado” do codificador de vídeo 20. Imagens & Particionamento de Imagem (Imagens & Blocos)
[083] O codificador 20 pode ser configurado para receber, por exemplo, via entrada 201, uma imagem 17 (ou dados de imagem 17), por exemplo, imagem de uma sequência de imagens formando um vídeo ou sequência de vídeo. A imagem ou dados de imagem recebidos também pode ser uma imagem pré-processada 19 (ou dados de imagem pré- processados 19). Para o propósito de simplicidade a descrição a seguir se refere à imagem 17. A imagem 17 também pode ser referida como imagem atual ou imagem a ser codificada (em particular em codificação de vídeo para distinguir a imagem atual de outras imagens, por exemplo, imagens codificadas e/ou decodificadas anteriormente da mesma sequência de vídeo, isto é, a sequência de vídeo que também compreende a imagem atual).
[084] Uma imagem (digital) é ou pode ser considerada como um arranjo ou matriz bidimensional de amostras com valores de intensidade. Uma amostra na matriz também pode ser referida como pixel (forma abreviada de elemento de imagem) ou um pel. O número de amostras em direções (ou eixos) horizontal e vertical da matriz ou imagem define o tamanho e/ou resolução da imagem. Para representação de cor, tipicamente três componentes de cor são empregados, isto é, a imagem pode ser representada ou incluir três matrizes de amostras. No formato ou espaço de cores RGB uma imagem compreende uma matriz de amostras de vermelho, verde e azul correspondente. Entretanto, em codificação de vídeo cada pixel tipicamente é representado em um formato ou espaço de cores de luminância e crominância, por exemplo, YCbCr, o qual compreende um componente de luminância indicado por Y (algumas vezes também L é usado em vez disso) e dois componentes de crominância indicados por Cb e Cr. O componente de luminância (ou resumidamente luma) Y representa o brilho ou intensidade de nível de cinza (por exemplo, tal como em uma imagem de escala de cinza), enquanto que os dois componentes de crominância (ou resumidamente croma) Cb e Cr representam os componentes de informação de cromaticidade ou cor. Portanto, uma imagem no formato YCbCr compreende uma matriz de amostras de luminância de valores de amostras de luminância (Y), e duas matrizes de amostras de crominância de valores de crominância (Cb e Cr). Imagens no formato RGB podem ser convertidas ou transformadas para o formato YCbCr e vice- versa, o processo sendo também conhecido como transformação ou conversão de cor. Se uma imagem for monocromática, a imagem pode compreender somente uma matriz de amostras de luminância. Portanto, uma imagem, por exemplo, pode ser uma matriz de amostras de luma no formato monocromático ou uma matriz de amostras de luma e duas matrizes de amostras de croma correspondentes no formato de cor 4:2:0, 4:2:2 e 4:4:4.
[085] Modalidades do codificador de vídeo 20 podem compreender uma unidade de particionamento de imagem (não representada na figura 2) configurada para particionar a imagem 17 em uma pluralidade dos blocos de imagem (tipicamente sem sobreposição) 203. Estes blocos também podem ser referidos como blocos de raiz, macroblocos (H.264/AVC) ou blocos de árvore de codificação (CTB) ou unidades de árvore de codificação (CTU) (H.265/HEVC e VVC). A unidade de particionamento de imagem pode ser configurada para usar o mesmo tamanho de bloco para todas as imagens de uma sequência de vídeo e a malha correspondente definindo o tamanho de bloco, ou para mudar o tamanho de bloco entre imagens ou subconjuntos ou grupos de imagens, e particionar cada imagem nos blocos correspondentes.
[086] Em modalidades adicionais, o codificador de vídeo pode ser configurado para receber diretamente um bloco 203 da imagem 17, por exemplo, um, vários ou todos os blocos formando a imagem 17. O bloco de imagem 203 também pode ser referido como bloco de imagem atual ou bloco de imagem a ser codificado.
[087] Tal como a imagem 17, o bloco de imagem 203 de novo é ou pode ser considerado como um arranjo ou matriz bidimensional de amostras com valores de intensidade (valores de amostras), contudo de dimensão menor que a imagem 17. Em outras palavras, o bloco 203 pode compreender, por exemplo, uma matriz de amostras (por exemplo, uma matriz de luma no caso de uma imagem monocromática 17, ou uma matriz ou de croma no caso de uma imagem colorida) ou três matrizes de amostras (por exemplo, uma de luma e duas matrizes de croma no caso de uma imagem colorida 17) ou qualquer outro número e/ou tipo de matrizes dependendo do formato de cor aplicado. Os números de amostras em direções (ou eixos) horizontal e vertical do bloco 203 definem o tamanho do bloco 203. Portanto, um bloco pode ser, por exemplo, uma matriz MxN (M colunas por N linhas) de amostras, ou um uma matriz de coeficientes de transformada.
[088] Modalidades do codificador de vídeo 20 tal como mostrado na figura 2 podem ser configuradas para codificar a imagem 17 bloco por bloco, por exemplo, a codificação e predição são realizadas por bloco 203.
[089] Modalidades do codificador de vídeo 20 tal como mostrado na figura 2 podem ser configuradas adicionalmente para particionar e/ou codificar a imagem ao usar fatias (também referidas como fatias de vídeo), em que uma imagem pode ser particionada em, ou codificada usando, uma ou mais fatias (tipicamente sem sobreposição), e cada fatia pode compreender um ou mais blocos (por exemplo, CTUs).
[090] Modalidades do codificador de vídeo 20 tal como mostrado na figura 2 podem ser configuradas adicionalmente para particionar e/ou codificar a imagem ao usar grupos de peças (também referidos como grupos de peças de vídeo) e/ou peças (também referidas como peças de vídeo), em que uma imagem pode ser particionada em, ou codificada usando, um ou mais grupos de peças (tipicamente sem sobreposição), e cada grupo de peças pode compreender, por exemplo, um ou mais blocos (por exemplo, CTUs) ou uma ou mais peças, em que cada peça, por exemplo, pode ser de forma retangular e pode compreender um ou mais blocos (por exemplo, CTUs), por exemplo, blocos completos ou fracionários. Cálculo de Residual
[091] A unidade de cálculo de residual 204 pode ser configurada para calcular um bloco residual 205 (também referido como residual 205) com base no bloco de imagem 203 e em um bloco de predição 265 (detalhes adicionais a respeito do bloco de predição 265 são fornecidos mais tarde), por exemplo, ao subtrair valores de amostras do bloco de predição 265 de valores de amostras do bloco de imagem 203, amostra por amostra (pixel por pixel) para obter o bloco residual 205 no domínio da amostra. Transformada
[092] A unidade de processamento de transformada 206 pode ser configurada para aplicar uma transformada, por exemplo, uma transformada discreta de cosseno (DCT) ou transformada discreta de seno (DST), nos valores de amostras do bloco residual 205 para obter os coeficientes de transformada 207 em um domínio da transformada. Os coeficientes de transformada 207 também podem ser referidos como coeficientes residuais de transformada e representam o bloco residual 205 no domínio da transformada.
[093] A unidade de processamento de transformada 206 pode ser configurada para aplicar aproximações inteiras de DCT/DST, tais como as transformadas especificadas para H.265/HEVC. Comparadas a uma transformada DCT ortogonal, tais aproximações inteiras tipicamente são escaladas por um certo fator. A fim de preservar a norma do bloco residual que é processado por meio de transformadas diretas e inversas, fatores de escala adicionais são aplicados como parte do processo de transformada. Os fatores de escala tipicamente são escolhidos com base em certas restrições tais como fatores de escala sendo uma potência de dois para operações de deslocamento, profundidade de bits dos coeficientes de transformada, troca compensatória entre precisão e custos de implementação, etc. Fatores de escala específicos, por exemplo, são especificados para a transformada inversa, por exemplo, pela unidade de processamento de transformada inversa 212 (e para a transformada inversa correspondente, por exemplo, pela unidade de processamento de transformada inversa 312 no decodificador de vídeo 30) e fatores de escala correspondentes para a transformada direta, por exemplo, pela unidade de processamento de transformada 206, em um codificador 20 podem ser especificados de modo correspondente.
[094] Modalidades do codificador de vídeo 20 (correspondentemente da unidade de processamento de transformada 206) podem ser configuradas para enviar parâmetros de transformada, por exemplo, um tipo de transformada ou transformadas, por exemplo, diretamente ou codificados ou comprimidos por meio da unidade de codificação de entropia 270, de maneira que, por exemplo, o decodificador de vídeo 30 pode receber e usar os parâmetros de transformada para decodificação. Quantização
[095] A unidade de quantização 208 pode ser configurada para quantizar os coeficientes de transformada 207 para obter os coeficientes quantizados 209, por exemplo, ao aplicar quantização escalar ou quantização de vetor. Os coeficientes quantizados 209 também podem ser referidos como coeficientes de transformada quantizados 209 ou coeficientes residuais quantizados 209.
[096] O processo de quantização pode reduzir a profundidade de bits associada com todos ou com alguns dos coeficientes de transformada 207. Por exemplo, um coeficiente de transformada de n bits pode ser arredondado para baixo para um coeficiente de transformada de m bits durante quantização, onde n é maior que m. O grau de quantização pode ser modificado ao ajustar um parâmetro de quantização (QP). Por exemplo, para quantização escalar, escalamento diferente pode ser aplicado para alcançar quantização mais refinada ou mais grosseira. Tamanhos de etapas de quantização menores correspondem à quantização mais refinada, enquanto que tamanhos de etapas de quantização maiores correspondem à quantização mais grosseira. O tamanho de etapa de quantização aplicável pode ser indicado por um parâmetro de quantização (QP). O parâmetro de quantização, por exemplo, pode ser um índice para um conjunto predefinido de tamanhos de etapas de quantização aplicáveis. Por exemplo, parâmetros de quantização pequenos podem corresponder à quantização fina (tamanhos de etapas de quantização pequenos) e parâmetros de quantização grandes podem corresponder à quantização grosseira (tamanhos de etapas de quantização grandes) ou vice-versa. A quantização pode incluir divisão por um tamanho de etapa de quantização e uma desquantização correspondente e/ou a quantização inversa, por exemplo, pela unidade de quantização inversa 210, pode incluir multiplicação pelo tamanho de etapa de quantização. Modalidades de acordo com alguns padrões, por exemplo, HEVC, podem ser configuradas para usar um parâmetro de quantização para determinar o tamanho de etapa de quantização. De uma maneira geral, o tamanho de etapa de quantização pode ser calculado com base em um parâmetro de quantização usando uma aproximação de ponto fixo de uma equação incluindo divisão. Fatores de escala adicionais podem ser introduzidos para quantização e desquantização para restaurar a norma do bloco residual, a qual pode ter sido modificada por causa do escalamento usado na aproximação de ponto fixo da equação para tamanho de etapa de quantização e parâmetro de quantização. Em uma implementação de exemplo, o escalamento da transformada inversa e desquantização podem ser combinados. Alternativamente, tabelas de quantizações personalizadas podem ser usadas e sinalizadas de um codificador para um decodificador, por exemplo, em um fluxo de bits. A quantização é uma operação com perda, em que a perda aumenta com tamanhos de etapas de quantização crescentes.
[097] Modalidades do codificador de vídeo 20 (respectivamente unidade de quantização 208) podem ser configuradas para enviar parâmetros de quantização (QP), por exemplo, diretamente ou codificados por meio da unidade de codificação de entropia 270, de maneira que, por exemplo, o decodificador de vídeo 30 pode receber e aplicar os parâmetros de quantização para decodificação. Quantização Inversa
[098] A unidade de quantização inversa 210 é configurada para aplicar a quantização inversa da unidade de quantização 208 nos coeficientes quantizados para obter os coeficientes desquantizados 211, por exemplo, ao aplicar o inverso do esquema de quantização aplicado pela unidade de quantização 208 com base no, ou usando o mesmo, tamanho de etapa de quantização usado pela unidade de quantização
208. Os coeficientes desquantizados 211 também podem ser referidos como coeficientes residuais desquantizados 211 e correspondem - embora tipicamente não idênticos aos coeficientes de transformada por causa da perda por quantização - aos coeficientes de transformada 207. Transformada Inversa
[099] A unidade de processamento de transformada inversa 212 é configurada para aplicar a transformada inversa da transformada aplicada pela unidade de processamento de transformada 206, por exemplo, uma transformada discreta de cosseno (DCT) inversa ou transformada discreta de seno (DST) inversa ou outras transformadas inversas, para obter um bloco residual reconstruído 213 (ou os coeficientes desquantizados correspondentes 213) no domínio da amostra. O bloco residual reconstruído 213 também pode ser referido como o bloco de transformada 213.
Reconstrução
[0100] A unidade de reconstrução 214 (por exemplo, o adicionador ou somador 214) é configurada para adicionar o bloco de transformada 213 (isto é, o bloco residual reconstruído 213) ao bloco de predição 265 para obter um bloco reconstruído 215 no domínio da amostra, por exemplo, ao somar – amostra por amostra - os valores de amostras do bloco residual reconstruído 213 e os valores de amostras do bloco de predição 265. Filtragem
[0101] A unidade de filtro de loop 220 (ou resumidamente “filtro de loop” 220) é configurada para filtrar o bloco reconstruído 215 para obter um bloco filtrado 221, ou de uma maneira geral para filtrar amostras reconstruídas para obter amostras filtradas. A unidade de filtro de loop, por exemplo, é configurada para suavizar transições de pixels, ou melhorar de outro modo a qualidade de vídeo. A unidade de filtro de loop 220 pode compreender um ou mais filtros de loop tais como um filtro de desblocagem, um filtro de deslocamento adaptativo de amostra (SAO) ou um ou mais outros filtros, por exemplo, um filtro bilateral, um filtro de loop adaptativo (ALF), um filtro de nitidez, um filtro de suavização ou um filtro colaborativo ou qualquer combinação dos mesmos. Embora a unidade de filtro de loop 220 esteja mostrada na figura 2 como sendo um filtro em loop, em outras configurações a unidade de filtro de loop 220 pode ser implementada como um filtro pós-loop. O bloco filtrado 221 também pode ser referido como o bloco reconstruído filtrado 221.
[0102] Modalidades do codificador de vídeo 20
(correspondentemente da unidade de filtro de loop 220) podem ser configuradas para enviar parâmetros de filtro de loop (tais como informação de deslocamento adaptativo de amostra), por exemplo, diretamente ou codificados por meio da unidade de codificação de entropia 270, de maneira que, por exemplo, um decodificador 30 pode receber e aplicar os mesmos parâmetros de filtro de loop ou respectivos filtros de loop para decodificação. Armazenamento Temporário de Imagens Decodificadas
[0103] O armazenamento temporário de imagens decodificadas (DPB) 230 pode ser uma memória que armazena imagens de referência, ou de uma maneira geral dados de imagem de referência, para codificar dados de vídeo pelo codificador de vídeo 20. O DPB 230 pode ser formado por qualquer um de uma variedade de dispositivos de memória, tais como memória de acesso aleatório dinâmica (DRAM), incluindo DRAM síncrona (SDRAM), RAM magnetorresistiva (MRAM), RAM resistiva (RRAM) ou outros tipos de dispositivos de memória. O armazenamento temporário de imagens decodificadas (DPB) 230 pode ser configurado para armazenar um ou mais blocos filtrados 221. O armazenamento temporário de imagens decodificadas 230 pode ser configurado adicionalmente para armazenar outros blocos filtrados anteriormente, por exemplo, os blocos reconstruídos e filtrados anteriormente 221, da mesma imagem atual ou de imagens diferentes, por exemplo, imagens reconstruídas anteriormente, e pode fornecer imagens completas reconstruídas, isto é, decodificadas, anteriormente (e blocos e amostras de referência correspondentes) e/ou uma imagem atual reconstruída parcialmente (e blocos e amostras de referência correspondentes), por exemplo, para predição inter. O armazenamento temporário de imagens decodificadas (DPB) 230 também pode ser configurado para armazenar um ou mais blocos reconstruídos 215 não filtrados, ou de uma maneira geral amostras reconstruídas não filtradas, por exemplo, se o bloco reconstruído 215 não for filtrado pela unidade de filtro de loop 220, ou qualquer outra versão processada adicionalmente dos blocos ou amostras reconstruídos. Seleção de Modo (Particionamento & Predição)
[0104] A unidade de seleção de modo 260 compreende uma unidade de particionamento 262, uma a unidade de predição inter 244 e uma unidade de predição intra 254, e é configurada para receber ou obter dados de imagem originais, por exemplo, um bloco original 203 (o bloco atual 203 da imagem atual 17), e dados de imagem reconstruídos, por exemplo, amostras ou blocos reconstruídos filtrados e/ou não filtrados da mesma imagem (atual) e/ou de uma ou uma pluralidade de imagens decodificadas anteriormente, por exemplo, do armazenamento temporário de imagens decodificadas 230 ou de outros armazenamentos temporários (por exemplo, armazenamento temporário de linha, não mostrado). Os dados de imagem reconstruídos são usados como dados de imagem de referência para predição, por exemplo, predição inter ou predição intra, para obter um bloco de predição 265 ou preditor 265. Tal como será discutido detalhadamente a seguir, as modalidades apresentadas neste documento fornecem um melhoramento para a unidade de predição inter 244 ao fornecer predição de vetor de movimento mais precisa usada pela unidade de predição inter ao realizar a predição inter, por exemplo, a predição inter baseada em afim ou predição inter baseada em sub-bloco.
[0105] A unidade de seleção de modo 260 pode ser configurada para determinar ou selecionar um particionamento para um modo de predição de bloco atual (incluindo sem particionamento) e um modo de predição (por exemplo, um modo de predição intra ou inter) e gerar um bloco de predição correspondente 265, o qual é usado para o cálculo do bloco residual 205 e para a reconstrução do bloco reconstruído 215.
[0106] Modalidades da unidade de seleção de modo 260 podem ser configuradas para selecionar o particionamento e o modo de predição (por exemplo, daqueles suportados pela unidade de seleção de modo 260 ou disponíveis para a mesma) que fornecem a melhor correspondência ou em outras palavras o residual mínimo (residual mínimo significa melhor compressão para transmissão ou armazenamento), ou uma sobrecarga de sinalização mínima (sobrecarga de sinalização mínima significa melhor compressão para transmissão ou armazenamento), ou que considera ou equilibra ambos. A unidade de seleção de modo 260 pode ser configurada para determinar o particionamento e modo de predição com base em otimização de distorção de taxa (RDO), isto é, selecionar o modo de predição que fornece uma distorção de taxa mínima. Termos tais como “melhor”, “mínimo”, “ideal”, etc. neste contexto não se referem necessariamente a um “melhor”, “mínimo”, “ideal”, etc. total, mas também podem se referir ao cumprimento de um critério de terminação ou de seleção tal como um valor excedendo ou estando abaixo de um limite ou outras restrições levando potencialmente a uma “seleção subideal”, mas reduzindo complexidade e tempo de processamento.
[0107] Em outras palavras, a unidade de particionamento 262 pode ser configurada para particionar o bloco 203 em partições de bloco ou sub-blocos menores (que formam de novo blocos), por exemplo, iterativamente usando particionamento de árvore quaternária (QT), particionamento binário (BT) ou particionamento de árvore tripla (TT) ou qualquer combinação dos mesmos, e para realizar, por exemplo, a predição para cada uma das partições de bloco ou sub-blocos, em que a seleção de modo compreende a seleção da estrutura de árvore do bloco particionado 203 e os modos de predição são aplicados para cada uma das partições de bloco ou sub-blocos.
[0108] No exposto a seguir o particionamento (por exemplo, pela unidade de particionamento 262) e processamento de predição (pela unidade de predição inter 244 e unidade de predição intra 254) realizados por um codificador de vídeo de exemplo 20 serão explicados com mais detalhes. Particionamento
[0109] A unidade de particionamento 262 pode particionar (ou dividir) um bloco atual 203 em partições menores, por exemplo, blocos menores de tamanho quadrangular ou retangular. Estes blocos menores (que também podem ser referidos como sub-blocos) podem ser particionados adicionalmente em partições ainda menores. Isto é também referido como particionamento de árvore ou particionamento de árvore hierárquico, em que um bloco de raiz, por exemplo, no nível de árvore de raiz 0 (nível de hierarquia 0, profundidade 0), pode ser particionado de modo repetitivo, por exemplo, particionado em dois ou mais blocos de um próximo nível de árvore inferior, por exemplo, nós no nível de árvore 1 (nível de hierarquia 1, profundidade 1), em que estes blocos podem ser particionados de novo em dois ou mais blocos de um próximo nível inferior, por exemplo, nível de árvore 2 (nível de hierarquia 2, profundidade 2), etc. até que o particionamento seja terminado, por exemplo, porque um critério de terminação é satisfeito, por exemplo, uma profundidade de árvore máxima ou tamanho de bloco mínimo é alcançado. Blocos que não são particionados adicionalmente também são referidos como blocos folhas ou nós folhas da árvore. Uma árvore usando particionamento em duas partições é referida como árvore binária (BT), uma árvore usando particionamento em três partições é referida como árvore ternária (TT), e uma árvore usando particionamento em quatro partições é referida como árvore quaternária (QT).
[0110] Tal como mencionado anteriormente, o termo “bloco” tal como usado neste documento pode ser uma parte, em particular uma parte quadrada ou retangular, de uma imagem. Com referência, por exemplo, para HEVC e VVC, o bloco pode ser ou corresponder a uma unidade de árvore de codificação (CTU), uma unidade de codificação (CU), unidade de predição (PU) e unidade de transformada (TU) e/ou aos blocos correspondentes, por exemplo, um bloco de árvore de codificação (CTB), um bloco de codificação (CB), um bloco de transformada (TB) ou bloco de predição (PB).
[0111] Por exemplo, uma unidade de árvore de codificação (CTU) pode ser ou compreender um CTB de amostras de luma, dois CTBs correspondentes de amostras de croma de uma imagem que tem três matrizes de amostras, ou um CTB de amostras de uma imagem monocromática ou de uma imagem que é codificada usando três planos de cores separados e estruturas de sintaxe usadas para codificar as amostras. Correspondentemente, um bloco de árvore de codificação (CTB) pode ser um bloco de amostras NxN para algum valor de N de tal maneira que a divisão de um componente em CTBs é um particionamento. Uma unidade de codificação (CU) pode ser ou compreender um bloco de codificação de amostras de luma, dois blocos de codificação correspondentes de amostras de croma de uma imagem que tem três matrizes de amostras, ou um bloco de codificação de amostras de uma imagem monocromática ou de uma imagem que é codificada usando três planos de cores separados e estruturas de sintaxe usadas para codificar as amostras. Correspondentemente, um bloco de codificação (CB) pode ser um bloco de amostras MxN para alguns valores de M e N de tal maneira que a divisão de um CTB em blocos de codificação é um particionamento.
[0112] Em modalidades, por exemplo, de acordo com HEVC, uma unidade de árvore de codificação (CTU) pode ser dividida em CUs ao usar uma estrutura de árvore quaternária denotada como árvore de codificação. A decisão se é para codificar uma área de imagem usando predição inter (temporal) de imagem ou predição intra (espacial) de imagem é tomada no nível de CU. Cada CU pode ser dividida adicionalmente em uma, duas ou quatro PUs de acordo com o tipo de divisão de PU. Dentro de uma PU, o mesmo processo de predição é aplicado e a informação relevante é transmitida para o decodificador em uma base de PU. Após obter o bloco residual ao aplicar o processo de predição com base no tipo de divisão de PU, uma CU pode ser particionada em unidades de transformada (TUs) de acordo com outra estrutura de árvore quaternária similar à árvore de codificação para a CU.
[0113] Em modalidades, por exemplo, de acordo com o mais recente padrão de codificação de vídeo atualmente em desenvolvimento, o qual é referido como Codificação de Vídeo Versátil (VVC), um particionamento combinado de árvore quaternária e árvore binária (QTBT), por exemplo, é usado para particionar um bloco de codificação. Na estrutura de bloco de QTBT, uma CU pode ter uma forma quadrangular ou retangular. Por exemplo, uma unidade de árvore de codificação (CTU) é primeiro particionada por uma estrutura de árvore quaternária. Os nós folhas de árvore quaternária são particionados adicionalmente por uma estrutura de árvore binária ou de árvore ternária (ou tripla). Os nós folhas de árvore de particionamento são chamados de unidades de codificação (CUs), e essa segmentação é usada para predição e processamento de transformada sem qualquer particionamento adicional. Isto significa que a CU, PU e TU têm o mesmo tamanho de bloco na estrutura de bloco de codificação de QTBT. Em paralelo, particionamento múltipla, por exemplo, particionamento de árvore tripla, pode ser usada juntamente com a estrutura de bloco de QTBT.
[0114] Em um exemplo, a unidade de seleção de modo
260 do codificador de vídeo 20 pode ser configurada para realizar qualquer combinação das técnicas de particionamento descritas neste documento.
[0115] Tal como descrito acima, o codificador de vídeo 20 é configurado para determinar ou selecionar o melhor ou um modo de predição ideal de um conjunto (por exemplo, predeterminado) de modos de predição. O conjunto de modos de predição pode compreender, por exemplo, modos de predição intra e/ou modos de predição inter. Predição Intra
[0116] O conjunto de modos de predição intra pode compreender 35 modos de predição intra diferentes, por exemplo, modos não direcionais tais como modo CC (ou médio) e modo planar, ou modos direcionais, por exemplo, tal como definido em HEVC, ou pode compreender 67 modos de predição intra diferentes, por exemplo, modos não direcionais tais como modo CC (ou médio) e modo planar, ou modos direcionais, por exemplo, tal como definido para VVC.
[0117] A unidade de predição intra 254 é configurada para usar amostras reconstruídas de blocos vizinhos da mesma imagem atual para gerar um bloco de predição intra 265 de acordo com um modo de predição intra do conjunto de modos de predição intra.
[0118] A unidade de predição intra 254 (ou de uma maneira geral a unidade de seleção de modo 260) é configurada adicionalmente para enviar parâmetros de predição intra (ou de uma maneira geral informação indicativa do modo de predição intra selecionado para o bloco) para a unidade de codificação de entropia 270 na forma dos elementos de sintaxe 266 para inclusão nos dados de imagem codificados 21, de maneira que, por exemplo, o decodificador de vídeo 30 pode receber e usar os parâmetros de predição para decodificação. Predição Inter
[0119] O conjunto de (ou de possíveis) modos de predição inter depende das imagens de referência disponíveis (isto é, imagens anteriores decodificadas pelo menos parcialmente, por exemplo, armazenadas no DPB 230) e de outros parâmetros de predição inter, por exemplo, se a imagem de referência inteira ou se somente uma parte, por exemplo, uma área de janela de pesquisa em volta da área do bloco atual, da imagem de referência é usada para procurar um bloco de referência de melhor correspondência, e/ou, por exemplo, se interpolação de pixels é aplicada, por exemplo, interpolação de metade/parte de pixel e/ou de quarto de pixel, ou não.
[0120] Adicional aos modos de predição indicados acima, modo de salto e/ou modo direto pode ser aplicado.
[0121] A unidade de predição inter 244 pode incluir uma unidade de estimativa de movimento (ME) e uma unidade de compensação de movimento (MC) (ambas não mostradas na figura 2). A unidade de estimativa de movimento pode ser configurada para receber ou obter o bloco de imagem 203 (o bloco de imagem atual 203 da imagem atual 17) e uma imagem decodificada 231, ou pelo menos um ou uma pluralidade de blocos reconstruídos anteriormente, por exemplo, blocos reconstruídos de uma ou uma pluralidade de outras/diferentes imagens decodificadas anteriormente 231, para estimativa de movimento. Por exemplo, uma sequência de vídeo pode compreender a imagem atual e as imagens decodificadas anteriormente 231, ou em outras palavras a imagem atual e as imagens decodificadas anteriormente 231 podem ser parte de ou formar uma sequência de imagens formando uma sequência de vídeo.
[0122] O codificador 20, por exemplo, pode ser configurado para selecionar um bloco de referência de uma pluralidade de blocos de referência das mesmas ou de imagens diferentes da pluralidade de outras imagens e fornecer uma imagem de referência (ou índice de imagem de referência) e/ou um deslocamento (deslocamento espacial) entre a posição (coordenadas x, y) do bloco de referência e a posição do bloco atual como parâmetros de predição inter para a unidade de estimativa de movimento. Este deslocamento é também chamado de vetor de movimento (MV).
[0123] A unidade de compensação de movimento é configurada para obter, por exemplo, receber, um parâmetro de predição inter e para realizar predição inter com base em ou usando o parâmetro de predição inter para obter um bloco de predição inter 265. Compensação de movimento, realizada pela unidade de compensação de movimento, pode envolver recuperar ou gerar o bloco de predição com base no vetor de movimento/bloco determinado por meio de estimativa de movimento, possivelmente realizando interpolações para precisão de subpixel. Filtragem de interpolação pode gerar amostras de pixels adicionais de amostras de pixels conhecidas, potencialmente aumentando assim o número de blocos de predição candidatos que podem ser usados para codificar um bloco de imagem. Ao receber o vetor de movimento para a PU do bloco de imagem atual, a unidade de compensação de movimento pode localizar o bloco de predição para o qual o vetor de movimento aponta em uma das listas de imagens de referência. Na presente divulgação, melhoramentos para a predição inter (especialmente, predição inter baseada em afim ou predição inter baseada em sub-bloco) são feitos ao suportar múltiplos formatos de croma e ao refinar processo de derivação de vetor de movimento de sub-bloco afim. Em particular, um método e aparelho aperfeiçoados para derivação de vetor de movimento para predição inter baseada em afim de sub-blocos de croma com base em um formato de croma serão introduzidos como a seguir.
[0124] A unidade de compensação de movimento também pode gerar elementos de sintaxe associados com os blocos e fatias de vídeo para uso pelo decodificador de vídeo 30 ao decodificar os blocos de imagem da fatia de vídeo. Adicionalmente ou como uma alternativa para fatias e respectivos elementos de sintaxe, grupos de peças e/ou peças e respectivos elementos de sintaxe podem ser gerados ou usados. Codificação de Entropia
[0125] A unidade de codificação de entropia 270 é configurada para aplicar, por exemplo, um algoritmo ou esquema de codificação de entropia (por exemplo, um esquema de codificação de comprimento variável (VLC), um esquema de VLC adaptativa de contexto (CAVLC), um esquema de codificação aritmética, uma binarização, uma codificação aritmética binária adaptativa de contexto (CABAC), codificação aritmética binária adaptativa de contexto baseada em sintaxe (SBAC), codificação de entropia de particionamento de intervalo de probabilidade (PIPE) outra metodologia ou técnica de codificação de entropia) ou contornar (sem compressão) os coeficientes quantizados 209, parâmetros de predição inter, parâmetros de predição intra, parâmetros de filtro de loop e/ou outros elementos de sintaxe para obter os dados de imagem codificados 21 que possam ser enviados por meio da saída 272, por exemplo, na forma de um fluxo de bits codificados 21, de maneira que, por exemplo, o decodificador de vídeo 30 possa receber e usar os parâmetros para decodificação. O fluxo de bits codificados 21 pode ser transmitido para o decodificador de vídeo 30, ou armazenado em uma memória para transmissão ou recuperação posterior pelo decodificador de vídeo 30.
[0126] Outras variações estruturais do codificador de vídeo 20 podem ser usadas para codificar o fluxo de vídeo. Por exemplo, um codificador não baseado em transformada 20 pode quantizar o sinal residual diretamente sem a unidade de processamento de transformada 206 para certos blocos ou quadros. Em outra implementação, um codificador 20 pode ter a unidade de quantização 208 e a unidade de quantização inversa 210 combinadas em uma única unidade. Decodificador e Método de Decodificação
[0127] A figura 3 mostra um exemplo de um decodificador de vídeo 30 que é configurado para implementar as técnicas do presente pedido. O decodificador de vídeo 30 é configurado para receber os dados de imagem codificados 21 (por exemplo, o fluxo de bits codificados 21), por exemplo, codificados pelo codificador 20, para obter uma imagem decodificada 331. Os dados de imagem ou fluxo de bits codificados compreende informação para decodificar os dados de imagem codificados, por exemplo, dados que representam blocos de imagem de uma fatia de vídeo codificada (e/ou grupos de peças ou peças) e elementos de sintaxe associados.
[0128] No exemplo da figura 3, o decodificador 30 compreende uma unidade de decodificação de entropia 304, uma unidade de quantização inversa 310, uma unidade de processamento de transformada inversa 312, uma unidade de reconstrução 314 (por exemplo, um somador 314), um filtro de loop 320, um armazenamento temporário de imagens decodificadas (DPB) 330, uma unidade de aplicação de modo 360, uma unidade de predição inter 344 e uma unidade de predição intra 354. A unidade de predição inter 344 pode ser ou incluir uma unidade de compensação de movimento. O decodificador de vídeo 30, em alguns exemplos, pode realizar uma passagem de decodificação de uma maneira geral recíproca à passagem de codificação descrita em relação ao codificador de vídeo 100 da figura 2.
[0129] Tal como explicado com relação ao codificador 20, a unidade de quantização inversa 210, a unidade de processamento de transformada inversa 212, a unidade de reconstrução 214, o filtro de loop 220, o armazenamento temporário de imagens decodificadas (DPB) 230, a unidade de predição inter 344 e a unidade de predição intra 354 também são referidos como formando o “decodificador incorporado” do codificador de vídeo 20. Portanto, a unidade de quantização inversa 310 pode ser idêntica em função à unidade de quantização inversa 210, a unidade de processamento de transformada inversa 312 pode ser idêntica em função à unidade de processamento de transformada inversa 212, a unidade de reconstrução 314 pode ser idêntica em função à unidade de reconstrução 214, o filtro de loop 320 pode ser idêntico em função ao filtro de loop 220, e o armazenamento temporário de imagens decodificadas 330 pode ser idêntico em função ao armazenamento temporário de imagens decodificadas 230. Portanto, as explicações fornecidas para as respectivas unidades e funções do codificador de vídeo 20 se aplicam correspondentemente para as respectivas unidades e funções do decodificador de vídeo 30. Decodificação de Entropia
[0130] A unidade de decodificação de entropia 304 é configurada para analisar o fluxo de bits 21 (ou de uma maneira geral os dados de imagem codificados 21) e realizar, por exemplo, decodificação de entropia para os dados de imagem codificados 21 para obter, por exemplo, os coeficientes quantizados 309 e/ou parâmetros de codificação decodificados (não mostrados na figura 3), por exemplo, alguns ou todos de parâmetros de predição inter (por exemplo, índice de imagem de referência e vetor de movimento), parâmetro de predição intra (por exemplo, modo ou índice de predição intra), parâmetros de transformada, parâmetros de quantização, parâmetros de filtro de loop e/ou outros elementos de sintaxe. A unidade de decodificação de entropia 304 pode ser configurada para aplicar os algoritmos ou esquemas de decodificação correspondendo aos esquemas de codificação tais como descritos com relação à unidade de codificação de entropia 270 do codificador 20. A unidade de decodificação de entropia 304 pode ser configurada adicionalmente para fornecer parâmetros de predição inter, parâmetro de predição intra e/ou outros elementos de sintaxe para a unidade de aplicação de modo 360 e outros parâmetros para outras unidades do decodificador 30. O decodificador de vídeo 30 pode receber os elementos de sintaxe no nível de fatia de vídeo e/ou no nível de bloco de vídeo. Adicionalmente ou como uma alternativa para fatias e respectivos elementos de sintaxe, grupos de peças e/ou peças e respectivos elementos de sintaxe podem ser recebidos e/ou usados. Quantização Inversa
[0131] A unidade de quantização inversa 310 pode ser configurada para receber parâmetros de quantização (QP) (ou de uma maneira geral informação relacionada com a quantização inversa) e coeficientes quantizados dos dados de imagem codificados 21 (por exemplo, ao analisar e/ou decodificar, por exemplo, pela unidade de decodificação de entropia 304) e para aplicar com base nos parâmetros de quantização uma quantização inversa nos coeficientes quantizados decodificados 309 para obter os coeficientes desquantizados 311, os quais também podem ser referidos como coeficientes de transformada 311. O processo de quantização inversa pode incluir uso de um parâmetro de quantização determinado pelo codificador de vídeo 20 para cada bloco de vídeo na fatia de vídeo (ou peça ou grupo de peças) para determinar um grau de quantização e, igualmente, um grau de quantização inversa que deve ser aplicada. Transformada Inversa
[0132] A unidade de processamento de transformada inversa 312 pode ser configurada para receber os coeficientes desquantizados 311, também referidos como coeficientes de transformada 311, e para aplicar uma transformada aos coeficientes desquantizados 311 a fim de obter os blocos residuais reconstruídos 313 no domínio da amostra. Os blocos residuais reconstruídos 313 também podem ser referidos como blocos de transformada 313. A transformada pode ser uma transformada inversa, por exemplo, uma DCT inversa, uma DST inversa, uma transformada inteira inversa, ou um processo de transformada inversa similar conceitualmente. A unidade de processamento de transformada inversa 312 pode ser configurada adicionalmente para receber parâmetros de transformada ou informação correspondente dos dados de imagem codificados 21 (por exemplo, ao analisar e/ou decodificar, por exemplo, pela unidade de decodificação de entropia 304) para determinar a transformada a ser aplicada aos coeficientes desquantizados 311. Reconstrução
[0133] A unidade de reconstrução 314 (por exemplo, o adicionador ou somador 314) pode ser configurada para adicionar o bloco residual reconstruído 313 ao bloco de predição 365 para obter um bloco reconstruído 315 no domínio da amostra, por exemplo, ao somar os valores de amostras do bloco residual reconstruído 313 e os valores de amostras do bloco de predição 365. Filtragem
[0134] A unidade de filtro de loop 320 (no loop de codificação ou após o loop de codificação) é configurada para filtrar o bloco reconstruído 315 para obter um bloco filtrado 321, por exemplo, para suavizar transições de pixels, ou melhorar de outro modo a qualidade de vídeo. A unidade de filtro de loop 320 pode compreender um ou mais filtros de loop tais como um filtro de desblocagem, um filtro de deslocamento adaptativo de amostra (SAO) ou um ou mais outros filtros, por exemplo, um filtro bilateral, um filtro de loop adaptativo (ALF), um filtro de nitidez, um filtro de suavização ou um filtro colaborativo ou qualquer combinação dos mesmos. Embora a unidade de filtro de loop 320 esteja mostrada na figura 3 como sendo um filtro em loop, em outras configurações a unidade de filtro de loop 320 pode ser implementada como um filtro pós-loop. Armazenamento Temporário de Imagens Decodificadas
[0135] Os blocos de vídeo decodificados 321 de uma imagem são então armazenados no armazenamento temporário de imagens decodificadas 330, o qual armazena as imagens decodificadas 331 como imagens de referência para subsequente compensação de movimento para outras imagens e/ou para produzir exibição correspondentemente.
[0136] O decodificador 30 é configurado para enviar a imagem decodificada 311, por exemplo, por meio da saída 312, para apresentação ou visualização por um usuário. Predição
[0137] A unidade de predição inter 344 pode ser idêntica à unidade de predição inter 244 (em particular para a unidade de compensação de movimento) e a unidade de predição intra 354 pode ser idêntica à unidade de predição inter 254 em função, e toma decisões de divisão ou particionamento e realiza predição com base nos parâmetros de particionamento e/ou de predição ou em respectiva informação recebida dos dados de imagem codificados 21 (por exemplo, ao analisar e/ou decodificar, por exemplo, pela unidade de decodificação de entropia 304). A unidade de aplicação de modo 360 pode ser configurada para realizar a predição (predição intra ou inter) por bloco com base em imagens reconstruídas, blocos ou respectivas amostras (filtrados ou não filtrados) para obter o bloco de predição
365.
[0138] Quando a fatia de vídeo é codificada como uma fatia intracodificada (I), a unidade de predição intra 354 da unidade de aplicação de modo 360 é configurada para gerar o bloco de predição 365 para um bloco de imagem da fatia de vídeo atual com base em um modo de predição intra sinalizado e dados de blocos decodificados anteriormente da imagem atual. Quando a imagem de vídeo é codificada como uma fatia intercodificada (isto é, B, ou P), a unidade de predição inter 344 (por exemplo, unidade de compensação de movimento) da unidade de aplicação de modo 360 é configurada para produzir os blocos de predição 365 para um bloco de vídeo da fatia de vídeo atual com base nos vetores de movimento e em outros elementos de sintaxe recebidos da unidade de decodificação de entropia 304. Para predição inter, os blocos de predição podem ser produzidos de uma das imagens de referência dentro de uma das listas de imagens de referência. O decodificador de vídeo 30 pode construir a lista de quadros de referências, Lista 0 e Lista 1, usando técnicas de construção padrões com base em imagens de referência armazenadas no DPB 330. O mesmo ou similar pode ser aplicado para ou por modalidades usando grupos de peças (por exemplo, grupos de peças de vídeo)
e/ou peças (por exemplo, peças de vídeo) em adição ou alternativamente às fatias (por exemplo, fatias de vídeo), por exemplo, um vídeo pode ser codificado usando grupos de peças e /ou peças I, P ou B.
[0139] A unidade de aplicação de modo 360 é configurada para determinar a informação de predição para um bloco de vídeo da fatia de vídeo atual ao analisar os vetores de movimento ou informação relacionada e outros elementos de sintaxe, e usa a informação de predição para produzir os blocos de predição para o bloco de vídeo atual sendo decodificado. Por exemplo, a unidade de aplicação de modo 360 usa alguns dos elementos de sintaxe recebidos para determinar um modo de predição (por exemplo, predição intra ou inter) usado para codificar os blocos de vídeo da fatia de vídeo, um tipo de fatia de predição inter (por exemplo, fatia B, fatia P ou fatia GPB), informação de construção para uma ou mais das listas de imagens de referência para a fatia, vetores de movimento para cada bloco de vídeo intercodificado da fatia, status de predição inter para cada bloco de vídeo intercodificado da fatia, e outra informação para decodificar os blocos de vídeo na fatia de vídeo atual. O mesmo ou similar pode ser aplicado para ou por modalidades usando grupos de peças (por exemplo, grupos de peças de vídeo) e/ou peças (por exemplo, peças de vídeo) em adição ou alternativamente às fatias (por exemplo, fatias de vídeo), por exemplo, um vídeo pode ser codificado usando grupos de peças e/ou peças I, P ou B.
[0140] Modalidades do decodificador de vídeo 30 tal como mostrado na figura 3 podem ser configuradas para particionar e/ou decodificar a imagem ao usar fatias
(também referidas como fatias de vídeo), em que uma imagem pode ser particionada em ou decodificada usando uma ou mais fatias (tipicamente sem sobreposição), e cada fatia pode compreender um ou mais blocos (por exemplo, CTUs).
[0141] Modalidades do decodificador de vídeo 30 tal como mostrado na figura 3 podem ser configuradas para particionar e/ou decodificar a imagem ao usar grupos de peças (também referidos como grupos de peças de vídeo) e/ou peças (também referidas como peças de vídeo), em que uma imagem pode ser particionada em ou decodificada usando um ou mais grupos de peças (tipicamente sem sobreposição), e cada grupo de peças pode compreender, por exemplo, um ou mais blocos (por exemplo, CTUs) ou uma ou mais peças, em que cada peça, por exemplo, pode ser de forma retangular e pode compreender um ou mais blocos (por exemplo, CTUs), por exemplo, blocos completos ou fracionários.
[0142] Outras variações do decodificador de vídeo 30 podem ser usadas para decodificar os dados de imagem codificados 21. Por exemplo, o decodificador 30 pode produzir o fluxo de vídeo de saída sem a unidade de filtro de loop 320. Por exemplo, o decodificador não baseado em transformada 30 pode inverter-quantizar o sinal residual diretamente sem a unidade de processamento de transformada inversa 312 para certos blocos ou quadros. Em outra implementação, o decodificador de vídeo 30 pode ter a unidade de quantização inversa 310 e a unidade de processamento de transformada inversa 312 combinadas em uma única unidade.
[0143] Deve ser entendido que, no codificador 20 e no decodificador 30, um resultado de processamento de uma etapa atual pode ser processado adicionalmente e então enviado para a próxima etapa. Por exemplo, após filtragem de interpolação, derivação de vetor de movimento ou filtragem de loop, uma operação adicional, tal como corte ou deslocamento, pode ser realizada no resultado de processamento da filtragem de interpolação, derivação de vetor de movimento ou filtragem de loop.
[0144] Deve ser notado que operações adicionais podem ser aplicadas aos vetores de movimento derivados de bloco atual (incluindo, mas não limitado a isto, vetores de movimento de ponto de controle de modo afim, vetores de movimento de sub-bloco em modos afim, planar, ATMVP, vetores de movimento temporal e assim por diante). Por exemplo, o valor de vetor de movimento é restringido a uma faixa predefinida de acordo com seu bit de representação. Se o bit de representação de vetor de movimento for bitDepth, então a faixa é -2^(bitDepth-1) ~ 2^(bitDepth-1)- 1, onde “^” significa exponenciação. Por exemplo, se bitDepth for definido igual a 16, a faixa é -32768 ~ 32767; se bitDepth for definido igual a 18, a faixa é -131072 ~
131071. Por exemplo, o valor do vetor de movimento derivado (por exemplo, os MVs de quatro sub-blocos 4x4 dentro de um bloco 8x8) é restringido de tal maneira que a diferença máxima entre partes inteiras dos MVs de quatro sub-blocos 4x4 não é mais que N pixels, tal como não mais que 1 pixel. Aqui são fornecidos dois métodos para restringir o vetor de movimento de acordo com o bitDepth.
[0145] Método 1: remover o MSB (bit mais significativo) de sobrecarga ao fluir operações ux = ( mvx+2bitDepth ) % 2bitDepth (1)
mvx = ( ux >= 2bitDepth-1 ) ? ( ux − 2bitDepth ) : ux (2) uy = ( mvy+2bitDepth ) % 2bitDepth (3) mvy = ( uy >= 2bitDepth-1 ) ? ( uy − 2bitDepth ) : uy (4) onde mvx é um componente horizontal de um vetor de movimento de um bloco ou um sub-bloco de imagem, mvy é um componente vertical de um vetor de movimento de um bloco ou um sub-bloco de imagem, e ux e uy indicam um valor intermediário; por exemplo, se o valor de mvx for -32769, após aplicar as fórmulas (1) e (2), o valor resultante é 32767. Em sistema de computador, números decimais são armazenados como complementos de dois. O complemento de dois de -32769 é 1.0111.1111.1111.1111 (17 bits), então o MSB é descartado, assim o complemento de dois resultante é
0111.1111.1111.1111 (número decimal é 32767), o qual é mesmo que o produzido ao aplicar as fórmulas (1) e (2); ux = ( mvpx + mvdx +2bitDepth ) % 2bitDepth (5) mvx = ( ux >= 2bitDepth-1 ) ? ( ux − 2bitDepth ) : ux (6) uy = ( mvpy + mvdy +2bitDepth ) % 2bitDepth (7) mvy = ( uy >= 2bitDepth-1 ) ? ( uy − 2bitDepth ) : uy (8).
[0146] As operações podem ser aplicadas durante a soma de mvp e mvd, tal como mostrado nas fórmulas (5) a (8).
[0147] Método 2: remover o MSB de sobrecarga ao cortar o valor vx = Clip3(-2bitDepth-1, 2bitDepth-1 -1, vx) vy = Clip3(-2bitDepth-1, 2bitDepth-1 -1, vy) onde vx é um componente horizontal de um vetor de movimento de um bloco ou um sub-bloco de imagem, vy é um componente vertical de um vetor de movimento de um bloco ou um sub-bloco de imagem; x, y e z correspondem respectivamente a três valores de entrada do processo de recorte de MV, e a definição da função Clip3 é como segue: x ; z < x Clip3( x, y, z ) = y ; z > y . z ; de outro modo
[0148] A figura 4 é um diagrama esquemático de um dispositivo de codificação de vídeo 400 de acordo com uma modalidade da divulgação. O dispositivo de codificação de vídeo 400 é adequado para implementar as modalidades divulgadas tais como descritas neste documento. Em uma modalidade, o dispositivo de codificação de vídeo 400 pode ser um decodificador tal como o decodificador de vídeo 30 da figura 1A ou um codificador tal como o codificador de vídeo 20 da figura 1A.
[0149] O dispositivo de codificação de vídeo 400 compreende as portas de ingresso 410 (ou portas de entrada 410) e as unidades receptoras (Rx) 420 para receber dados; um processador, unidade lógica ou unidade central de processamento (CPU) 430 para processar os dados; as unidades transmissoras (Tx) 440 e as portas de egresso 450 (ou portas de saída 450) para transmitir os dados; e uma memória 460 para armazenar os dados. O dispositivo de codificação de vídeo 400 também pode compreender componentes óticos para elétricos (OE) e componentes elétricos para óticos (EO) acoplados às portas de ingresso 410, às unidades receptoras 420, às unidades transmissoras 440 e às portas de egresso 450 para egresso ou ingresso de sinais óticos ou elétricos.
[0150] O processador 430 é implementado por meio de hardware e software. O processador 430 pode ser implementado como um ou mais chips de CPU, núcleos (por exemplo, como um processador de múltiplos núcleos), FPGAs, ASICs e DSPs. O processador 430 está em comunicação com as portas de ingresso 410, unidades receptoras 420, unidades transmissoras 440, portas de egresso 450 e com a memória
460. O processador 430 compreende um módulo de codificação
470. O módulo de codificação 470 implementa as modalidades divulgadas descritas acima. Por exemplo, o módulo de codificação 470 implementa, processa, prepara ou fornece as várias operações de codificação. A inclusão do módulo de codificação 470, portanto, fornece um substancial melhoramento para a funcionalidade do dispositivo de codificação de vídeo 400 e efetua uma transformação do dispositivo de codificação de vídeo 400 para um estado diferente. Alternativamente, o módulo de codificação 470 é implementado como instruções armazenadas na memória 460 e executadas pelo processador 430.
[0151] A memória 460 pode compreender um ou mais discos, unidades de fitas e unidades de estado sólido e pode ser usada como um dispositivo de armazenamento de dados de sobrecarga, para armazenar programas quando tais programas são selecionados para execução, e para armazenar instruções e dados que são lidos durante execução de programa. A memória 460, por exemplo, pode ser volátil e/ou não volátil e pode ser uma memória somente de leitura (ROM), memória de acesso aleatório (RAM), memória endereçável de conteúdo ternário (TCAM) e/ou memória estática de acesso aleatório (SRAM).
[0152] A figura 5 é um diagrama de blocos simplificado de um aparelho 500 que pode ser usado como um ou outro ou ambos de o dispositivo de origem 12 e o dispositivo de destino 14 da figura 1 de acordo com uma modalidade exemplar.
[0153] Um processador 502 no aparelho 500 pode ser uma unidade central de processamento. Alternativamente, o processador 502 pode ser qualquer outro tipo de dispositivo, ou múltiplos dispositivos, capaz de manipular ou processar informação existindo atualmente ou desenvolvida futuramente. Embora as implementações divulgadas possam ser praticadas com um único processador tal como mostrado, por exemplo, o processador 502, vantagens em velocidade e eficiência podem ser alcançadas usando mais de um processador.
[0154] Uma memória 504 no aparelho 500 pode ser um dispositivo de memória somente de leitura (ROM) ou um dispositivo de memória de acesso aleatório (RAM) em uma implementação. Qualquer outro tipo adequado de dispositivo de armazenamento pode ser usado como a memória 504. A memória 504 pode incluir os códigos e dados 506 que são acessados pelo processador 502 usando um barramento 512. A memória 504 pode incluir adicionalmente um sistema operacional 508 e os programas de aplicação 510, os programas de aplicação 510 incluindo pelo menos um programa que permite ao processador 502 realizar os métodos descritos aqui. Por exemplo, os programas de aplicação 510 podem incluir as aplicações 1 a N, as quais incluem adicionalmente uma aplicação de codificação de vídeo que realiza os métodos descritos aqui.
[0155] O aparelho 500 também pode incluir um ou mais dispositivos de saída, tal como uma tela 518. A tela
518 pode ser, em um exemplo, uma tela sensível ao toque que combina uma tela com um elemento sensível ao toque que é operável para detectar entradas de toque. A tela 518 pode ser acoplada ao processador 502 por meio do barramento 512.
[0156] Embora representado aqui como um único barramento, o barramento 512 do aparelho 500 pode ser composto de múltiplos barramentos. Além disso, o armazenamento secundário 514 pode ser acoplado diretamente aos outros componentes do aparelho 500 ou pode ser acessado por meio de uma rede e pode compreender uma única unidade integrada tal como um cartão de memória ou múltiplas unidades tais como múltiplos cartões de memória. O aparelho 500 pode ser assim implementado em uma grande variedade de configurações.
[0157] As modalidades apresentadas neste documento serão descritas com mais detalhes como a seguir. Uma fonte de vídeo que é representada por um fluxo de bits pode incluir uma sequência de imagens em ordem de decodificação. Cada uma das imagens (que pode ser uma imagem de origem ou uma imagem decodificada) inclui um ou mais das seguintes matrizes de amostras: – luma (Y) somente (monocromática); – luma e duas croma (YCbCr ou YCgCo); – verde, azul e vermelha (GBR, também conhecido como RGB); – matrizes representando outras amostragens de cores monocromáticas ou de três estímulos não especificadas (por exemplo, YZX, também conhecido como XYZ).
[0158] Por conveniência de notação e terminologia na presente divulgação, as variáveis e termos associados com estas matrizes são referidos como luma (ou L ou Y) e croma, onde as duas matrizes de croma são referidos como Cb e Cr.
[0159] A figura 9A ilustra localização de componente de croma no caso do esquema de amostragem 4:2:0. Exemplos para outros esquemas de amostragem estão mostrados nas figuras 9B e 9C.
[0160] Tal como mostrado na figura 9A, no esquema de amostragem 4:2:0, pode existir um deslocamento entre as malhas de componentes de luma e de croma. Em um bloco de 2×2 pixels, os componentes de croma são realmente deslocados verticalmente por metade de um pixel quando comparados ao componente de luma (ver a figura 9A). Tal deslocamento pode ter uma influência nos filtros de interpolação ao subamostrar a imagem, ou ao superamostrar a imagem. Na figura 9D, vários padrões de amostragem são representados, no caso de imagem entrelaçada. Isto significa que a paridade, isto é, se os pixels estão nos campos de parte superior ou de parte inferior de uma imagem entrelaçada, é também levada em conta.
[0161] De acordo com esboço de especificação da Codificação de Vídeo Versátil (VVC), uma sinalização especial “sps_cclm_colocated_chroma_flag” é fornecida no nível de parâmetros de sequência. A sinalização “sps_cclm_colocated_chroma_flag” igual a 1 especifica que a amostra de luma subamostrada superior esquerda em predição intra de modelo linear de componentes cruzados está colocalizada com a amostra de luma superior esquerda. sps_cclm_colocated_chroma_flag igual a 0 especifica que a amostra de luma subamostrada superior esquerda em predição intra de modelo linear de componentes cruzados está co- situada horizontalmente com a amostra de luma superior esquerda, mas deslocada verticalmente por 0,5 unidade de amostras de luma em relação à amostra de luma superior esquerda. Predição Compensada de Movimento Afim
[0162] No mundo real, existem muitos tipos de movimento, por exemplo, ampliação/redução, rotação, movimentos de perspectiva, movimento de translação e os outros movimentos irregulares. Em HEVC (ITU-T H.265), somente modelo de movimento de translação é utilizado para predição de compensação de movimento (MCP). Na VVC, predição de compensação de movimento de transformada afim é aplicada. O campo de movimento afim do bloco é descrito por meio de dois ou três vetores de movimento de ponto de controle (CPMV) que correspondem ao modelo de movimento afim de quatro parâmetros e ao modelo de movimento afim de seis parâmetros respectivamente. Posições de CPMV para modelo de movimento afim de quatro parâmetros estão representadas na figura 6a e posições de CPMV para modelo de movimento afim de seis parâmetros estão representadas na figura 6b.
[0163] No caso de modelo de movimento de quatro parâmetros, o campo de vetor de movimento (MVF) de um bloco é descrito pela seguinte equação:  (v1x  v0 x ) (v1 y  v0 y )  v x  x y  v0 x w w (1)  (v  v0 y ) v  1 y (v  v0 x ) x  1x y  v0 y  y w w onde (v0x, v0y) é o vetor de movimento do ponto de controle de canto esquerdo superior, e (v1x, v1y) é vetor de movimento do ponto de controle de canto direito superior. (vx, vy) é o vetor de movimento em uma dada localização (x, y) no bloco. Uma verificação de custo de distorção de taxa (RDC) é usada para determinar qual par de vetores de movimento é selecionado como os vetores de movimento de ponto de controle da CU atual.
[0164] CPMVs podem ser derivados com base em informação de movimento de blocos vizinhos (por exemplo, em um processo de modo de fusão de sub-bloco). Alternativamente, ou adicionalmente, CPMVs podem ser derivados ao derivar preditores de CPMV (CPMVP) e obter diferença entre CPMV e CPMVP do fluxo de bits.
[0165] A fim de simplificar a predição de compensação de movimento, predição de transformada afim baseada em bloco é aplicada. Por exemplo, para derivar o vetor de movimento de cada sub-bloco 4×4, um vetor de movimento da amostra central de cada sub-bloco, tal como mostrado na figura 7, é calculado de acordo com a Equação (1) acima, e arredondado para precisão de fração de 1/16. Os filtros de interpolação de compensação de movimento são aplicados para gerar a predição de cada sub-bloco com vetor de movimento derivado.
[0166] Após predição de compensação de movimento (MCP), o vetor de movimento de maior precisão de cada sub- bloco é arredondado e salvo com a mesma precisão do vetor de movimento normal com precisão de 1/4.
[0167] A figura 8 mostra um exemplo de um fluxograma representando um processo 800 para predição inter baseada em afim (isto é, compensação de movimento usando modelo de movimento afim). O processo 800 pode incluir os seguintes blocos: no bloco 810, derivação de vetor de movimento de ponto de controle é realizada para gerar vetores de movimento de ponto de controle cpMvLX[ cpIdx ]; no bloco 830, derivação de matriz de vetores de movimento é realizada para gerar matriz de vetores de movimento de sub-bloco de luma mvLX[ xSbIdx ][ ySbIdx ] e matriz de vetores de movimento de sub-bloco de croma mvCLX[ xSbIdx ][ ySbIdx ]. O bloco 830 pode incluir: - o bloco 831, onde derivação de matriz de vetores de movimento luma é realizada para gerar matriz de vetores de movimento de sub-bloco de luma mvLX[ xSbIdx ][ ySbIdx ]; - o bloco 833, onde derivação de matriz de vetores de movimento croma é realizada para gerar matriz de vetores de movimento de sub-bloco de croma mvCLX[ xSbIdx ][ ySbIdx ]; no bloco 850, processo de interpolação é executado para gerar a predição de cada sub-bloco com vetor de movimento derivado, isto é, uma matriz predSamples de amostras de predição.
[0168] As modalidades apresentadas neste documento focalizam principalmente no bloco 833 para derivação de matriz de vetores de movimento croma (este bloco está indicado em negrito na figura 8).
[0169] Os detalhes de processo de derivação para vetor de movimento croma em um projeto anterior (em um modo convencional) são descritos tal como a seguir.
[0170] Entradas para este processo (derivação de matriz de vetores de movimento croma) incluem: - a matriz de vetores de movimento de sub-bloco de luma mvLX[ xSbIdx ][ ySbIdx ] com xSbIdx = 0..numSbX − 1, ySbIdx
= 0.. numSbY − 1 e X sendo 0 ou 1 - razão de amostragem de croma na direção horizontal, SubWidthC - razão de amostragem de croma na direção vertical, SubHeightC.
[0171] Saídas: - a matriz de vetores de movimento de sub-bloco de croma mvCLX[ xSbIdx ][ ySbIdx ] com xSbIdx = 0..numSbX − 1, ySbIdx = 0.. numSbY − 1 e X sendo 0 ou 1.
[0172] Este processo é implementado como segue: - o vetor de movimento luma médio mvAvgLX é derivado como segue: mvAvgLX = mvLX[( xSbIdx >> 1 << 1)][(ySbIdx>>1<<1)] + mvLX[( xSbIdx >> 1 << 1 ) + 1 ][(ySbIdx>>1<<1) + 1 ] (2) mvAvgLX[ 0 ] = ( mvAvgLX[ 0 ] >= 0 ? ( mvAvgLX[ 0 ] + 1) >> 1 : − ((− mvAvgLX[ 0 ] + 1 ) >>1 )) (3) mvAvgLX[ 1 ] = ( mvAvgLX[ 1 ] >= 0 ? ( mvAvgLX[ 1 ] + 1) >> 1 : − ((− mvAvgLX[ 1 ] + 1 ) >> 1 )) (4) - escalar o mvAvgLX de acordo com o valor de índice de referência refIdxLX. Especificamente, - se a imagem de referência correspondendo a refIdxLX para a unidade de codificação atual não for a imagem atual, o seguinte se aplica: mvCLX[ 0 ] = mvLX[ 0 ] * 2 / SubWidthC mvCLX[ 1 ] = mvLX[ 1 ] * 2 / SubHeightC - de outro modo (a imagem de referência correspondendo a refIdxLX para a unidade de codificação atual é a imagem atual), o seguinte se aplica: mvCLX[ 0 ] = (( mvLX[ 0 ] >> ( 3 + SubWidthC )) * 32 mvCLX[ 1 ] = (( mvLX[ 1 ] >> ( 3 + SubHeightC )) * 32.
[0173] No projeto mostrado acima, o cálculo de mvAvgLX não leva em conta a subamostragem de croma. Isto resulta em estimativa imprecisa de campo de movimento para casos onde uma das variáveis SubWidthC e SubHeightC é igual a 1.
[0174] As modalidades da presente invenção resolvem este problema ao subamostrar o campo de movimento luma com base no formato de croma da imagem, aumentando desse modo a precisão do campo de movimento croma. Mais especificamente, as modalidades da presente invenção divulgam um método para considerar o formato de croma da imagem ao obter vetores de movimento croma a partir de vetores de movimento luma. Ao obter uma média de vetores de movimento luma, subamostragem linear de campo de movimento luma é realizada. Selecionar vetores de movimento luma com base no formato de croma de imagem resulta em um campo de movimento croma mais preciso por causa de uma subamostragem de campo de vetor de movimento luma mais precisa. Esta dependência em formato de croma capacita selecionar os blocos de luma mais apropriados ao calcular a média de vetores de movimento luma. Como uma consequência de uma interpolação de campo de movimento mais precisa, erro de predição é reduzido, o que tem um resultado técnico de melhoramento de desempenho de compressão.
[0175] Em uma implementação exemplar, a tabela 1-1 mostra os formatos de croma que podem ser suportados na presente divulgação. Informação de formato de croma, tal como chroma_format_idc e/ou separate_colour_plane_flag, pode ser usada para determinar os valores das variáveis SubWidthC e SubHeightC.
chroma_format_idc separate_colour_plane_flag Formato de SubWidthC SubHeightC croma 0 0 Monocromático 1 1 1 0 4:2:0 2 2 2 0 4:2:2 2 1 3 0 4:4:4 1 1 3 1 4:4:4 1 1 Tabela 1-1
[0176] chroma_format_idc especifica a amostragem de croma em relação à amostragem de luma. O valor de chroma_format_idc deve estar na faixa de 0 a 3, inclusive; separate_colour_plane_flag igual a 1 especifica que os três componentes de cor do formato de croma 4:4:4 são codificados separadamente; separate_colour_plane_flag igual a 0 especifica que os componentes de cor não são codificados separadamente. Quando separate_colour_plane_flag não está presente, ele é inferido para ser igual a 0. Quando separate_colour_plane_flag é igual a 1, a imagem codificada consiste de três componentes separados, cada um dos quais consiste de amostras codificadas de um plano de cor (Y, Cb ou Cr) e usa a sintaxe de codificação monocromática.
[0177] Formato de croma determina precedência e subamostragem de matrizes de croma; em amostragem monocromática existe somente uma matriz de amostras, a qual é considerada nominalmente como matriz de luma.
[0178] Em amostragem 4:2:0, cada um das duas matrizes de croma tem metade da altura e metade da largura da matriz de luma, tal como mostrado na figura 9A.
[0179] Em amostragem 4:2:2, cada uma das duas matrizes de croma tem a mesma altura e metade da largura da matriz de luma, tal como mostrado na figura 9B.
[0180] Em amostragem 4:4:4, dependendo do valor de separate_colour_plane_flag, o seguinte se aplica: - se separate_colour_plane_flag for igual a 0, cada um das duas matrizes de croma tem as mesmas altura e largura da matriz de luma, tal como mostrado na figura 9C; - de outro modo (separate_colour_plane_flag é igual a 1), os três planos de cores são processados separadamente como imagens amostradas monocromáticas.
[0181] Em outras implementações exemplares, a Tabela 1-2 também mostra os formatos de croma que podem ser suportados na presente divulgação. Informação de formato de croma, tal como chroma_format_idc e/ou separate_colour_plane_flag, pode ser usada para determinar os valores das variáveis SubWidthC e SubHeightC. chroma_format_idc separate_colour_plane_flag Formato SubWidthC SubHeightC de croma 2(0) 0 4:2:2 2 1 3(1) 0 4:4:4 1 1 3(1) 1 4:4:4 1 1 Tabela 1-2
[0182] O número de bits necessários para a representação de cada uma das amostras nas matrizes de luma e de croma em uma sequência de vídeo está na faixa de 8 a 16, inclusive, e o número de bits usados na matriz de luma pode diferir do número de bits usados nas matrizes de croma.
[0183] Quando o valor de chroma_format_idc é igual a 1, as localizações relativas verticais e horizontais nominais de amostras de luma e de croma em imagens estão mostradas na figura 9A. Localizações relativas de amostras de croma alternativas podem ser indicadas em informação de usabilidade de vídeo.
[0184] Quando o valor de chroma_format_idc é igual a 2, as amostras de croma estão co-situadas com as amostras de luma correspondentes e as localizações nominais em uma imagem são tais como mostradas na figura 9B.
[0185] Quando o valor de chroma_format_idc é igual a 3, todas as amostras de matriz estão co-situadas para todos os casos de imagens e as localizações nominais em uma imagem são tais como mostradas na figura 9C.
[0186] Em uma implementação exemplar, as variáveis SubWidthC e SubHeightC são especificadas na Tabela 1-1 ou 1-2, dependendo da estrutura de amostragem de formato de croma, a qual é especificada por meio de chroma_format_idc e separate_colour_plane_flag. Pode ser entendido que informação de formato de croma, tal como a estrutura de amostragem de formato de croma, é especificada por meio de chroma_format_idc e separate_colour_plane_flag.
[0187] Contrário ao projeto anterior, na presente divulgação, derivação de posições dentro da matriz de vetores de movimento de sub-bloco de luma pode ser aplicada para diferentes formatos de croma e depende do valor do fator de escala de croma (por exemplo, SubWidthC e SubHeightC). Deve ser entendido que o “fator de escala de croma em direções horizontal e vertical” também pode ser referido como “razão de amostragem de croma em direções horizontal e vertical”.
[0188] Alternativamente, em outra implementação exemplar, SubWidthC e SubHeightC podem ser definidos como SubWidthC = (1 + log2(wluma)-log2(wcroma)) e SubHeightC = (1 + log2(hluma)-log2(hcroma)), onde wluma e hluma são a largura e altura da matriz de luma respectivamente, e wcroma e hcroma são a largura e altura da matriz de croma respectivamente.
[0189] Em implementações possíveis de algumas modalidades da presente divulgação, para um dado formato de croma, o processo de determinação das posições ou índices dentro da matriz de vetores de movimento luma para um dado índice de um sub-bloco de croma colocalizado pode ser realizado tal como a seguir: a princípio, os valores de SubWidthC e SubHeightC são determinados com base no formato de croma da imagem (ou quadro) de codificação ou decodificação atualmente.
[0190] Então, para cada uma das posições espaciais de croma especificadas pelos índices xSbIdx = 0..numSbX − 1, ySbIdx = 0.. numSbY − 1 e X sendo 0 ou 1, o valor de vetor de movimento croma é armazenado como um elemento mvCLX correspondente. As etapas para determinar vetor de movimento croma são como segue: a primeira etapa é para realizar arredondamento, para determinar os índices x e y do sub-bloco de luma colocalizado: xSbIdxL = (xSbIdx >> (SubWidthC – 1)) << (SubWidthC – 1); ySbIdxL = (ySbIdx >> (SubHeightC – 1)) << (SubHeightC – 1).
[0191] A segunda etapa é para determinar o conjunto de posições de sub-blocos de luma que estão adicionalmente na determinação do vetor de movimento croma. Um exemplo possível para definir tal conjunto S pode ser descrito a seguir: S0 = (xSbIdxL, ySbIdxL) S1 = (xSbIdxL + (SubWidthC-1), ySbIdxL + (SubHeightC- 1)).
[0192] A terceira etapa é para calcular o vetor médio mvAvgLX: quando um conjunto S contém N elementos, N é uma potência de dois, em uma implementação exemplar, o vetor de movimento mvAvgLX é determinado como segue: - mvAvgLX = ∑ mvLX[𝑆 ][𝑆 ] - mvAvgLX[ 0 ] = ( mvAvgLX[ 0 ] + N>>1) >> log2(N) - mvAvgLX[ 1 ] = ( mvAvgLX[ 1 ] + N>>1) >> log2(N) onde 𝑆 e 𝑆 são coordenadas x e y da posição Si.
[0193] Para resumir, em uma implementação exemplar, a determinação do vetor médio mvAvgLX para calcular a média pode ser formulada como segue: mvAvgLX = mvLX[( xSbIdx >> ( SubWidthC − 1 ) << ( SubWidthC − 1 ))] [(ySbIdx >> ( SubHeightC − 1 ) << ( SubHeightC − 1 ))] + mvLX[( xSbIdx >> (SubWidthC − 1 ) << ( SubWidthC − 1)) + ( SubWidthC − 1 )] [( ySbIdx >> ( SubHeightC − 1 ) << ( SubHeightC − 1 )) + ( SubHeightC − 1 )] (Equação 1) - mvAvgLX[ 0 ] = ( mvAvgLX[ 0 ] + N>>1) >> log2(N) (Equação 2) - mvAvgLX[ 1 ] = ( mvAvgLX[ 1 ] + N>>1) >> log2(N)
(Equação 3).
[0194] É notado que o modo para calcular a média de vetores de movimento luma apresentado neste documento não está limitado tal como acima e que a função de média na presente divulgação pode ser implementada em implementações diferentes.
[0195] Deve ser entendido que embora o exposto acima descreva o processo como um processo de 3 etapas, a determinação do vetor médio mvAvgLX tal como formulada acima na Equação 1-3 pode ser realizada em qualquer ordem.
[0196] Em outra implementação exemplar, a terceira etapa também pode ser implementada como segue: - mvAvgLX = ∑ mvLX[𝑆 ][𝑆 ] - mvAvgLX[ 0 ] = ( mvAvgLX[ 0 ] >= 0 ? ( mvAvgLX[ 0 ] + N>>1) >> log2(N) : − ((− mvAvgLX[ 0 ] + N>>1 ) >> log2(N)) (5) − mvAvgLX[ 1 ] = ( mvAvgLX[ 1 ] >= 0 ? ( mvAvgLX[ 1 ] + N>>1) >> log2(N) : − ((− mvAvgLX[ 1 ] + N>>1 ) >> log2(N))) (6) onde 𝑆 e 𝑆 são coordenadas x e y da posição Si.
[0197] Deve ser notado que o modo para calcular a média de vetores de movimento luma apresentado neste documento não está limitado tal como acima e que a função de média na presente divulgação pode ser implementada em implementações diferentes.
[0198] A próxima etapa é para escalar o mvAvgLX de acordo com o valor de índice de referência refIdxLX. Em alguns exemplos, o processo de escalamento é realizado como a seguir ao substituir mvLX por mvAvgLX (isto é, mvLX[ 0 ] será substituído por mvAvgLX[ 0 ], e mvLX[ 1 ] será substituído por mvAvgLX[ 1 ]): - se uma imagem de referência correspondendo a refIdxLX para a unidade de codificação atual não for a imagem atual, o seguinte se aplica: mvCLX[ 0 ] = mvLX[ 0 ] * 2 / SubWidthC vCLX[ 1 ] = mvLX[ 1 ] * 2 / SubHeightC - de outro modo (a imagem de referência correspondendo a refIdxLX para a unidade de codificação atual é a imagem atual), o seguinte se aplica: mvCLX[ 0 ] = (( mvLX[ 0 ] >> ( 3 + SubWidthC )) * 32 mvCLX[ 1 ] = (( mvLX[ 1 ] >> ( 3 + SubHeightC )) * 32.
[0199] Igualmente, o processo de derivação para vetores de movimento croma na cláusula 8.5.2.13 descrita a seguir pode ser chamado com mvAvgLX e refIdxLX como entradas, e a matriz de vetores de movimento croma mvCLXSub[ xCSbIdx ][ yCSbIdx ] como saída. No processo descrito na cláusula 8.5.2.13, mvLX será substituído por mvAvgLX, e em particular mvLX[ 0 ] será substituído por mvAvgLX[ 0 ], e mvLX[ 1 ] será substituído por mvAvgLX[ 1 ].
[0200] Os detalhes de implementações possíveis do cálculo de vetor médio mvAvgLX em processo de derivação para vetor de movimento croma do método proposto são descritos como a seguir no formato da modificação da especificação do esboço de VVC. Existem múltiplas variantes do processo.
[0201] 1. Uma das variantes do cálculo de vetor médio mvAvgLX em processo de derivação para vetor de movimento croma do método proposto pode ser descrita como a seguir no formato da modificação da especificação do esboço de VVC: ... - o vetor de movimento luma médio mvAvgLX é derivado como segue: mvAvgLX = mvLX[( xSbIdx >> (SubWidthC – 1) << (SubWidthC – 1))] [( ySbIdx >> (SubHeightC – 1) << (SubHeightC – 1))] + mvLX[( xSbIdx >> (SubWidthC – 1) << (SubWidthC – 1)) + ( 1 >> ( 2 – SubWidthC ))] [( ySbIdx >> (SubHeightC – 1) << (SubHeightC – 1)) + ( 1 >> ( 2 – SubHeightC ))].
[0202] Notas explicativas: a equação acima mostra um exemplo de selecionar vetores de movimento luma para cálculo de vetor de movimento médio (por exemplo, seleção de posições de sub-blocos de luma para uma dada posição de sub-bloco de croma). Os sub-blocos de luma selecionados (e assim suas respectivas posições) são representados por seus respectivos índices de sub-bloco na direção horizontal e na direção vertical. Por exemplo, e tal como mostrado acima, para um dado sub-bloco de croma (xSbIdx, ySbIdx) onde xSbIdx e ySbIdx são os índices de sub-bloco do sub-bloco de croma nas direções horizontal e vertical, respectivamente, dois sub-blocos de luma (e assim suas respectivas posições, por exemplo, seus respectivos índices de sub-bloco) podem ser selecionados. Um dos dois sub-blocos de luma selecionados pode ser representado por um índice de sub- bloco na direção horizontal como [( xSbIdx >> (SubWidthC – 1) << (SubWidthC – 1))] e um índice de sub-bloco na direção vertical como [( ySbIdx >> (SubHeightC – 1) << (SubHeightC – 1))]. Outro sub-bloco de luma selecionado pode ser representado por um índice de sub-bloco na direção horizontal como [( xSbIdx >> (SubWidthC – 1) << (SubWidthC – 1)) + ( 1 >> ( 2 – SubWidthC ))] e um índice de sub-bloco na direção vertical como [( ySbIdx >> (SubHeightC – 1) << (SubHeightC – 1)) + ( 1 >> ( 2 – SubHeightC ))]). Portanto, a seleção dos blocos de luma para calcular a média de vetores de movimento luma é dependente do formato de croma de imagem. Em particular, seleção dos blocos de luma para calcular a média de vetores de movimento luma é dependente dos fatores de escala de croma SubWidthC e SubHeightC que são determinados com base no formato de croma de imagem//.
[0203] O mvAvgLX obtido acima pode ser processado adicionalmente por: mvAvgLX[ 0 ] = ( mvAvgLX[ 0 ] >= 0 ? ( mvAvgLX[ 0 ] + 1) >> 1 : − ((− mvAvgLX[ 0 ] + 1 ) >>1 )) mvAvgLX[ 1 ] = ( mvAvgLX[ 1 ] >= 0 ? ( mvAvgLX[ 1 ] + 1) >> 1 : − ((− mvAvgLX[ 1 ] + 1 ) >> 1 )).
[0204] É notado que o modo para calcular a média de vetores de movimento luma apresentado neste documento não está limitado tal como acima e que a função de média na presente divulgação pode ser implementada em modos diferentes.
[0205] - O processo de derivação para vetores de movimento croma na cláusula 8.5.2.13 apresentada mais tarde nesta divulgação é chamado com mvAvgLX e refIdxLX como entradas, e o vetor de movimento croma mvCLX[ xSbIdx ][ ySbIdx ] como saída. ...
[0206] 2. Outra variante do cálculo de vetor médio mvAvgLX em processo de derivação para vetor de movimento croma do método proposto pode ser descrita como a seguir no formato da modificação da especificação do esboço de VVC: ... - o vetor de movimento luma médio mvAvgLX é derivado como segue: mvAvgLX = mvLX [( xSbIdx >> (SubWidthC – 1) << (SubWidthC – 1))] [( ySbIdx >> (SubHeightC – 1) << (SubHeightC – 1))] + mvLX [( xSbIdx >> (SubWidthC – 1) << (SubWidthC – 1)) + ( 1 >> ( 4 – SubWidthC – SubHeightC))] [( ySbIdx >> (SubHeightC – 1) << (SubHeightC – 1)) + ( 1 >> ( 4 – SubWidthC – SubHeightC ))].
[0207] // Notas explicativas: a equação acima mostra um exemplo de selecionar vetores de movimento luma para cálculo de vetor de movimento médio (por exemplo, seleção de posições de sub-blocos de luma para uma dada posição de sub-bloco de croma). Os sub-blocos de luma selecionados (e assim suas respectivas posições) são representados por seus respectivos índices de sub-bloco na direção horizontal e na direção vertical. Por exemplo, e tal como mostrado acima, para um dado sub-bloco de croma (xSbIdx, ySbIdx) onde xSbIdx e ySbIdx são os índices de sub-bloco do sub-bloco de croma nas direções horizontal e vertical, respectivamente, dois sub-blocos de luma (e assim suas respectivas posições, por exemplo, seus respectivos índices de sub-bloco) podem ser selecionados. Um dos dois sub-blocos de luma selecionados pode ser representado por um índice de sub-bloco na direção horizontal como [( xSbIdx
>> (SubWidthC – 1) << (SubWidthC – 1))] e um índice de sub- bloco na direção vertical como [( ySbIdx >> (SubHeightC – 1) << (SubHeightC – 1))]; outro sub-bloco de luma selecionado pode ser representado por um índice de sub- bloco na direção horizontal como [( xSbIdx >> (SubWidthC – 1) << (SubWidthC – 1)) + ( 1 >> ( 4 – SubWidthC – SubHeightC))] e um índice de sub-bloco na direção vertical como [( ySbIdx >> (SubHeightC – 1) << (SubHeightC – 1)) + ( 1 >> ( 4 – SubWidthC – SubHeightC ))]). Portanto, a seleção dos blocos de luma para calcular a média de vetores de movimento luma é dependente do formato de croma de imagem. Em particular, seleção dos blocos de luma para calcular a média de vetores de movimento luma é dependente dos fatores de escala de croma SubWidthC e SubHeightC que são determinados com base no formato de croma de imagem//.
[0208] Comparada com a primeira variante, esta variante usa modos diferentes para determinar o conjunto de sub-blocos de luma. Em particular, 1 >> ( 4 – SubWidthC – SubHeightC) é usado para determinar o índice do segundo sub-bloco de luma (o sub-bloco de luma vizinho do primeiro sub-bloco de luma) nesta variante, enquanto que 1 >> ( 2 – SubWidthC ) e 1 >> ( 2 – SubHeightC ) são usados na primeira variante. Na primeira variante, o primeiro sub- bloco de luma propriamente dito, seu vizinho diagonal ou seu vizinho horizontal pode ser usado como o segundo sub- bloco. Na segunda variante, o primeiro sub-bloco de luma propriamente dito ou seu vizinho diagonal pode ser usado como o segundo sub-bloco de luma dependendo dos valores do fator de escala de croma.
[0209] O mvAvgLX obtido acima pode ser processado adicionalmente por: mvAvgLX[ 0 ] = ( mvAvgLX[ 0 ] >= 0 ? ( mvAvgLX[ 0 ] + 1) >> 1 : − ((− mvAvgLX[ 0 ] + 1 ) >>1 )) mvAvgLX[ 1 ] = ( mvAvgLX[ 1 ] >= 0 ? ( mvAvgLX[ 1 ] + 1) >> 1 : − ((− mvAvgLX[ 1 ] + 1 ) >> 1 )) - o processo de derivação para vetores de movimento croma na cláusula 8.5.2.13 é chamado com mvAvgLX e refIdxLX como entradas, e o vetor de movimento croma mvCLX[ xSbIdx ][ ySbIdx ] como saída. ...
[0210] É notado que o modo para calcular a média de vetores de movimento luma apresentado neste documento não está limitado tal como acima e que a função de média na presente divulgação pode ser implementada em modos diferentes.
[0211] 3. Outra variante de processo de derivação para vetor de movimento croma do método proposto pode ser descrita como a seguir no formato da modificação da especificação do esboço de VVC: ... - o vetor de movimento luma médio mvAvgLX é derivado como segue: mvAvgLX = mvLX[( xSbIdx >> (SubWidthC – 1) << (SubWidthC – 1))] [( ySbIdx >> (SubHeightC – 1) << (SubHeightC – 1))] - o processo de derivação para vetores de movimento croma na cláusula 8.5.2.13 é chamado com mvAvgLX e refIdxLX como entradas, e o vetor de movimento croma mvCLX[ xSbIdx
][ ySbIdx ] como saída. ...
[0212] 4. Outra variante de processo de derivação para vetor de movimento croma do método proposto pode ser descrita como a seguir no formato da modificação da especificação do esboço de VVC: ... - o vetor de movimento luma médio mvAvgLX é derivado como segue: - se SubWidthC == 1 e SubHeightC == 1: mvAvgLX = mvLX[ xSbIdx ][ ySbIdx ] - de outro modo - xSbIdxL = (xSbIdx >> (SubWidthC – 1)) << (SubWidthC – 1); - ySbIdxL = (ySbIdx >> (SubHeightC – 1)) << (SubHeightC – 1); - mvAvgLX = mvLX[ xSbIdxL ][ ySbIdxL ] + mvLX[ xSbIdxL + (SubWidthC−1)][ ySbIdxL+ (SubHeightC−1)].
[0213] // Notas explicativas: a equação acima mostra um exemplo de selecionar vetores de movimento luma para cálculo de vetor de movimento médio (por exemplo, seleção de posições de sub-blocos de luma para uma dada posição de sub-bloco de croma). Os sub-blocos de luma selecionados (e assim suas respectivas posições) são representados por seus respectivos índices de sub-bloco na direção horizontal e na direção vertical. Por exemplo, e tal como mostrado acima, para um dado sub-bloco de croma (xSbIdx, ySbIdx) onde xSbIdx e ySbIdx são os índices de sub-bloco do sub-bloco de croma nas direções horizontal e vertical, respectivamente, dois sub-blocos de luma (e assim suas respectivas posições, por exemplo, seus respectivos índices de sub-bloco) podem ser selecionados. Um dos dois sub-blocos de luma selecionados pode ser representado por um índice de sub-bloco na direção horizontal como [( xSbIdx >> ( SubWidthC − 1 ) << ( SubWidthC − 1 ))] e um índice de sub-bloco na direção vertical como [(ySbIdx >> ( SubHeightC − 1 ) << ( SubHeightC − 1 ))]; Outro sub-bloco de luma selecionado pode ser representado por um índice de sub-bloco na direção horizontal como [( xSbIdx >> (SubWidthC − 1 ) << ( SubWidthC − 1)) + ( SubWidthC − 1 )] e um índice de sub-bloco na direção vertical como [( ySbIdx >> ( SubHeightC − 1 ) << ( SubHeightC − 1 )) + ( SubHeightC − 1 )]). Portanto, a seleção dos blocos de luma para calcular a média de vetores de movimento luma é dependente do formato de croma de imagem. Em particular, seleção dos blocos de luma para calcular a média de vetores de movimento luma é dependente dos fatores de escala de croma SubWidthC e SubHeightC que são determinados com base no formato de croma de imagem//.
[0214] O mvAvgLX obtido acima pode ser processado adicionalmente por: mvAvgLX[ 0 ] = mvAvgLX[ 0 ] >= 0 ? mvAvgLX[ 0 ] >> 1 : −(( −mvAvgLX[ 0 ] ) >> 1 ) mvAvgLX[ 1 ] = mvAvgLX[ 1 ] >= 0 ? mvAvgLX[ 1 ] >> 1 : −(( −mvAvgLX[ 1 ] ) >> 1 ).
[0215] É notado que o modo para calcular a média de vetores de movimento luma apresentado neste documento não está limitado tal como acima e que a função de média na presente divulgação pode ser implementada em modos diferentes.
[0216] Os detalhes de determinação de posições de sub-blocos de luma que são adicionais na determinação do vetor de movimento croma para formatos de croma diferentes serão explicados em combinação com as figuras 10A-10C e as figuras 11A-11C tal como a seguir.
[0217] A figura 10A mostra um exemplo ilustrando blocos de luma e de croma colocalizados que estão incluídos em um bloco de imagem atual (por exemplo, um bloco de codificação) de uma imagem atual, onde o formato de croma da imagem atual é 4:2:0. Tal como mostrado na figura 10A e na tabela 1-1, quando o formato de croma da imagem atual é 4:2:0, o SubWidthC = 2 e SubHeightC = 2. Se a largura do bloco de luma for W e a altura do bloco de luma for H, a largura do bloco de croma correspondente é W/SubWidthC e a altura de um bloco de croma correspondente é H/SubHeightC. Especificamente, para o bloco de imagem atual compreendendo os blocos de luma e de croma colocalizados, o bloco de luma de uma maneira geral contém quatro vezes o número de amostras do bloco de croma correspondente.
[0218] A figura 10B é um exemplo ilustrando blocos de luma e de croma colocalizados que estão incluídos em um bloco de imagem atual de uma imagem atual, onde o formato de croma da imagem atual é 4:2:2. Tal como mostrado na figura 10B e na tabela 1-1 ou 1-2, quando o formato de croma da imagem atual é 4:2:2, o SubWidthC = 2 e SubHeightC = 1. Se a largura do bloco de luma for W e a altura do bloco de luma for H, a largura do bloco de croma correspondente é W/SubWidthC e a altura de um bloco de croma correspondente é H/SubHeightC. Especificamente, para o bloco de imagem atual compreendendo os blocos de luma e de croma colocalizados, o bloco de luma de uma maneira geral contém duas vezes o número de amostras do bloco de croma correspondente.
[0219] A figura 10C é um exemplo ilustrando blocos de luma e de croma colocalizados que estão incluídos em um bloco de imagem atual de uma imagem atual onde o formato de croma da imagem atual é 4:4:4. Tal como mostrado na figura 10C e na tabela 1-1 ou 1-2, quando o formato de croma da imagem atual é 4:4:4, o SubWidthC = 1 e SubHeightC = 1. Se a largura do bloco de luma for W e a altura do bloco de luma for H, a largura do bloco de croma correspondente é W/SubWidthC e a altura de um bloco de croma correspondente é H/SubHeightC. Especificamente, para o bloco de imagem atual compreendendo os blocos de luma e de croma colocalizados, o bloco de luma de uma maneira geral contém o mesmo número de amostras do bloco de croma correspondente.
[0220] A figura 11A é um exemplo ilustrando posições de dois sub-blocos de luma para uma dada posição de um sub-bloco de croma durante derivação de vetores de movimento croma a partir de vetores de movimento luma quando o formato de croma da imagem atual é 4:2:0 tal como mostrado na figura 10A.
[0221] Os índices x e y do sub-bloco de luma colocalizado são determinados usando índices x e y correspondentes de sub-bloco de croma (denotados como xSbIdx, ySbIdx): xSbIdxL = (xSbIdx >> (SubWidthC – 1)) << (SubWidthC – 1); ySbIdxL = (ySbIdx >> (SubHeightC – 1)) << (SubHeightC –
1).
[0222] Dois sub-blocos de luma afins são selecionados para calcular adicionalmente a média de seus vetores de movimento. Posições destes dois sub-blocos são definidas como: - (xSbIdxL, ySbIdxL) e - (xSbIdxL + (SubWidthC-1), ySbIdxL + (SubHeightC-1)).
[0223] Tal como mostrado na figura 11A, no caso de formato YUV 4:2:0, vetores de movimento de dois sub-blocos de luma de um bloco de luma 1010 (tamanho de luma 8x8) em diagonal são usados para calcular a média, e o MV médio é usado para processo de derivação de vetor de movimento de sub-bloco afim para sub-bloco de croma. Em particular, índice do sub-bloco de luma ou sub-bloco de croma 0: xSbIdx = 0, ySbIdx = 0 índice do sub-bloco de luma ou sub-bloco de croma 1: xSbIdx = 1, ySbIdx = 0 índice do sub-bloco de luma ou sub-bloco de croma 2: xSbIdx = 0, ySbIdx= 1 índice do sub-bloco de luma ou sub-bloco de croma 3: xSbIdx = 1, ySbIdx= 1; seguinte ao projeto de 4 variantes, vetor de movimento de cada sub-bloco de croma é derivado com base em valor médio calculado, e o valor médio calculado é obtido com base no vetor de movimento do sub-bloco de luma 0 (mvLX[ 0 ][ 0 ]) e do sub-bloco de luma 3 (mvLX[ 1 ][ 1 ]) que são diagonais.
[0224] A figura 11B é um exemplo ilustrando posições de dois sub-blocos de luma para uma dada posição de um sub-bloco de croma durante derivação de vetores de movimento croma a partir de vetores de movimento luma quando o formato de croma da imagem atual é 4:2:2 tal como mostrado na figura 10B. Tal como mostrado na figura 11B, no caso de formato YUV 4:2:2, vetores de movimento de dois sub-blocos de luma adjacentes horizontalmente de um bloco de luma 1010 (tamanho de luma 8x8) são usados para calcular a média, e o MV médio é usado para processo de derivação de vetor de movimento de sub-bloco afim para sub-bloco de croma. Em particular, índice do sub-bloco de luma ou sub-bloco de croma 0: xSbIdx = 0, ySbIdx = 0 índice do sub-bloco de luma ou sub-bloco de croma 1: xSbIdx = 1, ySbIdx = 0 índice do sub-bloco de luma ou sub-bloco de croma 2: xSbIdx = 0, ySbIdx= 1 índice do sub-bloco de luma ou sub-bloco de croma 3: xSbIdx = 1, ySbIdx= 1; seguinte ao projeto de 4 variantes indicado acima, o vetor de movimento de cada sub-bloco de croma na primeira linha de um bloco de croma 920 é derivado com base em valor médio calculado, e o valor médio calculado é obtido com base nos vetores de movimento do sub-bloco de luma 0 (mvLX[ 0 ][ 0 ]) e do sub-bloco de luma 1 (mvLX[ 1 ][ 0 ]) que são adjacentes horizontalmente. O vetor de movimento de cada sub-bloco de croma na segunda linha do bloco de croma 920 é derivado com base em valor médio calculado, e o valor médio calculado é obtido com base nos vetores de movimento do sub-bloco de luma 2 (mvLX[ 0 ][ 1 ]) e do sub-bloco de luma 3 (mvLX[ 1 ][ 1 ]) que são adjacentes horizontalmente.
[0225] A figura 11C é um exemplo ilustrando uma posição de um sub-bloco de luma para uma dada posição de um sub-bloco de croma durante derivação de vetores de movimento croma a partir de vetores de movimento luma quando o formato de croma da imagem atual é 4:4:4 tal como mostrado na figura 10C.
[0226] Tal como mostrado na figura 11C, no caso de formato YUV 4:4:4, o(s) vetor(es) de movimento do sub-bloco de luma colocalizado de um bloco de luma 1010 (tamanho de luma 8x8) é(são) usado(s) para cada sub-bloco de croma para realizar predição afim, isto é, processo de derivação de vetor de movimento de sub-bloco afim para croma é o mesmo que para luma.
[0227] Deve ser entendido que cálculo de média não é exigido, isto é, o vetor de movimento pode ser determinado ao usar o vetor de movimento do sub-bloco de luma colocalizado ou esta operação de cálculo de média utilizará como uma entrada o mesmo MV duas vezes e gerará o mesmo vetor de movimento como a saída. O tamanho de sub- bloco de luma ou de croma pode ser o tamanho 4x4.
[0228] A figura 12A mostra vários exemplos de subconjunto S que compreendem posições de sub-blocos de luma para a dada posição de sub-bloco de croma quando o formato de croma é definido para 4:4:4. Neste exemplo, quatro casos de derivação de subconjunto S são considerados.
[0229] Em um primeiro caso, uma posição de croma “A” (1201) tem blocos de luma vizinhos correspondentes localizados nas posições “A” (1202).
[0230] Em um segundo caso, uma posição de croma “B” (1203) é selecionada no contorno inferior do bloco de croma. Neste caso (exceto a posição inferior direita), as posições correspondentes 1204 de sub-blocos de luma pertencendo a S são selecionadas para serem adjacentes horizontalmente.
[0231] Em um terceiro caso, uma posição de croma “C” (1205) é selecionada no contorno direito do bloco de croma. Neste caso (exceto a posição inferior direita), as posições correspondentes 1206 de sub-blocos de luma pertencendo a S são selecionadas para serem adjacentes verticalmente.
[0232] Em um quarto caso, uma posição de croma “D” (1207) é selecionada no canto direito inferior do bloco de croma. Neste caso, o conjunto S compreende um único sub- bloco de luma que está localizado no canto direito inferior do bloco de luma.
[0233] A figura 12B mostra outra modalidade para obter subconjunto S. Nesta modalidade, blocos de croma localizados no contorno de bloco de croma têm posições correspondentes no bloco de luma tal como no quarto caso “D” mostrado na figura 12A.
[0234] Nas modalidades da presente divulgação descrita acima, o número de sub-blocos de croma é o mesmo que o número de sub-blocos de luma colocalizados no caso em que subamostragem de croma é usada. Em particular, o número de sub-blocos de luma em direção horizontal numSbX é o mesmo que o número de sub-blocos de croma em direção horizontal numSbX, e o número de sub-blocos de luma na direção vertical numSbY é o mesmo que o número de sub- blocos de croma em direção vertical numSbY. Portanto, tamanhos de sub-blocos de croma são diferentes dos tamanhos de sub-blocos de luma colocalizados no caso em que subamostragem de croma é usada.
[0235] Em outros cenários, os tamanhos dos sub- blocos de croma e sub-blocos de luma são mantidos os mesmos independentemente do formato de croma. Nestes cenários, o número de sub-blocos de croma em um bloco de croma e o número de sub-blocos de luma em um bloco de luma colocalizado podem ser diferentes. A modalidade exposta a seguir diz respeito à derivação de vetor de movimento croma para sub-blocos do mesmo tamanho para componente de croma e de luma. Isto é, para uma imagem atual compreendendo um bloco de imagem atual compreendendo blocos de luma e de croma colocalizados, o bloco de luma da imagem atual inclui um conjunto de sub-blocos de luma dimensionados igualmente, e o bloco de croma da imagem atual inclui um conjunto de sub-blocos de croma dimensionados igualmente, e o tamanho de um sub-bloco de croma é definido para ser igual ao tamanho de um sub-bloco de luma. Pode ser entendido que o número de sub-blocos de croma é diferente do número de sub- blocos de luma colocalizados no caso em que subamostragem de croma é usada. Em particular, o número de sub-blocos de luma ao longo da direção horizontal, numSbX, é diferente do número de sub-blocos de croma ao longo da direção horizontal, numSbX, e o número de sub-blocos de luma ao longo da direção vertical, numSbY, é diferente do número de sub-blocos de croma ao longo da direção vertical, numSbY.
[0236] Tal como mostrado na figura 13A, no caso do formato YUV 4:2:0, por exemplo, o bloco de luma da imagem atual tem um tamanho de 8x8, quatro sub-blocos de luma dimensionados igualmente são incluídos no bloco de luma, e um conjunto de sub-blocos de croma dimensionados igualmente é incluído no bloco de croma da imagem atual (um sub-bloco de croma = o bloco de croma), em que o tamanho de um sub- bloco de croma é definido para ser igual ao tamanho de um sub-bloco de luma. Vetores de movimento de dois sub-blocos de luma em diagonal têm a média calculada, e o MV médio é usado para processo de derivação de vetor de movimento de sub-bloco afim para o sub-bloco de croma. Em particular, uma vez que o número de sub-blocos é diferente, xSbIdx (o índice de sub-bloco do sub-bloco de luma na direção horizontal) mudaria com um tamanho de passo de SubWidth e ySbIdx (o índice de sub-bloco do sub-bloco de luma na direção vertical) mudaria com um tamanho de passo de SubHeightC. Por exemplo, para o formato 4:2:0, xSbIdx = 0, 2, 4, 6 ..., e ySbIdx = 0, 2, 4, 6 ......
[0237] Tal mostrado na figura 13B, no caso do formato YUV 4:2:2, vetores de movimento de dois sub-blocos de luma adjacentes horizontalmente são usados para calcular a média de acordo com equação da variante 4 indicada acima a fim de gerar o vetor de movimento para um sub-bloco de croma. O MV médio é usado para processo de derivação de vetor de movimento de sub-bloco afim para o sub-bloco de croma. Em particular, uma vez que o número de sub-blocos é diferente, xSbIdx mudaria com um tamanho de passo de SubWidth e ySbIdx mudaria com um tamanho de passo de SubHeightC. Por exemplo, para 4:2:2, xSbIdx = 0, 2, 4, 8 ... e ySbIdx = 0, 1, 2, 3 ...
[0238] Tal como mostrado na figura 13C, no caso do formato YUV 4:4:4, tanto número quanto tamanho são iguais para sub-blocos de luma e sub-blocos de croma. Neste caso,
para cada sub-bloco de croma, o(s) vetor(es) de movimento do sub-bloco de luma colocalizado é(são) usado(s) para realizar predição afim. Em outras palavras, o processo de derivação de vetor de movimento de sub-bloco afim para o bloco de croma é mesmo que aquele para o bloco de luma. Por exemplo, para o formato 4:4:4, xSbIdx = 0, 1, 2, 3 ... e ySbIdx = 0, 1, 2, 3 ... Deve ser notado que, neste caso, a operação de cálculo de média especificada na equação da variante 4 indicada acima não precisa ser realizada porque os dois sub-blocos usados para calcular a média são iguais e a operação de cálculo de média produziria o mesmo valor da entrada. Como tal, neste caso, o vetor de movimento do sub-bloco de luma pode ser selecionado para o sub-bloco de croma sem passar pela operação de cálculo de média formulada na equação de qualquer variante anterior.
[0239] A partir do exposto anteriormente, pode ser visto que um bloco terá um número de sub-blocos de croma que difere do número de sub-blocos de luma quando SubWidthC é maior que 1 ou SubHeightC é maior que 1. A figura 14A mostra um exemplo de subdivisão de um bloco de luma 16x16 e a subdivisão de um bloco de croma colocalizado para o formato de croma YUV 4:2:0. Neste exemplo, o bloco de luma é dividido em 16 sub-blocos, cada um tendo um tamanho de 4x4. O bloco de croma tem um tamanho de 8x8 amostras e é subdividido em um total de 4 sub-blocos, cada um tendo um tamanho de 4x4 amostras. Estes 4 sub-blocos de croma são agrupados em 2 linhas com cada linha tendo 2 sub-blocos. As letras “A”, “B”, “C” e “D” indicam quais sub-blocos de luma são usados para derivar um vetor de movimento para um sub- bloco de croma correspondente denotado com a mesma letra.
[0240] A figura 14B ilustra a subdivisão de um bloco de luma 16x16 e seu bloco de croma colocalizado em uma imagem tendo um formato de croma YUV 4:2:2. Neste caso, o bloco de croma tem um tamanho de 8x16 amostras e é subdividido em um total de 8 sub-blocos agrupados em 4 linhas com cada linha tendo 2 sub-blocos. Cada sub-bloco de luma e de sub-bloco de croma tem um tamanho de 4x4 amostras. As letras “A”, “B”, “C”, “D”, “E”, “F”, “G” e “H” indicam quais sub-blocos de luma são usados para derivar um vetor de movimento para um sub-bloco de croma correspondente denotado com a mesma letra.
[0241] Assumindo que o bloco de luma é subdividido em numSbY linhas de sub-blocos, cada linha tendo numSbX sub-blocos, e que um vetor de movimento é especificado ou obtido para cada um dos sub-blocos de luma, a modalidade apresentada neste documento pode ser especificada como segue.
[0242] 1. A primeira etapa é para determinar valores de SubWidthC e SubHeightC com base na informação de formato de croma indicando o formato de croma da imagem (ou quadro) de codificação ou decodificação atual. Por exemplo, a informação de formato de croma pode conter informação apresentada na tabela anterior 1-1 ou 1-2.
[0243] 2. A segunda etapa pode incluir: obter o número de sub-blocos de croma ao longo da direção horizontal, numCSbX, e o número de sub-blocos de croma ao longo das direções verticais, numCSbY, como segue: numCSbX = numSbX >>( SubWidthC – 1), em que numSbX é o número de sub-blocos de luma em um bloco de luma ao longo da direção horizontal;
numCSbY = numSbY >>( SubHeightC – 1), em que numSbY é o número de sub-blocos de luma no bloco de luma ao longo da direção vertical.
[0244] O bloco de luma pode ser um bloco de codificação ou decodificação atualmente de uma imagem de codificação ou decodificação atualmente.
[0245] 3. Indicando um sub-bloco de croma localizado na linha yCSbIdx e coluna xCSbIdx usando os índices espaciais (xCSbIdx, yCSbIdx), onde xCSbIdx = 0..., numCSbX – 1 e yCSbIdx = 0.. numCSbY − 1, o valor do vetor de movimento croma para o sub-bloco de croma pode ser determinado como segue: índices espaciais (xSbIdxL, ySbIdxL) do sub-bloco de luma colocalizado são determinados como segue: xSbIdxL = xCSbIdx << (SubWidthC – 1); ySbIdxL = yCSbIdx << (SubHeightC – 1).
[0246] Posição espacial de um sub-bloco de croma (sbX, sbY) dentro de um bloco de croma pode ser derivada usando índices espaciais (xCSbIdx, yCSbIdx) como segue: sbX = xCSbIdx * sbX; sbY = yCSbIdx * sbY.
[0247] O mesmo se aplica para determinação de uma posição espacial para sub-bloco de luma dentro de um bloco de luma usando índices espaciais (xSbIdx, ySbIdx) de um sub-bloco de luma: sbX = xSbIdx * sbX; sbY = ySbIdx * sbY.
[0248] Os índices espaciais determinados do sub- bloco de luma colocalizado (xSbIdxL, ySbIdxL) podem ser usados adicionalmente na determinação do vetor de movimento croma. Por exemplo, um conjunto de sub-blocos de luma pode ser definido tal como descrito a seguir: S0 = (xSbIdxL, ySbIdxL) S1 = (xSbIdxL+ (SubWidthC-1), ySbIdxL + (SubHeightC-1)).
[0249] Neste exemplo, o conjunto de sub-blocos de luma inclui dois sub-blocos indexados por S0 e S1 calculados acima. Cada um de S0 e S1 inclui um par de índices espaciais definindo uma posição de sub-bloco.
[0250] O conjunto de sub-blocos de luma é usado para calcular o vetor de movimento médio mvAvgLX. Aqui e em definições de vetor de movimento usadas no exposto a seguir, X pode ser 0 ou 1, indicando correspondentemente índice de lista de referências para um vetor de movimento sendo L0 ou L1. L0 indica uma lista de referências 0, e L1 indica uma lista de referências 1. É assumido que cálculo de um vetor de movimento é realizado independentemente ao aplicar fórmulas correspondentes para componente horizontal mvAvgLX[ 0 ] e componente vertical mvAvgLX[ 1 ] do vetor de movimento.
[0251] Se um vetor de movimento luma de um sub- bloco com índices espaciais (xSbIdxL, ySbIdxL) for denotado como mvLX[ xSbIdxL ][ ySbIdxL ], vetor de movimento médio mvAvgLX pode ser obtido como segue: mvAvgLX = ∑ mvLX[ S ] [S ] mvAvgLX = mvAvgLX >= 0 ? mvAvgLX >> 1 : −(( −mvAvgLX ) >> 1 ) onde 𝑆 e 𝑆 são índices espaciais horizontal e vertical de um elemento Si tal como discutido acima, em que 𝑖 = 0, 1.
[0252] O vetor de movimento de um sub-bloco de croma mvCLX com índices espaciais (xCSbIdx, yCSbIdx) é obtido do vetor de movimento médio mvAvgLX como segue: mvCLX[ 0 ] = mvAvgLX[ 0 ] * 2 / SubWidthC mvCLX[ 1 ] = mvAvgLX[ 1 ] * 2 / SubHeightC.
[0253] Os detalhes do processo de derivação para os vetores de movimento luma e croma de acordo com as modalidades apresentadas neste documento são descritos a seguir no formato de uma parte do relatório descritivo do esboço de VVC.
[0254] 8.5.5.9 Processo de derivação para matrizes de vetores de movimento a partir de vetores de movimento de ponto de controle afim entradas para este processo são: - uma localização de luma ( xCb, yCb ) da amostra esquerda superior do bloco de codificação de luma atual em relação à amostra de luma esquerda superior da imagem atual, - duas variáveis cbWidth e cbHeight especificando a largura e a altura do bloco de codificação de luma, respectivamente, - o número de vetores de movimento de ponto de controle numCpMv, - os vetores de movimento de ponto de controle cpMvLX[ cpIdx ], com cpIdx = 0..numCpMv - 1 e X sendo 0 ou 1, - o índice de referência refIdxLX e X sendo 0 ou 1, - o número de sub-blocos de codificação de luma em direção horizontal (numSbX) e em direção vertical (numSbY).
[0255] Saídas deste processo são: - a matriz de vetores de movimento de sub-bloco de luma mvLX[ xSbIdx ][ ySbIdx ] com xSbIdx = 0..numSbX - 1, ySbIdx
= 0.. numSbY - 1 e X sendo 0 ou 1, - a matriz de vetores de movimento de sub-bloco de croma mvCLX[ xSbIdx ][ ySbIdx ] com xSbIdx = 0..numSbX - 1, ySbIdx = 0.. numSbY - 1 e X sendo 0 ou 1.
[0256] As designações seguintes são feitas para x = xCb..xCb + cbWidth - 1 e y = yCb..yCb + cbHeight - 1: CpMvLX[ x ][ y ][ 0 ] = cpMvLX[ 0 ] CpMvLX[ x ][ y ][ 1 ] = cpMvLX[ 1 ] CpMvLX[ x ][ y ][ 2 ] = cpMvLX[ 2 ].
[0257] As variáveis log2CbW e log2CbH são derivadas como segue: log2CbW = Log2( cbWidth ) log2CbH = Log2( cbHeight ).
[0258] As variáveis mvScaleHor, mvScaleVer, dHorX e dVerX são derivadas como segue: mvScaleHor = cpMvLX[ 0 ][ 0 ] << 7 mvScaleVer = cpMvLX[ 0 ][ 1 ] << 7 dHorX = ( cpMvLX[ 1 ][ 0 ] - cpMvLX[ 0 ][ 0 ] ) << ( 7 - log2CbW ) dVerX = ( cpMvLX[ 1 ][ 1 ] - cpMvLX[ 0 ][ 1 ] ) << ( 7 - log2CbW ).
[0259] As variáveis dHorY e dVerY são derivadas como segue: - se numCpMv for igual a 3, o seguinte se aplica: dHorY = ( cpMvLX[ 2 ][ 0 ] - cpMvLX[ 0 ][ 0 ] ) << ( 7 - log2CbH ) dVerY = ( cpMvLX[ 2 ][ 1 ] - cpMvLX[ 0 ][ 1 ] ) << ( 7 - log2CbH - de outro modo (numCpMv é igual a 2), o seguinte se aplica:
dHorY = - dVerX dVerY = dHorX.
[0260] Para xSbIdx = 0..numSbX - 1 e ySbIdx =
0..numSbY - 1, o seguinte se aplica: - o vetor de movimento luma mvLX[ xSbIdx ][ ySbIdx ] é derivado como a seguir : xPosCb = 2 + ( xSbIdx << 2 ) yPosCb = 2 + ( ySbIdx << 2 ) mvLX[ xSbIdx ][ ySbIdx ][ 0 ] = ( mvScaleHor + dHorX * xPosCb + dHorY * yPosCb ) mvLX[ xSbIdx ][ ySbIdx ][ 1 ] = ( mvScaleVer + dVerX * xPosCb + dVerY * yPosCb ) - o processo de arredondamento para vetores de movimento tal como especificado na cláusula 8.5.2.14 é chamado com mvX definido igual a mvLX[ xSbIdx ][ ySbIdx ], rightShift definido igual a 7, e leftShift definido igual a 0 como entradas e o mvLX[ xSbIdx ][ ySbIdx ] arredondado como saída; - os vetores de movimento mvLX[ xSbIdx ][ ySbIdx ] são recortados como segue: mvLX[ xSbIdx ][ ySbIdx ][ 0 ] = Clip3( -217, 217 - 1, mvLX[ xSbIdx ][ ySbIdx ][ 0 ] ) mvLX[ xSbIdx ][ ySbIdx ][ 1 ] = Clip3( -217, 217 - 1, mvLX[ xSbIdx ][ ySbIdx ][ 1 ] ).
[0261] As variáveis numCSbX e numCSbY são definidas como segue: numCSbX = numCSbX >> (SubWidthC - 1) numCSbY = numCSbY >> (SubHeightC - 1).
[0262] Deve ser notado que esta modalidade é diferente de modalidades anteriores. Nas modalidades anteriores, o número de sub-blocos de luma em um bloco de luma e o número de sub-blocos de croma no bloco de croma colocalizado são iguais. Nesta modalidade, entretanto, para formatos de croma 4:2:0 e 4:2:2, o número de sub-blocos de luma em um bloco de luma e o número de sub-blocos de croma no bloco de croma colocalizado são diferentes. Porque o número de sub-blocos é diferente no bloco de croma e no bloco de luma, xSbIdx mudaria com um tamanho de passo de SubWidth e ySbIdx mudaria com um tamanho de passo de SubHeightC tal como pode ser visto a seguir.
[0263] Para xCSbIdx = 0..numCSbX - 1 e yCSbIdx =
0..numCSbY - 1, o seguinte se aplica: - o vetor de movimento luma médio mvAvgLX é derivado como segue: - se SubWidthC == 1 e SubHeightC == 1 mvAvgLX = mvLX[ xCSbIdx ][ yCSbIdx ] - de outro modo, - xSbIdxL = xCSbIdx << (SubWidthC - 1) - ySbIdxL = yCSbIdx << (SubHeightC - 1) - mvAvgLX = mvLX[ xSbIdxL ][ ySbIdxL ] + mvLX[ xSbIdxL + (SubWidthC−1)][ ySbIdxL+ (SubHeightC−1)] mvAvgLX[ 0 ] = mvAvgLX[ 0 ] >= 0 ? ( mvAvgLX[ 0 ] ) >> 1 : −(( −mvAvgLX[ 0 ] ) >> 1 ) mvAvgLX[ 1 ] = mvAvgLX[ 1 ] >= 0 ? ( mvAvgLX[ 1 ] ) >> 1 : −(( −mvAvgLX[ 1 ] ) >> 1 ) - o processo de derivação para vetores de movimento croma na cláusula 8.5.2.13 apresentada a seguir é chamado com mvAvgLX e refIdxLX como entradas, e a matriz de vetores de movimento croma mvCLXSub[ xCSbIdx ][ yCSbIdx ] como saída;
- a matriz de vetores de movimento de sub-bloco de croma mvCLX[ xSbIdx ][ ySbIdx ] com xSbIdx = 0..numSbX - 1, ySbIdx = 0.. numSbY - 1 está sendo derivada de mvCLXSub como segue: mvCLX[ xSbIdx ][ ySbIdx ] = mvCLXSub[ xSbIdx>>(SubWidthC-1)][ ySbIdx >> (SubHeightC - 1)].
[0264] Deve ser notado que a operação de cálculo de média apresentada anteriormente é para propósito de ilustração e não deve ser interpretada como limitação. Vários outros modos para realizar uma operação de cálculo de média podem ser utilizados na determinação dos vetores de movimento croma a partir de vetores de movimento luma.
[0265] 8.5.2.13 Processo de derivação para vetores de movimento croma entradas para este processo são: - um vetor de movimento luma em precisão de amostra fracionária de 1/16 mvLX, - o índice de referência refIdxLX.
[0266] Saída deste processo é um vetor de movimento croma em precisão de amostra fracionária de 1/32 mvCLX.
[0267] Um vetor de movimento croma é derivado do correspondendo vetor de movimento luma.
[0268] O vetor de movimento croma mvCLX é derivado como segue: mvCLX[ 0 ] = mvLX[ 0 ] * 2 / SubWidthC mvCLX[ 1 ] = mvLX[ 1 ] * 2 / SubHeightC.
[0269] As operações deste processo de derivação dependem de como este processo é chamado. Por exemplo, anteriormente foi descrito que “o processo de derivação para vetores de movimento croma na cláusula 8.5.2.13 é chamado com mvAvgLX e refIdxLX como entradas, e a matriz de vetores de movimento croma mvCLXSub[ xCSbIdx ][ yCSbIdx ] como saída”. Neste exemplo, mvLX na seção 8.5.2.13 descrita neste documento será substituída por mvAvgLX a fim de executar as operações tal como ela é chamada.
[0270] Existem aspectos adicionais se relacionando com as modalidades que consideram um deslocamento entre posições subamostradas de amostras de croma em relação à posição de amostras de luma. Modalidade exemplar é para definir ou determinar um conjunto S de sub-blocos de luma de acordo com o valor de “sps_cclm_colocated_chroma_flag”. Em específico, - quando SubHeightC = 1 e SubWidthC = 2 e sps_cclm_colocated_chroma_flag é definido igual a 1, o conjunto S é composto de um único elemento S0 = (xSbIdxL, ySbIdxL) - de outro modo, o conjunto S inclui S0 = (xSbIdxL, ySbIdxL) S1 = (xSbIdxL+ (SubWidthC-1), ySbIdxL + (SubHeightC- 1)).
[0271] Outra modalidade exemplar introduz uma dependência entre a determinação de vetor de movimento médio e o valor de “sps_cclm_colocated_chroma_flag”. Em particular, pesos são introduzidos nas operações de cálculo de média e podem ser especificados de modo diferente para sub-blocos de luma diferentes. Um processo exemplar de derivação de vetor de movimento médio é como segue: - xSbIdxL = xCSbIdx << (SubWidthC - 1) - ySbIdxL = yCSbIdx << (SubHeightC - 1)
- sps_cclm_colocated_chroma_flag é definido igual a 1, coeficientes de ponderação w0 e w1 são definidos como segue: w0=5, w1=3; mvAvgLX = w0 * mvLX[ xSbIdxL ][ ySbIdxL ] + + w1 * mvLX[ xSbIdxL + (SubWidthC-1)][ ySbIdxL+ (SubHeightC-1)] mvAvgLX[ 0 ] = mvAvgLX[ 0 ] >= 0 ? ( mvAvgLX[ 0 ] + 3 ) >>3 : - (( -mvAvgLX[ 0 ] +3) >> 3 ) mvAvgLX[ 1 ] = mvAvgLX[ 1 ] >= 0 ? ( mvAvgLX[ 1 ] + 3 ) >> 3 : - (( -mvAvgLX[ 1 ] +3) >> 3 ).
[0272] Deve ser notado que a operação de cálculo de média apresentada neste exemplo é para propósito de ilustração e não deve ser interpretada como limitação. Vários outros modos para realizar uma operação de cálculo de média podem ser utilizados na determinação dos vetores de movimento croma a partir de vetores de movimento luma.
[0273] A figura 15 é um fluxograma de um método de exemplo 1300 para predição inter baseada em afim de sub- blocos de croma, o método compreendendo: na etapa 1501, determinar fatores de escala de croma em direções horizontal e vertical com base em informação de formato de croma, em que a informação de formato de croma indica um formato de croma de uma imagem atual à qual o bloco de imagem atual pertence; na etapa 1503, determinar um conjunto (S) de sub-blocos de luma do bloco de luma com base em valores dos fatores de escala de croma; e na etapa 1505, determinar um vetor de movimento para um sub-bloco de croma do bloco de croma com base em vetores de movimento de um ou mais sub-blocos de luma no conjunto (S)
de sub-blocos de luma.
[0274] A figura 16 é um fluxograma de outro método de exemplo 1300 para predição inter baseada em afim de sub- blocos de croma, o método compreendendo: na etapa 1601, determinar fatores de escala de croma em direções horizontal e vertical com base em informação de formato de croma, em que a informação de formato de croma indica um formato de croma de uma imagem atual à qual o bloco de imagem atual pertence; na etapa 1603, determinar um valor de um vetor de movimento para cada sub-bloco de luma em uma pluralidade de sub-blocos de luma, em que os N sub-blocos de luma estão incluídos no bloco de luma; na etapa 1605, calcular a média de vetores de movimento dos sub-blocos de luma no conjunto S de sub-blocos de luma, em que o conjunto (S) é determinado com base nos fatores de escala de croma; e na etapa 1607, para um sub-bloco de croma em uma pluralidade de sub-blocos de croma, derivar o vetor de movimento para o sub-bloco de croma com base no vetor de movimento luma médio, em que os sub-blocos de croma estão incluídos no bloco de croma.
[0275] A presente invenção divulga um método para considerar o formato de croma da imagem ao obter vetores de movimento croma a partir de vetores de movimento luma. Ao utilizar uma média de vetores de movimento luma, subamostragem linear de campo de movimento luma é realizada. Quando planos de cores croma têm a mesma altura do plano luma, é julgado mais apropriado selecionar vetores de movimento de blocos de luma que são adjacentes horizontalmente, de maneira que eles têm a mesma posição vertical. Seleção de vetores de movimento luma que é dependente de formato de croma de imagem resulta em um campo de movimento croma mais preciso por causa de uma subamostragem de campo de vetor de movimento luma mais precisa. Esta dependência em formato de croma capacita selecionar as posições dos blocos de luma mais apropriados ao calcular a média de vetores de movimento luma. Como uma consequência de uma interpolação de campo de movimento mais precisa, erro de predição é reduzido, o que tem um resultado técnico em um melhoramento de desempenho de compressão.
[0276] Além disso, quando um número de sub-blocos de croma é definido para ser igual ao número de sub-blocos de luma, e quando um tamanho de plano de cor croma não é igual ao tamanho de plano luma, vetores de movimento de sub-blocos de croma adjacentes podem assumir o mesmo valor. Ao implementar estas etapas de processamento, uma otimização pode ser realizada ao saltar a etapa de cálculo de valores repetidos. A invenção proposta divulga um método para definir um tamanho de sub-bloco de croma igual ao tamanho de sub-bloco de luma. Neste caso, implementação pode ser simplificada ao uniformizar processamento de luma e croma, e cálculos de vetores de movimento redundantes são evitados naturalmente.
[0277] A figura 17 ilustra um dispositivo para predição inter baseada em afim de acordo com outro aspecto da invenção. O dispositivo 1700 compreende: um módulo de determinação 1701 configurado para determinar fatores de escala de croma em direções horizontal e vertical com base em informação de formato de croma, em que a informação de formato de croma indica um formato de croma de uma imagem atual à qual o bloco de imagem atual pertence; e determinar um conjunto (S) de sub- blocos de luma do bloco de luma com base em valores dos fatores de escala de croma; e um módulo de derivação de vetor de movimento 1703 configurado para determinar um vetor de movimento para um sub-bloco de croma do bloco de croma com base em vetores de movimento de um ou mais sub-blocos de luma no conjunto (S) de sub-blocos de luma.
[0278] Em um exemplo, um módulo de derivação de vetor de movimento 1703 pode compreender: um módulo de derivação de vetor de movimento luma 1703a configurado para determinar um valor de um vetor de movimento para cada sub-bloco de luma em uma pluralidade de sub-blocos de luma, em que uma pluralidade de sub-blocos de luma está incluída no bloco de luma; um módulo de derivação de vetor de movimento croma 1703b configurado para, para um sub-bloco de croma em uma pluralidade de sub-blocos de croma, determinar um vetor de movimento para o sub-bloco de croma com base no vetor de movimento de pelo menos um sub-bloco de luma em um conjunto (S) de sub-blocos de luma, em que o conjunto (S) é determinado com base nos fatores de escala de croma; em que os sub-blocos de croma estão incluídos no bloco de croma. Em projeto de tamanho igual, uma pluralidade de sub-blocos de croma pode compreender somente um sub-bloco de croma.
[0279] O dispositivo 1700 compreende adicionalmente: um módulo de compensação de movimento 1705 configurado para gerar a predição do sub-bloco de croma com base no vetor de movimento determinado.
[0280] Correspondentemente, em um exemplo, uma estrutura de exemplo do dispositivo 1700 pode corresponder ao codificador 200 na figura 2. Em outro exemplo, uma estrutura de exemplo do dispositivo 1700 pode corresponder ao decodificador 300 na figura 3. Em outro exemplo, uma estrutura de exemplo do dispositivo 1700 pode corresponder à unidade de predição inter 244 na figura 2. Em outro exemplo, uma estrutura de exemplo do dispositivo 1700 pode corresponder à unidade de predição inter 344 na figura 3.
[0281] A presente divulgação fornece os aspectos adicionais seguintes.
[0282] De acordo com um primeiro aspecto da invenção, um método de derivação de vetor de movimento croma usado em compensação de movimento afim de uma unidade interpredita, PU, uma PU que compreende blocos de luma e de croma colocalizados, é fornecido, o método compreendendo: determinar fatores de escala de croma em direções horizontal e vertical (SubWidthC e SubHeightC) com base em um formato de croma de uma imagem atual (por exemplo, imagem de codificação ou decodificação atual); dividir um bloco de luma da imagem atual em um primeiro conjunto de sub-blocos de luma; obter um valor de um vetor de movimento para cada sub- bloco de luma no primeiro conjunto de sub-blocos de luma; dividir um bloco de croma da imagem atual (em um exemplo, o bloco de croma e o bloco de luma estão compreendidos na mesma PU) em um conjunto de sub-blocos de croma;
para um sub-bloco de croma no conjunto de sub-blocos de croma, determinar um segundo conjunto de sub-blocos de luma (S), em que as posições de sub-blocos de luma no segundo conjunto são determinadas pelo formato de croma da imagem atual; e derivar vetor de movimento para o sub-bloco de croma com base nos vetores de movimento dos sub-blocos de luma no segundo conjunto S.
[0283] Em uma forma de implementação possível do método de acordo com o primeiro aspecto como tal, o segundo conjunto de sub-blocos de luma (S) compreende qualquer combinação dos seguintes sub-blocos: S0 = (xSbIdxL, ySbIdxL) S1 = (xSbIdxL, ySbIdxL + (SubHeightC-1)) S2 = (xSbIdxL+ (SubWidthC-1), ySbIdxL) S3 = (xSbIdxL+ (SubWidthC-1), ySbIdxL + (SubHeightC- 1)).
[0284] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal, em que o segundo conjunto de sub-blocos de luma (S) compreende dois sub-blocos: S0 = (xSbIdxL, ySbIdxL) S1 = (xSbIdxL+ (SubWidthC-1), ySbIdxL + (SubHeightC- 1)).
[0285] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal, em que derivar vetor de movimento para o sub-bloco de croma com base nos vetores de movimento dos sub-blocos de luma no segundo conjunto S compreende calcular a média de vetores de movimento dos sub-blocos de luma no segundo conjunto S.
[0286] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal, em que calcular a média de vetores de movimento dos sub-blocos de luma no segundo conjunto S compreende as seguintes etapas: mvAvgLX = ∑ mvLX[𝑆 ][𝑆 ] mvAvgLX[ 0 ] = ( mvAvgLX[ 0 ] + N>>1) >> log2(N) mvAvgLX[ 1 ] = ( mvAvgLX[ 1 ] + N>>1) >> log2(N), onde mvAvgLX é um resultado de cálculo de média, mvAvgLX[ 0 ] é um componente horizontal do vetor de movimento mvAvgLX, mvAvgLX[ 1 ] é um componente vertical do vetor de movimento mvAvgLX, 𝑆 e 𝑆 são índices horizontal e vertical de sub-bloco Si em matriz de vetores de movimento, mvLX[𝑆 ][𝑆 ] é um vetor de movimento de sub-bloco de luma com índices 𝑆 e 𝑆 , N é um número de elementos no segundo conjunto de sub-blocos de luma (S), log2(N) é a potência à qual o número 2 deve ser elevado para obter o valor N e “>>” é um deslocamento aritmético para a direita.
[0287] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do primeiro aspecto ou o primeiro aspecto como tal, em que calcular a média de vetores de movimento dos sub-blocos de luma no segundo conjunto S compreende as seguintes etapas: mvAvgLX = ∑ mvLX[𝑆 ][𝑆 ] se mvAvgLX[ 0 ] é maior ou igual a 0 então mvAvgLX[ 0 ] = ( mvAvgLX[ 0 ] + N>>1) >> log2(N), de outro modo, mvAvgLX[ 0 ] = − ((− mvAvgLX[ 0 ] + N>>1 ) >> log2(N))
se mvAvgLX[ 1 ] é maior ou igual a 0 então mvAvgLX[ 1 ] = ( mvAvgLX[ 1 ] + N>>1) >> log2(N), de outro modo, mvAvgLX[ 1 ] = − ((− mvAvgLX[ 1 ] + N>>1 ) >> log2(N)), onde mvAvgLX é um resultado de cálculo de média, mvAvgLX[ 0 ] é um componente horizontal do vetor de movimento mvAvgLX, mvAvgLX[ 1 ] é um componente vertical do vetor de movimento mvAvgLX, 𝑆 e 𝑆 são índices horizontal e vertical de sub-bloco Si em matriz de vetores de movimento, mvLX[𝑆 ][𝑆 ] é um vetor de movimento de sub-bloco de luma com índices 𝑆 e 𝑆 , N é um número de elementos no segundo conjunto de sub-blocos de luma (S), log2(N) é a potência à qual o número 2 deve ser elevado para obter o valor N e “>>” é um deslocamento aritmético para a direita.
[0288] De acordo com um segundo aspecto da invenção, um método de derivação de vetor de movimento croma usado em compensação de movimento afim de uma unidade interpredita, PU, compreendendo blocos de luma e de croma colocalizados é fornecido, o método compreendendo: obter um primeiro conjunto de sub-blocos de luma, em que o primeiro conjunto de sub-blocos de luma está incluído em um bloco de luma de uma imagem atual (por exemplo, imagem de codificação ou decodificação atual); obter um valor de um vetor de movimento para cada sub- bloco de luma no primeiro conjunto de sub-blocos de luma; obter um conjunto de sub-blocos de croma, em que o conjunto de sub-blocos de croma está incluído em um bloco de croma da imagem atual (em um exemplo, o bloco de croma e o bloco de luma estão compreendidos na mesma PU); e derivar um vetor de movimento para o sub-bloco de croma com base nos vetores de movimento dos sub-blocos de luma em um segundo conjunto (S) de sub-blocos de luma, em que, para um sub-bloco de croma no conjunto de sub-blocos de croma, o segundo conjunto (S) de sub-blocos de luma (S) é determinado a partir do primeiro conjunto de sub-blocos de luma de acordo com um formato de croma da imagem atual.
[0289] Em uma forma de implementação possível do método de acordo com o segundo aspecto como tal, em que o segundo conjunto de sub-blocos de luma (S) compreende qualquer combinação dos seguintes sub-blocos: S0 = (xSbIdxL, ySbIdxL) S1 = (xSbIdxL, ySbIdxL + (SubHeightC-1)) S2 = (xSbIdxL+ (SubWidthC-1), ySbIdxL) S3 = (xSbIdxL+ (SubWidthC-1), ySbIdxL + (SubHeightC- 1)).
[0290] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do segundo aspecto ou o segundo aspecto como tal, em que o segundo conjunto de sub-blocos de luma (S) compreende dois sub-blocos: S0 = (xSbIdxL, ySbIdxL) S1 = (xSbIdxL+ (SubWidthC-1), ySbIdxL + (SubHeightC- 1)).
[0291] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do segundo aspecto ou o segundo aspecto como tal, em que derivar vetor de movimento para o sub-bloco de croma com base nos vetores de movimento dos sub-blocos de luma no segundo conjunto S compreende: calcular a média de vetores de movimento dos sub-blocos de luma no segundo conjunto S.
[0292] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do segundo aspecto ou o segundo aspecto como tal, em que calcular a média de vetores de movimento dos sub-blocos de luma no segundo conjunto S compreende: calcular a média de componentes horizontais de vetores de movimento dos sub-blocos de luma no segundo conjunto S; e/ou, calcular a média de componentes verticais de vetores de movimento dos sub-blocos de luma no segundo conjunto S.
[0293] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do segundo aspecto ou o segundo aspecto como tal, em que calcular a média de elementos compreende verificar se a soma de elementos (tal como mvLX[𝑆 ][𝑆 ]) é maior ou igual a 0, no caso em que a soma de elementos é maior ou igual a 0, a soma de elementos é dividida por operação de deslocamento dependendo do número de elementos; de outro modo o absoluto da soma de elementos é dividido por operação de deslocamento dependendo do número de elementos, e valor negativo é obtido do resultado deslocado.
[0294] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do segundo aspecto ou o segundo aspecto como tal, em que a etapa de dividir por operação de deslocamento compreende: arredondar para zero; arredondar para longe de zero; arredondar para longe do infinito; ou arredondar para o infinito.
[0295] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do segundo aspecto ou o segundo aspecto como tal, em que a etapa de calcular a média compreende: calcular a média ou arredondar para longe de zero.
[0296] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do segundo aspecto ou o segundo aspecto como tal, em que a etapa de calcular a média compreende calcular a média ou arredondar para zero.
[0297] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do segundo aspecto ou o segundo aspecto como tal, em que a etapa de calcular a média compreende calcular a média ou arredondar para longe do infinito.
[0298] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do segundo aspecto ou o segundo aspecto como tal, em que a etapa de calcular a média compreende calcular a média ou arredondar na para o infinito.
[0299] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do segundo aspecto ou o segundo aspecto como tal, em que calcular a média de vetores de movimento dos sub-blocos de luma no segundo conjunto S compreende as seguintes etapas: mvAvgLX = ∑ mvLX[𝑆 ][𝑆 ] mvAvgLX[ 0 ] = ( mvAvgLX[ 0 ] + N>>1) >> log2(N) mvAvgLX[ 1 ] = ( mvAvgLX[ 1 ] + N>>1) >> log2(N), onde mvAvgLX é um resultado de cálculo de média,
mvAvgLX[ 0 ] é um componente horizontal do vetor de movimento mvAvgLX, mvAvgLX[ 1 ] é um componente vertical do vetor de movimento mvAvgLX, 𝑆 e 𝑆 são índices horizontal e vertical de sub-bloco Si em matriz de vetores de movimento, mvLX[𝑆 ][𝑆 ] é um vetor de movimento de sub-bloco de luma com índices 𝑆 e 𝑆 , N é um número de elementos no segundo conjunto de sub-blocos de luma (S), log2(N) é a potência à qual o número 2 deve ser elevado para obter o valor N e “>>” é um deslocamento aritmético para a direita.
[0300] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do segundo aspecto ou o segundo aspecto como tal, em que calcular a média de vetores de movimento dos sub-blocos de luma no segundo conjunto S compreende as seguintes etapas: mvAvgLX = ∑ mvLX[𝑆 ][𝑆 ] se mvAvgLX[ 0 ] é maior ou igual a 0 então mvAvgLX[ 0 ] = ( mvAvgLX[ 0 ] + N>>1) >> log2(N), de outro modo, mvAvgLX[ 0 ] = − ((− mvAvgLX[ 0 ] + N>>1 ) >> log2(N)) se mvAvgLX[ 1 ] é maior ou igual a 0 então mvAvgLX[ 1 ] = ( mvAvgLX[ 1 ] + N>>1) >> log2(N), de outro modo, mvAvgLX[ 1 ] = − ((− mvAvgLX[ 1 ] + N>>1 ) >> log2(N)), onde mvAvgLX é um resultado de cálculo de média, mvAvgLX[ 0 ] é um componente horizontal do vetor de movimento mvAvgLX, mvAvgLX[ 1 ] é um componente vertical do vetor de movimento mvAvgLX, 𝑆 e 𝑆 são índices horizontal e vertical de sub-bloco Si em matriz de vetores de movimento, mvLX[𝑆 ][𝑆 ] é um vetor de movimento de sub-bloco de luma com índices 𝑆 e 𝑆 , N é um número de elementos no segundo conjunto de sub-blocos de luma (S), log2(N) é a potência à qual o número 2 deve ser elevado para obter o valor N e “>>” é um deslocamento aritmético para a direita.
[0301] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do segundo aspecto ou o segundo aspecto como tal, em que calcular a média de vetores de movimento dos sub-blocos de luma no segundo conjunto S compreende as seguintes etapas: mvAvgLX = ∑ mvLX[𝑆 ][𝑆 ] se mvAvgLX[ 0 ] é maior ou igual a 0 então mvAvgLX[ 0 ] = ( mvAvgLX[ 0 ] + ( N>>1 ) – 1) >> log2(N), de outro modo, mvAvgLX[ 0 ] = − ((− mvAvgLX[ 0 ] + ( N>>1 ) – 1) >> log2(N)) se mvAvgLX[ 1 ] é maior ou igual a 0 então mvAvgLX[ 1 ] = ( mvAvgLX[ 1 ] + ( N>>1 ) – 1) >> log2(N), de outro modo, mvAvgLX[ 1 ] = − ((− mvAvgLX[ 1 ] + ( N>>1 ) – 1 ) >> log2(N)), onde mvAvgLX é um resultado de cálculo de média, mvAvgLX[ 0 ] é um componente horizontal do vetor de movimento mvAvgLX, mvAvgLX[ 1 ] é um componente vertical do vetor de movimento mvAvgLX, 𝑆 e 𝑆 são índices horizontal e vertical de sub-bloco Si em matriz de vetores de movimento, mvLX[𝑆 ][𝑆 ] é um vetor de movimento de sub-bloco de luma com índices 𝑆 e 𝑆 , N é um número de elementos no segundo conjunto de sub-blocos de luma (S), log2(N) é a potência à qual o número 2 é elevado para obter o valor N e “>>” é um deslocamento aritmético para a direita.
[0302] De acordo com um terceiro aspecto da invenção, um método para compensação de movimento afim de uma imagem atual é fornecido, o método compreende: dividir o bloco de luma da imagem atual em um conjunto de sub-blocos de luma dimensionados igualmente, e dividir o bloco de croma da imagem atual em um conjunto de sub-blocos de croma dimensionados igualmente, em que um tamanho de um sub-bloco de croma é definido igual a um tamanho de um sub-bloco de luma.
[0303] Em uma forma de implementação possível do método de acordo com o terceiro aspecto como tal, em que o método compreende adicionalmente: determinar o número de sub-blocos de croma em direções horizontal e vertical com base em valores de fatores de escala de croma.
[0304] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do terceiro aspecto ou o terceiro aspecto como tal, em que os fatores de escala de croma em direções horizontal e vertical (SubWidthC e SubHeightC) são determinados com base em um formato de croma de uma imagem atual (por exemplo, imagem de codificação ou decodificação atual).
[0305] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do terceiro aspecto ou o terceiro aspecto como tal, em que numCSbX = numSbX >>(SubWidthC-1) e numCSbY = numSbY >>( SubHeightC-1); numCSbX e numCSbY representam o número de sub-blocos de croma em direções horizontal e vertical, respectivamente.
[0306] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do terceiro aspecto ou o terceiro aspecto como tal, em que dividir o bloco de croma da imagem atual compreende: dividir o bloco de croma da imagem atual (em um exemplo, o bloco de croma e o bloco de luma estão compreendidos na mesma PU) em numCSbY linhas, cada linha tendo numCSbX de sub-blocos de croma.
[0307] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do terceiro aspecto ou o terceiro aspecto como tal, em que o método compreende adicionalmente: para cada um dos sub-blocos de croma, determinar um conjunto de sub-blocos de luma (S), em que as posições de sub-blocos de luma no conjunto são determinadas pelo formato de croma da imagem atual; e derivar vetor de movimento para o sub-bloco de croma com base nos vetores de movimento dos sub-blocos de luma no conjunto S.
[0308] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do terceiro aspecto ou o terceiro aspecto como tal, em que o vetor de movimento é definido para cada um dos sub-blocos de luma pertencendo ao conjunto S.
[0309] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do terceiro aspecto ou o terceiro aspecto como tal, em que o conjunto de sub-blocos de luma (S) compreende qualquer combinação dos seguintes sub-blocos: S0 = (xSbIdxL, ySbIdxL) S1 = (xSbIdxL, ySbIdxL + (SubHeightC-1)) S2 = (xSbIdxL+ (SubWidthC-1), ySbIdxL)
S3 = (xSbIdxL+ (SubWidthC-1), ySbIdxL + (SubHeightC- 1)).
[0310] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do terceiro aspecto ou o terceiro aspecto como tal, em que o conjunto de sub-blocos de luma (S) compreende dois sub- blocos: S0 = (xSbIdxL, ySbIdxL) S1 = (xSbIdxL+ (SubWidthC-1), ySbIdxL + (SubHeightC- 1)).
[0311] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do terceiro aspecto ou o terceiro aspecto como tal, em que derivar vetor de movimento para o sub-bloco de croma com base nos vetores de movimento dos sub-blocos de luma no conjunto S compreende calcular a média de vetores de movimento dos sub-blocos de luma no conjunto S.
[0312] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do terceiro aspecto ou o terceiro aspecto como tal, em que calcular a média de vetores de movimento dos sub-blocos de luma no conjunto S compreende: calcular a média de componentes horizontais de vetores de movimento dos sub-blocos de luma no conjunto S; calcular a média de componentes verticais de vetores de movimento dos sub-blocos de luma no conjunto S.
[0313] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do terceiro aspecto ou o terceiro aspecto como tal, em que calcular a média de elementos compreende verificar se a soma de elementos é maior ou igual a 0.
[0314] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do terceiro aspecto ou o terceiro aspecto como tal, em que calcular a média significa calcular a média para longe de zero.
[0315] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do terceiro aspecto ou o terceiro aspecto como tal, em que calcular a média significa calcular a média para zero.
[0316] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do terceiro aspecto ou o terceiro aspecto como tal, em que calcular a média significa calcular a média para longe do infinito.
[0317] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do terceiro aspecto ou o terceiro aspecto como tal, em que calcular a média significa calcular a média para o infinito.
[0318] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do terceiro aspecto ou o terceiro aspecto como tal, em que calcular a média de vetores de movimento dos sub-blocos de luma no conjunto S compreende as seguintes etapas: mvAvgLX = ∑ mvLX[𝑆 ][𝑆 ] mvAvgLX[ 0 ] = ( mvAvgLX[ 0 ] + N>>1) >> log2(N) mvAvgLX[ 1 ] = ( mvAvgLX[ 1 ] + N>>1) >> log2(N), onde mvAvgLX é um resultado de cálculo de média, mvAvgLX[ 0 ] é um componente horizontal do vetor de movimento mvAvgLX, mvAvgLX[ 1 ] é um componente vertical do vetor de movimento mvAvgLX, 𝑆 e 𝑆 são índices horizontal e vertical de sub-bloco Si em matriz de vetores de movimento, mvLX[𝑆 ][𝑆 ] é um vetor de movimento de sub-bloco de luma com índices 𝑆 e 𝑆 , N é um número de elementos no segundo conjunto de sub-blocos de luma (S), log2(N) é a potência à qual o número 2 deve ser elevado para obter o valor N e “>>” é um deslocamento aritmético para a direita.
[0319] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do terceiro aspecto ou o terceiro aspecto como tal, em que calcular a média de vetores de movimento dos sub-blocos de luma no conjunto S compreende as seguintes etapas: mvAvgLX = ∑ mvLX[𝑆 ][𝑆 ] se mvAvgLX[ 0 ] é maior ou igual a 0 então mvAvgLX[ 0 ] = ( mvAvgLX[ 0 ] + N>>1) >> log2(N), de outro modo, mvAvgLX[ 0 ] = − ((− mvAvgLX[ 0 ] + N>>1 ) >> log2(N)) se mvAvgLX[ 1 ] é maior ou igual a 0 então mvAvgLX[ 1 ] = ( mvAvgLX[ 1 ] + N>>1) >> log2(N), de outro modo, mvAvgLX[ 1 ] = − ((− mvAvgLX[ 1 ] + N>>1 ) >> log2(N)), onde mvAvgLX é um resultado de cálculo de média, mvAvgLX[ 0 ] é um componente horizontal do vetor de movimento mvAvgLX, mvAvgLX[ 1 ] é um componente vertical do vetor de movimento mvAvgLX, 𝑆 e 𝑆 são índices horizontal e vertical de sub-bloco Si em matriz de vetores de movimento, mvLX[𝑆 ][𝑆 ] é um vetor de movimento de sub-bloco de luma com índices 𝑆 e 𝑆 , N é um número de elementos no segundo conjunto de sub-blocos de luma (S), log2(N) é a potência à qual o número 2 deve ser elevado para obter o valor N e “>>” é um deslocamento aritmético para a direita.
[0320] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do terceiro aspecto ou o terceiro aspecto como tal, em que calcular a média de vetores de movimento dos sub-blocos de luma no conjunto S compreende as seguintes etapas: mvAvgLX = ∑ mvLX[𝑆 ][𝑆 ] se mvAvgLX[ 0 ] é maior ou igual a 0 então mvAvgLX[ 0 ] = ( mvAvgLX[ 0 ] + ( N>>1 ) – 1) >> log2(N), de outro modo, mvAvgLX[ 0 ] = − ((− mvAvgLX[ 0 ] + ( N>>1 ) – 1) >> log2(N)) se mvAvgLX[ 1 ] é maior ou igual a 0 então mvAvgLX[ 1 ] = ( mvAvgLX[ 1 ] + ( N>>1 ) – 1) >> log2(N), de outro modo, mvAvgLX[ 1 ] = − ((− mvAvgLX[ 1 ] + ( N>>1 ) – 1 ) >> log2(N)), onde mvAvgLX é um resultado de cálculo de média, mvAvgLX[ 0 ] é um componente horizontal do vetor de movimento mvAvgLX, mvAvgLX[ 1 ] é um componente vertical do vetor de movimento mvAvgLX, 𝑆 e 𝑆 são índices horizontal e vertical de sub-bloco Si em matriz de vetores de movimento, mvLX[𝑆 ][𝑆 ] é um vetor de movimento de sub-bloco de luma com índices 𝑆 e 𝑆 , N é um número de elementos no segundo conjunto de sub-blocos de luma (S), log2(N) é a potência à qual o número 2 deve ser elevado para obter o valor N e “>>” é um deslocamento aritmético para a direita.
[0321] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do terceiro aspecto ou o terceiro aspecto como tal, em que N é igual a 1.
[0322] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do terceiro aspecto ou o terceiro aspecto como tal, em que o conjunto S é determinado com base no valor de sps_cclm_colocated_chroma_flag.
[0323] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do terceiro aspecto ou o terceiro aspecto como tal, em que a derivação de vetor de movimento médio é realizada com base no valor de sps_cclm_colocated_chroma_flag.
[0324] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do terceiro aspecto ou o terceiro aspecto como tal, em que o formato de croma é definido como YUV 4:2:2.
[0325] Em uma forma de implementação possível do método de acordo com qualquer implementação anterior do terceiro aspecto ou o terceiro aspecto como tal, em que o bloco de croma e o bloco de luma estão compreendidos na mesma PU, e os blocos de luma e de croma são colocalizados.
[0326] Um quarto aspecto de um codificador (20) compreendendo conjunto de circuitos de processamento para executar o método de acordo com qualquer um do primeiro ao terceiro aspectos.
[0327] Um quinto aspecto de um decodificador (30) compreendendo conjunto de circuitos de processamento para executar o método de acordo com qualquer um do primeiro ao terceiro aspectos.
[0328] Um sexto aspecto de um produto de programa de computador compreendendo um código de programa para realizar o método de acordo com qualquer um do primeiro ao terceiro aspectos.
[0329] Um sétimo aspecto de um decodificador, compreendendo: um ou mais processadores; e um meio de armazenamento não transitório legível por computador acoplado aos processadores e armazenando programação para execução pelos processadores, em que a programação, quando executada pelos processadores, configura o decodificador para executar o método de acordo com qualquer um do primeiro ao terceiro aspectos.
[0330] Um oitavo aspecto de um codificador, compreendendo: um ou mais processadores; e um meio de armazenamento não transitório legível por computador acoplado aos processadores e armazenando programação para execução pelos processadores, em que a programação, quando executada pelos processadores, configura o codificador para executar o método de acordo com qualquer um do primeiro ao terceiro aspectos.
[0331] Com base no exposto anteriormente, a presente divulgação diz respeito a divulgar um método para considerar o formato de croma da imagem ao obter vetores de movimento croma a partir de vetores de movimento luma. Ao utilizar uma média de vetores de movimento luma, subamostragem linear de campo de movimento luma é realizada. Quando planos de cores croma têm a mesma altura do plano luma, é julgado mais apropriado selecionar vetores de movimento de blocos de luma que são adjacentes horizontalmente, de maneira que eles têm a mesma posição vertical. Selecionar vetores de movimento luma dependendo do formato de croma de imagem resulta em um campo de movimento croma mais preciso por causa de uma subamostragem de campo de vetor de movimento luma mais precisa. Esta dependência em formato de croma capacita selecionar os blocos de luma mais apropriados ao calcular a média de vetores de movimento luma para gerar o vetor de movimento croma. Como uma consequência de uma interpolação de campo de movimento mais precisa, erro de predição é reduzido, o que resulta em um resultado técnico de um melhoramento de desempenho de compressão.
[0332] O seguinte é uma explicação das aplicações do método de codificação assim como do método de decodificação tais como mostrados nas modalidades mencionadas anteriormente, e de um sistema usando os mesmos.
[0333] A figura 18 é um diagrama de blocos mostrando um sistema de fornecimento de conteúdo 3100 para realizar serviço de distribuição de conteúdo. Este sistema de fornecimento de conteúdo 3100 inclui o dispositivo de captura 3102, o dispositivo terminal 3106 e inclui opcionalmente a tela 3126. O dispositivo de captura 3102 se comunica com o dispositivo terminal 3106 por meio do enlace de comunicação 3104. O enlace de comunicação pode incluir o canal de comunicação 13 descrito acima. O enlace de comunicação 3104 inclui, mas não limitado a isto, WIFI, Ethernet, Cabo, sem fio (3G/4G/5G), USB ou qualquer tipo de combinação dos mesmos ou algo semelhante.
[0334] O dispositivo de captura 3102 gera dados, e pode codificar os dados pelo método de codificação tal como mostrado nas modalidades expostas anteriormente. Alternativamente, o dispositivo de captura 3102 pode distribuir os dados para um servidor de streaming (não mostrado nas figuras), e o servidor codifica os dados e transmite os dados codificados para o dispositivo terminal
3106. O dispositivo de captura 3102 inclui, mas não limitado a isto, câmera, smartphone ou Pad, computador ou laptop, sistema de videoconferência, PDA, dispositivo montado em veículo ou uma combinação de quaisquer desses ou algo semelhante. Por exemplo, o dispositivo de captura 3102 pode incluir o dispositivo de origem 12 tal como descrito acima. Quando os dados incluem vídeo, o codificador de vídeo 20 incluído no dispositivo de captura 3102 pode realmente realizar processamento de codificação de vídeo. Quando os dados incluem áudio (isto é, voz), um codificador de áudio incluído no dispositivo de captura 3102 pode realmente realizar processamento de codificação de áudio. Para alguns cenários práticos, o dispositivo de captura 3102 distribui os dados de vídeo e de áudio codificados ao multiplexar os mesmos conjuntamente. Para outros cenários práticos, por exemplo, no sistema de videoconferência, os dados de áudio codificados e os dados de vídeo codificados não são multiplexados. O dispositivo de captura 3102 distribui os dados de áudio codificados e os dados de vídeo codificados para o dispositivo terminal 3106 separadamente.
[0335] No sistema de fornecimento de conteúdo 3100, o dispositivo terminal 3106 recebe e reproduz os dados codificados. O dispositivo terminal 3106 pode ser um dispositivo com capacidade de recebimento e recuperação de dados, tal como o smartphone ou Pad 3108, o computador ou laptop 3110, o gravador de vídeo de rede (NVR)/gravador de vídeo digital (DVR) 3112, a TV 3114, o conversor de sinais (STB) 3116, o sistema de videoconferência 3118, o sistema de vigilância de vídeo 3120, o assistente digital pessoal (PDA) 3122, o dispositivo montado em veículo 3124, ou uma combinação de quaisquer desses, ou algo semelhante capaz de decodificar os dados codificados mencionados anteriormente. Por exemplo, o dispositivo terminal 3106 pode incluir o dispositivo de destino 14 tal como descrito acima. Quando os dados codificados incluem vídeo, o decodificador de vídeo 30 incluído no dispositivo terminal é priorizado para realizar decodificação de vídeo. Quando os dados codificados incluem áudio, um decodificador de áudio incluído no dispositivo terminal é priorizado para realizar processamento de decodificação de áudio.
[0336] Para um dispositivo terminal com sua tela, por exemplo, o smartphone ou Pad 3108, o computador ou laptop 3110, o gravador de vídeo de rede (NVR)/gravador de vídeo digital (DVR) 3112, a TV 3114, o assistente digital pessoal (PDA) 3122 ou o dispositivo montado em veículo 3124, o dispositivo terminal pode fornecer os dados decodificados para sua tela. Para um dispositivo terminal não equipado com tela, por exemplo, o STB 3116, o sistema de videoconferência 3118 ou o sistema de vigilância de vídeo 3120, uma tela externa 3126 é conectada a isso para receber e mostrar os dados decodificados. Quando cada dispositivo neste sistema executa codificação ou decodificação, o dispositivo de codificação de imagem ou o dispositivo de decodificação de imagem, tal como mostrado nas modalidades mencionadas anteriormente, pode ser usado.
[0337] A figura 19 é um diagrama mostrando uma estrutura de um exemplo do dispositivo terminal 3106. Após o dispositivo terminal 3106 receber fluxo do dispositivo de captura 3102, a unidade de procedimento de protocolo 3202 analisa o protocolo de transmissão do fluxo. O protocolo inclui, mas não limitado a isto, Protocolo de Transmissão em Tempo Real (RTSP), Protocolo de Transferência de Hipertexto (HTTP), protocolo de streaming ao vivo HTTP (HLS), MPEG-DASH, Protocolo de Transporte em Tempo Real (RTP), Protocolo de Mensagens em Tempo Real (RTMP), ou qualquer tipo de combinação dos mesmos ou algo semelhante.
[0338] Após a unidade de procedimento de protocolo 3202 processar o fluxo, arquivo de fluxo é gerado. O arquivo é enviado para uma unidade de demultiplexação 3204. A unidade de demultiplexação 3204 pode separar os dados multiplexados em dados de áudio codificados e dados de vídeo codificados. Tal como descrito acima, para alguns cenários práticos, por exemplo, no sistema de videoconferência, os dados de áudio codificados e os dados de vídeo codificados não são multiplexados. Nesta situação, os dados codificados são transmitidos para o decodificador de vídeo 3206 e o decodificador de áudio 3208 sem passar pela unidade de demultiplexação 3204.
[0339] Por meio do processamento de demultiplexação, fluxo elementar (FE) de vídeo, FE de áudio e opcionalmente legenda são gerados. O decodificador de vídeo 3206, o qual inclui o decodificador de vídeo 30 tal como explicado nas modalidades mencionadas anteriormente, decodifica o FE de vídeo pelo método de decodificação tal como mostrado nas modalidades mencionadas anteriormente para gerar quadro de vídeo, e fornece estes dados para a unidade síncrona 3212. O decodificador de áudio 3208 decodifica o FE de áudio para gerar quadro de áudio, e fornece estes dados para a unidade síncrona 3212. Alternativamente, o quadro de vídeo pode ser armazenado em um armazenamento temporário (não mostrado na figura 19) antes de ser fornecido para a unidade síncrona 3212. De modo similar, o quadro de áudio pode ser armazenado em um armazenamento temporário (não mostrado na figura 19) antes de ser fornecido para a unidade síncrona 3212.
[0340] A unidade síncrona 3212 sincroniza o quadro de vídeo e o quadro de áudio, e fornece o vídeo/áudio para uma tela de vídeo/áudio 3214. Por exemplo, a unidade síncrona 3212 sincroniza a apresentação da informação de vídeo e de áudio. Informação pode ser codificada na sintaxe usando etiquetas de tempo se relacionando com a apresentação de dados de áudio e visuais codificados e etiquetas de tempo se relacionando com a entrega do fluxo de dados propriamente dito.
[0341] Se legenda for incluída no fluxo, o decodificador de legenda 3210 decodifica a legenda, e sincroniza a mesma com o quadro de vídeo e o quadro de áudio, e fornece o vídeo/áudio/legenda para uma tela de vídeo/áudio/legenda 3216.
[0342] A presente invenção não está limitada ao sistema mencionado anteriormente, e o dispositivo de codificação de imagem ou o dispositivo de decodificação de imagem nas modalidades mencionadas anteriormente pode ser incorporado em outro sistema, por exemplo, um sistema de carro. Operadores Matemáticos
[0343] Os operadores matemáticos usados neste pedido são similares àqueles usados na linguagem de programação C. Entretanto, os resultados de operações de divisão inteira e de deslocamento aritmético são definidos mais precisamente, e operações adicionais são definidas, tais como exponenciação e divisão com valor real. Convenções de numeração e contagem de uma maneira geral começam de 0, por exemplo, “o primeiro” é equivalente ao de ordem 0, “o segundo” é equivalente ao de ordem 1, etc. Operadores Aritméticos
[0344] Os operadores aritméticos seguintes são definidos como segue: + Adição; − Subtração (tal como um operador de dois argumentos) ou negação (tal como um operador de prefixo unário); * Multiplicação, incluindo multiplicação de matriz; xy Exponenciação. Especifica x à potência de y. Em outros contextos, tal notação é usada para sobrescrição não proposta para interpretação como exponenciação; / Divisão inteira com truncamento do resultado para zero. Por exemplo, 7 / 4 e −7 / −4 são truncados para 1 e −7 / 4 e 7 / −4 são truncados para −1; ÷ Usado para denotar divisão nas equações matemáticas onde truncamento ou arredondamento não é pretendido; x y Usado para denotar divisão nas equações matemáticas onde truncamento ou arredondamento não é pretendido; ∑yi = x f( i ) A soma de f( i ) com i assumindo todos os valores inteiros de x até e incluindo y; x % y Módulo. Resto de x dividido por y, definido somente para números inteiros x e y com x >= 0 e y > 0. Operadores Lógicos
[0345] Os operadores lógicos seguintes são definidos como segue: x && y Lógica booleana “e” de x e y x | | y Lógica booleana “ou” de x e y ! Lógica booleana “não” x ? y : z Se x é VERDADEIRO ou não igual a 0, avalia para o valor de y; de outro modo, avalia para o valor de z. Operadores Relacionais
[0346] Os operadores relacionais seguintes são definidos como segue: > Maior que >= Maior que ou igual a < Menor que <= Menor que ou igual a = = Igual a != Não igual a.
[0347] Quando um operador relacional é aplicado a um elemento de sintaxe ou variável que tenha sido designado com o valor “na” (não aplicável), o valor “na” é tratado como um valor distinto para o elemento de sintaxe ou variável. O valor “na” é considerado para não ser igual a qualquer outro valor.
Operadores Bit a Bit
[0348] Os operadores bit a bit seguintes são definidos como segue: & Bit a bit “e”. Ao operar em argumentos inteiros, opera em uma representação de complemento de dois do valor inteiro. Ao operar em um argumento binário que contém menos bits que outro argumento, o argumento menor é estendido ao adicionar bits mais significativos iguais a 0; | Bit a bit “ou”. Ao operar em argumentos inteiros, opera em uma representação de complemento de dois do valor inteiro. Ao operar em um argumento binário que contém menos bits que outro argumento, o argumento menor é estendido ao adicionar bits mais significativos iguais a 0; ^ Bit a bit “exclusivo ou”. Ao operar em argumentos inteiros, opera em uma representação de complemento de dois do valor inteiro. Ao operar em um argumento binário que contém menos bits que outro argumento, o argumento menor é estendido ao adicionar bits mais significativos iguais a 0; x >> y Deslocamento aritmético para a direita de uma representação inteira de complemento de dois de x por y dígitos binários. Esta função é definida somente para valores inteiros não negativos de y. Bits deslocados para os bits mais significativos (MSBs) como um resultado do deslocamento para a direita têm um valor igual ao MSB de x antes da operação de deslocamento; x << y Deslocamento aritmético para a esquerda de uma representação inteira de complemento de dois de x por y dígitos binários. Esta função é definida somente para valores inteiros não negativos de y. Bits deslocados para os bits menos significativos (LSBs) como um resultado do deslocamento para a esquerda têm um valor igual a 0. Operadores de Designações
[0349] Os operadores aritméticos seguintes são definidos como segue: = Operador de designação + + Incremento, isto é, x+ + é equivalente a x = x + 1; quando usado em um índice de matriz, avalia para o valor da variável antes da operação de incremento; − − Decremento, isto é, x− − é equivalente a x = x − 1; quando usado em um índice de matriz, avalia para o valor da variável antes da operação de decremento; += Incremento por quantidade especificada, isto é, x += 3 é equivalente a x = x + 3, e x += (−3) é equivalente a x = x + (−3); −= Decremento por quantidade especificada, isto é, x −= 3 é equivalente a x = x − 3, e x −= (−3) é equivalente a x = x − (−3). Notação de Faixa
[0350] A notação seguinte é usada para especificar uma faixa de valores: x = y..z x assume valores inteiros iniciando de y para z, inclusive, com x, y, e z sendo números inteiros e z sendo maior que y. Funções Matemáticas
[0351] As funções matemáticas seguintes são definidas: x ; x >= 0 Abs( x ) = −x ; x < 0 Asin( x ) a função trigonométrica inversa do seno, operando em um argumento x que está na faixa de −1,0 a 1,0, inclusive, com um valor de saída na faixa de −π÷2 a π÷2,
inclusive, em unidades de radianos; Atan( x ) a função trigonométrica inversa da tangente, operando em um argumento x, com um valor de saída na faixa de −π÷2 a π÷2, inclusive, em unidades de radianos; y ⎧ Atan x ; x > 0 ⎪ y ⎪ Atan x + π ; x < 0 && y >= 0 Atan2( y, x ) = y ; x < 0 && y < 0 Atan −π ⎨ x π ⎪ +2 ; x = = 0 && y >= 0 ⎪ π −2 ; de outro modo ⎩ Ceil( x ) o menor número inteiro maior que ou igual a x; Clip1Y( x ) = Clip3( 0, ( 1 << BitDepthY ) − 1, x ) Clip1C( x ) = Clip3( 0, ( 1 << BitDepthC ) − 1, x ) x ; z < x Clip3( x, y, z ) = y ; z > y z ; de outro modo Cos( x ) a função trigonométrica do cosseno operando em um argumento x em unidades de radianos; Floor( x ) o maior número inteiro menor que ou igual a x; c + d ; b − a >= d / 2 GetCurrMsb( a, b, c, d ) = c−d ; a−b > d / 2 c ; de outro modo Ln( x ) o logaritmo natural de x (o logaritmo de base e, onde e é a constante de base de logaritmo natural 2,718 281 828...); Log2( x ) o logaritmo de base 2 de x; Log10( x ) o logaritmo de base 10 de x; x ; x <= y Min( x, y ) = y ; x > y x ; x >= y Max( x, y ) = y ; x < y Round( x ) = Sign( x ) * Floor( Abs( x ) + 0,5 ) 1 ; x > 0 Sign( x ) = 0 ; x = = 0 −1 ; x < 0
Sin( x ) a função trigonométrica do seno operando em um argumento x em unidades de radianos; Sqrt( x ) = √x Swap( x, y ) = ( y, x ) Tan( x ) a função trigonométrica da tangente operando em um argumento x em unidades de radianos. Ordem de Precedência de Operação
[0352] Quando uma ordem de precedência em uma expressão não é indicada explicitamente pelo uso de parênteses, as seguintes regras se aplicam: - operações de uma precedência mais alta são avaliadas antes de qualquer operação de uma precedência mais baixa; - operações da mesma precedência são avaliadas sequencialmente da esquerda para a direita.
[0353] A tabela a seguir especifica a precedência de operações da mais alta para a mais baixa; uma posição mais alta na tabela indica uma precedência mais alta.
[0354] Para aqueles operadores que também são usados na linguagem de programação C, a ordem de precedência usada neste relatório descritivo é a mesmo que é usada na linguagem de programação C.
[0355] Tabela: Operação precedência da mais alta (na parte superior da tabela) para a mais baixa (na parte inferior da tabela). operações (com operandos x, y, e z) “x++”, “x− −” “!x”, “−x” (tal como um operador de prefixo unário) xy x “x * y”, “x / y”, “x ÷ y”, “ ”, “x % y” y y “x + y”, “x − y” (tal como um operador de dois argumentos), “  f( i ) ” ix “x << y”, “x >> y” “x < y”, “x <= y”, “x > y”, “x >= y” “x = = y”, “x != y” “x & y” “x | y” “x && y” “x | | y” “x ? y : z” “x..y” “x = y”, “x += y”, “x −= y” Descrição de Texto de Operações Lógicas
[0356] No texto, uma declaração de operações lógicas tal como seria descrita matematicamente na seguinte forma: if( condition 0 ) statement 0 else if( condition 1 ) statement 1 ... else /* informative remark on remaining condition */ statement n pode ser descrita no seguinte modo: ... como a seguir / ... o seguinte se aplica: - se condição 0, declaração 0 - de outro modo, se condição 1, declaração 1 - ... - de outro modo (observação informativa sobre condição remanescente), declaração n.
[0357] Cada declaração “se ... de outro modo, se ... de outro modo, ...” no texto é introduzida com “... como a seguir” ou “... o seguinte se aplica” seguida imediatamente por “se ...”. A última condição de “se ... de outro modo, se ... de outro modo, ...” é sempre um “de outro modo, ...”. Declarações intercaladas “se ... de outro modo, se ... de outro modo, ...” podem ser identificadas ao corresponder “... como a seguir” ou “... o seguinte se aplica” com a terminação “de outro modo, ...”.
[0358] No texto, uma declaração de operações lógicas tal como seria descrita matematicamente na seguinte forma: if( condition 0a && condition 0b ) statement 0 else if(condition 1a | | condition 1b ) statement 1 ... else statement n pode ser descrita no seguinte modo: ... como a seguir / ... o seguinte se aplica: - se todas as condições seguintes forem verdadeiras, declaração 0: - condição 0a - condição 0b - de outro modo, se uma ou mais das condições seguintes forem verdadeiras, declaração 1: - condição 1a - condição 1b - ...
- de outro modo, declaração n.
[0359] No texto, uma declaração de operações lógicas tal como seria descrita matematicamente na seguinte forma: if( condition 0 ) statement 0 if( condition 1 ) statement 1 pode ser descrita no seguinte modo: quando condição 0, declaração 0 quando condição 1, declaração 1.
[0360] A invenção foi descrita em combinação com várias modalidades neste documento. Entretanto, outras variações para as modalidades divulgadas podem ser entendidas e efetuadas pelos versados na técnica ao praticar a invenção reivindicada, a partir de um estudo dos desenhos, da divulgação e das reivindicações anexas. Nas reivindicações, a palavra “compreendendo” não exclui outros elementos ou etapas e o artigo indefinido “um” ou “uma” não exclui uma pluralidade. Um único processador ou outra unidade pode executar as funções de vários itens relatados nas reivindicações. O simples fato de que certas medidas são relatadas em reivindicações dependentes usualmente diferentes não indica que uma combinação destas medidas não pode ser usada para vantagem. Um programa de computador pode ser armazenado/distribuído em um meio adequado, tal como um meio de armazenamento ótico ou um meio de estado sólido fornecido juntamente com ou como parte de outro hardware, mas também pode ser distribuído em outras formas, tal como por meio da internet ou de outros sistemas de comunicação com fio ou sem fio.
[0361] Uma pessoa versada na técnica entenderá que os “blocos” (“unidades”) das várias figuras (método e aparelho) representam ou descrevem funcionalidades de modalidades da invenção (em vez de necessariamente “unidades” individuais em hardware ou software) e assim descrevem igualmente funções ou recursos de modalidades de aparelho assim como modalidades de método (unidade = etapa). A terminologia de “unidades” é usada meramente para propósitos ilustrativos da funcionalidade de modalidades do codificador/decodificador e não é proposta para limitar a divulgação.
[0362] Nas diversas modalidades fornecidas no presente pedido, deve ser entendido que o sistema, aparelho e método divulgados podem ser implementados em outros modos. Por exemplo, a modalidade de aparelho descrita é meramente exemplar. Por exemplo, a divisão de unidade é meramente divisão de função lógica e pode ser outra divisão em implementação real. Por exemplo, uma pluralidade de unidades ou componentes pode ser combinada ou integrada em outro sistema, ou alguns recursos podem ser ignorados ou não realizados. Além disso, os acoplamentos mútuos ou acoplamentos diretos ou conexões de comunicação exibidos ou discutidos podem ser implementados ao usar algumas interfaces. Os acoplamentos indiretos ou conexões de comunicação entre os aparelhos ou unidades podem ser implementados em formas eletrônicas, mecânicas ou em outras formas.
[0363] As unidades descritas como partes separadas podem estar ou não separadas fisicamente, e partes exibidas como unidades podem ser ou não unidades físicas, podem ficar localizadas em uma posição, ou podem ser distribuídas em uma pluralidade de unidades de rede. Todas ou algumas das unidades podem ser selecionadas de acordo com necessidades reais para alcançar os objetivos das soluções das modalidades.
[0364] Além disso, unidades funcionais nas modalidades da presente invenção podem ser integradas em uma unidade de processamento, ou cada uma das unidades pode existir sozinha fisicamente, ou duas ou mais unidades são integradas em uma unidade.
[0365] Modalidades da invenção podem compreender adicionalmente um aparelho, por exemplo, codificador e/ou decodificador, o qual compreende um conjunto de circuitos de processamento configurado para realizar qualquer um dos métodos e/ou processos descritos neste documento.
[0366] Embora modalidades da invenção tenham sido descritas principalmente com base em codificação de vídeo, deve ser notado que modalidades do sistema de codificação 10, codificador 20 e do decodificador 30 (e correspondentemente do sistema 10) e as outras modalidades descritas neste documento também podem ser configuradas para processamento ou codificação de imagem estática, isto é, o processamento ou codificação de uma imagem individual independente de qualquer imagem precedente ou consecutiva tal como em codificação de vídeo. De uma maneira geral somente as unidades de predição inter 244 (codificador) e 344 (decodificador) podem não ser utilizáveis no caso em que o processamento ou codificação de imagem é limitado a uma única imagem 17. Todas as outras funcionalidades
(também referidas como ferramentas ou tecnologias) do codificador de vídeo 20 e do decodificador de vídeo 30 podem ser usadas igualmente para processamento de imagem estática, por exemplo, o cálculo de residual 204/304, a transformada 206, a quantização 208, a quantização inversa 210/310, transformada (inversa) 212/312, o particionamento 262/362, a predição intra 254/354, e/ou a filtragem de loop 220, 320, e a codificação de entropia 270 e a decodificação de entropia 304.
[0367] Modalidades, por exemplo, do codificador 20 e do decodificador 30, e funções descritas neste documento, por exemplo, com referência para o codificador 20 e o decodificador 30, podem ser implementadas em hardware, software, firmware ou em qualquer combinação dos mesmos. Se implementadas em software, as funções podem ser armazenadas em um meio legível por computador ou transmitidas por meio de meios de comunicação como uma ou mais instruções ou código e executadas por uma unidade de processamento baseada em hardware. Meio legível por computador pode incluir meio de armazenamento legível por computador, o qual corresponde a um meio tangível tal como meio de armazenamento de dados, ou meio de comunicação incluindo qualquer meio que facilite transferência de um programa de computador de um lugar para outro, por exemplo, de acordo com um protocolo de comunicação. Neste modo, meio legível por computador de uma maneira geral pode corresponder a (1) meio de armazenamento legível por computador tangível que não é transitório ou (2) um meio de comunicação tal como um sinal ou onda portadora. Meio de armazenamento de dados pode ser qualquer meio disponível que possa ser acessado por um ou mais computadores ou um ou mais processadores para recuperar instruções, códigos e/ou estruturas de dados para implementação das técnicas descritas nesta divulgação. Um produto de programa de computador pode incluir um meio legível por computador.
[0368] A título de exemplo e não de limitação, tais meios de armazenamento legíveis por computador podem compreender RAM, ROM, EEPROM, CD-ROM ou outro armazenamento de disco ótico, armazenamento de disco magnético, ou outros dispositivos de armazenamento magnético, memória flash, ou qualquer outro meio que possa ser usado para armazenar código de programa desejado na forma de instruções ou estruturas de dados e que possa ser acessado por um computador. Também, qualquer conexão é denominada de modo apropriado como um meio legível por computador. Por exemplo, se instruções forem transmitidas de um site, servidor ou de outra fonte remota usando um cabo coaxial, cabo de fibra ótica, par trançado, linha de assinante digital (DSL), ou tecnologias sem fio tais como infravermelho, rádio e micro-onda, então o cabo coaxial, cabo de fibra ótica, par trançado, DSL ou tecnologias sem fio tais como infravermelho, rádio e micro-onda estão incluídos na definição de meio. Deve ser entendido, entretanto, que meios de armazenamento legíveis por computador e meios de armazenamento de dados não incluem conexões, ondas portadoras, sinais ou outros meios transitórios, mas em vez disso são direcionados para meios de armazenamento tangível não transitório. Discos, tal como usado neste documento, incluem disco compacto (CD), disco a laser, disco ótico, disco versátil digital (DVD), disco flexível e disco Blu-ray, onde alguns discos usualmente reproduzem dados magneticamente, enquanto que outros discos reproduzem dados oticamente com lasers. Combinações dos indicados acima também devem ser incluídas no escopo de meios legíveis por computador.
[0369] Instruções podem ser executadas por um ou mais processadores, tais como um ou mais processadores de sinais digitais (DSPs), microprocessadores de uso geral, circuitos integrados de aplicação específica (ASICs), matrizes lógicas programáveis em campo (FPGAs), ou outro conjunto de circuitos lógicos integrado ou discreto equivalente. Portanto, o termo “processador”, tal como usado neste documento, pode se referir a qualquer estrutura indicada anteriormente ou qualquer outra estrutura adequada para implementação das técnicas descritas neste documento. Além disso, em alguns aspectos, a funcionalidade descrita neste documento pode ser fornecida dentro de módulos de hardware e/ou de software dedicados configurados para codificação e decodificação, ou incorporada em um codec combinado. Também, as técnicas podem ser totalmente implementadas em um ou mais circuitos ou elementos lógicos.
[0370] As técnicas desta divulgação podem ser implementadas em uma grande variedade de dispositivos ou aparelhos, incluindo um aparelho de telefone sem fio, um circuito integrado (IC) ou um conjunto de ICs (por exemplo, um conjunto de chips). Vários componentes, módulos ou unidades são descritos nesta divulgação para enfatizar aspectos funcionais de dispositivos configurados para realizar as técnicas divulgadas, mas não exigem necessariamente realização por unidades de hardware diferentes.
Particularmente, tal como descrito acima, várias unidades podem ser combinadas em uma unidade de hardware codec ou fornecidas por meio de uma coleção de unidades de hardware interoperativas, incluindo um ou mais processadores tais como descritos acima, em combinação com software e/ou firmware adequado.

Claims (43)

REIVINDICAÇÕES
1. Método de derivação de vetor de movimento croma usado em uma predição inter baseada em afim de um bloco de imagem atual que compreende um bloco de luma e um bloco de croma colocalizado, o método caracterizado pelo fato de que compreende: determinar fatores de escala de croma em direções horizontal e vertical com base em informação de formato de croma, em que a informação de formato de croma indica um formato de croma de uma imagem atual à qual o bloco de imagem atual pertence; determinar um conjunto (S) de sub-blocos de luma do bloco de luma com base em valores dos fatores de escala de croma; e determinar um vetor de movimento para um sub-bloco de croma do bloco de croma com base em vetores de movimento de um ou mais sub-blocos de luma no conjunto (S) de sub-blocos de luma.
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que cada um do um ou mais sub- blocos de luma no conjunto (S) é representado por um índice de sub-bloco em uma direção horizontal e um índice de sub- bloco em uma direção vertical.
3. Método, de acordo com a reivindicação 1 ou 2, caracterizado pelo fato de que: quando ambos de SubWidthC e SubHeightC são iguais a 1, o conjunto de sub-blocos de luma (S) compreende um sub- bloco de luma indexado por: S0 = (xSbIdx, ySbIdx); quando pelo menos um de SubWidthC e SubHeightC não é igual a 1, o conjunto de sub-blocos de luma (S) compreende: um primeiro sub-bloco de luma indexado por: S0 = (( xSbIdx >> ( SubWidthC − 1 ) << ( SubWidthC − 1 )), (ySbIdx >> ( SubHeightC − 1 ) << ( SubHeightC − 1 ))), e um segundo sub-bloco de luma indexado por: S1 = (( xSbIdx >> (SubWidthC − 1 ) << ( SubWidthC − 1) ) + ( SubWidthC − 1 ), ( ySbIdx >> ( SubHeightC − 1 ) << ( SubHeightC − 1 ) ) + ( SubHeightC − 1 )) em que SubWidthC e SubHeightC representam os fatores de escala de croma em direções horizontal e vertical, respectivamente; xSbIdx e ySbIdx representam um índice de sub-bloco na direção horizontal e um índice de sub-bloco na direção vertical, respectivamente, para um sub-bloco de luma no conjunto (S); “<<” representa um deslocamento aritmético para a esquerda; “>>” representa um deslocamento aritmético para a direita; xSbIdx = 0..numSbX − 1 e ySbIdx = 0..numSbY − 1; numSbX indica o número dos sub-blocos de luma no bloco de luma ao longo da direção horizontal; e numSbY indica o número dos sub-blocos de luma no bloco de luma ao longo da direção vertical.
4. Método, de acordo com a reivindicação 3, caracterizado pelo fato de que o número dos sub-blocos de croma no bloco de croma ao longo da direção horizontal e da direção vertical é o mesmo que o número dos sub-blocos de luma no bloco de luma ao longo das direções horizontal e vertical, respectivamente.
5. Método, de acordo com a reivindicação 1 ou 2, caracterizado pelo fato de que: quando ambos de SubWidthC e SubHeightC são iguais a 1, o conjunto de sub-blocos de luma (S) compreende um sub- bloco de luma indexado por: S0 = (xCSbIdx, yCSbIdx); quando pelo menos um de SubWidthC e SubHeightC não é igual a 1, o conjunto de sub-blocos de luma (S) compreende: um primeiro sub-bloco de luma indexado por S0 = (( xCSbIdx >> ( SubWidthC − 1 ) << ( SubWidthC − 1 )), (yCSbIdx >> ( SubHeightC − 1 ) << ( SubHeightC − 1 ))), e um segundo sub-bloco de luma indexado por S1 = ( xCSbIdx >> (SubWidthC − 1 ) << ( SubWidthC − 1)) + ( SubWidthC − 1 ), ( yCSbIdx >> ( SubHeightC − 1 ) << ( SubHeightC − 1 )) + ( SubHeightC − 1 )), em que SubWidthC e SubHeightC representam respectivamente os fatores de escala de croma em direções horizontal e vertical; xCSbIdx e yCSbIdx representam um índice de sub-bloco na direção horizontal e um índice de sub-bloco na direção vertical, respectivamente, para um sub-bloco de luma no conjunto (S); xCSbIdx = 0..numCSbX – 1 e yCSbIdx = 0..numCSbY − 1; numCSbX indica o número dos sub-blocos de croma na direção horizontal; e numCSbY indica o número dos sub-blocos de croma na direção vertical.
6. Método, de acordo com a reivindicação 5, caracterizado pelo fato de que um tamanho de cada um dos sub-blocos de croma é o mesmo que um tamanho de cada um dos sub-blocos de luma.
7. Método, de acordo com a reivindicação 5, caracterizado pelo fato de que o número de sub-blocos de croma no bloco de croma ao longo da direção horizontal depende do número dos sub-blocos de luma no bloco de luma ao longo da horizontal e do valor do fator de escala de croma na direção horizontal; e o número de sub-blocos de croma no bloco de croma ao longo da direção vertical depende do número dos sub-blocos de luma no bloco de luma ao longo da direção vertical e do valor do fator de escala de croma na direção vertical.
8. Método, de acordo com qualquer uma das reivindicações anteriores, caracterizado pelo fato de que, para o sub-bloco de croma indexado por um índice de sub- bloco xSbIdxL na direção horizontal e um índice de sub- bloco ySbIdxL na direção vertical, o conjunto de sub-blocos de luma (S) compreende um ou mais de sub-blocos indexados por: S0 = (xSbIdxL, ySbIdxL), S1 = (xSbIdxL, ySbIdxL + (SubHeightC-1)), S2 = (xSbIdxL+ (SubWidthC-1), ySbIdxL), ou S3 = (xSbIdxL+ (SubWidthC-1), ySbIdxL + (SubHeightC- 1)); em que o índice de sub-bloco de luma S0 é representado pelo índice de sub-bloco xSbIdxL na direção horizontal e o índice de sub-bloco ySbIdxL na direção vertical; o índice de bloco de luma S1 é representado por um índice de sub-bloco na direção horizontal xSbIdxL e um índice de sub-bloco na direção vertical ySbIdxL + (SubHeightC-1); o índice de bloco de luma S2 é representado por um índice de sub-bloco na direção horizontal xSbIdxL+ (SubWidthC-1) e um índice de sub-bloco na direção vertical ySbIdxL; e o índice de bloco de luma S3 é representado por um índice de sub-bloco na direção horizontal xSbIdxL+ (SubWidthC-1) e um índice de sub-bloco na direção vertical ySbIdxL + (SubHeightC-1).
9. Método, de acordo com qualquer uma das reivindicações anteriores, caracterizado pelo fato de que o conjunto de sub-blocos de luma (S) compreende: um primeiro sub-bloco de luma indexado por S0 = (xSbIdxL, ySbIdxL) e um segundo sub-bloco de luma indexado por S1 = (xSbIdxL+ (SubWidthC-1), ySbIdxL + (SubHeightC-1)); em que a posição de bloco de luma S0 é representada por um índice de sub-bloco xSbIdxL na direção horizontal e um índice de sub-bloco ySbIdxL na direção vertical; a posição de bloco de luma S1 é representada por um índice de sub-bloco na direção horizontal xSbIdxL+ (SubWidthC-1) e um índice de sub-bloco na direção vertical ySbIdxL + (SubHeightC-1).
10. Método, de acordo com qualquer uma das reivindicações anteriores, caracterizado pelo fato de que, quando o formato de croma é 4:4:4, o conjunto (S) compreende um sub-bloco de luma colocalizado com o sub- bloco de croma;
em que quando o formato de croma é 4:2:2, o conjunto (S) compreende dois sub-blocos de luma adjacentes horizontalmente um ao outro; em que quando o formato de croma é 4:2:0, o conjunto (S) compreende dois sub-blocos de luma que são diagonais.
11. Método, de acordo com qualquer uma das reivindicações anteriores, caracterizado pelo fato de que, quando existe mais de um sub-bloco de luma no conjunto (S), determinar um vetor de movimento para o sub-bloco de croma com base no vetor de movimento de um ou mais sub-blocos de luma no conjunto (S) de sub-blocos de luma compreende: calcular a média de vetores de movimento dos sub- blocos de luma no conjunto S para gerar um vetor de movimento luma médio; e derivar o vetor de movimento para o sub-bloco de croma com base no vetor de movimento luma médio.
12. Método, de acordo com a reivindicação 11, caracterizado pelo fato de que calcular a média de vetores de movimento dos sub-blocos de luma no conjunto S compreende um ou mais de: calcular a média de componentes horizontais dos vetores de movimento dos sub-blocos de luma no conjunto S; ou calcular a média de componentes verticais dos vetores de movimento dos sub-blocos de luma no conjunto S.
13. Método, de acordo com a reivindicação 11 ou 12, caracterizado pelo fato de que calcular a média de vetores de movimento dos sub-blocos de luma no conjunto S para gerar um vetor de movimento luma médio compreende: 𝑦 mvAvgLX = ∑𝑖 mvLX[𝑆𝑖𝑥 ][𝑆𝑖 ] quando mvAvgLX[ 0 ] é maior ou igual a 0, mvAvgLX[ 0 ]
= ( mvAvgLX[ 0 ] + ( N>>1 ) – 1) >> log2(N), de outro modo, mvAvgLX[ 0 ] = − ((− mvAvgLX[ 0 ] + ( N>>1 ) – 1) >> log2(N)); quando mvAvgLX[ 1 ] é maior ou igual a 0, mvAvgLX[ 1 ] = ( mvAvgLX[ 1 ] + ( N>>1 ) – 1) >> log2(N), de outro modo, mvAvgLX[ 1 ] = − ((− mvAvgLX[ 1 ] + ( N>>1 ) – 1 ) >> log2(N)), em que: mvAvgLX é um vetor de movimento resultante do cálculo de média; mvAvgLX[ 0 ] é um componente horizontal do vetor de movimento resultante mvAvgLX, e mvAvgLX[ 1 ] é um componente vertical do vetor de movimento resultante mvAvgLX; 𝑦 𝑆𝑖𝑥 e 𝑆𝑖 são índices horizontal e vertical de sub-bloco Si no conjunto de sub-blocos de luma (S) em matriz de vetores de movimento, 𝑦 mvLX[𝑆𝑖𝑥 ][𝑆𝑖 ] é um vetor de movimento de um sub-bloco de 𝑦 luma com índices 𝑆𝑖𝑥 e 𝑆𝑖 , N é um número de elementos no conjunto (S) de sub-blocos de luma, log2(N) representa o logaritmo de N na base 2 e é a potência à qual o número 2 é elevado para obter o valor N, e “>>” representa um deslocamento aritmético para a direita.
14. Método, de acordo com qualquer uma das reivindicações 11 a 13, caracterizado pelo fato de que calcular a média de vetores de movimento dos sub-blocos de luma no conjunto S compreende: mvAvgLX = mvLX[( xSbIdx >> ( SubWidthC − 1 ) << ( SubWidthC − 1 ))] [(ySbIdx >> ( SubHeightC − 1 ) << ( SubHeightC − 1 ))] + mvLX[ ( xSbIdx >> (SubWidthC − 1 ) << ( SubWidthC − 1)) + ( SubWidthC − 1 )] [( ySbIdx >> ( SubHeightC − 1 ) << ( SubHeightC − 1 )) + ( SubHeightC − 1 )] se mvAvgLX[ 0 ] >= 0 então mvAvgLX[ 0 ] =( mvAvgLX[ 0 ] + 1 –( mvAvgLX[ 0 ] >= 0 ) ) >> 1 se mvAvgLX[ 1 ] >= 0 então mvAvgLX[ 1 ] =( mvAvgLX[ 1 ] + 1 –( mvAvgLX[ 1 ] >= 0 )) >> 1 em que mvAvgLX[ 0 ] é um componente horizontal do vetor de movimento médio mvAvgLX, mvAvgLX[ 1 ] é um componente vertical do vetor de movimento médio mvAvgLX; em que SubWidthC e SubHeightC representam os fatores de escala de croma em direções horizontal e vertical respectivamente; xSbIdx e ySbIdx representam um índice de sub-bloco em direção horizontal e um índice de sub-bloco na direção vertical, respectivamente, para um sub-bloco de luma no conjunto (S), “<<” é um deslocamento aritmético para a esquerda e “>>” é um deslocamento aritmético para a direita.
15. Método, de acordo com qualquer uma das reivindicações anteriores, caracterizado pelo fato de que determinar fatores de escala de croma em direções horizontal e vertical com base em informação de formato de croma compreende: determinar os fatores de escala de croma nas direções horizontal e vertical com base em um mapeamento entre a informação de formato de croma e um par de fatores de escala de croma nas direções horizontal e vertical.
16. Método, de acordo com qualquer uma das reivindicações anteriores, caracterizado pelo fato de que compreende adicionalmente: gerar uma predição do sub-bloco de croma com base no vetor de movimento determinado.
17. Método, de acordo com qualquer uma das reivindicações anteriores, caracterizado pelo fato de que o formato de croma compreende um de um formato YUV 4:2:2, um formato YUV 4:2:0 ou um formato YUV 4:4:4.
18. Método, de acordo com qualquer uma das reivindicações 1 a 17, caracterizado pelo fato de que é implementado por um dispositivo de codificação.
19. Método, de acordo com qualquer uma das reivindicações 1 a 17, caracterizado pelo fato de que é implementado por um dispositivo de decodificação.
20. Codificador (20), caracterizado pelo fato de que compreende conjunto de circuitos de processamento para executar o método de acordo com qualquer uma das reivindicações 1 a 18.
21. Decodificador (30), caracterizado pelo fato de que compreende conjunto de circuitos de processamento para executar o método conforme definido em qualquer uma das reivindicações 1 a 17 ou 19.
22. Meio legível por computador, caracterizado pelo fato de que compreende instruções, em que as instruções, quando lidas por um computador, induzem o computador a realizar o método conforme definido em qualquer uma das reivindicações 1 a 19.
23. Decodificador, caracterizado pelo fato de que compreende:
um ou mais processadores; e um meio de armazenamento não transitório legível por computador acoplado aos processadores e armazenando instruções para execução pelos processadores, em que as instruções, quando executadas pelos processadores, configuram o decodificador para executar o método conforme definido em qualquer uma das reivindicações 1 a 17 e 19.
24. Codificador, caracterizado pelo fato de que compreende: um ou mais processadores; e um meio de armazenamento não transitório legível por computador acoplado aos processadores e armazenando instruções para execução pelos processadores, em que as instruções, quando executadas pelos processadores, configuram o decodificador para executar o método conforme definido em qualquer uma das reivindicações 1 a 18.
25. Meio não transitório legível por computador, caracterizado pelo fato de que carrega instruções que, quando executadas por um dispositivo de computador, induzem o dispositivo de computador a realizar o método conforme definido em qualquer uma das reivindicações 1 a 19.
26. Fluxo de bits para o sinal de vídeo ao incluir uma pluralidade de elementos de sintaxe, caracterizado pelo fato de que a pluralidade de elementos de sintaxe compreende uma primeira sinalização, e o método conforme definido em qualquer uma das reivindicações anteriores é realizado com base no valor da primeira sinalização.
27. Aparelho para predição inter baseada em afim de um bloco de imagem atual que compreende blocos de luma e croma colocalizados, o aparelho caracterizado pelo fato de que compreende: um módulo de determinação configurado para determinar fatores de escala de croma em direções horizontal e vertical com base em informação de formato de croma, em que a informação de formato de croma indica um formato de croma de uma imagem atual à qual o bloco de imagem atual pertence; e determinar um conjunto (S) de sub-blocos de luma do bloco de luma com base em valores dos fatores de escala de croma; e um módulo de derivação de vetor de movimento configurado para determinar um vetor de movimento para um sub-bloco de croma do bloco de croma com base em vetores de movimento de um ou mais sub-blocos de luma no conjunto (S) de sub-blocos de luma.
28. Aparelho, de acordo com a reivindicação 27, caracterizado pelo fato de que cada um do um ou mais sub- blocos de luma no conjunto (S) é representado por um índice de sub-bloco em uma direção horizontal e um índice de sub- bloco em uma direção vertical.
29. Aparelho, de acordo com a reivindicação 27 ou 28, caracterizado pelo fato de que: quando ambos de SubWidthC e SubHeightC são iguais a 1, o conjunto de sub-blocos de luma (S) compreende um sub- bloco de luma indexado por: S0 = (xSbIdx, ySbIdx); quando pelo menos um de SubWidthC e SubHeightC não é igual a 1, o conjunto de sub-blocos de luma (S) compreende: um primeiro sub-bloco de luma indexado por: S0 = (( xSbIdx >> ( SubWidthC − 1 ) << ( SubWidthC − 1 )),
(ySbIdx >> ( SubHeightC − 1 ) << ( SubHeightC − 1 ))), e um segundo sub-bloco de luma indexado por: S1 = (( xSbIdx >> (SubWidthC − 1 ) << ( SubWidthC − 1)) + ( SubWidthC − 1 ), ( ySbIdx >> ( SubHeightC − 1 ) << ( SubHeightC − 1 )) + ( SubHeightC − 1 )) em que SubWidthC e SubHeightC representam os fatores de escala de croma em direções horizontal e vertical, respectivamente; xSbIdx e ySbIdx representam um índice de sub-bloco na direção horizontal e um índice de sub-bloco na direção vertical, respectivamente, para um sub-bloco de luma no conjunto (S); “<<” representa um deslocamento aritmético para a esquerda; “>>” representa um deslocamento aritmético para a direita; xSbIdx = 0..numSbX − 1 e ySbIdx = 0..numSbY − 1; numSbX indica o número dos sub-blocos de luma no bloco de luma ao longo da direção horizontal; e numSbY indica o número dos sub-blocos de luma no bloco de luma ao longo da direção vertical.
30. Aparelho, de acordo com a reivindicação 29, caracterizado pelo fato de que o número dos sub-blocos de croma no bloco de croma ao longo da direção horizontal e da direção vertical é o mesmo que o número dos sub-blocos de luma no bloco de luma ao longo das direções horizontal e vertical, respectivamente.
31. Aparelho, de acordo com a reivindicação 27 ou 28, caracterizado pelo fato de que:
quando ambos de SubWidthC e SubHeightC são iguais a 1, o conjunto de sub-blocos de luma (S) compreende um sub- bloco de luma indexado por: S0 = (xCSbIdx, yCSbIdx); quando pelo menos um de SubWidthC e SubHeightC não é igual a 1, o conjunto de sub-blocos de luma (S) compreende: um primeiro sub-bloco de luma indexado por S0 = (( xCSbIdx >> ( SubWidthC − 1 ) << ( SubWidthC − 1 )), (yCSbIdx >> ( SubHeightC − 1 ) << ( SubHeightC − 1 ))), e um segundo sub-bloco de luma indexado por S1 = ( xCSbIdx >> (SubWidthC − 1 ) << ( SubWidthC − 1)) + ( SubWidthC − 1 ), ( yCSbIdx >> ( SubHeightC − 1 ) << ( SubHeightC − 1 )) + ( SubHeightC − 1 )), em que SubWidthC e SubHeightC representam respectivamente os fatores de escala de croma em direções horizontal e vertical; xCSbIdx e yCSbIdx representam um índice de sub-bloco na direção horizontal e um índice de sub-bloco na direção vertical, respectivamente, para um sub-bloco de luma no conjunto (S); xCSbIdx = 0..numCSbX − 1 e yCSbIdx = 0..numCSbY − 1; numCSbX indica o número dos sub-blocos de croma na direção horizontal; e numCSbY indica o número dos sub-blocos de croma na direção vertical.
32. Aparelho, de acordo com a reivindicação 31, caracterizado pelo fato de que um tamanho de cada um dos sub-blocos de croma é o mesmo que um tamanho de cada um dos sub-blocos de luma.
33. Aparelho, de acordo com a reivindicação 31, caracterizado pelo fato de que o número de sub-blocos de croma no bloco de croma ao longo da direção horizontal depende do número dos sub-blocos de luma no bloco de luma ao longo da horizontal e do valor do fator de escala de croma na direção horizontal; e o número de sub-blocos de croma no bloco de croma ao longo da direção vertical depende do número dos sub-blocos de luma no bloco de luma ao longo da direção vertical e do valor do fator de escala de croma na direção vertical.
34. Aparelho, de acordo com qualquer uma das reivindicações anteriores, caracterizado pelo fato de que, para o sub-bloco de croma indexado por um índice de sub- bloco xSbIdxL na direção horizontal e um índice de sub- bloco ySbIdxL na direção vertical, o conjunto de sub-blocos de luma (S) compreende um ou mais de sub-blocos indexados por: S0 = (xSbIdxL, ySbIdxL), S1 = (xSbIdxL, ySbIdxL + (SubHeightC-1)), S2 = (xSbIdxL + (SubWidthC-1), ySbIdxL), ou S3 = (xSbIdxL + (SubWidthC-1), ySbIdxL + (SubHeightC- 1)); em que o índice de sub-bloco de luma S0 é representado pelo índice de sub-bloco xSbIdxL na direção horizontal e o índice de sub-bloco ySbIdxL na direção vertical; o índice de bloco de luma S1 é representado por um índice de sub-bloco na direção horizontal xSbIdxL e um índice de sub-bloco na direção vertical ySbIdxL + (SubHeightC-1); o índice de bloco de luma S2 é representado por um índice de sub-bloco na direção horizontal xSbIdxL + (SubWidthC-1) e um índice de sub-bloco na direção vertical ySbIdxL; e o índice de bloco de luma S3 é representado por um índice de sub-bloco na direção horizontal xSbIdxL + (SubWidthC-1) e um índice de sub-bloco na direção vertical ySbIdxL + (SubHeightC-1).
35. Aparelho, de acordo com qualquer uma das reivindicações anteriores, caracterizado pelo fato de que o conjunto de sub-blocos de luma (S) compreende: um primeiro sub-bloco de luma indexado por S0 = (xSbIdxL, ySbIdxL) e um segundo sub-bloco de luma indexado por S1 = (xSbIdxL + (SubWidthC-1), ySbIdxL + (SubHeightC-1)); em que a posição de bloco de luma S0 é representada por um índice de sub-bloco xSbIdxL na direção horizontal e um índice de sub-bloco ySbIdxL na direção vertical; a posição de bloco de luma S1 é representada por um índice de sub-bloco na direção horizontal xSbIdxL + (SubWidthC-1) e um índice de sub-bloco na direção vertical ySbIdxL + (SubHeightC-1).
36. Aparelho, de acordo com qualquer uma das reivindicações anteriores, caracterizado pelo fato de que, quando o formato de croma é 4:4:4, o conjunto (S) compreende um sub-bloco de luma colocalizado com o sub- bloco de croma; em que quando o formato de croma é 4:2:2, o conjunto (S) compreende dois sub-blocos de luma adjacentes horizontalmente um ao outro; em que quando o formato de croma é 4:2:0, o conjunto
(S) compreende dois sub-blocos de luma que são diagonais.
37. Aparelho, de acordo com qualquer uma das reivindicações anteriores, caracterizado pelo fato de que, quando existe mais de um sub-bloco de luma no conjunto (S), o módulo de derivação de vetor de movimento é configurado para: calcular a média de vetores de movimento dos sub-blocos de luma no conjunto S para gerar um vetor de movimento luma médio; e derivar o vetor de movimento para o sub-bloco de croma com base no vetor de movimento luma médio.
38. Aparelho, de acordo com a reivindicação 37, caracterizado pelo fato de que o módulo de derivação de vetor de movimento é configurado para: calcular a média de componentes horizontais dos vetores de movimento dos sub-blocos de luma no conjunto S; ou calcular a média de componentes verticais dos vetores de movimento dos sub-blocos de luma no conjunto S.
39. Aparelho, de acordo com a reivindicação 37 ou 38, caracterizado pelo fato de que o módulo de derivação de vetor de movimento é configurado para calcular a média de vetores de movimento dos sub-blocos de luma no conjunto S para gerar um vetor de movimento luma médio do seguinte modo: 𝑦 mvAvgLX = ∑𝑖 mvLX[𝑆𝑖𝑥 ][𝑆𝑖 ] quando mvAvgLX[ 0 ] é maior ou igual a 0, mvAvgLX[ 0 ] = ( mvAvgLX[ 0 ] + ( N>>1 ) – 1) >> log2(N), de outro modo, mvAvgLX[ 0 ] = − ((− mvAvgLX[ 0 ] + ( N>>1 ) – 1) >> log2(N)); quando mvAvgLX[ 1 ] é maior ou igual a 0, mvAvgLX[ 1 ]
= ( mvAvgLX[ 1 ] + ( N>>1 ) – 1) >> log2(N), de outro modo, mvAvgLX[ 1 ] = − ((− mvAvgLX[ 1 ] + ( N>>1 ) – 1 ) >> log2(N)), em que mvAvgLX é um vetor de movimento resultante do cálculo de média; mvAvgLX[ 0 ] é um componente horizontal do vetor de movimento resultante mvAvgLX, e mvAvgLX[ 1 ] é um componente vertical do vetor de movimento resultante mvAvgLX; 𝑦 𝑆𝑖𝑥 e 𝑆𝑖 são índices horizontal e vertical de sub-bloco Si no conjunto de sub-blocos de luma (S) em matriz de vetores de movimento, 𝑦 mvLX[𝑆𝑖𝑥 ][𝑆𝑖 ] é um vetor de movimento de um sub-bloco de 𝑦 luma com índices 𝑆𝑖𝑥 e 𝑆𝑖 , N é um número de elementos no conjunto (S) de sub-blocos de luma, log2(N) representa o logaritmo de N na base 2 e é a potência à qual o número 2 é elevado para obter o valor N, e “>>” representa um deslocamento aritmético para a direita.
40. Aparelho, de acordo com qualquer uma das reivindicações 37 a 39, caracterizado pelo fato de que o módulo de derivação de vetor de movimento é configurado para calcular a média de vetores de movimento dos sub- blocos de luma no conjunto S para gerar um vetor de movimento luma médio do seguinte modo: mvAvgLX = mvLX[( xSbIdx >> ( SubWidthC − 1 ) << ( SubWidthC − 1 ))] [(ySbIdx >> ( SubHeightC − 1 ) << ( SubHeightC − 1 ))] + mvLX[( xSbIdx >> (SubWidthC − 1 ) << ( SubWidthC − 1) ) + ( SubWidthC − 1 )] [( ySbIdx >> ( SubHeightC − 1 ) <<
( SubHeightC − 1 )) + ( SubHeightC − 1)] se mvAvgLX[ 0 ] >= 0 então mvAvgLX[ 0 ] =( mvAvgLX[ 0 ] + 1 –( mvAvgLX[ 0 ] >= 0 )) >> 1 se mvAvgLX[ 1 ] >= 0 então mvAvgLX[ 1 ] =( mvAvgLX[ 1 ] + 1 –( mvAvgLX[ 1 ] >= 0 )) >> 1 em que mvAvgLX[ 0 ] é um componente horizontal do vetor de movimento médio mvAvgLX, mvAvgLX[ 1 ] é um componente vertical do vetor de movimento médio mvAvgLX; em que SubWidthC e SubHeightC representam os fatores de escala de croma em direções horizontal e vertical respectivamente; xSbIdx e ySbIdx representam um índice de sub-bloco em direção horizontal e um índice de sub-bloco na direção vertical, respectivamente, para um sub-bloco de luma no conjunto (S), “<<” é um deslocamento aritmético para a esquerda e “>>” é um deslocamento aritmético para a direita.
41. Aparelho, de acordo com qualquer uma das reivindicações anteriores, caracterizado pelo fato de que o módulo de determinação é configurado para: determinar os fatores de escala de croma nas direções horizontal e vertical com base em um mapeamento entre a informação de formato de croma e um par de fatores de escala de croma nas direções horizontal e vertical.
42. Aparelho, de acordo com qualquer uma das reivindicações anteriores, caracterizado pelo fato de que compreende adicionalmente: um módulo de compensação de movimento configurado para gerar uma predição do sub-bloco de croma com base no vetor de movimento determinado.
43. Aparelho, de acordo com qualquer uma das reivindicações anteriores, caracterizado pelo fato de que o formato de croma compreende um de um formato YUV 4:2:2, um formato YUV 4:2:0 ou um formato YUV 4:4:4.
BR112021016677-7A 2019-02-22 2020-02-24 Método e aparelho para predição inter baseada em afim de sub-blocos de croma BR112021016677A2 (pt)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US201962809551P 2019-02-22 2019-02-22
US62/809,551 2019-02-22
US201962823653P 2019-03-25 2019-03-25
US62/823,653 2019-03-25
US201962824302P 2019-03-26 2019-03-26
US62/824,302 2019-03-26
PCT/CN2020/076493 WO2020169114A1 (en) 2019-02-22 2020-02-24 Method and apparatus for affine based inter prediction of chroma subblocks

Publications (1)

Publication Number Publication Date
BR112021016677A2 true BR112021016677A2 (pt) 2021-10-13

Family

ID=72143801

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112021016677-7A BR112021016677A2 (pt) 2019-02-22 2020-02-24 Método e aparelho para predição inter baseada em afim de sub-blocos de croma

Country Status (13)

Country Link
US (1) US11924457B2 (pt)
EP (2) EP3928519B1 (pt)
JP (2) JP7332703B2 (pt)
KR (1) KR20210126126A (pt)
CN (3) CN113924780B (pt)
AU (1) AU2020226574A1 (pt)
BR (1) BR112021016677A2 (pt)
CA (1) CA3131028A1 (pt)
IL (1) IL285775A (pt)
MX (1) MX2021010127A (pt)
SG (1) SG11202109131PA (pt)
WO (1) WO2020169114A1 (pt)
ZA (1) ZA202106252B (pt)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10778972B1 (en) * 2019-02-27 2020-09-15 Google Llc Adaptive filter intra prediction modes in image/video compression
AU2020235190B2 (en) * 2019-03-08 2023-06-01 Beijing Bytedance Network Technology Co., Ltd. Constraints on model-based reshaping in video processing
CN113812151A (zh) * 2019-03-11 2021-12-17 弗劳恩霍夫应用研究促进协会 具有配置文件和级别相关编码选项的编码器和解码器、编码方法和解码方法
CN117528068A (zh) 2019-04-18 2024-02-06 北京字节跳动网络技术有限公司 视频编解码中的跨分量模式中的选择性使用
EP3935855A4 (en) 2019-04-23 2022-09-21 Beijing Bytedance Network Technology Co., Ltd. METHOD OF CROSS-COMPONENT DEPENDENCE REDUCTION
EP3949395A4 (en) 2019-05-08 2022-06-29 Beijing Bytedance Network Technology Co., Ltd. Conditions for applicability of cross-component coding
CN117478908A (zh) 2019-06-22 2024-01-30 北京字节跳动网络技术有限公司 色度残差缩放的语法元素
JP7460748B2 (ja) 2019-07-07 2024-04-02 北京字節跳動網絡技術有限公司 クロマ残差スケーリングのシグナリング
CN115918080A (zh) * 2020-06-08 2023-04-04 抖音视界有限公司 视频编解码的仿射预测改进

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5886953B2 (ja) 2011-06-28 2016-03-16 サムスン エレクトロニクス カンパニー リミテッド 非対称形の補間フィルタを利用して、映像を補間する方法及びその装置
US9743091B2 (en) * 2012-12-17 2017-08-22 Lg Electronics Inc. Method for encoding/decoding image, and device using same
US20170374384A1 (en) 2015-01-14 2017-12-28 Vid Scale, Inc. Palette coding for non-4:4:4 screen content video
US20170105014A1 (en) * 2015-10-08 2017-04-13 Qualcomm Incorporated Luma-driven chroma scaling for high dynamic range and wide color gamut contents
WO2017143467A1 (en) * 2016-02-22 2017-08-31 Mediatek Singapore Pte. Ltd. Localized luma mode prediction inheritance for chroma coding
RU2710667C1 (ru) * 2016-05-28 2019-12-30 МедиаТек Инк. Способ и устройство привязки к текущему изображению для кодирования видео
US11025903B2 (en) * 2017-01-13 2021-06-01 Qualcomm Incorporated Coding video data using derived chroma mode
WO2020093999A1 (en) * 2018-11-05 2020-05-14 Beijing Bytedance Network Technology Co., Ltd. Inter prediction with refinement in video processing
WO2020103944A1 (en) * 2018-11-22 2020-05-28 Beijing Bytedance Network Technology Co., Ltd. Sub-block based motion candidate selection and signaling
JP7139531B2 (ja) * 2018-12-21 2022-09-20 ベイジン ダージャー インターネット インフォメーション テクノロジー カンパニー リミテッド 彩度成分のアフィン動きベクトルを導出するためのビデオ符号化復号化の方法および装置

Also Published As

Publication number Publication date
EP3928519A4 (en) 2022-06-29
US20210409753A1 (en) 2021-12-30
ZA202106252B (en) 2022-10-26
CN113924780A (zh) 2022-01-11
CA3131028A1 (en) 2020-08-27
SG11202109131PA (en) 2021-09-29
JP2022523369A (ja) 2022-04-22
US11924457B2 (en) 2024-03-05
EP4354869A1 (en) 2024-04-17
EP3928519B1 (en) 2024-04-03
JP7332703B2 (ja) 2023-08-23
KR20210126126A (ko) 2021-10-19
EP3928519A1 (en) 2021-12-29
MX2021010127A (es) 2021-11-12
AU2020226574A1 (en) 2021-09-30
CN113924780B (zh) 2023-08-22
JP2023157942A (ja) 2023-10-26
WO2020169114A1 (en) 2020-08-27
CN117278764A (zh) 2023-12-22
IL285775A (en) 2021-10-31
CN117499669A (zh) 2024-02-02

Similar Documents

Publication Publication Date Title
JP7106744B2 (ja) ルーマおよびクロマ成分についてibc専用バッファおよびデフォルト値リフレッシュを使用するエンコーダ、デコーダおよび対応する方法
BR112021016677A2 (pt) Método e aparelho para predição inter baseada em afim de sub-blocos de croma
JP7205038B2 (ja) 任意のctuサイズのためのibc検索範囲最適化を用いるエンコーダ、デコーダおよび対応する方法
WO2020236038A1 (en) Method and apparatus of cross-component prediction
BR112020026818A2 (pt) codificador, decodificador e métodos correspondentes de derivação de resistência de limite de filtro de desbloqueio
JP7314300B2 (ja) イントラ予測のための方法および装置
BR112021016560A2 (pt) Método e aparelho para predição intra usando modelo linear
BR112021008016A2 (pt) codificador, decodificador e métodos correspondentes para modo de fusão
BR122023020161A2 (pt) Processo de codificação para modo de partição geométrica
JP2022541700A (ja) イントラ予測モードに関連するエンコーダ、デコーダ、および対応する方法
BR112021016270A2 (pt) Método de codificação de vídeo e codificador, decodificador, meio legível por computador
BR112020025145A2 (pt) filtro de desbloqueio para fronteiras de subpartição causadas por ferramenta de codificação de subpartição intra
BR112021009922A2 (pt) Método de construir uma lista de mesclagens candidata para modo de cópia de intrabloco, codificador, decodificador, produto de programa de computador e dispositivo de decodificação de dados de vídeo
BR122023021035A2 (pt) Método de compactação do vetor de movimento, meio de armazenamento legível por computador não transitório, codificador, decodificador e meio de armazenamento
BR122022009445A2 (pt) Codificador, decodificador e métodos correspondentes para simplificar sinalização de cabeçalho de imagem
BR112021013565A2 (pt) Codificador, decodificador, meio legível por computador não transitório e método de codificação de vídeo de um bloco de uma imagem
BR112021012708A2 (pt) Método e aparelho de modelagem linear de componente cruzado para predição intra
BR112021009833A2 (pt) codificador, decodificador e métodos correspondentes para predição inter
JP7286782B2 (ja) 幾何学的区分けモードのためのサンプルの距離の計算
KR20210008080A (ko) 변환 프로세스를 위해 사용되는 인코더, 디코더 및 대응하는 방법
WO2020149769A1 (en) An encoder, a decoder and corresponding methods for local illumination compensation
WO2021034231A2 (en) Method and apparatus of position dependent prediction combination for oblique directional intra prediction
NZ780730B2 (en) Method and apparatus for intra-prediction
WO2021006773A1 (en) Motion field storage optimization for the line buffer