BR112021008720A2 - método de codificação de vídeo e método de decodificação vídeo - Google Patents

método de codificação de vídeo e método de decodificação vídeo Download PDF

Info

Publication number
BR112021008720A2
BR112021008720A2 BR112021008720-6A BR112021008720A BR112021008720A2 BR 112021008720 A2 BR112021008720 A2 BR 112021008720A2 BR 112021008720 A BR112021008720 A BR 112021008720A BR 112021008720 A2 BR112021008720 A2 BR 112021008720A2
Authority
BR
Brazil
Prior art keywords
candidate
block
merge
current block
vector
Prior art date
Application number
BR112021008720-6A
Other languages
English (en)
Inventor
Bae Keun Lee
Original Assignee
Guangdong Oppo Mobile Telecommunications Corp., 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 Guangdong Oppo Mobile Telecommunications Corp., Ltd. filed Critical Guangdong Oppo Mobile Telecommunications Corp., Ltd.
Publication of BR112021008720A2 publication Critical patent/BR112021008720A2/pt

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • H04N19/105Selection of the reference unit for prediction within a chosen coding or prediction mode, e.g. adaptive choice of position and number of pixels used for prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • H04N19/107Selection of coding mode or of prediction mode between spatial and temporal predictive coding, e.g. picture refresh
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • H04N19/109Selection of coding mode or of prediction mode among a plurality of temporal predictive coding modes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/117Filters, e.g. for pre-processing or post-processing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/119Adaptive subdivision aspects, e.g. subdivision of a picture into rectangular or non-rectangular coding blocks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/12Selection from among a plurality of transforms or standards, e.g. selection between discrete cosine transform [DCT] and sub-band transform or selection between H.263 and H.264
    • H04N19/122Selection of transform size, e.g. 8x8 or 2x4x8 DCT; Selection of sub-band transforms of varying structure or type
    • 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
    • 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/20Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using video object coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/43Hardware specially adapted for motion estimation or compensation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/46Embedding additional information in the video signal during the compression process
    • 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
    • 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
    • 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/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/625Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding using discrete cosine transform [DCT]
    • 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)
  • Physics & Mathematics (AREA)
  • Discrete Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

MÉTODO DE CODIFICAÇÃO DE VÍDEO E MÉTODO DE DECODIFICAÇÃO VÍDEO. Trata-se de um método de decodificação de vídeo, de acordo com a presente revelação, que inclui as etapas de: determinar se um método de codificação de diferença de movimento de fusão é aplicado a um bloco atual; gerar uma lista de candidatos a fusão para o bloco atual; especificar um candidato a fusão para o bloco atual com base na lista de candidatos a fusão e derivar um vetor de movimento para o bloco atual com base no candidato a fusão.

Description

MÉTODO DE CODIFICAÇÃO DE VÍDEO E MÉTODO DE DECODIFICAÇÃO VÍDEO CAMPO TÉCNICO
[001] A presente revelação se refere a um método de codificação e decodificação de sinal de vídeo e um aparelho para o mesmo.
ANTECEDENTES
[002] Como os painéis de exibição estão ficando cada vez maiores, serviços de vídeo de qualidade ainda mais alta são cada vez mais necessários. O maior problema dos serviços de vídeo de alta definição é o aumento significativo do volume de dados e, para resolver esse problema, estudos para melhorar a taxa de compressão de vídeo são realizados ativamente. Como um exemplo representativo, o Grupo de Especialistas em Imagens com Movimento (MPEG) e o Grupo de Especialistas em Codificação de Vídeo (VCEG) da União Internacional de Telecomunicações (ITU-T) formaram a Equipe de Colaboração Conjunta em Codificação de Vídeo (JCT-VC) em 2009. A JCT-VC propôs a Codificação de Vídeo de Alta Eficiência (HEVC), que é um padrão de compressão de vídeo com um desempenho de compressão cerca de duas vezes maior do que o desempenho de compressão de H.264/AVC, e foi aprovado como padrão em 25 de janeiro de 2013. Com o rápido avanço nos serviços de vídeo de alta definição, o desempenho do HEVC gradualmente revela suas limitações.
SUMÁRIO
[003] Um objeto da presente revelação é fornecer um método para refinar um vetor de movimento derivado de um candidato a fusão com base em um vetor de deslocamento na codificação/decodificação de um sinal de vídeo e um aparelho para realizar o método.
[004] Outro objeto da presente revelação é fornecer um método para sinalizar um vetor de deslocamento na codificação/decodificação de um sinal de vídeo e um aparelho para realizar o método.
[005] Os problemas técnicos a serem alcançados na presente revelação não estão limitados aos problemas técnicos mencionados acima, e outros problemas não mencionados podem ser claramente compreendidos por aqueles versados na técnica a partir da seguinte descrição.
[006] Um método de decodificação/codificação de um sinal de vídeo de acordo com a presente revelação inclui as etapas de: determinar se um método de codificação de diferença de movimento de fusão é aplicado a um bloco atual; gerar uma lista de candidatos a fusão para o bloco atual; especificar um candidato a fusão para o bloco atual com base na lista de candidatos a fusão; e derivar um vetor de movimento para o bloco atual com base no candidato a fusão. Neste ponto, quando o método de codificação de diferença de movimento de fusão é aplicado ao bloco atual, o vetor de movimento do bloco atual é derivado pela adição de um vetor de deslocamento a um vetor de movimento do candidato a fusão, quando o número máximo de candidatos a fusão que a lista de candidatos a fusão pode incluir é plural, o candidato a fusão do bloco atual é selecionado com base em informações de índice decodificadas de um fluxo de bits indicando qualquer um dentre os candidatos a fusão, e quando o número máximo é 1, o candidato a fusão é determinado sem decodificar as informações de índice.
[007] No método de codificação e decodificação de sinal de vídeo de acordo com a presente revelação, a magnitude do vetor de deslocamento pode ser determinada com base nas primeiras informações de índice que especificam qualquer um dentre os candidatos a magnitude de movimento.
[008] No método de codificação e decodificação de sinal de vídeo de acordo com a presente revelação, pelo menos um dentre um valor máximo e um valor mínimo dos candidatos a magnitude de movimento pode ser definido de forma diferente de acordo com um valor de um sinalizador que indica valores numéricos dos candidatos a magnitude de movimento.
[009] No método de codificação e decodificação de sinal de vídeo de acordo com a presente revelação, a sinalizador pode ser sinalizada em um nível de imagem.
[010] No método de codificação e decodificação de sinal de vídeo de acordo com a presente revelação, pelo menos um dentre um valor máximo e um valor mínimo dos candidatos a magnitude de movimento pode ser definido de forma diferente de acordo com a precisão do vetor de movimento para o bloco atual.
[011] No método de codificação e decodificação de sinal de vídeo de acordo com a presente revelação, a magnitude do vetor de deslocamento pode ser obtida aplicando uma operação de deslocamento a um valor indicado pelo candidato a magnitude de movimento especificado pelas primeiras informações de índice.
[012] No método de codificação e decodificação de sinal de vídeo de acordo com a presente revelação, a direção do vetor de deslocamento pode ser determinada com base nas segundas informações de índice que especificam qualquer um dentre os candidatos a direção de vetor.
[013] As características resumidas brevemente acima com relação à presente revelação são aspectos meramente exemplares da descrição detalhada da presente revelação que serão descritos abaixo, e não limitam o escopo da presente revelação.
[014] De acordo com a presente revelação, a eficiência de interprevisão pode ser melhorada pelo refinamento de um vetor de movimento de um candidato a fusão com base em um vetor de deslocamento.
[015] De acordo com a presente revelação, a eficiência de interprevisão pode ser melhorada pela determinação adaptativamente de uma magnitude e uma direção de um vetor de deslocamento.
[016] Os efeitos que podem ser obtidos a partir da presente revelação não estão limitados aos efeitos mencionados acima, e outros efeitos não mencionados podem ser claramente compreendidos por aqueles versados na técnica a partir da seguinte descrição.
BREVE DESCRIÇÃO DOS DESENHOS
[017] A Figura 1 é um diagrama em bloco que mostra um codificador de vídeo de acordo com uma modalidade de presente revelação.
[018] A Figura 2 é um diagrama em bloco que mostra um decodificador de vídeo de acordo com uma modalidade de presente revelação.
[019] A Figura 3 é uma vista que mostra uma unidade de árvore de codificação básica de acordo com uma modalidade da presente revelação.
[020] A Figura 4 é uma vista que mostra vários tipos de divisão de um bloco de codificação.
[021] A Figura 5 é uma vista que mostra um padrão de divisão de uma unidade de árvore de codificação.
[022] A Figura 6 é uma vista que mostra os formatos das unidades básicas de dados.
[023] As Figuras 7 e 8 são vistas que mostram exemplos de divisão de um bloco de codificação em uma pluralidade de sub-blocos.
[024] A Figura 9 é um fluxograma que ilustra um método de interprevisão de acordo com uma modalidade de presente revelação.
[025] A Figura 10 é uma vista que mostra movimentos não lineares de um objeto.
[026] A Figura 11 é um fluxograma que ilustra um método de interprevisão baseado em um movimento afim de acordo com uma modalidade de presente revelação.
[027] A Figura 12 é uma vista que mostra um exemplo de vetores de origem afins de cada modelo de movimento afim.
[028] A Figura 13 é uma vista que mostra um exemplo de vetores afins dos sub-blocos em um modelo de movimento de 4 parâmetros.
[029] A Figura 14 é um fluxograma que ilustra um processo de derivação de informações de movimento de um bloco atual usando um modo de fusão.
[030] A Figura 15 é uma vista que mostra um exemplo de blocos candidatos usados para derivar um candidato a fusão.
[031] A Figura 16 é uma vista que mostra posições de amostras de referência.
[032] A Figura 17 é uma vista que mostra um exemplo de blocos candidatos usados para derivar um candidato a fusão.
[033] A Figura 18 é uma vista que mostra um exemplo no qual a posição de uma amostra de referência é alterada.
[034] A Figura 19 é uma vista que mostra um exemplo no qual a posição de uma amostra de referência é alterada.
[035] A Figura 20 é um fluxograma que ilustra um processo de atualização de uma lista de informações de movimento inter-região.
[036] A Figura 21 é uma vista que mostra uma modalidade de atualização de uma lista de candidatos a fusão inter-região.
[037] A Figura 22 é uma vista que mostra um exemplo no qual um índice de um candidato a fusão inter-região previamente armazenado é atualizado.
[038] A Figura 23 é uma vista que mostra a posição de um sub-bloco representativo.
[039] A Figura 24 é uma vista que mostra um exemplo no qual uma lista de informações de movimento inter- região é gerada para cada modo de interprevisão.
[040] A Figura 25 é uma vista que mostra um exemplo no qual um candidato a fusão inter-região incluído em uma lista de informações de movimento de longo prazo é adicionado a uma lista de candidatos a fusão.
[041] A Figura 26 é uma vista que mostra um exemplo em que uma verificação de redundância é executada apenas em alguns dos candidatos a fusão.
[042] A Figura 27 é uma vista que mostra um exemplo em que uma verificação de redundância é omitida para um candidato a fusão específico.
[043] A Figura 28 é uma vista que mostra um vetor de deslocamento de acordo com os valores de distance_idx que indicam uma magnitude de um vetor de deslocamento e direction_idx que indicam uma direção do vetor de deslocamento.
[044] A Figura 29 é uma vista que mostra um vetor de deslocamento de acordo com os valores de distance_idx que indicam uma magnitude de um vetor de deslocamento e direction_idx que indicam uma direção do vetor de deslocamento.
[045] A Figura 30 é uma vista que mostra padrões de divisão de um bloco de codificação quando uma técnica de divisão triangular é aplicada.
[046] A Figura 31 é uma vista que mostra um exemplo no qual os vetores de deslocamento de cada uma das subunidades são definidos de forma diferente.
[047] A Figura 32 é uma vista que mostra candidatos a vetor de movimento que um candidato a fusão de refinamento pode assumir.
[048] A Figura 33 é uma vista que mostra a configuração de uma lista de deslocamento de refinamento de fusão.
[049] As Figuras 34 e 35 são vistas que mostram vetores de deslocamento especificados por candidatos a deslocamento de fusão.
[050] A Figura 36 é uma vista que mostra blocos candidatos usados para derivar candidatos a previsão de vetor de movimento.
[051] A Figura 37 é uma vista que mostra candidatos a vetor de movimento que podem ser definidos como um candidato a previsão de vetor de movimento de refinamento.
[052] A Figura 38 é uma vista que mostra a configuração de uma lista de deslocamento de refinamento de vetor de previsão.
DESCRIÇÃO DETALHADA
[053] A seguir, uma modalidade da presente revelação será descrita em detalhes com referência aos desenhos anexos.
[054] De acordo com a presente revelação, um método de decodificação de vídeo inclui: determinar se um método de codificação de diferença de movimento de fusão é aplicado a um bloco atual; gerar uma lista de candidatos a fusão para o bloco atual; especificar um candidato a fusão para o bloco atual com base na lista de candidatos a fusão; e derivar um vetor de movimento para o bloco atual com base no candidato a fusão. Nesse ponto, quando o método de codificação de diferença de movimento de fusão é aplicado ao bloco atual, o vetor de movimento do bloco atual é derivado adicionando-se um vetor de deslocamento a um vetor de movimento do candidato a fusão, quando o número máximo de candidatos a fusão que a lista de candidatos a fusão pode incluir é plural, o candidato a fusão do bloco atual é selecionado com base nas informações de índice decodificadas de um fluxo de bits que indicam qualquer um dentre os candidatos a fusão, e quando o número máximo é 1, o candidato a fusão é determinado sem decodificar o índice em formação.
[055] Em uma modalidade, uma magnitude do vetor de deslocamento é determinada com base nas primeiras informações de índice que especificam um dentre os candidatos de magnitude de movimento.
[056] Em uma modalidade, pelo menos um dentre um valor máximo e um valor mínimo dos candidatos a magnitude de movimento é definido de forma diferente de acordo com um valor de um sinalizador que indica valores numéricos dos candidatos a magnitude de movimento.
[057] Em uma modalidade, o sinalizador é sinalizado em um nível de imagem.
[058] Em uma modalidade, pelo menos um dentre um valor máximo e um valor mínimo dos candidatos a magnitude de movimento é definido de forma diferente de acordo com a precisão do vetor de movimento para o bloco atual.
[059] Em uma modalidade, a magnitude do vetor de deslocamento é obtida aplicando-se uma operação de deslocamento a um valor indicado pelo candidato a magnitude de movimento especificado pelas primeiras informações de índice.
[060] Em uma modalidade, uma direção do vetor de deslocamento é determinada com base nas informações do segundo índice que especificam um dentre os candidatos a direção do vetor.
[061] De acordo com a presente revelação, um método de codificação de vídeo inclui: determinar se um método de codificação de diferença de movimento de fusão é aplicado a um bloco atual; gerar uma lista de candidatos de fusão para o bloco atual; especificar um candidato a fusão para o bloco atual com base na lista de candidatos a fusão; e derivar um vetor de movimento para o bloco atual com base no candidato a fusão. Quando o método de codificação de diferença de movimento de fusão é aplicado ao bloco atual, o vetor de movimento do bloco atual é derivado adicionando-se um vetor de deslocamento a um vetor de movimento do candidato a fusão, quando o número máximo de candidatos a fusão que a lista de candidatos a fusão pode incluir é plural, as informações de índice que indicam o candidato a fusão do bloco atual dentre os candidatos a fusão são codificadas e, quando o número máximo é 1, a codificação da informações de índice é omitida.
[062] Em uma modalidade, o método de codificação de vídeo inclui ainda a codificação de informações de primeiro índice para especificar um candidato a magnitude de movimento que indica uma magnitude do vetor de deslocamento entre uma pluralidade de candidatos a magnitude de movimento.
[063] Em uma modalidade, o método de codificação de vídeo inclui ainda a codificação de um sinalizador que indica valores numéricos dos candidatos a magnitude de movimento, em que pelo menos um dentre um valor máximo e um valor mínimo dos candidatos de magnitude de movimento é definido de forma diferente de acordo com um valor do sinalizador.
[064] Em uma modalidade, o sinalizador é codificado em um nível de imagem.
[065] Em uma modalidade, pelo menos um dentre um valor máximo e um valor mínimo dos candidatos a magnitude de movimento é definido de forma diferente de acordo com a precisão do vetor de movimento para o bloco atual.
[066] Em uma modalidade, o candidato a magnitude de movimento tem um valor derivado pela aplicação de uma operação de deslocamento para a magnitude do vetor de deslocamento.
[067] Em uma modalidade, o método de codificação de vídeo inclui ainda a codificação de informações de segundo índice para especificar um candidato a direção de vetor indicando uma direção do vetor de deslocamento entre uma pluralidade de candidatos de direção de vetor.
[068] A codificação e decodificação de um vídeo são realizadas pela unidade de bloco. Por exemplo, um processo de codificação/decodificação, como transformada, quantização, previsão, filtragem em circuito, reconstrução ou semelhantes, pode ser realizado em um bloco de codificação, um bloco de transformada ou um bloco de previsão.
[069] Daqui em diante, um bloco a ser codificado/decodificado será referido como um ‘bloco atual’. Por exemplo, o bloco atual pode representar um bloco de codificação, um bloco de transformada ou um bloco de previsão de acordo com uma etapa do processo de codificação/decodificação atual.
[070] Além disso, pode ser entendido que o termo ‘unidade’ usado neste relatório descritivo indica uma unidade básica para realizar um processo de codificação/decodificação específico, e o termo ‘bloco’ indica uma matriz de amostra de um tamanho predeterminado. Salvo indicação em contrário, o ‘bloco’ e ‘unidade’ podem ser usados para ter o mesmo significado. Por exemplo, em uma modalidade descrita abaixo, pode ser entendido que um bloco de codificação e uma unidade de codificação têm o mesmo significado.
[071] A Figura 1 é um diagrama em bloco que mostra um codificador de vídeo de acordo com uma modalidade de presente revelação.
[072] Com referência à FIG. 1, um aparelho de codificação de vídeo 100 pode incluir uma parte de divisão de imagem 110, uma parte de previsão 120 e 125, uma parte de transformada 130, uma parte de quantização 135, uma parte de rearranjo 160, uma parte de codificação de entropia 165, uma parte de quantização inversa 140, e parte de transformada inversa 145, uma parte de filtro 150 e uma memória 155.
[073] Cada um dos componentes mostrados na Figura 1 é mostrado independentemente para representar funções características diferentes umas das outras em um aparelho de codificação de vídeo, e isso não significa que cada componente é formado pela unidade de configuração de hardware separada ou software único. Ou seja, cada componente é incluído para ser listado como um componente por conveniência de explicação e pelo menos dois dos componentes podem ser combinados para formar um único componente, ou um componente pode ser dividido em uma pluralidade de componentes para executar uma função. Modalidades integradas e modalidades separadas dos componentes também estão incluídas no escopo da presente revelação se não se afastarem da essência da presente revelação.
[074] Além disso, alguns dos componentes não são componentes essenciais que desempenham funções essenciais na presente revelação, mas podem ser componentes opcionais apenas para melhorar o desempenho. A presente revelação pode ser implementada incluindo apenas componentes essenciais para implementar a essência da presente revelação, excluindo componentes usados para melhorar o desempenho, e uma estrutura incluindo apenas os componentes essenciais, excluindo os componentes opcionais usados para melhorar o desempenho também está incluída no escopo do presente revelação.
[075] A parte de divisão de imagem 110 pode dividir uma imagem de entrada em pelo menos uma unidade de processamento. Neste ponto, a unidade de processamento pode ser uma unidade de previsão (PU), uma unidade de transformada (TU) ou uma unidade de codificação (CU). A parte de divisão de imagem 110 pode dividir uma imagem em uma combinação de uma pluralidade de unidades de codificação, unidades de previsão e unidades de transformada e codificar uma imagem selecionando uma combinação de uma unidade de codificação, uma unidade de previsão e uma unidade de transformada com base em um critério predeterminado (por exemplo, uma função de custo).
[076] Por exemplo, uma imagem pode ser dividida em uma pluralidade de unidades de codificação. A fim de dividir as unidades de codificação em uma imagem, uma estrutura de árvore recursiva, como uma estrutura de árvore quádrupla, pode ser usada. Um vídeo ou uma unidade de codificação dividida em diferentes unidades de codificação usando a maior unidade de codificação como uma raiz pode ser dividida para ter tantos nós filhos quanto o número de unidades de codificação divididas. Uma unidade de codificação que não é mais dividida de acordo com uma restrição predeterminada torna-se um nó folha. Isto é, quando se assume que apenas a divisão quadrada é possível para uma unidade de codificação, a unidade de codificação pode ser dividida em até quatro unidades de codificação diferentes.
[077] Daqui em diante, em uma modalidade da presente revelação, a unidade de codificação pode ser usada como um significado de uma unidade que realiza a codificação ou um significado de uma unidade que realiza a decodificação.
[078] A unidade de previsão pode ser aquela que é dividida em uma forma de pelo menos um quadrado, retângulo ou semelhante do mesmo tamanho dentro de uma unidade de codificação, ou pode ser qualquer unidade de previsão, entre as unidades de previsão divididas dentro de uma unidade de codificação, que é dividida para ter uma forma e/ou tamanho diferente daqueles de outra unidade de previsão.
[079] Se a unidade de codificação não for uma unidade de codificação menor quando uma unidade de previsão que realiza a intraprevisão com base na unidade de codificação é gerada, a intraprevisão pode ser realizada sem dividir uma imagem em uma pluralidade de unidades de previsão N × N.
[080] A parte de previsão 120 e 125 pode incluir uma parte de interprevisão 120 que realiza a interprevisão e uma parte de intraprevisão 125 que executa a intraprevisão. Pode ser determinado quando usar a interprevisão ou realizar a intraprevisão para uma unidade de previsão e determinar informações específicas (por exemplo, modo de intraprevisão, vetor de movimento, imagem de referência, etc.) de acordo com cada método de previsão. Neste ponto, uma unidade de processamento para realizar previsão pode ser diferente de uma unidade de processamento para determinar um método de previsão e conteúdo específico. Por exemplo, um método de previsão e um modo de previsão podem ser determinados em uma unidade de previsão e a previsão pode ser realizada em uma unidade de transformada. Um coeficiente residual (bloco residual) entre o bloco de previsão reconstruído e o bloco original pode ser inserido na parte de transformada 130. Além disso, as informações do modo de previsão, as informações do vetor de movimento e semelhantes usadas para previsão podem ser codificadas pela parte de codificação de entropia 165 juntamente com o coeficiente residual e transferidas para um decodificador. Quando um modo de codificação específico é usado, um bloco original pode ser codificado como está e transmitido para um decodificador sem gerar um bloco de previsão através da parte de previsão 120 e 125.
[081] A parte de interprevisão 120 pode predizer uma unidade de previsão com base em informações em pelo menos uma imagem entre as imagens antes ou depois da imagem atual e, em alguns casos, pode predizer uma unidade de previsão com base em informações em uma área parcial que foi codificada na imagem atual. A parte de interprevisão 120 pode incluir uma parte de interpolação de imagem de referência, uma parte de previsão de movimento e uma parte de compensação de movimento.
[082] A parte de interpolação de imagem de referência pode receber informações de imagem de referência da memória 155 e gerar informações de pixel de um número inteiro de pixels ou menor a partir da imagem de referência. No caso de um pixel de luminância, um filtro de interpolação de 8 toques baseado em DCT com um coeficiente de filtro variável pode ser usado para gerar informações de pixel de um número inteiro de pixels ou menor pela unidade de 1/4 pixels. No caso de um sinal de croma, um filtro de interpolação de 4 toques baseado em DCT com um coeficiente de filtro variável pode ser usado para gerar informações de pixel de um número inteiro de pixels ou menor pela unidade de 1/8 pixels.
[083] A parte de previsão de movimento pode realizar a previsão de movimento com base na imagem de referência interpolada pela parte de interpolação da imagem de referência. Vários métodos, como um algoritmo de correspondência de bloco baseado em pesquisa completa (FBMA), uma pesquisa em três etapas (TSS) e um novo algoritmo de pesquisa em três etapas (NTS), podem ser usados como um método de cálculo de um vetor de movimento. O vetor de movimento pode ter um valor de vetor de movimento de uma unidade de 1/2 ou 1/4 pixels com base em pixels interpolados. A parte de previsão de movimento pode prever uma unidade de previsão atual variando o modo de previsão de movimento. Vários métodos, tais como um modo de salto, um modo de fusão, um modo de previsão de vetor de movimento avançado (AMVP), um modo de cópia intrabloco e semelhantes podem ser usados como o modo de previsão de movimento.
[084] A parte de intraprevisão 125 pode gerar uma unidade de previsão com base nas informações em pixels de referência na vizinhança do bloco atual, que são informações de pixel na imagem atual. Quando um bloco na vizinhança da unidade de previsão atual é um bloco no qual a interprevisão foi realizada e, portanto, o pixel de referência é um pixel no qual a interprevisão foi realizada, o pixel de referência incluído no bloco no qual a interprevisão foi realizada pode ser usado no lugar das informações de pixel de referência de um bloco na vizinhança em que a intraprevisão foi realizada. Ou seja, quando um pixel de referência não está disponível, pelo menos um pixel de referência entre os pixels de referência disponíveis pode ser usado no lugar das informações de pixel de referência indisponíveis.
[085] Na intraprevisão, o modo de previsão pode ter um modo de previsão angular que usa informações de pixel de referência de acordo com uma direção de previsão e um modo de previsão não angular que não usa informações direcionais ao realizar a previsão. Um modo para predizer informações de luminância pode ser diferente de um modo para predizer informações de croma, e informações de modo de intraprevisão usadas para prever informações de luminância ou informações de sinal de luminância previstas podem ser usadas para prever as informações de croma.
[086] Se o tamanho da unidade de previsão for o mesmo que o tamanho da unidade de transformada quando a intraprevisão é realizada, a intraprevisão pode ser realizada para a unidade de previsão com base em um pixel no lado esquerdo, um pixel no lado superior esquerdo e um pixel no topo da unidade de previsão. No entanto, se o tamanho da unidade de previsão for diferente do tamanho da unidade de transformada quando a intraprevisão é realizada, a intraprevisão pode ser realizada usando um pixel de referência com base na unidade de transformada. Além disso, a intraprevisão usando divisão N × N pode ser usada apenas para a menor unidade de codificação.
[087] O método de intraprevisão pode gerar um bloco de previsão após a aplicação de um filtro de Intra Suavização Adaptativa (AIS) ao pixel de referência de acordo com um modo de previsão. O tipo de filtro AIS aplicado ao pixel de referência pode variar. A fim de realizar o método de intraprevisão, o modo de intraprevisão da unidade de previsão atual pode ser predito a partir do modo de intraprevisão da unidade de previsão existente na vizinhança da unidade de previsão atual. Quando um modo de previsão da unidade de previsão atual é predito usando as informações de modo predita da unidade de previsão vizinha, se os modos de intraprevisão da unidade de previsão atual são os mesmos que a unidade de previsão na vizinhança, as informações indicando que os modos de previsão da unidade de previsão atual são as mesmas que a unidade de previsão na vizinhança pode ser transmitida usando informações de sinalizador predeterminadas e, se os modos de previsão da unidade de previsão atual e a unidade de previsão na vizinhança forem diferentes um do outro, as informações de modo de previsão do bloco atual podem ser codificadas executando a codificação de entropia.
[088] Além disso, um bloco residual que inclui uma unidade de previsão que realizou previsão com base na unidade de previsão gerada pela parte de previsão 120 e 125 e informações de coeficiente residual, que é um valor de diferença da unidade de previsão com o bloco original, pode ser gerado. O bloco residual gerado pode ser inserido na parte de transformada 130.
[089] A parte de transformada 130 pode transformar o bloco residual que inclui o bloco original e as informações do coeficiente residual da unidade de previsão gerada através da parte de previsão 120 e 125 usando um método de transformada, tal como Transformada de Cosseno Discreta (DCT) ou Transformada de Seno Discreta (DST). Aqui, o núcleo de transformada DCT inclui pelo menos uma dentre DCT2 e DCT8, e o núcleo de transformada DST inclui DST7. Aplicar ou não DCT ou DST para transformar o bloco residual pode ser determinado com base nas informações do modo de intraprevisão de uma unidade de previsão usada para gerar o bloco residual. A transformada no bloco residual pode ser pulada. Um sinalizador que indica se deve ou não pular a transformada no bloco residual pode ser codificado. O pulo da transformada pode ser permitido para um bloco residual com um tamanho menor ou igual a um limite, um componente de luma ou um componente de croma sob o formato 4: 4 : 4.
[090] A parte de quantização 135 pode quantizar valores transformados no domínio de frequência pela parte de transformada 130. Os coeficientes de quantização podem variar de acordo com o bloco ou a importância de um vídeo. Um valor calculado pela parte de quantização 135 pode ser fornecido para a parte de quantização inversa 140 e a parte de rearranjo
160.
[091] A parte de rearranjo 160 pode rearranjar os valores dos coeficientes para os coeficientes residuais quantizados.
[092] A parte de rearranjo 160 pode alterar os coeficientes de um formato de bloco bidimensional em um formato de vetor unidimensional através de um método de varredura de coeficiente. Por exemplo, a parte de rearranjo 160 pode varrer coeficientes DC até coeficientes de domínio de alta frequência usando um método de varredura ziguezague e alterar os coeficientes em um formato de vetor unidimensional. De acordo com o tamanho da unidade de transformada e o modo de intraprevisão, uma varredura vertical de varredura dos coeficientes de um formato de bloco bidimensional na direção da coluna e uma varredura horizontal de varredura dos coeficientes de um formato de bloco bidimensional na fileira de direção pode ser usada em vez da varredura em zigue-zague. Ou seja, de acordo com o tamanho da unidade de transformada e o modo de intraprevisão, um método de varredura que será usado pode ser determinado entre a varredura em zigue-zague, a varredura na direção vertical e a varredura na direção horizontal.
[093] A parte de codificação de entropia 165 pode realizar a codificação de entropia com base em valores calculados pela parte de rearranjo 160. A codificação de entropia pode usar vários métodos de codificação, tais como Golomb Exponencial, Codificação de Comprimento Variável Adaptável ao Contexto (CAVLC), Codificação Aritmética Binária
Adaptável ao Contexto (CABAC) e semelhantes.
[094] A parte de codificação de entropia 165 pode codificar várias informações, como informações de coeficiente residual e informações de tipo de bloco de uma unidade de codificação, informações de modo de previsão, informações de unidade de divisão, informações de unidade de previsão e informações de unidade de transmissão, informações de vetor de movimento, informações de quadro de referência, informações de interpolação de bloco, e filtrar a entrada de informações da parte de rearranjo 160 e das partes de previsão 120 e 125.
[095] A parte de codificação de entropia 165 pode codificar por entropia o valor do coeficiente de uma entrada de unidade de codificação da parte de rearranjo 160.
[096] A parte de quantização inversa 140 e a parte de transformada inversa 145 quantificam inversamente os valores quantizados pela parte de quantização 135 e transformam inversamente os valores transformados pela parte de transformada 130. O coeficiente residual gerado pela parte de quantização inversa 140 e a parte de transformada inversa 145 pode ser combinado com a unidade de previsão prevista através de uma parte de estimativa de movimento, uma parte de compensação de movimento e uma parte de intraprevisão incluída na parte de previsão 120 e 125 para gerar um bloco reconstruído.
[097] A parte do filtro 150 pode incluir pelo menos um dentre um filtro de desbloqueio, uma unidade de correção de deslocamento e um filtro de circuito adaptativo (ALF).
[098] O filtro de desbloqueio pode remover a distorção de bloco gerada pela fronteira entre os blocos na imagem reconstruída. Para determinar se deve ou não realizar o desbloqueio, se deve ou não aplicar o filtro de desbloqueio ao bloco atual pode ser determinado com base nos pixels incluídos em várias colunas ou linhas incluídas no bloco. Um filtro forte ou um filtro fraco pode ser aplicado de acordo com a força de filtragem de desbloqueio necessária quando o filtro de desbloqueio é aplicado a um bloco. Além disso, quando a filtragem de direção vertical e a filtragem de direção horizontal são realizadas na aplicação do filtro de desbloqueio, a filtragem de direção horizontal e a filtragem de direção vertical podem ser processadas em paralelo.
[099] A unidade de correção de deslocamento pode corrigir um deslocamento do vídeo original pela unidade de pixel de uma imagem na qual o desbloqueio foi executado. Para realizar a correção de deslocamento para uma imagem específica, é possível usar um método de divisão de pixels incluídos no vídeo em um certo número de áreas, determinando uma área para realizar o deslocamento e aplicando o deslocamento à área, ou um método de aplicar um deslocamento considerando as informações de borda de cada pixel.
[100] A Filtragem de Circuito Adaptativo (ALF) pode ser realizada com base em um valor obtido comparando o vídeo reconstruído e filtrado com o vídeo original. Depois de dividir os pixels incluídos na imagem em grupos predeterminados, um filtro a ser aplicado a um grupo correspondente pode ser determinado e a filtragem pode ser realizada de forma diferente para cada grupo. Um sinal de luminância, que é as informações relacionada à aplicação ou não de ALF, pode ser transmitido para cada unidade de codificação (CU), e o formato e o coeficiente de filtro de um filtro ALF a ser aplicado podem variar de acordo com cada bloco. Além disso, um filtro ALF do mesmo tipo (tipo fixo) pode ser aplicado independentemente da característica do bloco a ser aplicado.
[101] A memória 155 pode armazenar o bloco reconstruído ou imagem calculada através da parte de filtro 150, e o bloco reconstruído e armazenado ou imagem pode ser fornecida para a parte de previsão 120 e 125 quando a interprevisão é realizada.
[102] A Figura 2 é um diagrama em bloco que mostra um decodificador de vídeo de acordo com uma modalidade de presente revelação.
[103] Com referência à Figura 2, um decodificador de vídeo 200 pode incluir uma parte de decodificação de entropia 210, uma parte de rearranjo 215, uma parte de quantização inversa 220, uma parte de transformada inversa 225, uma parte de previsão 230 e 235, uma parte de filtro 240 e uma memória 245.
[104] Quando um fluxo de bits de vídeo é recebido de um codificador de vídeo, o fluxo de bits de entrada pode ser decodificado em um procedimento oposto ao do codificador de vídeo.
[105] A parte de decodificação de entropia 210 pode realizar a decodificação de entropia em um procedimento oposto ao de realizar a codificação de entropia na parte de decodificação de entropia do codificador de vídeo. Por exemplo, vários métodos correspondentes ao método realizado pelo codificador de vídeo, tais como Golomb Exponencial, Codificação de Comprimento Variável Adaptável ao Contexto (CAVLC) e Codificação Aritmética Binária Adaptável ao Contexto
(CABAC), podem ser aplicados.
[106] A parte de decodificação de entropia 210 pode decodificar informações relacionadas à intraprevisão e interprevisão realizada pelo codificador.
[107] A parte de rearranjo 215 pode executar o rearranjo na entropia de fluxo de bits decodificada pela parte de decodificação de entropia 210 com base no método de rearranjo realizado pelo codificador. Os coeficientes expressos em um formato de vetor unidimensional podem ser reconstruídos e reorganizados como coeficientes de formato de bloco bidimensional. A parte de rearranjo 215 pode receber informações relacionadas à varredura de coeficiente realizada pela parte de codificação e realizar a reconstrução por meio de um método de varredura inversa com base na ordem de varredura realizada pela parte de codificação correspondente.
[108] A parte de quantização inversa 220 pode realizar quantização inversa com base em um parâmetro de quantização fornecido pelo codificador e um valor de coeficiente do bloco rearranjado.
[109] A parte de transformada inversa 225 pode realizar a transformada inversa na transformada, isto é, DCT ou DST, realizada pela parte de transformada em um resultado da quantização realizada pelo codificador de vídeo, isto é, DCT inversa ou DST inversa. Aqui, o núcleo de transformada DCT inclui pelo menos uma dentre DCT2 e DCT8, e o núcleo de transformada DST pode incluir DST7. Alternativamente, quando a transformada é ignorada no codificador de vídeo, mesmo a parte de transformada inversa 225 pode não realizar a transformada inversa. A transformada inversa pode ser realizada com base em uma unidade de transmissão determinada pelo codificador de vídeo. A parte de transformada inversa 225 do decodificador de vídeo pode executar seletivamente uma técnica de transformada (por exemplo, DCT ou DST) de acordo com uma pluralidade de informações, como um método de previsão, um tamanho de um bloco atual, uma direção de previsão e semelhantes.
[110] A parte de previsão 230 e 235 pode gerar um bloco de previsão com base nas informações relacionadas à geração de um bloco de previsão fornecido pelo decodificador de entropia 210 e informações sobre um bloco ou imagem previamente decodificado fornecida pela memória 245.
[111] Conforme descrito acima, se o tamanho da unidade de previsão e o tamanho da unidade de transformada forem os mesmos quando a intraprevisão é realizada da mesma maneira que a operação do codificador de vídeo, a intraprevisão é realizada na unidade de previsão com base no pixel que existe no lado esquerdo, o pixel no lado superior esquerdo e o pixel no topo da unidade de previsão. No entanto, se o tamanho da unidade de previsão e o tamanho da unidade de transformada forem diferente quando a intraprevisão é realizada, a intraprevisão pode ser realizada usando um pixel de referência com base na unidade de transformada. Além disso, a intraprevisão usando divisão N × N pode ser usada apenas para a menor unidade de codificação.
[112] A parte de previsão 230 e 235 pode incluir uma parte de determinação de unidade de previsão, uma parte de interprevisão e uma parte de intraprevisão. A parte de determinação da unidade de previsão pode receber várias informações, como entrada de informações da unidade de previsão a partir da parte de decodificação de entropia 210, informações de modo de previsão do método de intraprevisão, informações relacionadas à previsão de movimento de um método de interprevisão e semelhantes. Então, a parte de determinação da unidade de previsão pode identificar a unidade de previsão da unidade de codificação atual e determinar se a unidade de previsão realiza interprevisão ou intraprevisão. A parte de interprevisão 230 pode realizar a interprevisão na unidade de previsão atual com base nas informações incluída em pelo menos uma imagem entre as imagens antes ou depois da imagem atual, incluindo a unidade de previsão atual, usando as informações necessárias para a interprevisão da unidade de previsão atual fornecida pelo codificador de vídeo. Alternativamente, a parte de interprevisão 230 pode realizar interprevisão com base nas informações em uma área parcial previamente reconstruída na imagem atual incluindo a unidade de previsão atual.
[113] A fim de realizar a interprevisão, pode-se determinar, com base na unidade de codificação, se o método de previsão de movimento da unidade de previsão incluída em uma unidade de codificação correspondente é um modo de pulo, um modo de fusão, um modo de previsão de vetor de movimento avançado (modo AMVP) ou um modo de cópia intrabloco.
[114] A parte intraprevisão 235 pode gerar um bloco de previsão com base nas informações sobre o pixel na imagem atual. Quando a unidade de previsão é uma unidade de previsão que executou intraprevisão, a intraprevisão pode ser realizada com base nas informações do modo de intraprevisão da unidade de previsão fornecida pelo codificador de vídeo. A parte de intraprevisão 235 pode incluir um filtro de Intra Suavização Adaptativa (AIS), uma parte de interpolação de pixel de referência e um filtro DC. O filtro AIS é uma parte que realiza a filtragem no pixel de referência do bloco atual e pode determinar se deve ou não aplicar o filtro de acordo com o modo de previsão da unidade de previsão atual e aplicar o filtro. A filtragem de AIS pode ser realizada no pixel de referência do bloco atual usando o modo de previsão e informações de filtro de AIS da unidade de previsão fornecida pelo codificador de vídeo. Quando o modo de previsão do bloco atual é um modo que não executa a filtragem de AIS, o filtro de AIS pode não ser aplicado.
[115] Quando o modo de previsão da unidade de previsão é uma unidade de previsão que realiza intraprevisão com base em um valor de pixel obtido pela interpolação do pixel de referência, a parte de interpolação de pixel de referência pode gerar um pixel de referência de uma unidade de pixel tendo um valor inteiro ou um valor menor do que o valor inteiro interpolando o pixel de referência. Quando o modo de previsão da unidade de previsão atual é um modo de previsão que gera um bloco de previsão sem interpolar o pixel de referência, o pixel de referência não pode ser interpolado. O filtro DC pode gerar um bloco de previsão por meio da filtragem quando o modo de previsão do bloco atual é o modo DC.
[116] O bloco reconstruído ou imagem pode ser fornecido à parte do filtro 240. A parte do filtro 240 pode incluir um filtro de desbloqueio, uma unidade de correção de deslocamento e ALF.
[117] Informações sobre se um filtro de desbloqueio é aplicado a um bloco ou imagem correspondente e informações sobre se um filtro forte ou um filtro fraco é aplicado quando um filtro de desbloqueio é aplicado podem ser fornecidas pelo codificador de vídeo. O filtro de desbloqueio do decodificador de vídeo pode ser fornecido com informações relacionadas ao filtro de desbloqueio fornecido pelo codificador de vídeo e o decodificador de vídeo pode realizar a filtragem de desbloqueio em um bloco correspondente.
[118] A unidade de correção de deslocamento pode realizar correção de deslocamento na imagem reconstruída com base no tipo de correção de deslocamento e nas informações de valor de deslocamento aplicadas ao vídeo quando a codificação é realizada.
[119] O ALF pode ser aplicado a uma unidade de codificação com base nas informações sobre se deve ou não aplicar o ALF e informações sobre os coeficientes ALF fornecidas pelo codificador. As informações ALF podem ser fornecidas para serem incluídas em um conjunto de parâmetros específico.
[120] A memória 245 pode armazenar a imagem reconstruída ou bloco e usá-la como uma imagem de referência ou um bloco de referência e pode fornecer a imagem reconstruída para uma unidade de saída.
[121] A Figura 3 é uma vista que mostra uma unidade de árvore de codificação básica de acordo com uma modalidade da presente revelação.
[122] Um bloco de codificação de tamanho máximo pode ser definido como um bloco de árvore de codificação. Uma imagem é dividida em uma pluralidade de unidades de árvore de codificação (CTUs). A unidade de árvore de codificação é uma unidade de codificação com um tamanho máximo e pode ser referida como uma Unidade de Codificação Grande (LCU). A Figura 3 mostra um exemplo no qual uma imagem é dividida em uma pluralidade de unidades de árvore de codificação.
[123] O tamanho da unidade da árvore de codificação pode ser definido a um nível de imagem ou a um nível de sequência. Para este fim, as informações que indica o tamanho da unidade da árvore de codificação pode ser sinalizada através de um conjunto de parâmetros de imagem ou um conjunto de parâmetros de sequência.
[124] Por exemplo, o tamanho da unidade da árvore de codificação para a imagem inteira em uma sequência pode ser definido para 128 × 128. Alternativamente, no nível da imagem, qualquer um dentre 128 × 128 e 256 × 256 pode ser determinado como o tamanho da unidade de árvore de codificação. Por exemplo, o tamanho da unidade de árvore de codificação pode ser definido para 128 × 128 em uma primeira imagem, e o tamanho da unidade de árvore de codificação pode ser definido para 256 × 256 em uma segunda imagem.
[125] Os blocos de codificação podem ser gerados dividindo uma unidade de árvore de codificação. O bloco de codificação indica uma unidade básica para realizar a codificação/decodificação. Por exemplo, a previsão ou transformada pode ser realizada para cada bloco de codificação, ou um modo de codificação de previsão pode ser determinado para cada bloco de codificação. Aqui, o modo de codificação de previsão indica um método de geração de uma imagem de previsão. Por exemplo, o modo de codificação de previsão pode incluir previsão dentro de uma imagem (intraprevisão), previsão entre imagens (interprevisão), referência de imagem atual (CPR) ou cópia intrabloco (IBC) ou previsão combinada. Para o bloco de codificação, um bloco de previsão pode ser gerado usando pelo menos um modo de codificação de previsão entre a intraprevisão, a interprevisão, a referência de imagem atual e a previsão combinada.
[126] As informações que indicam o modo de codificação de previsão do bloco atual podem ser sinalizadas por meio de um fluxo de bits. Por exemplo, as informações pode ser um sinalizador de 1 bit indicando se o modo de codificação de previsão é um modo intra ou um modo inter. Somente quando o modo de codificação de previsão do bloco atual é determinado como o modo inter, o referenciamento da imagem atual ou a previsão combinada podem ser usadas.
[127] O referenciamento da imagem atual é para definir a imagem atual como uma imagem de referência e obter um bloco de previsão do bloco atual de uma área que já foi codificada/decodificada na imagem atual. Aqui, a imagem atual significa uma imagem incluindo o bloco atual. As informações que indicam se o referenciamento da imagem atual é aplicada ao bloco atual podem ser sinalizadas por meio de um fluxo de bits. Por exemplo, as informações podem ser um sinalizador de 1 bit. Quando o sinalizador é verdadeiro, o modo de codificação de previsão do bloco atual pode ser determinado como o referenciamento da imagem atual, e quando o sinalizador é falso, o modo de previsão do bloco atual pode ser determinado como interprevisão.
[128] Alternativamente, o modo de codificação de previsão do bloco atual pode ser determinado com base em um índice de imagem de referência. Por exemplo, quando o índice de imagem de referência indica a imagem atual, o modo de codificação de previsão do bloco atual pode ser determinado como o referenciamento da imagem atual. Quando o índice de imagem de referência indica uma imagem diferente da imagem atual, o modo de codificação de previsão do bloco atual pode ser determinado como interprevisão. Ou seja, o referenciamento da imagem atual é um método de previsão que usa informações em uma área em que a codificação/decodificação foi concluída na imagem atual, e a interprevisão é um método de previsão que usa informações em outra imagem na qual a codificação/decodificação foi concluída.
[129] A previsão combinada representa um modo de codificação no qual dois ou mais entre a intraprevisão, a interprevisão e o referenciamento de imagem atual são combinados. Por exemplo, quando a previsão combinada é aplicada, um primeiro bloco de previsão pode ser gerado com base em um dentre a intraprevisão, interprevisão e o referenciamento da imagem atual, e um segundo bloco de previsão pode ser gerado com base em outro. Quando o primeiro bloco de previsão e o segundo bloco de previsão são gerados, um bloco de previsão final pode ser gerado por meio de uma operação média ou uma operação de soma ponderada do primeiro bloco de previsão e do segundo bloco de previsão. As informações que indicam se a previsão combinada é aplicada ou não podem ser sinalizadas por meio de um fluxo de bits. As informações podem ser um sinalizador de 1 bit.
[130] A Figura 4 é uma vista que mostra vários tipos de divisão de um bloco de codificação.
[131] O bloco de codificação pode ser dividido em uma pluralidade de blocos de codificação com base em divisão de árvore quádrupla, divisão de árvore binária ou divisão de árvore ternária. O bloco de codificação dividido pode ser dividido novamente em uma pluralidade de blocos de codificação com base em divisão de árvore quádrupla, divisão de árvore binária ou divisão de árvore ternária.
[132] A divisão de árvore quádrupla refere-se a uma técnica de divisão que divide um bloco atual em quatro blocos. Como resultado da divisão de árvore quádrupla, o bloco atual pode ser dividido em quatro partições quadradas (ver ‘SPLIT_QT’ da Figura 4 (a)).
[133] A divisão de árvore binária refere-se a uma técnica de divisão que divide um bloco atual em dois blocos. A divisão de um bloco atual em dois blocos ao longo da direção vertical (ou seja, usando uma linha vertical que cruza o bloco atual) pode ser referido como divisão de árvore binária de direção vertical e divisão de um bloco atual em dois blocos ao longo da direção horizontal (ou seja, usando uma linha horizontal que cruza o bloco atual) pode ser referida como divisão de árvore binária de direção horizontal. Como resultado da divisão da árvore binária, o bloco atual pode ser dividido em duas partições não quadradas. ‘SPLIT_BT_VER’ da Figura 4(b) mostra um resultado da divisão de árvore binária de direção vertical e ‘SPLIT_BT_HOR’ da Figura 4 (c) mostra um resultado da divisão da árvore binária na direção horizontal.
[134] A divisão de árvore ternária refere-se a uma técnica de divisão que divide um bloco atual em três blocos. A divisão de um bloco atual em três blocos ao longo da direção vertical (ou seja, usando uma linha vertical que cruza o bloco atual) pode ser referida como divisão de árvore ternária de direção vertical e divisão de um bloco atual em três blocos ao longo da direção horizontal (ou seja, usando uma linha horizontal que cruza o bloco atual) pode ser referida como divisão de árvore ternária de direção horizontal. Como resultado da divisão da árvore ternária, o bloco atual pode ser dividido em três partições não quadradas. Neste ponto, a largura/altura de uma divisão posicionada no centro do bloco atual pode ser duas vezes maior que a largura/altura das outras partições. ‘SPLIT_TT_VER’ da Figura 4(d) mostra um resultado da divisão de árvore ternária de direção vertical e ‘SPLIT_TT_HOR’ da Figura 4 (e) mostra um resultado da divisão da árvore ternária na direção horizontal.
[135] O número de vezes de divisão de uma unidade de árvore de codificação pode ser definido como uma profundidade de divisão. A profundidade máxima de divisão de uma unidade de árvore de codificação pode ser determinada no nível da sequência ou da imagem. Consequentemente, a profundidade máxima de divisão de uma unidade de árvore de codificação pode ser diferente para cada sequência ou imagem.
[136] Alternativamente, a profundidade máxima de divisão para cada técnica de divisão pode ser determinada individualmente. Por exemplo, a profundidade de divisão máxima permitida para a divisão de árvore quádrupla pode ser diferente da profundidade de divisão máxima permitida para a divisão de árvore binária e/ou divisão de árvore ternária.
[137] O codificador pode sinalizar informações que indicam pelo menos um dentre o tipo de divisão e a profundidade de divisão do bloco atual por meio de um fluxo de bits. O decodificador pode determinar o tipo de divisão e a profundidade de divisão de uma unidade de árvore de codificação com base nas informações analisadas a partir do fluxo de bits.
[138] A Figura 5 é uma vista que mostra um padrão de divisão de uma unidade de árvore de codificação.
[139] A divisão de um bloco de codificação que usa uma técnica de divisão, como divisão de árvore quádrupla, divisão de árvore binária e/ou divisão de árvore ternária,
pode ser referida como divisão de múltiplas árvores.
[140] Os blocos de codificação gerados pela aplicação da divisão de árvores múltiplas a um bloco de codificação podem ser referidos como blocos de codificação inferiores. Quando a profundidade de divisão de um bloco de codificação é k, a profundidade de divisão dos blocos de codificação inferiores é definida como k + 1.
[141] Contrariamente, para blocos de codificação com uma profundidade de divisão de k + 1, um bloco de codificação com uma profundidade de divisão de k pode ser referido como um bloco de codificação superior.
[142] O tipo de divisão do bloco de codificação atual pode ser determinado com base em pelo menos um dentre um tipo de divisão de um bloco de codificação superior e um tipo de divisão de um bloco de codificação vizinho. Aqui, o bloco de codificação vizinho é um bloco de codificação adjacente ao bloco de codificação atual e pode incluir pelo menos um dentre um bloco vizinho superior e um bloco vizinho esquerdo do bloco de codificação atual e um bloco vizinho adjacente ao canto superior esquerdo. Aqui, o tipo de divisão pode incluir pelo menos um dentre uma divisão de árvore quádrupla ou não, seja uma divisão de árvore binária ou não, direção de divisão de árvore binária, seja ou não uma divisão de árvore ternária e direção de divisão de árvore ternária.
[143] A fim de determinar um tipo de divisão de um bloco de codificação, as informações que indicam se o bloco de codificação pode ou não ser dividido podem ser sinalizadas por meio de um fluxo de bits. As informações é um sinalizador de 1 bit de ‘split_cu_flag’, e quando o sinalizador é verdadeiro, indica que o bloco de codificação é dividido por uma técnica de divisão de várias árvores.
[144] Quando split_cu_flag for verdadeiro, informações indicando se o bloco de codificação é dividido em árvore quádrupla podem ser sinalizadas por meio de um fluxo de bits. As informações é um sinalizador de 1 bit de split_qt_flag e, quando o sinalizador for verdadeiro, o bloco de codificação pode ser dividido em quatro blocos.
[145] Por exemplo, no exemplo mostrado na FIG. 5, como uma unidade de árvore de codificação é dividida em árvore quádrupla, quatro blocos de codificação com uma profundidade de divisão de 1 são gerados. Além disso, é mostrado que a divisão de árvore quádrupla é aplicada novamente ao primeiro e quarto blocos de codificação entre os quatro blocos de codificação gerados como resultado da divisão de árvore quádrupla. Como resultado, quatro blocos de codificação com uma profundidade de divisão de 2 podem ser gerados.
[146] Além disso, os blocos de codificação com uma profundidade de divisão de 3 podem ser gerados aplicando a divisão de árvore quádrupla novamente a um bloco de codificação com uma profundidade de divisão de 2.
[147] Quando a divisão de árvore quádrupla não é aplicada ao bloco de codificação, se a divisão de árvore binária ou a divisão de árvore ternária é realizado no bloco de codificação pode ser determinada considerando pelo menos um dentre o tamanho do bloco de codificação, se o bloco de codificação está posicionado na imagem limite, a profundidade máxima de divisão e o tipo de divisão de um bloco vizinho. Quando determina-se realizar a divisão de árvore binária ou divisão de árvore ternária no bloco de codificação, as informações que indicam a direção de divisão podem ser sinalizadas por meio de um fluxo de bits. As informações podem ser um sinalizador de 1 bit de mtt_split_cu_vertical_flag. Com base no sinalizador, pode-se determinar se a direção de divisão é uma direção vertical ou uma direção horizontal. Além disso, as informações que indicam se a divisão de árvore binária ou a divisão de árvore ternária são aplicadas ao bloco de codificação podem ser sinalizadas por meio de um fluxo de bits. As informações podem ser um sinalizador de 1 bit de mtt_split_cu_binary_flag. Com base no sinalizador, pode ser determinado se a divisão de árvore binária ou a divisão de árvore ternária é aplicada ao bloco de codificação.
[148] Por exemplo, no exemplo mostrado na Figura 5, é mostrado que a divisão de árvore binária de direção vertical é aplicada a um bloco de codificação com uma profundidade de divisão de 1, a divisão de árvore ternária de direção vertical é aplicada ao bloco de codificação do lado esquerdo entre os blocos de codificação gerados como resultado da divisão, e a divisão da árvore binária na direção vertical é aplicada ao bloco de codificação do lado direito.
[149] Quando um aparelho para codificar ou decodificar um vídeo é implementado, há um problema em que uma região maior do que um valor limite é difícil de processar devido ao desempenho do hardware. Por exemplo, há um problema em que quando é possível processar simultaneamente até 4.096 amostras com base no desempenho do hardware, unidades de dados de tamanho 64 × 64 devem ser acessadas e processadas de forma redundante, e os dados não podem ser processados simultaneamente para as regiões que têm amostras de mais de
4.096. Assim, uma unidade básica de processamento de dados pode ser definida como uma unidade básica de dados baseada em encadeamento (Unidade de Dados de Processamento Virtual, VPDU, doravante, referida como uma unidade básica de dados).
[150] A unidade básica de dados pode ser classificada como do tipo quadrada, não quadrada ou não retangular.
[151] A Figura 6 é uma vista que mostra os formatos das unidades básicas de dados.
[152] As unidades básicas de dados podem incluir amostras iguais ou menores do que o número máximo de amostras que podem ser processadas simultaneamente. Por exemplo, como mostrado no exemplo da Figura 6 (a), blocos quadrados com um tamanho de 64 × 64 podem ser definidos como unidades básicas de dados. Alternativamente, blocos não quadrados podem ser definidos como unidades básicas de dados. Por exemplo, como mostrado no exemplo da Figura 6 (b) ou 6 (c), um bloco com um tamanho de 32 × 128 ou um bloco com um tamanho de 64 × 32 pode ser definido como uma unidade básica de dados.
[153] Embora não mostrado, unidades básicas de dados triangulares, em formato de L e poligonais podem ser definidas.
[154] As informações para determinar uma unidade básica de dados podem ser sinalizadas por meio de um fluxo de bits. As informações podem ser para determinar pelo menos um dentre o tamanho e o formato da unidade básica de dados. Com base nas informações, pode-se determinar se deve ou não permitir uma unidade básica de dados não quadrada ou se deve permitir uma unidade básica de dados não retangular.
[155] Alternativamente, pelo menos um dentre o tamanho e o formato de uma unidade básica de dados pode ser predefinido no codificador e no decodificador.
[156] Permitir ou não um tipo de divisão de um bloco de codificação pode ser determinado considerando o tamanho de uma unidade básica de dados. Por exemplo, quando um bloco de codificação gerado como resultado da divisão de um bloco de codificação é maior do que a unidade básica de dados, a divisão pode não ser permitida. Alternativamente, quando um bloco de codificação não quadrado gerado como resultado da divisão de um bloco de codificação é maior do que a unidade básica de dados, a divisão pode não ser permitida. Por exemplo, quando a largura ou a altura de um bloco de codificação é maior que um valor limite ou quando o número de amostras incluídas em um bloco de codificação é maior que um valor limite, a divisão de árvore binária ou árvore ternária pode não ser permitida. Consequentemente, a codificação de informações relacionadas à divisão de árvore binária ou da árvore ternária pode ser omitida.
[157] Alternativamente, ela pode ser configurada para necessariamente dividir um bloco de codificação maior do que a unidade básica de dados. Alternativamente, ela pode ser configurada para necessariamente realizar a divisão de uma árvore binária ou divisão de árvore ternária em um bloco de codificação maior do que a unidade básica de dados. Consequentemente, para um bloco de codificação maior do que a unidade básica de dados, embora o sinalizador split_flag que indica se deve ou não dividir um bloco de codificação não seja codificado, o valor do sinalizador pode ser derivado como 1.
[158] Como outro exemplo, um bloco de codificação maior do que a unidade básica de dados pode ser dividido em uma pluralidade de sub-blocos. Aqui, o sub-bloco pode ser definido como uma unidade de previsão, que é uma unidade básica para previsão, ou uma unidade de transformada, que é uma unidade básica para transformada e/ou quantização. Neste ponto, dividir um bloco de codificação em uma pluralidade de unidades de previsão pode ser definido como divisão de unidade de previsão VPDU e dividir um bloco de codificação em uma pluralidade de unidades de transformada pode ser definido como divisão de unidade de transformada VPDU.
[159] Pelo menos uma dentre a divisão da unidade de previsão VPDU e a divisão da unidade de transformada VPDU pode ser aplicada a um bloco de codificação. O tipo de divisão de um bloco de codificação de acordo com a aplicação da divisão da unidade de previsão VPDU pode ser definido para ser o mesmo que o tipo de divisão de um bloco de codificação de acordo com a aplicação da divisão da unidade de transformada VPDU.
[160] Quando apenas a divisão da unidade de previsão VPDU é aplicada a um bloco de codificação, a previsão é realizada para cada sub-bloco, mas a transformada e/ou quantização pode ser realizada para um bloco de codificação. Neste ponto, um modo de previsão, tal como um modo de codificação de previsão, um modo de intraprevisão ou um modo de interprevisão pode ser determinado para um bloco de codificação.
[161] Quando apenas a divisão da unidade de transformada VPDU é aplicada a um bloco de codificação, a previsão é realizada para um sub-bloco, mas a transformada e/ou quantização pode ser realizada para cada sub-bloco.
[162] A Figura 7 e 8 são vistas que mostram exemplos de divisão de um bloco de codificação em uma pluralidade de sub-blocos.
[163] A Figura 7 é uma vista que mostra um padrão de divisão quando apenas uma unidade básica de dados quadrada é permitida, e a Figura 8 é uma vista que mostra um padrão de divisão quando uma unidade básica de dados quadrada e uma unidade básica de dados não quadrada são permitidas.
[164] Quando assume-se que apenas unidades básicas de dados quadrados são permitidas, na Figura 7 (a) e 7 (b), CU0 e CU2 são definidas como duas VPDUs diferentes e CU1 é definida como quatro VPDUs diferentes. Consequentemente, CU0 e CU2 podem ser divididas em dois sub-blocos e CU1 pode ser dividida em quatro sub-blocos.
[165] Quando assume-se que unidades básicas de dados quadrados e unidades básicas de dados não quadrados são permitidas, na Figura 8 (a) e 8 (b), CU0 e CU2 podem ser definidas como uma VPDU, enquanto CU1 pode ser definida usando duas VPDUs diferentes. Consequentemente, CU0 e CU2 não são divididas em sub-blocos, enquanto CU1 pode ser dividida em dois sub-blocos.
[166] Neste ponto, a CU1 pode ser dividida em sub-blocos quadrados ou sub-blocos não quadrados. Por exemplo, a CU1 pode ser dividida em dois sub-blocos quadrados com base em uma linha horizontal que divide CU1 para cima e para baixo. Alternativamente, a CU1 pode ser dividida em dois sub-blocos não quadrados com base em uma linha vertical que divide CU1 à esquerda e à direita.
[167] Quando existe uma pluralidade de candidatos de tipo de divisão aplicáveis a um bloco de codificação, as informações que indica qualquer um dentre a pluralidade de candidatos de tipo de divisão pode ser sinalizada através de um fluxo de bits. Por exemplo, as informações podem indicar se um bloco de codificação é dividido em sub-blocos quadrados ou se um bloco de codificação é dividido em sub-blocos não quadrados.
[168] Alternativamente, a divisão de um bloco de codificação em sub-blocos quadrados pode ser definida para ter uma prioridade mais alta do que a da divisão de um bloco de codificação em sub-blocos não quadrados. Por exemplo, dividir um bloco de codificação em sub-blocos não quadrados pode ser permitido quando não é permitido dividir um bloco de codificação em sub-blocos quadrados.
[169] Alternativamente, o tipo de divisão de um bloco de codificação pode ser determinado com base no tipo de divisão de um bloco de codificação de nó principal. Por exemplo, pode ser configurado para dividir um bloco de codificação em sub-blocos quadrados quando o bloco de codificação do nó principal é dividido com base em uma árvore ternária. Por exemplo, pode ser configurado para dividir um bloco de codificação em sub-blocos não quadrados quando o bloco de codificação do nó principal é dividido com base em uma árvore binária ou árvore ternária.
[170] A interprevisão é um modo de codificação de previsão que prevê um bloco atual usando informações de uma imagem anterior. Por exemplo, um bloco na mesma posição que o bloco atual na imagem anterior (doravante, um bloco colocado) pode ser definido como o bloco de previsão do bloco atual. Daqui em diante, um bloco de previsão gerado com base em um bloco na mesma posição que o bloco atual será referido como um bloco de previsão colocado.
[171] Por outro lado, quando um objeto existente na imagem anterior foi movido para outra posição na imagem atual, o bloco atual pode ser efetivamente previsto usando um movimento do objeto. Por exemplo, quando a direção do movimento e o tamanho de um objeto podem ser conhecidos comparando a imagem anterior e a imagem atual, um bloco de previsão (ou uma imagem de previsão) do bloco atual pode ser gerado considerando as informações de movimento do objeto. Daqui em diante, o bloco de previsão gerado usando informações de movimento pode ser referido como um bloco de previsão de movimento.
[172] Um bloco residual pode ser gerado subtraindo o bloco de previsão do bloco atual. Neste ponto, quando há um movimento de um objeto, a energia do bloco residual pode ser reduzida usando o bloco de previsão de movimento em vez do bloco de previsão colocado e, portanto, o desempenho de compressão do bloco residual pode ser melhorado.
[173] Conforme descrito acima, a geração de um bloco de previsão usando informações de movimento pode ser referida como previsão de compensação de movimento. Na maioria das interprevisões, um bloco de previsão pode ser gerado com base na previsão de compensação de movimento.
[174] As informações de movimento podem incluir pelo menos um dentre um vetor de movimento, um índice de imagem de referência, uma direção de previsão e um índice de peso bidirecional. O vetor de movimento representa a direção do movimento e o tamanho de um objeto. O índice de imagens de referência especifica uma imagem de referência do bloco atual entre as imagens de referência incluídas em uma lista de imagens de referência. A direção de previsão indica qualquer um dentre previsão L0 unidirecional, previsão L1 unidirecional e previsão bidirecional (previsão L0 e previsão L1). De acordo com a direção de previsão do bloco atual, pelo menos uma dentre as informações de movimento na direção L0 e as informações de movimento na direção L1 podem ser usadas. O índice de peso bidirecional especifica um valor de ponderação aplicado a um bloco de previsão L0 e um valor de ponderação aplicado a um bloco de previsão L1.
[175] A Figura 9 é um fluxograma que ilustra um método de interprevisão de acordo com uma modalidade de presente revelação.
[176] Com referência à Figura 9, o método de interprevisão inclui as etapas de determinação de um modo de interprevisão de um bloco atual (S901), aquisição de informações de movimento do bloco atual de acordo com o modo de interprevisão determinado (S902) e realização de previsão de compensação de movimento para o bloco atual com base nas informações de movimento adquiridas (S903).
[177] Aqui, o modo de interprevisão representa várias técnicas para determinar informações de movimento do bloco atual e pode incluir um modo de interprevisão que usa informações de movimento de translação e um modo de interprevisão que usa informações de movimento afins. Por exemplo, o modo de interprevisão que usa informações de movimento translacional pode incluir um modo de fusão e um modo de previsão de vetor de movimento avançado, e o modo de interprevisão que usa informações de movimento afim pode incluir um modo de fusão afim e um modo de previsão de vetor de movimento avançado afim. As informações de movimento do bloco atual podem ser determinadas com base em um bloco vizinho adjacente ao bloco atual ou informações analisadas a partir de um fluxo de bits de acordo com o modo de interprevisão.
[178] Daqui em diante, o método de interprevisão que usas informações de movimento afim será descrito em detalhes.
[179] A Figura 10 é uma vista que mostra movimentos não lineares de um objeto.
[180] Um movimento não linear de um objeto pode ser gerado em um vídeo. Por exemplo, como mostrado no exemplo da Figura 10, um movimento não linear de um objeto, como aproximação, afastamento, rotação, transformada afim ou semelhante de uma câmera, pode ocorrer. Quando ocorre um movimento não linear de um objeto, o movimento do objeto não pode ser efetivamente expresso com um vetor de movimento translacional. Consequentemente, a eficiência da codificação pode ser melhorada usando um movimento afim em vez de um movimento de translação em uma área onde ocorre um movimento não linear de um objeto.
[181] A Figura 11 é um fluxograma que ilustra um método de interprevisão baseado em um movimento afim de acordo com uma modalidade de presente revelação.
[182] Se uma técnica de interprevisão com base em um movimento afim é aplicada ao bloco atual pode ser determinado com base nas informações analisadas de um fluxo de bits. Especificamente, se a técnica de interprevisão com base em um movimento afim é aplicada ao bloco atual pode-se determinar com base em pelo menos um dentre um sinalizador que indica se o modo de fusão afim é aplicado ao bloco atual e um sinalizador que indica se o modo de previsão de vetor de movimento avançado afim é aplicado ao bloco atual.
[183] Quando a técnica de interprevisão com base em um movimento afim é aplicada ao bloco atual, um modelo de movimento afim do bloco atual pode ser determinado (S1101). O modelo de movimento afim pode ser determinado como pelo menos um dentre um modelo de movimento afim de seis parâmetros e um modelo de movimento afim de quatro parâmetros. O modelo de movimento afim de seis parâmetros expressa um movimento afim usando seis parâmetros, e o modelo de movimento afim de quatro parâmetros expressa um movimento afim usando quatro parâmetros.
[184] A Equação 1 expressa um movimento afim usando seis parâmetros. O movimento afim representa um movimento não translacional para uma área predeterminada determinada por vetores de origem afins. [Equação 1] 𝒗𝒙 = 𝒂𝒙 − 𝒃𝒚 + 𝒆 𝒗𝒚 = 𝒄𝒙 + 𝒅𝒚 + 𝒇
[185] Quando um movimento afim é expresso usando seis parâmetros, um movimento complicado pode ser expresso. No entanto, à medida que o número de bits necessários para codificar cada um dos parâmetros aumenta, a eficiência da codificação pode ser reduzida. Consequentemente, o movimento afim pode ser expresso usando quatro parâmetros. A Equação 2 expressa um movimento afim usando quatro parâmetros. [Equação 2] 𝒗𝒙 = 𝒂𝒙 − 𝒃𝒚 + 𝒆 𝒗𝒚 = 𝒃𝒙 + 𝒂𝒚 + 𝒇
[186] As informações para determinar um modelo de movimento afim do bloco atual podem ser codificadas e sinalizadas por meio de um fluxo de bits. Por exemplo, as informações podem ser um sinalizador de 1 bit do ‘affine_type_flag’. Quando o valor do sinalizador é 0, pode indicar que um modelo de movimento afim de 4 parâmetros é aplicado, e quando o valor do sinalizador é 1, pode indicar que um modelo de movimento afim de 6 parâmetros é aplicado. O sinalizador pode ser codificado pela unidade de fatia, ladrilho ou bloco (por exemplo, pela unidade de bloco de codificação ou árvore de codificação). Quando um sinalizador é sinalizado no nível da fatia, um modelo de movimento afim determinado no nível da fatia pode ser aplicado a todos os blocos pertencentes à fatia.
[187] Alternativamente, um modelo de movimento afim do bloco atual pode ser determinado com base em um modo de interprevisão afim do bloco atual. Por exemplo, quando o modo de fusão afim é aplicado, o modelo de movimento afim do bloco atual pode ser determinado como um modelo de movimento de 4 parâmetros. Por outro lado, quando o modo de previsão de vetor de movimento afim avançado é aplicado, as informações para determinar o modelo de movimento afim do bloco atual podem ser codificadas e sinalizadas por meio de um fluxo de bits. Por exemplo, quando o modo de previsão de vetor de movimento afim avançado é aplicado ao bloco atual, o modelo de movimento afim do bloco atual pode ser determinado com base no sinalizador de 1 bit de ‘affine_type_flag’.
[188] Em seguida, um vetor de origem afim do bloco atual pode ser derivado (S1102). Quando um modelo de movimento afim de 4 parâmetros é selecionado, vetores de movimento em dois pontos de controle do bloco atual podem ser derivados. Por outro lado, quando um modelo de movimento afim de 6 parâmetros é selecionado, vetores de movimento em três pontos de controle do bloco atual podem ser derivados. O vetor de movimento em um ponto de controle pode ser referido como um vetor de origem afim. O ponto de controle pode incluir pelo menos um dentre o canto superior esquerdo, o canto superior direito e o canto inferior esquerdo do bloco atual.
[189] A Figura 12 é uma vista que mostra um exemplo de vetores de origem afins de cada modelo de movimento afim.
[190] No modelo de movimento afim de 4 parâmetros, vetores de origem afins podem ser derivados para dois entre o canto superior esquerdo, o canto superior direito e o canto inferior esquerdo. Por exemplo, como mostrado no exemplo da Figura 12 (a), quando um modelo de movimento afim de 4 parâmetros é selecionado, um vetor afim pode ser derivado usando o vetor de origem afim sv0 para o canto superior esquerdo do bloco atual (por exemplo, amostra superior esquerda (x0, y0) ) e o vetor de origem afim sv1 para o canto superior direito do bloco atual (por exemplo, a amostra superior direita (x1, y1)). Também é possível usar um vetor de origem afim para o canto inferior esquerdo em vez do vetor de origem afim para o canto superior esquerdo, ou usar um vetor de origem afim para o canto inferior esquerdo em vez do vetor de origem afim para o canto superior direito.
[191] No modelo de movimento afim de 6 parâmetros, vetores de origem afins podem ser derivados para o canto superior esquerdo, o canto superior direito e o canto inferior esquerdo. Por exemplo, como mostrado no exemplo da Figura 12 (b), quando um modelo de movimento afim de 6 parâmetros é selecionado, um vetor afim pode ser derivado usando o vetor de origem afim sv0 para o canto superior esquerdo do bloco atual (por exemplo, amostra superior esquerda (x0, y0) ) e o vetor de origem afim sv1 para o canto superior direito do bloco atual (por exemplo, a amostra superior direita (x1, y1), e o vetor de origem afim sv2 para o canto inferior esquerdo do bloco atual (ex., amostra inferior esquerda (x2, y2)).
[192] Na modalidade descrita abaixo, no modelo de movimento afim de 4 parâmetros, os vetores de origem afins do ponto de controle superior esquerdo e do ponto de controle superior direito serão referidos como um primeiro vetor de origem afim e um segundo vetor de origem afim, respectivamente. Nas modalidades que usam o primeiro vetor de origem afim e o segundo vetor de origem afim descritos abaixo, pelo menos um dentre o primeiro vetor de origem afim e o segundo vetor de origem afim pode ser substituído pelo vetor de origem afim do ponto de controle inferior esquerdo (o terceiro vetor de origem afim) ou o vetor de origem afim do ponto de controle inferior direito (um quarto vetor de origem afim).
[193] Além disso, no modelo de movimento afim de 6 parâmetros, os vetores de origem afins do ponto de controle superior esquerdo, ponto de controle superior direito e o ponto de controle inferior esquerdo serão referidos como um primeiro vetor de origem afim, um segundo vetor de origem afim e um terceiro vetor de origem afim, respectivamente. Nas modalidades que usam o primeiro vetor de origem afim, o segundo vetor de origem afim e o terceiro vetor de origem afim descrito abaixo, pelo menos um dentre o primeiro vetor de origem afim, o segundo vetor de origem afim e o terceiro vetor de origem afim podem ser substituídos pelo vetor de origem afim do ponto de controle inferior direito (um quarto vetor de origem afim).
[194] Um vetor afim pode ser derivado para cada sub-bloco usando os vetores de origem afins (S1103). Aqui, o vetor afim representa um vetor de movimento translacional derivado com base nos vetores de origem afins. O vetor afim de um sub-bloco pode ser referido como um vetor de movimento de sub-bloco afim ou um vetor de movimento de sub-bloco.
[195] A Figura 13 é uma vista que mostra um exemplo de vetores afins dos sub-blocos em um modelo de movimento de 4 parâmetros.
[196] O vetor afim do sub-bloco pode ser derivado com base na posição do ponto de controle, na posição do sub- bloco e no vetor de origem afim. Por exemplo, a Equação 3 mostra um exemplo de derivação de um vetor de sub-bloco afim. [Equação 3] (𝒔𝒗𝟏𝒙 − 𝒔𝒗𝟎𝒙 ) (𝒔𝒗𝟏𝒚 − 𝒔𝒗𝟎𝒚 ) 𝒗𝒙 = (𝒙 − 𝒙𝟎 ) − (𝒚 − 𝒚𝟎 ) + 𝒔𝒗𝟎𝒙 (𝒙𝟏 − 𝒙𝟎 ) (𝒙𝟏 − 𝒙𝟎 ) (𝒔𝒗𝟏𝒚 − 𝒔𝒗𝟎𝒚 ) (𝒔𝒗𝟏𝒙 − 𝒔𝒗𝟎𝒙 ) 𝒗𝒚 = (𝒙 − 𝒙𝟎 ) + (𝒚 − 𝒚𝟎 ) + 𝒔𝒗𝟎𝒚 (𝒙𝟏 − 𝒙𝟎 ) (𝒙𝟏 − 𝒙𝟎 )
[197] Na Equação 3, (x, y) denota a posição de um sub-bloco. Aqui, a posição de um sub-bloco indica a posição de uma amostra de referência incluída no sub-bloco. A amostra de referência pode ser uma amostra posicionada no canto superior esquerdo do sub-bloco, ou uma amostra da qual pelo menos uma dentre as coordenadas do eixo geométrico x e eixo geométrico y é um ponto central. (x0, y0) denota a posição do primeiro ponto de controle e (sv0x, sv0y) denota o primeiro vetor de origem afim. Além disso, (x1, y1) denota a posição do segundo ponto de controle e (sv1x, sv1y) denota o segundo vetor de origem afim.
[198] Quando o primeiro ponto de controle e o segundo ponto de controle correspondem ao canto superior esquerdo e ao canto superior direito do bloco atual, respectivamente, x1-x0 pode ser definido para um valor igual à largura do bloco atual.
[199] Depois disso, a previsão de compensação de movimento para cada sub-bloco pode ser realizada usando o vetor afim de cada sub-bloco (S1104). Como resultado da realização da previsão de compensação de movimento, um bloco de previsão para cada sub-bloco pode ser gerado. Os blocos de previsão dos sub-blocos podem ser definidos como os blocos de previsão do bloco atual.
[200] Em seguida, o método de interprevisão que usas informações de movimento translacional será descrito em detalhes.
[201] As informações de movimento do bloco atual podem ser derivadas das informações de movimento de outro bloco. Aqui, outro bloco pode ser um bloco codificado/decodificado por interprevisão antes do bloco atual. Definir as informações de movimento do bloco atual para serem iguais às informações de movimento de outro bloco pode ser definido como um modo de fusão. Além disso, definir o vetor de movimento de outro bloco como o valor de previsão do vetor de movimento do bloco atual pode ser definido como um modo de previsão de vetor de movimento avançado.
[202] A Figura 14 é um fluxograma que ilustra um processo de derivação de informações de movimento de um bloco atual usando um modo de fusão.
[203] Um candidato a fusão do bloco atual pode ser derivado (S1401). O candidato a fusão do bloco atual pode ser derivado de um bloco codificado/decodificado por interprevisão antes do bloco atual.
[204] A Figura 15 é uma vista que mostra um exemplo de blocos candidatos usados para derivar um candidato a fusão.
[205] Os blocos candidatos podem incluir pelo menos um dentre os blocos vizinhos, incluindo uma amostra adjacente ao bloco atual ou blocos não vizinhos, incluindo uma amostra não adjacente ao bloco atual. Doravante, as amostras para determinar os blocos candidatos são definidas como amostras de referência. Além disso, uma amostra de referência adjacente ao bloco atual é referida como uma amostra de referência vizinha, e uma amostra de referência não adjacente ao bloco atual é referida como uma amostra de referência não vizinha.
[206] A amostra de referência vizinha pode ser incluída em uma coluna vizinha da coluna mais à esquerda do bloco atual ou em uma fileira vizinha da fileira mais alta do bloco atual. Por exemplo, quando as coordenadas da amostra superior esquerda do bloco atual são (0, 0), pelo menos um dentre um bloco que inclui uma amostra de referência na posição de (-1, H-1), um bloco que inclui um amostra de referência na posição de (W-1, -1), um bloco que inclui uma amostra de referência na posição de (W, -1), um bloco que inclui uma amostra de referência na posição de (-1, H), e um bloco que inclui uma amostra de referência na posição de (-1, -1) pode ser usado como um bloco candidato. Com referência ao desenho, blocos vizinhos de índice 0 a 4 podem ser usados como blocos candidatos.
[207] A amostra de referência não vizinha representa uma amostra da qual pelo menos uma dentre uma distância do eixo geométrico x e uma distância do eixo geométrico y de uma amostra de referência adjacente ao bloco atual tem um valor predefinido. Por exemplo, pelo menos um dentre um bloco que inclui uma amostra de referência da qual a distância do eixo geométrico x da amostra de referência esquerda é um valor predefinido, um bloco que inclui uma amostra não vizinha da qual a distância do eixo geométrico y da amostra de referência superior é um valor predefinido e um bloco que inclui uma amostra não vizinha da qual a distância do eixo geométrico x e a distância do eixo geométrico y da amostra de referência superior esquerda são valores predefinidos pode ser usado como um bloco candidato. Os valores predefinidos podem ser um número natural, como 4, 8, 12, 16 ou semelhantes. Com referência ao desenho, ao menos um dentro os blocos de índice 5 a 26 podem ser usados como um bloco candidato.
[208] Uma amostra não posicionada na mesma linha vertical, linha horizontal ou linha diagonal que a amostra de referência vizinha pode ser definida como uma amostra de referência não vizinha.
[209] A Figura 16 é uma vista que mostra posições de amostras de referência.
[210] Como mostrado no exemplo da Figura 16, as coordenadas x das amostras de referência não vizinhas superiores podem ser definidas para serem diferentes das coordenadas x das amostras de referência vizinhas superiores. Por exemplo, quando a posição da amostra de referência vizinha superior é (W-1, -1), a posição de uma amostra de referência não vizinha, separada tanto quanto N da amostra de referência vizinha superior no eixo geométrico y, pode ser definido como ((W / 2) -1, -1-N), e a posição de uma amostra de referência superior não vizinha separada tanto quanto 2N da amostra de referência vizinha no eixo geométrico y pode ser definida como (0, -1-2N). Ou seja, a posição de uma amostra de referência não adjacente pode ser determinada com base na posição de uma amostra de referência adjacente e uma distância da amostra de referência adjacente.
[211] Daqui em diante, um bloco candidato incluindo uma amostra de referência vizinha entre os blocos candidatos é referido como um bloco vizinho, e um bloco que inclui uma amostra de referência não vizinha é referido como um bloco não vizinho.
[212] Quando a distância entre o bloco atual e o bloco candidato é maior ou igual a um valor limite, o bloco candidato pode ser definido como indisponível como um candidato a fusão. O valor limite pode ser determinado com base no tamanho da unidade de árvore de codificação. Por exemplo, o valor limite pode ser definido para a altura (ctu_height) da unidade de árvore de codificação ou um valor obtido pela adição ou subtração de um deslocamento para ou da altura (por exemplo, ctu_height ± N) da unidade de árvore de codificação. O deslocamento N é um valor predefinido no codificador e no decodificador e pode ser definido como 4, 8, 16, 32 ou ctu_height.
[213] Quando a diferença entre a coordenada do eixo geométrico y do bloco atual e a coordenada do eixo geométrico y de uma amostra incluída em um bloco candidato é maior do que o valor limite, o bloco candidato pode ser determinado como indisponível como um candidato a fusão.
[214] Alternativamente, um bloco candidato que não pertence à mesma unidade da árvore de codificação que o bloco atual pode ser definido como indisponível como um candidato a fusão. Por exemplo, quando uma amostra de referência se desvia do limite superior de uma unidade de árvore de codificação à qual o bloco atual pertence, um bloco candidato incluindo a amostra de referência pode ser definido como indisponível como um candidato a fusão.
[215] Quando o limite superior do bloco atual é adjacente ao limite superior da unidade de árvore de codificação, uma pluralidade de blocos candidatos é determinada como indisponível como um candidato a fusão e, assim, a eficiência de codificação/decodificação do bloco atual pode diminuir. Para resolver este problema, os blocos candidatos podem ser configurados de modo que o número de blocos candidatos posicionados no lado esquerdo do bloco atual seja maior do que o número de blocos candidatos posicionados no topo do bloco atual.
[216] A Figura 17 é uma vista que mostra um exemplo de blocos candidatos usados para derivar um candidato a fusão.
[217] Como mostrado no exemplo da Figura 17, os blocos superiores pertencentes às colunas de bloco N superiores do bloco atual e os blocos do lado esquerdo pertencentes às colunas de bloco M do lado esquerdo do bloco atual podem ser definidos como blocos candidatos. Neste ponto, o número de blocos candidatos do lado esquerdo pode ser definido para ser maior do que o número de blocos candidatos superiores, definindo M para ser maior do que N.
[218] Por exemplo, a diferença entre a coordenada do eixo geométrico y da amostra de referência no bloco atual e a coordenada do eixo geométrico y do bloco superior que pode ser usada como um bloco candidato pode ser definida para não exceder N vezes da altura do bloco atual. Por exemplo, a diferença entre a coordenada do eixo geométrico x da amostra de referência no bloco atual e a coordenada do eixo geométrico x do bloco lateral esquerdo que pode ser usada como um bloco candidato pode ser definida para não exceder M vezes da altura do bloco atual.
[219] Por exemplo, no exemplo mostrado na Figura 17, é mostrado que os blocos pertencentes às colunas de dois blocos superiores do bloco atual e os blocos pertencentes às colunas dos cinco blocos esquerdo do bloco atual são definidos como blocos candidatos.
[220] Como outro exemplo, quando um bloco candidato não pertence a uma unidade de árvore de codificação igual à do bloco atual, um candidato a fusão pode ser derivado usando um bloco pertencente à mesma unidade de árvore de codificação que o bloco atual ou um bloco que inclui um amostra de referência adjacente ao limite da unidade da árvore de codificação, em vez do bloco candidato.
[221] A Figura 18 é uma vista que mostra um exemplo no qual a posição de uma amostra de referência é alterada.
[222] Quando uma amostra de referência é incluída em uma unidade de árvore de codificação diferente do bloco atual, e a amostra de referência não é adjacente ao limite da unidade de árvore de codificação, um bloco candidato pode ser determinado usando uma amostra de referência adjacente ao limite da unidade de árvore de codificação, em vez da amostra de referência.
[223] Por exemplo, nos exemplos mostrados na Figura 18 (a) e 18 (b), quando o limite superior do bloco atual e o limite superior da unidade de árvore de codificação estão em contato um com o outro, as amostras de referência no topo do bloco atual pertencem a uma unidade de árvore de codificação diferente do bloco atual. Entre as amostras de referência pertencentes à unidade da árvore de codificação diferente do bloco atual, uma amostra de referência não adjacente ao limite superior da unidade da árvore de codificação pode ser substituída por uma amostra adjacente ao limite superior da unidade da árvore de codificação.
[224] Por exemplo, como mostrado no exemplo da Figura 18 (a), a amostra de referência na posição 6 é substituída pela amostra na posição 6’ posicionada no limite superior da unidade de árvore de codificação e como mostrado no exemplo da FIG. 18 (b), a amostra de referência na posição 15 é substituída pela amostra na posição 15’ posicionada no limite superior da unidade de árvore de codificação. Neste ponto, a coordenada y da amostra de substituição é alterada para uma posição adjacente à unidade da árvore de codificação e a coordenada x da amostra de substituição pode ser definida para ser igual à amostra de referência. Por exemplo, a amostra na posição 6’ pode ter a mesma coordenada x que a amostra na posição 6 e a amostra na posição 15’ pode ter a mesma coordenada x que a amostra na posição 15.
[225] Alternativamente, um valor obtido pela adição ou subtração de um deslocamento para ou da coordenada x da amostra de referência pode ser definido como a coordenada x da amostra de substituição. Por exemplo, quando as coordenadas x da amostra de referência vizinha posicionada no topo do bloco atual e a amostra de referência não vizinha são iguais, um valor obtido pela adição ou subtração de um deslocamento para ou da coordenada x da referência amostra pode ser definida como a coordenada x da amostra de substituição. Isso evita que a amostra de substituição que substitui a amostra de referência não vizinha seja colocada na mesma posição que outra amostra de referência não vizinha ou amostra de referência vizinha.
[226] A Figura 19 é uma vista que mostra um exemplo no qual a posição de uma amostra de referência é alterada.
[227] Ao substituir uma amostra de referência que está incluída em uma unidade de árvore de codificação diferente do bloco atual e não é adjacente ao limite da unidade de árvore de codificação por uma amostra posicionada no limite da unidade de árvore de codificação, um valor obtido pela adição ou subtração um deslocamento de e para a coordenada x da amostra de referência pode ser definido como a coordenada x da amostra de substituição.
[228] Por exemplo, no exemplo mostrado na Figura 19, a amostra de referência na posição 6 e a amostra de referência na posição 15 podem ser substituídas pela amostra na posição 6’ e a amostra na posição 15’, respectivamente, das quais as coordenadas y são as mesmas da fileira adjacente ao limite superior da unidade da árvore de codificação. Neste ponto, a coordenada x da amostra na posição 6’ pode ser definida para um valor obtido subtraindo W/2 da coordenada x da amostra de referência na posição 6 e a coordenada x da amostra na posição 15’ pode ser definida para um valor obtido subtraindo W-1 da coordenada x da amostra de referência na posição 15.
[229] Ao contrário dos exemplos mostrados na Figura 18 e 19, a coordenada y da fileira posicionada no topo da fileira superior do bloco atual ou a coordenada y do limite superior da unidade da árvore de codificação pode ser definida como a coordenada y da amostra de substituição.
[230] Embora não mostrado, uma amostra que substitui a amostra de referência pode ser determinada com base no limite do lado esquerdo da unidade de árvore de codificação. Por exemplo, quando a amostra de referência não está incluída na mesma unidade de árvore de codificação que o bloco atual e não está adjacente ao limite esquerdo da unidade de árvore de codificação, a amostra de referência pode ser substituída por uma amostra adjacente ao limite lateral da unidade da árvore de codificação. Neste ponto, a amostra de substituição pode ter uma coordenada y igual à da amostra de referência, ou pode ter uma coordenada y obtida adicionando ou subtraindo um deslocamento para e da coordenada y da amostra de referência.
[231] Depois disso, um bloco que inclui a amostra de substituição pode ser definido como um bloco candidato e um candidato a fusão do bloco atual pode ser derivado com base no bloco candidato.
[232] Um candidato a fusão também pode ser derivado de um bloco vizinho temporariamente incluído em uma imagem diferente do bloco atual. Por exemplo, um candidato a fusão pode ser derivado de um bloco colocado incluído em uma imagem colocada.
[233] As informações de movimento do candidato a fusão podem ser definidas para serem iguais às informações de movimento do bloco de candidato. Por exemplo, pelo menos um dentre um vetor de movimento, um índice de imagem de referência, uma direção de previsão e um índice de peso bidirecional do bloco candidato pode ser definido como informações de movimento do candidato a fusão.
[234] Uma lista de candidatos a fusão incluindo candidatos a fusão pode ser gerada (S1402). Os candidatos a fusão podem ser divididos em um candidato a fusão adjacente derivado de um bloco vizinho adjacente ao bloco atual e um candidato a fusão não adjacente derivado de um bloco não vizinho.
[235] Os índices dos candidatos a fusão na lista de candidatos a fusão podem ser atribuídos em uma ordem predeterminada. Por exemplo, um índice atribuído a um candidato a fusão adjacente pode ter um valor menor do que um índice atribuído a um candidato a fusão não adjacente. Alternativamente, um índice pode ser atribuído a cada um dos candidatos a fusão com base no índice de cada bloco mostrado na Figura 15 ou 17.
[236] Quando uma pluralidade de candidatos a fusão é incluída na lista de candidatos a fusão, pelo menos um dentre a pluralidade de candidatos a fusão pode ser selecionado (S1403). Neste ponto, as informações que indicam se as informações de movimento do bloco atual são derivadas de um candidato a fusão adjacente podem ser sinalizadas por meio de um fluxo de bits. As informações podem ser um sinalizador de 1 bit. Neste ponto, as informações que indicam se as informações de movimento do bloco atual são derivadas de um candidato a fusão adjacente podem ser sinalizadas por meio de um fluxo de bits. Quando o valor do elemento de sintaxe isAdjancentMergeFlag é 1, as informações de movimento do bloco atual podem ser derivadas com base no candidato a fusão adjacente. Por outro lado, quando o valor do elemento de sintaxe isAdjancentMergeFlag é 0, as informações de movimento do bloco atual podem ser derivadas com base no candidato a fusão não adjacente.
[237] A Tabela 1 mostra uma tabela de sintaxe que inclui o elemento de sintaxe isAdjancentMergeFlag. [TABELA 1] coding_unit (x0, y0, cbWidth, cbHeight, treeType) { Descri tor if (slice_type! = I) { pred_mode_flag ae(v) } if (CuPredMode[x0][y0] = = MODE_INTRA) { if (treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA) { intra_luma_mpm_flag[x0][y0] if (intra_luma_mpm_flag[x0][y0] ) intra_luma_mpm_idx[x0][y0] ae(v) else intra_luma_mpm_remainder[x0][y0] ae(v) } if (treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA) intra_chroma_pred_mode[x0][y0] ae(v) } else { if (cu_skip_falg[x0][y0]) { if (MaxNumMergeCand > 1){ isAdjacentMergeflag ae(v) if (isAdjcanetMergeflag){ merge_idx[x0][y0] ae(v) } else{ NA_merge_idx[x0][y0] ae(v) } }
} else { /* MODE_INTER*/ merge_flag[x0][y0] ae(v) if (merge_flag[x0][y0]){ if (MaxNumMergeCand > 1){ isAdjacentMergeflag ae(v) if (isAdjcanetMergeflag){ merge_idx[x0][y0] ae(v) } else{ NA_merge_idx[x0][y0] ae(v) } } } if (CuPredMode[ x0 ][ y0 ]! = MODE_INTRA) cu_cbf ae(v) if (cu_cbf) { transform_tree( x0, y0, cbWidth, cbHeight, treeType) }
[238] As informações para especificar qualquer um dentre uma pluralidade de candidatos a fusão podem ser sinalizadas por meio de um fluxo de bits. Por exemplo, as informações que indicam um índice de qualquer um dos candidatos a fusão incluídos na lista de candidatos a fusão podem ser sinalizadas por meio de um fluxo de bits.
[239] Quando isAdjacentMergeflag é 1, o elemento de sintaxe merge_idx que especifica qualquer um dentre os candidatos a fusão adjacentes pode ser sinalizado. O valor máximo do elemento de sintaxe merge_idx pode ser definido como um valor obtido subtraindo 1 do número de candidatos a fusão adjacentes.
[240] Quando isAdjacentMergeflag é 0, o elemento de sintaxe NA_merge_idx que especifica qualquer um dentre os candidatos a fusão não adjacentes pode ser sinalizado. O elemento de sintaxe NA_merge_idx representa um valor obtido pela subtração do número de candidatos a fusão adjacentes do índice do candidato a fusão não adjacente. O decodificador pode selecionar um candidato a fusão não adjacente pela adição do número de candidatos a fusão adjacentes a um índice especificado por NA_merge_idx.
[241] Quando o número de candidatos a fusão incluídos na lista de candidatos a fusão for menor que um valor limite, o candidato a fusão incluído na lista de informações de movimento inter-região pode ser adicionado à lista de candidatos a fusão. Aqui, o valor limite pode ser o número máximo de candidatos a fusão que a lista de candidatos a fusão pode incluir ou um valor obtido subtraindo um deslocamento do número máximo de candidatos a fusão. O deslocamento pode ser um número natural, como 1, 2 ou semelhantes. A lista de informações de movimento inter-região pode incluir um candidato a fusão derivado com base em um bloco codificado/decodificado antes do bloco atual.
[242] A lista de informações de movimento inter- região inclui um candidato a fusão derivado com base em um bloco codificado/decodificado com base na interprevisão na imagem atual. Por exemplo, as informações de movimento de um candidato a fusão incluído na lista de informações de movimento inter-região podem ser definidas para serem iguais às informações de movimento de um bloco codificado/decodificado com base na interprevisão. Aqui, as informações de movimento podem incluir pelo menos um dentre um vetor de movimento, um índice de imagem de referência, uma direção de previsão e um índice de peso bidirecional.
[243] Por conveniência de explicação, um candidato a fusão incluído na lista de informações de movimento inter-região será referido como um candidato a fusão inter- região.
[244] O número máximo de candidatos a fusão que a lista de informações de movimento inter-região pode incluir pode ser predefinido por um codificador e um decodificador. Por exemplo, o número máximo de candidatos a fusão que podem ser incluídos na lista de informações de movimento inter-região pode ser 1, 2, 3, 4, 5, 6, 7, 8 ou mais (por exemplo, 16).
[245] Alternativamente, as informações que indicam o número máximo de candidatos a fusão na lista de informações de movimento inter-região podem ser sinalizadas por meio de um fluxo de bits. As informações podem ser sinalizadas no nível de sequência, imagem ou fatia.
[246] Alternativamente, o número máximo de candidatos a fusão da lista de informações de movimento inter- região pode ser determinado de acordo com o tamanho de uma imagem, o tamanho de uma fatia ou o tamanho de uma unidade de árvore de codificação.
[247] A lista de informações de movimento inter- região pode ser inicializada pela unidade de imagem, fatia, ladrilho, tijolo, unidade de árvore de codificação ou linha de unidade de árvore de codificação (fileira ou coluna). Por exemplo, quando uma fatia é inicializada, a lista de informações de movimento inter-região também é inicializada e a lista de informações de movimento inter-região pode não incluir qualquer candidato a fusão.
[248] Alternativamente, as informações que indicam quando ou não inicializar as informações de movimento inter-região podem ser sinalizadas por meio de um fluxo de bits. As informações podem ser sinalizadas no nível de fatia, ladrilho, tijolo ou bloco. Até que as informações indiquem inicializar a lista de informações de movimento inter-região, uma lista de informações de movimento inter-região configurada anteriormente pode ser usada.
[249] Alternativamente, as informações sobre o candidato a fusão inter-região inicial podem ser sinalizadas através de um conjunto de parâmetros de imagem ou um cabeçalho de fatia. Embora a fatia seja inicializada, a lista de informações de movimento inter-região pode incluir o candidato inicial a fusão inter-região. Consequentemente, um candidato a fusão inter-região pode ser usado para um bloco que é o primeiro destino de codificação/decodificação na fatia.
[250] Os blocos são codificados/decodificados de acordo com uma ordem de codificação/decodificação, e os blocos codificados/decodificados com base na interprevisão podem ser sequencialmente configurados como um candidato a fusão inter- região de acordo com uma ordem de codificação/decodificação.
[251] A Figura 20 é um fluxograma que ilustra um processo de atualização de uma lista de informações de movimento inter-região.
[252] Quando a previsão inter é realizada no bloco atual (S2001), um candidato a fusão inter-região pode ser derivado com base no bloco atual (S2002). As informações de movimento do candidato a fusão inter-região podem ser definidas para serem iguais às informações de movimento do bloco atual.
[253] Quando a lista de informações de movimento inter-região está vazia (S2003), o candidato a fusão inter- região derivado com base no bloco atual pode ser adicionado à lista de informações de movimento inter-região (S2004).
[254] Quando a lista de informações de movimento inter-região já inclui o candidato a fusão inter-região (S2003), uma verificação de redundância pode ser realizada nas informações de movimento do bloco atual (ou o candidato a fusão inter-região derivado com base no bloco atual) (S2005). A verificação de redundância é para determinar se as informações de movimento de um candidato a fusão inter-região previamente armazenadas na lista de informações de movimento inter-região e as informações de movimento do bloco atual são as mesmas. A verificação de redundância pode ser realizada em todos os candidatos a fusão inter-região previamente armazenados na lista de informações de movimento inter-região. Alternativamente, a verificação de redundância pode ser realizada em candidatos a fusão inter-região com um índice maior do que um valor limite ou menor do que um valor limite entre os candidatos a fusão inter-região previamente armazenados na lista de informações de movimento inter-região.
[255] Quando um candidato a fusão inter-região com as mesmas informações de movimento que as informações de movimento do bloco atual não está incluído, o candidato a fusão inter-região derivado com base no bloco atual pode ser adicionado à lista de informações de movimento inter-região (S2008). Se os candidatos a fusão inter-região são os mesmos pode-se determinar com base em se as informações de movimento (por exemplo, um vetor de movimento e/ou um índice de imagem de referência) dos candidatos a fusão inter-região são as mesmas.
[256] Neste ponto, quando o número máximo de candidatos a fusão inter-região já está armazenado na lista de informações de movimento inter-região (S2006), o candidato a fusão inter-região mais antigo é excluído (S2007), e o candidato a fusão inter-região derivado com base no bloco atual pode ser adicionado à lista de informações de movimento inter- região (S2008).
[257] Cada um dos candidatos a fusão inter- região pode ser identificado por um índice. Quando um candidato a fusão inter-região derivado do bloco atual é adicionado à lista de informações de movimento inter-região, o índice mais baixo (por exemplo, 0) é atribuído ao candidato a fusão inter- região e índices dos candidatos a fusão inter-região previamente armazenados podem ser aumentados em 1. Neste ponto, quando o número máximo de candidatos a fusão inter-região já está armazenado na lista de informações de movimento inter- região, um candidato a fusão inter-região com o maior índice é removido.
[258] Alternativamente, quando o candidato a fusão inter-região derivado do bloco atual é adicionado à lista de informações de movimento inter-região, o maior índice pode ser atribuído ao candidato a fusão inter-região. Por exemplo, quando o número de candidatos a fusão inter-região previamente armazenados na lista de informações de movimento inter-região é menor do que um valor máximo, um índice com o mesmo valor que o número de candidatos a fusão inter-região previamente armazenados pode ser atribuído ao candidato a fusão inter- região. Alternativamente, quando o número de candidatos a fusão inter-região previamente armazenados na lista de informações de movimento inter-região é o mesmo que o valor máximo, um índice subtraindo 1 do valor máximo pode ser atribuído ao candidato a fusão inter-região. Além disso, um candidato a fusão inter-região com o menor índice é removido e os índices de candidatos a fusão inter-região armazenados anteriormente podem ser diminuídos em 1.
[259] A Figura 21 é uma vista que mostra uma modalidade de atualização de uma lista de candidatos a fusão inter-região.
[260] Assume-se que a medida em que o candidato a fusão inter-região derivado do bloco atual é adicionado à lista de candidatos a fusão inter-região, o maior índice pode ser atribuído ao candidato a fusão inter-região. Além disso, presume-se que o número máximo de candidatos a fusão inter- região já está armazenado na lista de candidatos a fusão inter- região.
[261] Quando o candidato a fusão inter-região HmvpCand [n + 1] derivado do bloco atual é adicionado à lista de candidatos a fusão inter-região HmvpCandList, o candidato a fusão inter-regiões HmvpCand [0] que tem o menor índice entre os candidatos a fusão inter-região previamente armazenados é excluído e os índices dos candidatos a fusão inter-região restantes podem ser reduzidos em 1. Além disso, o índice do candidato a fusão inter-região HmvpCand [n + 1] derivado do bloco atual pode ser definido para um valor máximo (n no exemplo mostrado na FIG. 21).
[262] Quando um candidato a fusão inter-região igual ao candidato a fusão inter-região derivado com base no bloco atual é armazenado anteriormente (S2005), o candidato a fusão inter-região derivado com base no bloco atual pode ser adicionado à lista de informações de movimento inter-região
(S2009).
[263] Alternativamente, conforme o candidato a fusão inter-região derivado com base no bloco atual é adicionado à lista de informações de movimento inter-região, um candidato a fusão inter-região previamente armazenado que é o mesmo que o candidato a fusão inter-região pode ser removido. Neste caso, é obtido um efeito igual ao da atualização recente do índice do candidato a fusão inter-região armazenado anteriormente.
[264] A Figura 22 é uma vista que mostra um exemplo no qual um índice de um candidato a fusão inter-região previamente armazenado é atualizado.
[265] Quando o índice de um candidato a fusão inter-região previamente armazenado mvCand que é o mesmo que o candidato a fusão inter-região mvCand derivado com base no bloco atual é hIdx, o candidato a fusão inter-região armazenado anteriormente é excluído e os índices de candidatos a fusão inter-região que tem um índice maior do que hIdx podem ser reduzidos em 1. Por exemplo, no exemplo mostrado na Figura 22, é mostrado que HmvpCand [2] igual a mvCand é excluído da lista de informações de movimento inter-região HvmpCandList e os índices de HmvpCand [3] para HmvpCand [n] são diminuídos em 1.
[266] Além disso, o candidato a fusão inter- região mvCand derivado com base no bloco atual pode ser adicionado ao final da lista de informações de movimento inter- região.
[267] Alternativamente, o índice atribuído ao candidato a fusão inter-região armazenado anteriormente que é o mesmo que o candidato a fusão inter-região derivado com base no bloco atual pode ser atualizado. Por exemplo, o índice do candidato a fusão inter-região armazenado anteriormente pode ser alterado para um valor mínimo ou máximo.
[268] Pode ser configurado para não adicionar informações de movimento de blocos incluídos em uma área predeterminada à lista de informações de movimento inter- região. Por exemplo, um candidato a fusão inter-região derivado com base nas informações de movimento de um bloco incluído na área de processamento de fusão não pode ser adicionado à lista de informações de movimento inter-região. Uma vez que uma ordem de codificação/decodificação não é definida para os blocos incluídos na área de processamento de fusão, é inadequado usar informações de movimento de qualquer um dentre os blocos para interprevisão de outro bloco. Consequentemente, um candidato a fusão inter-região derivado com base nos blocos incluídos na área de processamento de fusão não pode ser adicionado à lista de informações de movimento inter-região.
[269] Quando a previsão de compensação de movimento é realizada pela unidade de sub-bloco, um candidato a fusão inter-região pode ser derivado com base nas informações de movimento de um sub-bloco representativo entre uma pluralidade de sub-blocos incluídos no bloco atual. Por exemplo, quando um candidato a fusão de sub-bloco é usado para o bloco atual, um candidato a fusão inter-região pode ser derivado com base nas informações de movimento de um sub-bloco representativo entre os sub-blocos.
[270] Os vetores de movimento dos sub-blocos podem ser derivados na seguinte ordem. Primeiro, qualquer um dentre os candidatos a fusão incluídos na lista de candidatos a fusão do bloco atual é selecionado e um vetor de deslocamento inicial (shVector) pode ser derivado com base no vetor de movimento do candidato a fusão selecionado. Então, um sub- bloco deslocado, em que a posição da amostra de referência é (xColSb, yColSb), pode ser derivado conforme o vetor de deslocamento inicial é adicionado na posição (xSb, ySb) da amostra de referência (por exemplo, a amostra superior esquerda ou a amostra no centro) de cada sub-bloco no bloco de codificação. A Equação 4 mostra uma equação para derivar o sub-bloco deslocado. [Equação 4] (𝒙𝑪𝒐𝒍𝑺𝒃, 𝒚𝑪𝒐𝒍𝑺𝒃) = (𝒙𝑺𝒃 + 𝒔𝒉𝑽𝒆𝒄𝒕𝒐𝒓[𝟎] ≫ 𝟒, 𝒚𝑺𝒃 + 𝒔𝒉𝑽𝒆𝒄𝒕𝒐𝒓[𝟏] ≫ 𝟒)
[271] Então, o vetor de movimento de um bloco colocado correspondente à posição central do sub-bloco incluindo (xColSb, yColSb) pode ser definido como o vetor de movimento do sub-bloco incluindo (xSb, ySb).
[272] O sub-bloco representativo pode significar um sub-bloco incluindo a amostra superior esquerda ou a amostra no centro do bloco atual.
[273] A Figura 23 é uma vista que mostra a posição de um sub-bloco representativo.
[274] A Figura 23 (a) mostra um exemplo em que o sub-bloco posicionado no canto superior esquerdo do bloco atual é definido como o sub-bloco representativo, e a Figura 23 (b) mostra um exemplo em que o sub-bloco posicionado no centro do bloco atual é definido como o sub-bloco representativo. Quando a previsão de compensação de movimento é realizada por unidade de sub-bloco, um candidato a fusão inter-região do bloco atual pode ser derivado com base no vetor de movimento do sub-bloco, incluindo a amostra superior esquerda do bloco atual ou o sub- bloco que inclui a amostra no centro do bloco atual.
[275] Pode ser determinado se deve ou não usar o bloco atual como um candidato a fusão inter-região, com base no modo de interprevisão do bloco atual. Por exemplo, um bloco codificado/decodificado com base em um modelo de movimento afim pode ser definido como indisponível como um candidato a fusão inter-região. Consequentemente, embora o bloco atual seja codificado/decodificado por interprevisão, quando o modo de interprevisão do bloco atual é o modo de previsão afim, a lista de informações de movimento inter-região pode não ser atualizada com base no bloco atual.
[276] Alternativamente, o candidato a fusão inter-região pode ser derivado com base em pelo menos um vetor de sub-bloco entre os sub-blocos incluídos no bloco codificado/decodificado com base no modelo de movimento afim. Por exemplo, o candidato a fusão inter-região pode ser derivado usando um sub-bloco posicionado no canto superior esquerdo, um sub-bloco posicionado no centro ou um sub-bloco posicionado no lado superior direito do bloco atual. Alternativamente, um valor médio de vetores de sub-bloco de uma pluralidade de sub- blocos pode ser definido como o vetor de movimento do candidato a fusão inter-região.
[277] Alternativamente, o candidato a fusão inter-região pode ser derivado com base em um valor médio de vetores de origem afins do bloco codificado/decodificado com base no modelo de movimento afim. Por exemplo, uma média de pelo menos um dentre o primeiro vetor de origem afim, o segundo vetor de origem afim e o terceiro vetor de origem afim do bloco atual pode ser definida como o vetor de movimento do candidato a fusão inter-região.
[278] Alternativamente, uma lista de informações de movimento inter-região pode ser configurada para cada modo de interprevisão. Por exemplo, pelo menos uma dentre uma lista de informações de movimento inter-região para um bloco codificado/decodificado por cópia intrabloco, uma lista de informações de movimento inter-região para um bloco codificado/decodificado com base em um modelo de movimento translacional e uma lista de informações de movimento da região para um bloco codificado/decodificado com base em um modelo de movimento afim pode ser definida. De acordo com o modo de interprevisão do bloco atual, qualquer uma dentre uma pluralidade de listas de informações de movimento inter-região pode ser selecionada.
[279] A Figura 24 é uma vista que mostra um exemplo no qual uma lista de informações de movimento inter- região é gerada para cada modo de interprevisão.
[280] Quando um bloco é codificado/decodificado com base em um modelo de movimento não afim, um candidato a fusão inter-região mvCand derivado com base no bloco pode ser adicionado a uma lista de informações de movimento não afim inter-região HmvpCandList. Por outro lado, quando um bloco é codificado/decodificado com base em um modelo de movimento não afim, um candidato a fusão inter-região mvAfCand derivado com base no bloco pode ser adicionado a uma lista de informações de movimento não afim inter-região HmvpAfCandList.
[281] Os vetores de origem afins de um bloco codificado/decodificado com base no modelo de movimento afim podem ser armazenados em um candidato a fusão inter-região derivado do bloco. Por conseguinte, o candidato a fusão inter- região pode ser usado como um candidato a fusão para derivar o vetor de origem afim do bloco atual.
[282] Além da lista de informações de movimento inter-região descrita acima, uma lista adicional de informações de movimento inter-região pode ser definida. Além da lista de informações de movimento inter-região descrita acima (a seguir, referida como uma primeira lista de informações de movimento inter-região), uma lista de informações de movimento de longo prazo (a seguir, referida como uma segunda lista de informações de movimento inter- região) pode ser definida. Aqui, a lista de informações de movimento de longo prazo inclui candidatos a fusão de longo prazo.
[283] Quando a primeira lista de informações de movimento inter-região e a segunda lista de informações de movimento inter-região estão vazias, primeiro, os candidatos a fusão inter-região podem ser adicionados à segunda lista de informações de movimento inter-região. Somente após o número de candidatos a fusão inter-região disponíveis atingir o número máximo na segunda lista de informações de movimento inter- região, os candidatos a fusão inter-região podem ser adicionados à primeira lista de informações de movimento inter- região.
[284] Alternativamente, um candidato a fusão inter-região pode ser adicionado à segunda lista de informações de movimento inter-região e à primeira lista de informações de movimento inter-região.
[285] Neste ponto, a segunda lista de informações de movimento inter-região, cuja configuração foi concluída, não pode mais ser atualizada. Alternativamente, quando a região decodificada é maior ou igual a uma razão predeterminada da fatia, a segunda lista de informações de movimento inter-região pode ser atualizada. Alternativamente,
a segunda lista de informações de movimento inter-região pode ser atualizada para cada N linhas de unidade de árvore de codificação.
[286] Por outro lado, a primeira lista de informações de movimento inter-região pode ser atualizada sempre que um bloco codificado/decodificado por interprevisão é gerado. No entanto, pode ser configurado para não usar o candidato a fusão inter-região adicionado à segunda lista de informações de movimento inter-região, para atualizar a primeira lista de informações de movimento inter-região.
[287] As informações para selecionar qualquer uma dentre a primeira lista de informações de movimento inter- região e a segunda lista de informações de movimento inter- região podem ser sinalizadas através de um fluxo de bits. Quando o número de candidatos a fusão incluídos na lista de candidatos a fusão for menor que um valor limite, os candidatos a fusão incluídos na lista de informações de movimento inter- região indicador pelas informações podem ser adicionados à lista de candidatos a fusão.
[288] Alternativamente, uma lista de informações de movimento inter-região pode ser selecionada com base no tamanho e no formato do bloco atual, modo de interprevisão, se a previsão bidirecional está habilitada, se o refinamento do vetor de movimento está habilitado ou se a divisão triangular está habilitada.
[289] Alternativamente, embora um candidato a fusão inter-região incluído na primeira lista de informações de movimento inter-região seja adicionado, quando o número de candidatos a fusão incluídos na lista de candidatos a fusão for menor do que o número máximo de fusões, os candidatos a fusão inter-região incluídos na segunda lista de informações de movimento inter-região podem ser adicionadas à lista de candidatos a fusão.
[290] A Figura 25 é uma vista que mostra um exemplo no qual um candidato a fusão inter-região incluído em uma lista de informações de movimento de longo prazo é adicionado a uma lista de candidatos a fusão.
[291] Quando o número de candidatos a fusão incluídos na lista de candidatos a fusão for menor que um valor máximo, os candidatos a fusão incluídos na lista de informações de movimento inter-região HmvpCandList podem ser adicionados à lista de candidatos a fusão. Quando o número de candidatos a fusão incluídos na lista de candidatos a fusão for menor que o número máximo, embora os candidatos a fusão inter-região incluídos na primeira lista de informações de movimento inter- região sejam adicionados à lista de candidatos a fusão, os candidatos a fusão inter-região incluídos na lista de informações de movimento de longo prazo, HmvpLTCandList pode ser adicionado à lista de candidatos a fusão.
[292] A Tabela 2 mostra um processo de adição de candidatos a fusão inter-região incluídos na lista de informações de movimento de longo prazo à lista de candidatos a fusão. [TABELA 2] Para cada candidato na HMVPCandList com índice HMVPLTIdx = 1 .. numHMVPLTCand, as seguintes etapas ordenadas são repetidas até combStop ser igual a true - sameMotion é definido como FALSE - Se hmvpStop é igual a FALSE e numCurrMergecand é menor que (MaxNumMergeCand-1), hmvpLT é definido como TRUE - Se HMVPLTCandList[NumLTHmvp-HMVPLTIdx] tem os mesmos vetores de movimento e os mesmos índices de referência com qualquer mergeCandList[i] com I sendo 0.. numOrigMergeCand-1 e HasBeenPruned[i] igual a false, sameMotion é definido como true - Se sameMotion é igual a false, mergeCandList[numCurrMergeCand++] é definido como HMVPLTCandList[NumLTHmvp-HMVPLTIdx] - Se numCurrMergeCand é igual a (MaxNumMergeCand-1), hmvpLTStop é definido como TRUE
[293] O candidato a fusão inter-região pode ser configurado para incluir informações adicionais, além de informações de movimento. Por exemplo, para o candidato a fusão inter-região, um tamanho, um formato ou informações de divisão de um bloco podem ser armazenados adicionalmente. Quando a lista de candidatos a fusão do bloco atual é construída, apenas os candidatos a fusão inter-região com um tamanho, um formato ou informações de divisão iguais ou semelhantes às do bloco atual são usados entre os candidatos a fusão inter-região, ou os candidatos a fusão inter-região com um tamanho, um formato ou informações de divisão iguais ou semelhantes àquelas do bloco atual podem ser adicionados à lista de candidatos a fusão em primeiro lugar.
[294] Alternativamente, uma lista de informações de movimento inter-região pode ser gerada para cada uma das informações de tamanho, formato ou divisão de um bloco. Entre a pluralidade de listas de informações de movimento inter- região, uma lista de candidatos a fusão do bloco atual pode ser gerada usando uma lista de informações de movimento inter- região correspondendo ao formato, tamanho ou informações de divisão do bloco atual.
[295] Quando o número de candidatos a fusão incluídos na lista de candidatos a fusão for menor que um valor limite, os candidatos a fusão inter-região incluídos na lista de informações de movimento inter-região podem ser adicionados à lista de candidatos a fusão. O processo de adição é executado em ordem crescente ou decrescente com base no índice. Por exemplo, um candidato a fusão inter-região com o maior índice pode ser adicionado primeiro à lista de candidatos a fusão.
[296] Quando se deseja adicionar um candidato a fusão inter-região incluído na lista de informações de movimento inter-região à lista de candidatos a fusão, uma verificação de redundância pode ser realizada entre o candidato a fusão inter-região e os candidatos a fusão previamente armazenados na lista de candidatos a fusão.
[297] Por exemplo, a Tabela 3 mostra um processo no qual um candidato a fusão inter-região é adicionado à lista de candidatos a fusão. [TABELA 3] Para cada candidato na HMVPCandList com índice HMVPLTIdx = 1 .. numCheckedHMVPCand, as seguintes etapas ordenadas são repetidas até combStop ser igual a true - sameMotion é definido como FALSE - Se HMVPCandList[NumHmvp-HMVPIdx] tem os mesmos vetores de movimento e os mesmos índices de referência com qualquer mergeCandList[i] com I sendo 0.. numOrigMergeCand-1 e HasBeenPruned[i] igual a false, sameMotion é definido como true - Se sameMotion é igual a false, mergeCandList[numCurrMergeCand++] é definido como HMVPCandList[NumLTHmvp-HMVPIdx] - Se numCurrMergeCand é igual a (MaxNumMergeCand-1), hmvpStop é definido como TRUE
[298] A verificação de redundância pode ser realizada somente em alguns candidatos a fusão inter-região incluídos na lista de informações de movimento inter-região.
Por exemplo, a verificação de redundância pode ser realizada apenas em candidatos a fusão inter-região com um índice maior que um valor limite ou menor que um valor limite. Alternativamente, a verificação de redundância pode ser executada apenas em N candidatos a fusão com o maior índice ou N candidatos a fusão com o menor índice.
[299] Alternativamente, a verificação de redundância pode ser executada apenas em alguns dos candidatos a fusão previamente armazenados na lista de candidatos a fusão. Por exemplo, a verificação de redundância pode ser realizada apenas em um candidato a fusão inter-região com um índice maior que um valor limite ou menor que um valor limite, ou em um candidato a fusão derivado de um bloco em uma posição específica. Aqui, a posição específica pode incluir pelo menos um dentre um bloco vizinho esquerdo, um bloco vizinho superior, um bloco vizinho superior direito e um bloco vizinho inferior esquerdo do bloco atual.
[300] A Figura 26 é uma vista que mostra um exemplo em que uma verificação de redundância é executada apenas em alguns dos candidatos a fusão.
[301] Quando se deseja adicionar o candidato a fusão inter-região HmvpCand [j] à lista de candidatos a fusão, uma verificação de redundância pode ser realizada no candidato a fusão inter-região com dois candidatos a fusão mergeCandList [NumMerge-2] e mergeCandList [NumMerge- 1] com os maiores índices. Aqui, NumMerge pode representar o número de candidatos a fusão espacial e candidatos a fusão temporal que estão disponíveis.
[302] Ao contrário do exemplo mostrado no desenho, quando se deseja adicionar um candidato a fusão inter-
região HmvpCand [j] à lista de candidatos a fusão, uma verificação de redundância pode ser realizada no candidato a fusão inter-região com até dois candidatos a fusão tendo o menor índice. Por exemplo, é possível verificar se mergeCandList [0] e mergeCandList [1] são iguais a HmvpCand [j]. Alternativamente, uma verificação de redundância pode ser realizada apenas em candidatos a fusão derivados em uma posição específica. Por exemplo, a verificação de redundância pode ser realizada em pelo menos um dentre um candidato a fusão derivado de um bloco vizinho posicionado no lado esquerdo do bloco atual e um candidato a fusão derivado de um bloco vizinho posicionado no topo do bloco atual. Quando um candidato a fusão derivado em uma posição específica não existe na lista de candidatos a fusão, um candidato a fusão inter-região pode ser adicionado à lista de candidatos a fusão sem ter uma verificação de redundância.
[303] Quando um candidato a fusão igual ao primeiro candidato a fusão inter-região é encontrado e uma verificação de redundância é realizada no segundo candidato a fusão inter-região, a verificação de redundância com um candidato a fusão igual ao primeiro candidato a fusão inter- região pode ser omitido.
[304] A Figura 27 é uma vista que mostra um exemplo em que uma verificação de redundância é omitida para um candidato a fusão específico.
[305] Quando se deseja adicionar um candidato a fusão inter-região HmvpCand[i] com um índice i à lista de candidatos a fusão, uma verificação de redundância é realizada entre o candidato a fusão inter-região e os candidatos a fusão previamente armazenados na lista de candidatos a fusão. Neste ponto, quando um candidato a fusão mergeCandList [j] igual ao candidato a fusão inter-região HmvpCand [i] é encontrado, a verificação de redundância pode ser realizada entre o candidato a fusão inter-região HmvpCand [i-1] tendo o índice i -1 e os candidatos a fusão sem adicionar o candidato a fusão inter- região HmvpCand [i] à lista de candidatos a fusão. Neste ponto, a verificação de redundância entre o candidato a fusão inter- região HmvpCand [i-1] e o candidato a fusão mergeCandList [j] pode ser omitida.
[306] Por exemplo, no exemplo mostrado na Figura 27, é determinado que HmvpCand[i] e mergeCandList[2] são iguais. Consequentemente, HmvpCand[i] não é adicionado à lista de candidatos a fusão e uma verificação de redundância pode ser realizada em HmvpCand[i-1]. Neste ponto, a verificação de redundância entre HvmpCand[i-1] e mergeCandList[2] pode ser omitida.
[307] Quando o número de candidatos a fusão incluídos na lista de candidatos a fusão do bloco atual é menor do que o valor limite, pelo menos um dentre um candidato a fusão em par e um candidato a fusão zero pode ser incluído adicionalmente, além do candidato a fusão inter-região. O candidato a fusão em par significa um candidato a fusão com um valor médio de vetores de movimento de dois ou mais candidatos a fusão como um vetor de movimento, e o candidato a fusão zero significa um candidato a fusão com um vetor de movimento de 0.
[308] Um candidato a fusão pode ser adicionado à lista de candidatos a fusão do bloco atual na seguinte ordem.
[309] Candidato a fusão espacial - Candidato a fusão temporal - Candidato a fusão inter-região - (candidato a fusão inter-região) - Candidato a fusão em par - Candidato a fusão zero
[310] O candidato a fusão espacial significa um candidato a fusão derivado de pelo menos um dentre um bloco vizinho e um bloco não vizinho, e o candidato a fusão temporal significa um candidato a fusão derivado de uma imagem de referência anterior. O candidato a fusão inter-região representa um candidato a fusão inter-região derivado de um bloco codificado/decodificado com um modelo de movimento afim.
[311] A lista de informações de movimento inter- região também pode ser usada no modo de previsão de vetor de movimento avançado. Por exemplo, quando o número de candidatos de previsão de vetor de movimento incluídos em uma lista de candidatos de previsão de vetor de movimento do bloco atual é menor do que um valor limite, um candidato a fusão inter-região incluído na lista de informações de movimento inter-região pode ser definido como um candidato a previsão de vetor de movimento para o bloco atual. Especificamente, o vetor de movimento do candidato a fusão inter-região pode ser definido como um candidato a previsão de vetor de movimento.
[312] Quando qualquer um dentre os candidatos de previsão de vetor de movimento incluídos na lista de candidatos de previsão de vetor de movimento do bloco atual é selecionado, o candidato selecionado pode ser definido como o preditor de vetor de movimento do bloco atual. Depois disso, após um coeficiente residual do vetor de movimento do bloco atual ser decodificado, um vetor de movimento do bloco atual pode ser obtido adicionando o preditor de vetor de movimento e o coeficiente residual do vetor de movimento.
[313] A lista de candidatos de previsão de vetor de movimento do bloco atual pode ser configurada na seguinte ordem.
[314] Candidato a previsão de vetor de movimento espacial - Candidato a previsão de vetor de movimento temporal - Candidato a fusão inter-região - (candidato a fusão afim inter-região) - Candidato a previsão de vetor de movimento zero
[315] O candidato a previsão de vetor de movimento espacial significa um candidato a previsão de vetor de movimento derivado de pelo menos um dentre um bloco vizinho e um bloco não vizinho, e o candidato a previsão de vetor de movimento temporal significa um candidato a previsão de vetor de movimento derivado de uma imagem de referência anterior. O candidato a fusão afim inter-região representa um candidato a previsão de vetor de movimento inter-região derivado de um bloco codificado/decodificado com um modelo de movimento afim. O candidato a previsão de vetor de movimento zero representa um candidato com um valor de vetor de movimento de 0.
[316] Quando um candidato a fusão do bloco atual é selecionado, o vetor de movimento do candidato a fusão selecionado é definido como um vetor de movimento inicial e a previsão de compensação de movimento pode ser realizada para o bloco atual usando um vetor de movimento derivado da adição ou subtração de um vetor de deslocamento para ou do vetor de movimento inicial. Derivar um novo vetor de movimento adicionando ou subtraindo um vetor de deslocamento para ou de um vetor de movimento de um candidato a fusão pode ser definido como um método de codificação de diferença de movimento de fusão.
[317] As informações que indicam quando ou não usar o método de codificação de deslocamento de fusão podem ser sinalizadas por meio de um fluxo de bits. As informações podem ser o sinalizador merge_offset_vector_flag de um bit. Por exemplo, quando o valor de merge_offset_vector_flag é 1, isso indica que o método de codificação de diferença de movimento de fusão é aplicado ao bloco atual. Quando o método de codificação de diferença de movimento de fusão é aplicado ao bloco atual, o vetor de movimento do bloco atual pode ser derivado adicionando ou subtraindo um vetor de deslocamento para ou do vetor de movimento do candidato a fusão. Por exemplo, quando o valor de merge_offset_vector_flag é 0, isso indica que o método de codificação de diferença de movimento de fusão não é aplicado ao bloco atual. Quando o método de codificação de deslocamento de fusão não é aplicado, o vetor de movimento do candidato a fusão pode ser definido como o vetor de movimento do bloco atual.
[318] O sinalizador pode ser sinalizado apenas quando o valor de um sinalizador de salto indicando se um modo de pulo é aplicado for verdadeiro ou quando o valor de um sinalizador de fusão indicando se um modo de fusão é aplicado for verdadeiro. Por exemplo, quando o valor de skip_flag que indica se o modo de salto é aplicado ao bloco atual é 1 ou quando o valor de merge_flag que indica se o modo de fusão é aplicado ao bloco atual é 1, merge_offset_vector_flag pode ser codificado e sinalizado.
[319] Quando é determinado que o método de codificação de deslocamento de fusão é aplicado ao bloco atual, pelo menos uma dentre as informações especificando qualquer um dentre os candidatos a fusão incluídos na lista de candidatos a fusão, informações que indicam a magnitude do vetor de deslocamento e informações que indicam a direção do vetor de deslocamento pode ser sinalizada adicionalmente.
[320] As informações para determinar o número máximo de candidatos a fusão que a lista de candidatos a fusão pode incluir podem ser sinalizadas por meio de um fluxo de bits. Por exemplo, o número máximo de candidatos a fusão que a lista de candidatos a fusão pode incluir pode ser definido como um número inteiro de 6 ou menor.
[321] Quando é determinado que o método de codificação de deslocamento de fusão é aplicado ao bloco atual, apenas o número máximo de candidatos a fusão definido antecipadamente pode ser definido como o vetor de movimento inicial do bloco atual. Ou seja, o número de candidatos a fusão que podem ser usados pelo bloco atual pode ser determinado de forma adaptativa de acordo com se o método de codificação de deslocamento de fusão é aplicado. Por exemplo, quando o valor de merge_offset_vector_flag é definido como 0, o número máximo de candidatos a fusão que podem ser usados pelo bloco atual pode ser definido como M, enquanto que quando o valor de merge_offset_vector_flag é definido como 1, o número máximo de candidatos a fusão que pode ser usado pelo bloco atual pode ser definido como N. Aqui, M denota o número máximo de candidatos a fusão que a lista de candidatos a fusão pode incluir e N denota um número inteiro igual ou menor que M.
[322] Por exemplo, quando M é 6 e N é 2, dois candidatos a fusão com o menor índice entre os candidatos a fusão incluídos na lista de candidatos a fusão podem ser definidos como estando disponíveis para o bloco atual. Consequentemente, um vetor de movimento de um candidato a fusão com um valor de índice de 0 ou um vetor de movimento de um candidato a fusão com um valor de índice de 1 pode ser definido como um vetor de movimento inicial do bloco atual. Quando M e N são iguais (por exemplo, quando M e N são 2), todos os candidatos a fusão incluídos na lista de candidatos a fusão podem ser definidos como estando disponíveis para o bloco atual.
[323] Alternativamente, se um bloco vizinho pode ser usado como um candidato a fusão pode ser determinado com base em se o método de codificação de diferença de movimento de fusão é aplicado ao bloco atual. Por exemplo, quando o valor de merge_offset_vector_flag é 1, pelo menos um dentre um bloco vizinho adjacente ao canto superior direito do bloco atual, um bloco vizinho adjacente ao canto superior esquerdo e um bloco vizinho adjacente ao canto inferior esquerdo pode ser definido como indisponível como um candidato a fusão. Por conseguinte, quando o método de codificação de diferença de movimento de fusão é aplicado ao bloco atual, o vetor de movimento de pelo menos um dentre um bloco vizinho adjacente ao canto superior direito do bloco atual, um bloco vizinho adjacente ao canto superior esquerdo, e um bloco vizinho adjacente ao canto inferior esquerdo não pode ser definido como um vetor de movimento inicial. Alternativamente, quando o valor de merge_offset_vector_flag é 1, um bloco temporariamente vizinho do bloco atual pode ser definido como indisponível como um candidato a fusão.
[324] Quando o método de codificação de diferença de movimento de fusão é aplicado ao bloco atual, ele pode ser configurado para não usar pelo menos um dentre um candidato a fusão em par e um candidato a fusão zero. Consequentemente, quando o valor de merge_offset_vector_flag é 1, pelo menos um dentre o candidato a fusão par e o candidato a fusão zero não pode ser adicionado à lista de candidatos a fusão, embora o número de candidatos a fusão incluídos na lista de candidatos a fusão seja menor que o número máximo.
[325] O vetor de movimento do candidato a fusão pode ser definido para ser vetor de movimento inicial do bloco atual. Neste ponto, quando o número de candidatos a fusão que podem ser usados pelo bloco atual é plural, as informações especificando qualquer um dentre a pluralidade de candidatos a fusão podem ser sinalizadas por meio de um fluxo de bits. Por exemplo, quando o número máximo de candidatos a fusão que a lista de candidatos a fusão pode incluir é maior que 1, as informações merge_idx que indicam qualquer um dentre a pluralidade de candidatos a fusão podem ser sinalizadas por meio de um fluxo de bits. Ou seja, no método de codificação de deslocamento de fusão, um candidato a fusão pode ser especificado por informações merge_idx para especificar qualquer um dentre a pluralidade de candidatos a fusão. O vetor de movimento inicial do bloco atual pode ser definido como o vetor de movimento de um candidato a fusão indicado por merge_idx.
[326] Por outro lado, quando o número de candidatos a fusão que podem ser usados pelo bloco atual é 1, a sinalização de informações para especificar um candidato a fusão pode ser omitida. Por exemplo, quando o número máximo de candidatos a fusão que a lista de candidatos a fusão pode incluir não é maior que 1, a sinalização de informações merge_idx para especificar um candidato a fusão pode ser omitida. Ou seja, no método de codificação de deslocamento de fusão, quando um candidato a fusão é incluído na lista de candidatos a fusão, a codificação de informações merge_idx para especificar o candidato a fusão pode ser omitida e o vetor de movimento inicial pode ser determinado com base no candidato a fusão incluído na lista de candidatos a fusão. O vetor de movimento do candidato a fusão pode ser definido como o vetor de movimento inicial do bloco atual.
[327] Como outro exemplo, após um candidato a fusão do bloco atual ser determinado, pode-se determinar quando ou não aplicar o método de codificação de diferença de movimento de fusão ao bloco atual. Por exemplo, quando o número máximo de candidatos a fusão que a lista de candidatos a fusão pode incluir é maior que 1, as informações merge_idx para especificar qualquer um dentre os candidatos a fusão podem ser sinalizadas. Depois que um candidato a fusão é selecionado com base em merge_idx, merge_offset_vector_flag que indica se o método de codificação de diferença de movimento de fusão é aplicado ao bloco atual ou não pode ser decodificado. A Tabela 4 é uma vista que mostra uma tabela de sintaxe de acordo com a modalidade descrita acima. [TABELA 4] coding_unit (x0, y0, cbWidth, cbHeight, treeType) { Descrito r if (slice_type! = I) { cu_skip_flag[x0][y0] ae(v) if (cu_skip_flag[x0][y0] = = 0) pred_mode_flag ae(v) } if (CuPredMode[x0][y0] = = MODE_INTRA) { if (treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA) { intra_luma_mpm_flag[x0][y0] if (intra_luma_mpm_flag[x0][y0] )
intra_luma_mpm_idx[x0][y0] ae(v) else intra_luma_mpm_remainder[x0][y0] ae(v) } if (treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA) intra_chroma_pred_mode[x0][y0] ae(v) } else { /* MODE_INTER */ if (cu_skip_flag[x0][y0] ) { if (merge_affine_flag[x0][y0] = = 0 && MaxNumMergeCand > 1) { merge_idx[x0][y0] ae(v) merge_offset_vector_flag ae(v) if (merge_idx < 2 && merge_offset_vector_flag) { distance_idx[x0][y0] ae(v) direction_idx[x0][y0] ae(v) } } } else { merge_flag[x0][y0] ae(v) if (merge_flag[x0][y0] ) { if (merge_affine_flag[x0][y0] = = 0 && MaxNumMergeCand > 1) { merge_idx[x0][y0] ae(v) merge_offset_vector_flag ae(v) if (merge_idx < 2 && merge_offset_vector_flag) { distance_idx[x0][y0] ae(v) direction_idx[x0][y0] ae(v) } } } else {
if (slice_type = = B) inter_pred_idc[x0][y0] ae(v) if (sps_affine_enabled_flag && cbWidth >= 16 && cbHeight >= 16) { inter_affine_flag[x0][y0] ae(v) if (sps_affine_type_flag && inter_affine_flag[x0][y0] ) cu_affine_type_flag[x0][y0] ae(v) } }
[328] Como outro exemplo, após um candidato a fusão do bloco atual ser determinado, pode-se determinar se deve ou não aplicar o método de codificação de diferença de movimento de fusão ao bloco atual apenas quando o índice do candidato a fusão determinado for menor do que o número máximo de candidatos a fusão que podem ser usados quando o método de codificação de diferença de movimento de fusão é aplicado. Por exemplo, apenas quando o valor de informações de índice merge_idx é menor do que N, merge_offset_vector_flag que indica se deve ou não aplicar o método de codificação de diferença de movimento de fusão ao bloco atual pode ser codificado e sinalizado. Quando o valor das informações do índice merge_idx é igual ou maior que N, a codificação de merge_offset_vector_flag pode ser omitida. Quando a codificação de merge_offset_vector_flag é omitida, pode-se determinar que o método de codificação de diferença de movimento de fusão não é aplicado ao bloco atual.
[329] Alternativamente, após um candidato a fusão do bloco atual ser determinado, pode-se determinar aplicar ou não o método de codificação de diferença de movimento de fusão ao bloco atual considerando se o candidato a fusão determinado tem informações de movimento bidirecional ou informações de movimento unidirecional. Por exemplo, merge_offset_vector_flag que indica se deve ou não aplicar o método de codificação de diferença de movimento de fusão ao bloco atual pode ser codificado e sinalizado apenas quando o valor de informações de índice merge_idx é menor que N e o candidato a fusão selecionado pelas informações de índice tem informações de movimento bidirecional. Por exemplo, merge_offset_vector_flag que indica se deve ou não aplicar o método de codificação de diferença de movimento de fusão ao bloco atual pode ser codificado e sinalizado apenas quando o valor de informações de índice merge_idx é menor que N e o candidato a fusão selecionado pelas informações de índice tem informações de movimento unidirecional.
[330] Alternativamente, aplicar ou não o método de codificação de diferença de movimento de fusão pode ser determinado com base em pelo menos um dentre o tamanho do bloco atual, o formato do bloco atual e se o bloco atual está em contato com a fronteira de uma unidade de árvore de codificação. Quando pelo menos um dentre o tamanho do bloco atual, o formato do bloco atual e se o bloco atual está em contato com o limite de uma unidade de árvore de codificação não satisfaz uma condição predefinida, a codificação de merge_offset_vector_flag que indica se deve ou não aplicar o método de codificação de diferença de movimento de fusão ao bloco atual pode ser omitida.
[331] Quando um candidato a fusão é selecionado, o vetor de movimento do candidato a fusão pode ser definido como o vetor de movimento inicial do bloco atual. Então, um vetor de deslocamento pode ser determinado pela decodificação de informações que indicam a magnitude do vetor de deslocamento e informações que indicam a direção do vetor de deslocamento. O vetor de deslocamento pode ter um componente de direção horizontal ou um componente de direção vertical.
[332] As informações que indicam a magnitude do vetor de deslocamento podem ser informações de índice que indicam qualquer um dentre os candidatos a magnitude do movimento. Por exemplo, as informações de índice distance_idx que indicam qualquer um dentre os candidatos a magnitude de movimento podem ser sinalizadas através de um fluxo de bits. A Tabela 5 mostra a binarização das informações de índice distance_idx e os valores da variável DistFromMergeMV para determinar a magnitude de um vetor de deslocamento de acordo com distance_idx. [TABELA 5] distance_idx[x][y] binarização DistFromMergeMV[x0] [y0] 0 0 1 1 10 2 2 110 4 3 1110 8 4 11110 16 5 111110 32 6 1111110 64 7 1111111 128
[333] A magnitude de um vetor de deslocamento pode ser derivada dividindo a variável DistFromMergeMV por um valor predefinido. A Equação 5 mostra um exemplo de determinação da magnitude de um vetor de deslocamento. [Equação 5] 𝒂𝒃𝒔(𝒐𝒇𝒇𝒔𝒆𝒕𝑴𝑽) = 𝑫𝒊𝒔𝒕𝑭𝒓𝒐𝒎𝑴𝒆𝒓𝒈𝒆𝑴𝑽 ≪ 𝟐
[334] De acordo com a Equação 5, um valor obtido pela divisão da variável DistFromMegeMV por 4 ou um valor obtido pela variável de deslocamento DistFromMergeMV para a esquerda por 2 pode ser definido como a magnitude de um vetor de deslocamento.
[335] Um número maior de candidatos a magnitude de movimento ou um número menor de candidatos a magnitude de movimento do que o do exemplo mostrado na Tabela 5 pode ser usado, ou uma faixa de candidatos de tamanho de deslocamento de vetor de movimento pode ser definida para ser diferente do exemplo mostrado na Tabela 5. Por exemplo, a magnitude do componente de direção horizontal ou do componente de direção vertical de um vetor de deslocamento pode ser definida para não ser maior que 2 distâncias de amostra. A Tabela 6 mostra a binarização das informações de índice distance_idx e os valores da variável DistFromMergeMV para determinar a magnitude de um vetor de deslocamento de acordo com distance_idx. [TABELA 6] distance_idx[x][y] binarização DistFromMergeMV[x0] [y0] 0 0 1 1 10 2 2 110 4 3 111 8
[336] Alternativamente, uma faixa de candidatos a tamanho de deslocamento de vetor de movimento pode ser definida de forma diferente com base na precisão do vetor de movimento. Por exemplo, quando a precisão do vetor de movimento para o bloco atual é um pel-fracionário, os valores da variável DistFromMergeMV correspondentes aos valores das informações do índice distance_idx podem ser definidos como 1, 2, 4, 8, 16 ou semelhantes. Aqui, o pel-fracionário inclui pelo menos um dentre 1/16 pel, octo-pel, quarto-pel e meio-pel. Por outro lado, quando a precisão do vetor de movimento para o bloco atual é um pel-fracionário, os valores da variável DistFromMergeMV correspondentes aos valores das informações do índice distance_idx podem ser definidos como 4, 8, 16, 32, 64 ou semelhantes. Ou seja, uma tabela referida com o propósito de determinar a variável DistFromMergeMV pode ser definida de forma diferente de acordo com a precisão do vetor de movimento para o bloco atual.
[337] Por exemplo, quando a precisão do vetor de movimento do bloco atual ou um candidato a fusão é um quarto- pel, a variável DistFromMergeMV indicada por distance_idx pode ser derivada usando a Tabela 5. Por outro lado, quando a precisão do vetor de movimento do bloco atual ou um candidato a fusão é um pel inteiro, um valor obtido tomando N vezes (por exemplo, 4 vezes) do valor da variável DistFromMergeMV indicado por distance_idx na Tabela 5 pode ser derivado como um valor da variável DistFromMergeMV.
[338] As informações para determinar uma precisão do vetor de movimento podem ser sinalizadas por meio de um fluxo de bits. Por exemplo, as informações podem ser sinalizadas em um nível de sequência, imagem, fatia ou de bloco. Por conseguinte, a faixa de candidatos a magnitude de movimento pode ser definida de forma diferente de acordo com as informações relacionadas à precisão do vetor de movimento sinalizada através de um fluxo de bits. Alternativamente, a precisão do vetor de movimento pode ser determinada com base no candidato a fusão do bloco atual. Por exemplo, a precisão do vetor de movimento do bloco atual pode ser definida para ser igual à precisão do vetor de movimento do candidato a fusão.
[339] Alternativamente, as informações para determinar uma faixa de pesquisa do vetor de deslocamento podem ser sinalizadas por meio de um fluxo de bits. Pelo menos um dentre o número de candidatos a magnitude de movimento, um valor mínimo entre os candidatos a magnitude de movimento e um valor máximo entre os candidatos a magnitude de movimento podem ser determinados com base na faixa de pesquisa. Por exemplo, o sinalizador merge_offset_vector_flag para determinar uma faixa de pesquisa do vetor de deslocamento pode ser sinalizado por meio de um fluxo de bits. As informações podem ser sinalizadas através de um cabeçalho de sequência, um cabeçalho de imagem ou um cabeçalho de fatia.
[340] Por exemplo, quando o valor de merge_offset_extend_range_flag é 0, a magnitude do vetor de deslocamento pode ser definida para não exceder 2. Consequentemente, o valor máximo de DistFromMergeMV pode ser definido como 8. Por outro lado, quando o valor de merge_offset_extend_range_flag é 1, a magnitude do vetor de deslocamento pode ser definida para não exceder 32 distâncias de amostra. Consequentemente, o valor máximo de DistFromMergeMV pode ser definido como 128.
[341] A magnitude do vetor de deslocamento pode ser determinada usando um sinalizador que indica se a magnitude do vetor de deslocamento é maior do que um valor limite. Por exemplo, o sinalizador distance_flag que indica se a magnitude do vetor de deslocamento é maior do que um valor limite pode ser sinalizado através de um fluxo de bits. O valor limite pode ser 1, 2, 4, 8 ou 16. Por exemplo, quando distance_flag é 1, isso indica que a magnitude do vetor de deslocamento é maior que 4. Por outro lado, quando distance_flag é 0, isso indica que a magnitude do vetor de deslocamento é 4 ou menos.
[342] Quando a magnitude do vetor de deslocamento é maior do que um valor limite, um valor de diferença entre a magnitude do vetor de deslocamento e o valor limite pode ser derivado usando informações de índice distance_idx. Alternativamente, quando a magnitude do vetor de deslocamento é menor ou igual ao valor limite, a magnitude do vetor de deslocamento pode ser determinada usando informações de índice distance_idx. A Tabela 7 é uma tabela de sintaxe que mostra um processo de codificação de distance_flag e distance_idx. [TABELA 7] coding_unit (x0, y0, cbWidth, cbHeight, treeType) { Descrito r if (slice_type! = I) { cu_skip_flag[x0][y0] ae(v) if (cu_skip_flag[x0][y0] = = 0) pred_mode_flag ae(v) } if (CuPredMode[x0][y0] = = MODE_INTRA) { if (treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA) { intra_luma_mpm_flag[x0][y0]
if (intra_luma_mpm_flag[x0][y0] ) intra_luma_mpm_idx[x0][y0] ae(v) else intra_luma_mpm_remainder[x0][y0] ae(v) } if (treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA) intra_chroma_pred_mode[x0][y0] ae(v) } else { /* MODE_INTER */ if (cu_skip_flag[x0][y0] ) { if (merge_affine_flag[x0][y0] = = 0 && MaxNumMergeCand > 1) { merge_idx[x0][y0] ae(v) merge_offset_vector_flag ae(v) if (merge_idx < 2 && merge_offset_vector_flag) { distance_flag[x0][y0] ae(v) distance_idx[x0][y0] direction_idx[x0][y0] ae(v) } } } else { merge_flag[x0][y0] ae(v) if (merge_flag[x0][y0] ) { if (merge_affine_flag[x0][y0] = = 0 && MaxNumMergeCand > 1) { merge_idx[x0][y0] ae(v) merge_offset_vector_flag ae(v) if (merge_idx < 2 && merge_offset_vector_flag) { distance_flag[x0][y0] ae(v) distance_idx[x0][y0] ae(v) direction_idx[x0][y0] ae(v)
} } } else { if (slice_type = = B) inter_pred_idc[x0][y0] ae(v) if (sps_affine_enabled_flag && cbWidth >= 16 && cbHeight >= 16) { inter_affine_flag[x0][y0] ae(v) if (sps_affine_type_flag && inter_affine_flag[x0][y0] ) cu_affine_type_flag[x0][y0] ae(v) } }
[343] A Equação 6 mostra um exemplo de derivação da variável DistFromMergeMV para determinar a magnitude de um vetor de deslocamento usando distance_flag e distance_idx. [Equação 6] 𝑫𝒊𝒔𝒕𝑭𝒓𝒐𝒎𝑴𝒆𝒓𝒈𝒆𝑴𝑽 = 𝑵 ∗ 𝒅𝒊𝒔𝒕𝒂𝒏𝒄𝒆_𝒇𝒍𝒂𝒈 + (𝟏 ≪ 𝒅𝒊𝒔𝒕𝒂𝒏𝒄_𝒊𝒅𝒙)
[344] Na Equação 6, o valor de distance_flag pode ser definido como 1 ou 0. O valor de distance_idx pode ser definido como 1, 2, 4, 8, 16, 32, 64, 128 ou semelhante. N denota um coeficiente determinado por um valor limite. Por exemplo, quando o valor limite é 4, N pode ser definido como
16.
[345] As informações que indicam a direção do vetor de deslocamento podem ser informações de índice que indicam qualquer um dentre os candidatos a direção do vetor. Por exemplo, as informações de índice distance_idx que indicam qualquer um dentre os candidatos a direção do vetor podem ser sinalizadas através de um fluxo de bits. A Tabela 8 mostra a binarização de informações de índice direction_idx e direções de um vetor de deslocamento de acordo com direction_idx. [TABELA 8] direction_idx[ binarização sign[x][y][0] sign[x][y][1] x][y] 0 00 +1 0 1 01 -1 0 2 10 0 +1 3 11 0 -1
[346] Na Tabela 8, o sign[0] indica a direção horizontal e o sign[1] indica a direção vertical. +1 indica que o valor do componente x ou do componente y do vetor de deslocamento é mais (+), e -1 indica que o valor do componente x ou o componente y do vetor de deslocamento é menos (-). A Equação 7 mostra um exemplo de determinação de um vetor de deslocamento com base na magnitude e na direção do vetor de deslocamento. [Equação 7] 𝒐𝒇𝒇𝒔𝒆𝒕𝑴𝑽[𝟎] = 𝒂𝒃𝒔(𝒐𝒇𝒇𝒔𝒆𝒕𝑴𝑽) ∗ 𝒔𝒊𝒈𝒏[𝟎] 𝒐𝒇𝒇𝒔𝒆𝒕𝑴𝑽[𝟏] = 𝒂𝒃𝒔(𝒐𝒇𝒇𝒔𝒆𝒕𝑴𝑽) ∗ 𝒔𝒊𝒈𝒏[𝟏]
[347] Na Equação 7, offsetMV[0] denota o componente de direção vertical do vetor de deslocamento e offsetMV[1] denota o componente de direção horizontal do vetor de deslocamento.
[348] A Figura 28 é uma vista que mostra um vetor de deslocamento de acordo com os valores de distance_idx que indicam uma magnitude de um vetor de deslocamento e direction_idx que indicam uma direção do vetor de deslocamento.
[349] Como mostrado no exemplo da Figura 28, uma magnitude e uma direção de um vetor de deslocamento podem ser determinadas de acordo com os valores de distance_idx e direction_idx. A magnitude máxima do vetor de deslocamento pode ser definida para não exceder um valor limite. Aqui, o valor limite pode ter um valor predefinido no codificador e no decodificador. Por exemplo, o valor limite pode ser de 32 distâncias de amostra. Alternativamente, o valor limite pode ser determinado de acordo com a magnitude do vetor de movimento inicial. Por exemplo, o valor limite para a direção horizontal pode ser definido com base na magnitude do componente de direção horizontal do vetor de movimento inicial e o valor limite para a direção vertical pode ser definido com base na magnitude do componente de direção vertical do vetor de movimento inicial.
[350] Quando um candidato a fusão tem informações de movimento bidirecional, o vetor de movimento L0 do candidato a fusão pode ser definido como vetor de movimento L0 inicial do bloco atual e o vetor de movimento L1 do candidato a fusão pode ser definido como vetor de movimento inicial L1 do bloco atual. Neste ponto, o vetor de deslocamento L0 e o vetor de deslocamento L1 podem ser determinados considerando um valor de diferença de ordem de saída entre a imagem de referência L0 do candidato a fusão e a imagem atual (doravante, referido como valor de diferença L0) e um valor de diferença de ordem de saída entre a imagem de referência L1 do candidato a fusão e a imagem atual (doravante, referido como valor de diferença L1).
[351] Primeiro, quando os sinais do valor de diferença L0 e do valor de diferença L1 são os mesmos, o vetor de deslocamento L0 e o vetor de deslocamento L1 podem ser definidos para serem os mesmos. Por outro lado, quando os sinais do valor de diferença L0 e do valor de diferença L1 são diferentes, o vetor de deslocamento L1 pode ser definido em uma direção oposta ao vetor de deslocamento L0.
[352] A magnitude do vetor de deslocamento L0 e a magnitude do vetor de deslocamento L1 podem ser definidas para serem iguais. Alternativamente, a magnitude do vetor de deslocamento L1 pode ser determinada escalando o vetor de deslocamento L0 com base no valor de diferença L0 e no valor de diferença L1.
[353] Por exemplo, a Equação 8 mostra o vetor de deslocamento L0 e o vetor de deslocamento L1 quando os sinais do valor de diferença L0 e do valor de diferença L1 são os mesmos. [Equação 8] 𝒐𝒇𝒇𝒔𝒆𝒕𝑴𝑽𝑳𝟎[𝟎] = 𝒂𝒃𝒔(𝒐𝒇𝒇𝒔𝒆𝒕𝑴𝑽) ∗ 𝒔𝒊𝒈𝒏[𝟎] 𝒐𝒇𝒇𝒔𝒆𝒕𝑴𝑽𝑳𝟎[𝟏] = 𝒂𝒃𝒔(𝒐𝒇𝒇𝒔𝒆𝒕𝑴𝑽) ∗ 𝒔𝒊𝒈𝒏[𝟏] 𝒐𝒇𝒇𝒔𝒆𝒕𝑴𝑽𝑳𝟏[𝟎] = 𝒂𝒃𝒔(𝒐𝒇𝒇𝒔𝒆𝒕𝑴𝑽) ∗ 𝒔𝒊𝒈𝒏[𝟎] 𝒐𝒇𝒇𝒔𝒆𝒕𝑴𝑽𝑳𝟏[𝟏] = 𝒂𝒃𝒔(𝒐𝒇𝒇𝒔𝒆𝒕𝑴𝑽) ∗ 𝒔𝒊𝒈𝒏[𝟏]
[354] Na Equação 8, offsetMVL0[0] indica o componente de direção horizontal do vetor de deslocamento L0, e offsetMVL0[1] indica o componente de direção vertical do vetor de deslocamento L0. offsetMVL1[0] indica o componente de direção horizontal do vetor de deslocamento L1, e offsetMVL1[1] indica o componente de direção vertical do vetor de deslocamento L1.
[355] A Equação 9 mostra o vetor de deslocamento L0 e o vetor de deslocamento L1 quando os sinais do valor de diferença L0 e do valor de diferença L1 são os diferentes. [Equação 9] 𝒐𝒇𝒇𝒔𝒆𝒕𝑴𝑽𝑳𝟎[𝟎] = 𝒂𝒃𝒔(𝒐𝒇𝒇𝒔𝒆𝒕𝑴𝑽) ∗ 𝒔𝒊𝒈𝒏[𝟎] 𝒐𝒇𝒇𝒔𝒆𝒕𝑴𝑽𝑳𝟎[𝟏] = 𝒂𝒃𝒔(𝒐𝒇𝒇𝒔𝒆𝒕𝑴𝑽) ∗ 𝒔𝒊𝒈𝒏[𝟏]
𝒐𝒇𝒇𝒔𝒆𝒕𝑴𝑽𝑳𝟏[𝟎] = −𝟏 ∗ 𝒂𝒃𝒔(𝒐𝒇𝒇𝒔𝒆𝒕𝑴𝑽) ∗ 𝒔𝒊𝒈𝒏[𝟎] 𝒐𝒇𝒇𝒔𝒆𝒕𝑴𝑽𝑳𝟏[𝟏] = −𝟏 ∗ 𝒂𝒃𝒔(𝒐𝒇𝒇𝒔𝒆𝒕𝑴𝑽) ∗ 𝒔𝒊𝒈𝒏[𝟏]
[356] Mais de quatro candidatos a direção de vetor podem ser definidos. As tabelas 9 e 10 mostram exemplos nos quais oito candidatos a direção de vetor são definidos. [TABELA 9] direction_idx[ binarização sign[x][y][0] sign[x][y][1] x][y] 0 000 +1 0 1 001 -1 0 2 010 0 +1 3 011 0 -1 4 100 +1 +1 5 101 +1 -1 6 110 -1 +1 7 111 -1 -1 [TABELA 10] direction_idx[ binarização sign[x][y][0] sign[x][y][1] x][y] 0 000 +1 0 1 001 -1 0 2 010 0 +1 3 011 0 -1 4 100 +1/2 +1/2 5 101 +1/2 -1/2 6 110 -1/2 +1/2 7 111 -1/2 -1/2
[357] Nas Tabelas 9 e 10, quando os valores absolutos de sign[0] e sign[1] são maiores que 0, indica que o vetor de deslocamento está na direção diagonal. Quando a Tabela 9 é usada, as magnitudes dos componentes do eixo geométrico x e eixo geométrico y do vetor de deslocamento diagonal são definidas para abs(offsetMV), enquanto quando a Tabela 10 é usada, as magnitudes dos componentes do eixo geométrico x e do eixo geométrico y do vetor de deslocamento diagonal são definidos como abs(offsetMV/2).
[358] A Figura 29 é uma vista que mostra um vetor de deslocamento de acordo com os valores de distance_idx que indicam uma magnitude de um vetor de deslocamento e direction_idx que indicam uma direção do vetor de deslocamento.
[359] A Figura 29 (a) é uma vista que mostra um exemplo quando a Tabela 9 é aplicada, e a Figura 29 (b) é uma vista que mostra um exemplo quando a Tabela 10 é aplicada.
[360] As informações para determinar pelo menos um dentre o número e os tamanhos dos candidatos à direção do vetor podem ser sinalizadas por meio de um fluxo de bits. Por exemplo, o sinalizador merge_offset_direction_range_flag para determinar os candidatos a direção do vetor pode ser sinalizado por meio de um fluxo de bits. O sinalizador pode ser sinalizado no nível de sequência, imagem ou fatia. Por exemplo, quando o valor do sinalizador é 0, quatro candidatos a direção de vetor exemplificados na Tabela 8 podem ser usados. Por exemplo, quando o valor do sinalizador é 1, oito candidatos a direção de vetor exemplificados na Tabela 9 podem ser usados.
[361] Alternativamente, pelo menos um dentre o número e tamanhos de candidatos a direção do vetor pode ser determinado com base na magnitude do vetor de deslocamento. Por exemplo, quando o valor da variável DistFromMergeMV para determinar a magnitude do vetor de deslocamento é igual ou menor que um valor limite, oito candidatos a direção de vetor exemplificados na Tabela 9 ou Tabela 10 podem ser usados. Por outro lado, quando o valor da variável DistFromMergeMV é maior do que o valor limite, quatro candidatos a direção de vetor exemplificados na Tabela 8 podem ser usados.
[362] Alternativamente, pelo menos um dentre o número e tamanhos de candidatos de direção do vetor pode ser determinado com base no valor MVx do componente x e valor MVy do componente y do vetor de movimento inicial. Por exemplo, quando a diferença entre MVx e MVy ou o valor absoluto da diferença é menor ou igual a um valor limite, oito candidatos a direção de vetor exemplificados na Tabela 9 ou Tabela 10 podem ser usados. Por exemplo, quando a diferença entre MVx e MVy ou o valor absoluto da diferença é maior que o valor limite, quatro candidatos a direção de vetor exemplificados na Tabela 8 podem ser usados.
[363] O vetor de movimento do bloco atual pode ser derivado adicionando um vetor de deslocamento ao vetor de movimento inicial. A Equação 10 mostra um exemplo de determinação de um vetor de movimento do bloco atual. [Equação 10] 𝒎𝒗𝑳𝟎[𝟎] = 𝒎𝒆𝒓𝒈𝒆𝑴𝑽𝑳𝟎[𝟎] + 𝒐𝒇𝒇𝒔𝒆𝒕𝑴𝑽𝑳𝟎[𝟎] 𝒎𝒗𝑳𝟎[𝟏] = 𝒎𝒆𝒓𝒈𝒆𝑴𝑽𝑳𝟎[𝟏] + 𝒐𝒇𝒇𝒔𝒆𝒕𝑴𝑽𝑳𝟎[𝟏] 𝒎𝒗𝑳𝟏[𝟎] = 𝒎𝒆𝒓𝒈𝒆𝑴𝑽𝑳𝟏[𝟎] + 𝒐𝒇𝒇𝒔𝒆𝒕𝑴𝑽𝑳𝟏[𝟎] 𝒎𝒗𝑳𝟏[𝟏] = 𝒎𝒆𝒓𝒈𝒆𝑴𝑽𝑳𝟏[𝟏] + 𝒐𝒇𝒇𝒔𝒆𝒕𝑴𝑽𝑳𝟏[𝟏]
[364] Na Equação 10, mvL0 denota o vetor de movimento L0 do bloco atual e mvL1 denota o vetor de movimento L1 do bloco atual. mergeMVL0 denota o vetor de movimento inicial L0 do bloco atual (isto é, vetor de movimento L0 de um candidato a fusão), e mergeMVL1 denota o vetor de movimento inicial L1 do bloco atual. [0] indica o componente de direção horizontal do vetor de movimento e [1] indica o componente de direção vertical do vetor de movimento.
[365] Mesmo quando a interprevisão é realizada em cada uma das subunidades após um bloco de codificação ser dividido em uma pluralidade de subunidades, o método de codificação de diferença de movimento de fusão pode ser aplicado. Aqui, realizar a interprevisão pela unidade de subunidade pode incluir pelo menos uma dentre uma técnica de Previsão de Vetor de Movimento Temporal Avançada (ATMVP), uma técnica de Previsão de Vetor de Movimento Temporal Espacial (STMVP) e uma técnica de divisão triangular.
[366] Por exemplo, um vetor de movimento inicial pode ser derivado como segue no método ATMVP.
[367] Em primeiro lugar, um vetor de deslocamento inicial pode ser derivado usando um vetor de movimento de um candidato a fusão derivado de um bloco vizinho adjacente a um bloco de codificação. Além disso, um bloco de deslocamento de um sub-bloco incluído no bloco de codificação pode ser derivado usando o vetor de deslocamento inicial. A Equação 11 mostra a posição do bloco de deslocamento. [Equação 11] (𝒙𝑪𝒐𝒍𝑺𝒃, 𝒚𝑪𝒐𝒍𝑺𝒃) = (𝒙𝑺𝒃 + 𝒔𝒉𝑽𝒆𝒄𝒕𝒐𝒓[𝟎] ≫ 𝟒, 𝒚𝑺𝒃 + 𝒔𝒉𝑽𝒆𝒄𝒕𝒐𝒓[𝟏] ≫ 𝟒)
[368] Na Equação 11, (xColSb, yColSb) denota a posição da amostra superior esquerda de um bloco de deslocamento e (xSb, ySb) denota a posição da amostra superior esquerda de um sub-bloco. shVector denota um vetor de deslocamento.
[369] Quando um bloco de deslocamento é determinado, o vetor de movimento de um bloco colocado na posição igual à do bloco de deslocamento na imagem colocada pode ser definido como o vetor de movimento do sub-bloco. Ou seja, o vetor de movimento de um bloco colocado incluindo uma amostra na posição de (xColSb, yColSb) no bloco colocado pode ser definido como o vetor de movimento de um sub-bloco incluindo uma amostra na posição de (xSb, ySb).
[370] Quando a técnica de divisão triangular é aplicada, um bloco de codificação pode ser dividido em subunidades triangulares. Por exemplo, um bloco de codificação pode ser dividido em duas subunidades por uma linha diagonal conectando os cantos superior esquerdo e inferior direito do bloco de codificação ou uma linha diagonal conectando os cantos superior direito e inferior esquerdo do bloco de codificação.
[371] A Figura 30 é uma vista que mostra padrões de divisão de um bloco de codificação quando uma técnica de divisão triangular é aplicada.
[372] As informações de movimento de cada uma das subunidades triangulares podem ser especificadas por um candidato a fusão. Para este fim, as informações de índice que indicam qualquer um dentre os candidatos a fusão podem ser sinalizadas para cada subunidade. Por exemplo, as informações de índice de merge_1st_idx de uma primeira subunidade podem especificar o candidato a fusão da primeira subunidade e as informações de índice merge_2nd_idx de uma segunda subunidade podem especificar o candidato a fusão da segunda subunidade.
[373] O vetor de movimento inicial de cada uma das subunidades pode ser determinado individualmente. Por exemplo, quando um modelo de movimento afim é aplicado a um bloco de codificação, vetores afins de sub-blocos derivados de vetores de origem afins do bloco de codificação podem ser definidos como vetores de movimento iniciais dos sub-blocos. O vetor de movimento de cada sub-bloco pode ser derivado pela adição ou subtração de um vetor de deslocamento para ou a partir do vetor de movimento inicial.
[374] Quando o método de codificação de diferença de movimento de fusão é aplicado a um bloco de codificação dividido em uma pluralidade de subunidades, a pluralidade de subunidades pode ser configurada para usar o mesmo vetor de deslocamento. Ou seja, o vetor de movimento inicial de cada uma da pluralidade de subunidades pode ser alterado usando o mesmo vetor de deslocamento.
[375] Alternativamente, um bloco de codificação é dividido em uma pluralidade de subunidades e um vetor de deslocamento de cada subunidade pode ser determinado individualmente. Consequentemente, o vetor de deslocamento de pelo menos uma dentre as subunidades pode ser definido para ser diferente dos vetores de deslocamento de outras subunidades.
[376] A Figura 31 é uma vista que mostra um exemplo no qual os vetores de deslocamento de cada uma das subunidades são definidos de forma diferente.
[377] Como mostrado no exemplo da Figura 31, as informações de distance_idx que indica a magnitude do vetor de deslocamento e direction_idx que indica a direção do vetor de deslocamento podem ser codificadas e sinalizadas para cada subunidade.
[378] Alternativamente, a magnitude do vetor de deslocamento pode ser definida para ser a mesma para todas as subunidades e a direção do vetor de deslocamento pode ser definida individualmente para as subunidades. Por exemplo,
pode-se definir compartilhar o valor de distance_idx sinalizado no nível de codificação entre as subunidades, e direction_idx pode ser codificada e sinalizada para cada subunidade.
[379] Alternativamente, a direção do vetor de deslocamento pode ser definida para ser a mesma para todas as subunidades e a magnitude do vetor de deslocamento pode ser definida individualmente para as subunidades. Por exemplo, pode-se definir compartilhar o valor de direction_idx sinalizado no nível de codificação entre as subunidades, e distance_idx pode ser codificada e sinalizada para cada subunidade.
[380] O método de codificação de diferença de movimento de fusão pode ser aplicado apenas a algumas de uma pluralidade de subunidades geradas pela divisão de um bloco de codificação. Por exemplo, quando o bloco atual é dividido em uma primeira subunidade e uma segunda subunidade, o vetor de movimento da primeira subunidade pode ser definido para ser o mesmo que o vetor de movimento do candidato a fusão, e o vetor de movimento da segunda subunidade pode ser derivado adicionando um vetor de deslocamento ao vetor de movimento do candidato a fusão.
[381] Em vez de sinalizar informações para determinar um vetor de deslocamento, o decodificador pode derivar o vetor de deslocamento. Especificamente, o vetor de deslocamento pode ser derivado usando um valor médio para gradientes de direção horizontal e um valor médio para gradientes de direção vertical de amostras de previsão incluídas no sub-bloco.
[382] Aqui, o gradiente pode ser derivado com base em uma diferença entre uma amostra reconstruída correspondente a uma amostra de previsão em uma imagem de referência e uma amostra vizinha adjacente à amostra reconstruída. Por exemplo, o gradiente de direção horizontal pode indicar uma diferença entre uma amostra reconstruída e uma amostra reconstruída vizinha no lado esquerdo e/ou direito, e o gradiente de direção vertical pode indicar uma diferença entre uma amostra reconstruída e uma amostra reconstruída vizinha no topo e/ou lado inferior.
[383] Entre os candidatos a fusão incluídos na lista de candidatos a fusão, um candidato a fusão com um vetor de movimento derivado da adição ou subtração de um vetor de deslocamento para ou do vetor de movimento de um candidato a fusão de referência entre os candidatos a fusão incluídos na lista de candidatos a fusão pode ser adicionado à lista de candidatos a fusão. Um candidato a fusão tendo um vetor de movimento derivado pela adição ou subtração de um vetor de deslocamento para ou do vetor de movimento de um candidato a fusão de referência pode ser referido como um candidato a fusão refinado.
[384] As informações de movimento restantes, excluindo o vetor de movimento do candidato a fusão de refinamento, podem ser definidas para serem as mesmas do candidato a fusão de referência.
[385] A Figura 32 é uma vista que mostra candidatos a vetor de movimento que um candidato a fusão de refinamento pode assumir.
[386] Quando o vetor de movimento de um candidato a fusão de referência é (MvLX[0], MvLX[1]), o vetor de movimento do candidato a fusão de refinamento pode ser derivado adicionando ou subtraindo um deslocamento para ou de pelo menos um dentre o componente x e o componente y do vetor de movimento do candidato a fusão de referência. Por exemplo, o vetor de movimento do candidato a fusão de refinamento pode ser definido como (MvLX[0]+M, MvLX[1]), (MvLX[0]-M, MvLX[1]), (MvLX[0], MvLX[1]+M) ou (MvLX[0], MvLX[1]-M). M denota a magnitude do vetor de deslocamento.
[387] O candidato a fusão de referência pode ser um candidato a fusão com um valor de índice predefinido na lista de candidatos a fusão. Por exemplo, um candidato a fusão com o menor valor de índice (ou seja, um candidato a fusão com um valor de índice de 0) ou um candidato a fusão com o maior valor de índice entre os candidatos a fusão incluídos na lista de candidatos a fusão pode ser definido como uma candidato a fusão de referência. Alternativamente, um candidato a fusão inter-região com o menor valor de índice ou um candidato a fusão inter-região com o maior valor de índice na lista de informações de movimento inter-região pode ser definido como um candidato a fusão de referência.
[388] Alternativamente, um candidato a fusão com o menor valor de índice entre os candidatos a fusão com informações de movimento bidirecional pode ser definido como um candidato a fusão de referência. Ou seja, quando os blocos candidatos são pesquisados sequencialmente, um candidato a fusão bidirecional encontrado primeiro pode ser definido como um candidato a fusão de referência.
[389] Um candidato a fusão básico pode ser selecionado com base no tamanho do bloco atual, formato do bloco atual e se o bloco atual está em contato com a fronteira de uma unidade de árvore de codificação. Por exemplo, quando o bloco atual tem um formato quadrado ou o bloco atual tem um formato não quadrado em que a altura é maior do que a largura, um candidato a fusão com um índice de 0 ou um candidato a fusão derivado de um bloco vizinho posicionado no topo do bloco atual pode ser definido como um candidato a fusão de referência. Por exemplo, quando o bloco atual tem um formato não quadrado do qual a largura é maior que a altura, um candidato a fusão com um índice de 1 ou um candidato a fusão derivado de um bloco vizinho posicionado no lado esquerdo do bloco atual pode ser definido como um candidato a fusão de referência.
[390] Alternativamente, as informações que especificam o candidato a fusão de referência podem ser sinalizadas por meio de um fluxo de bits. As informações podem ser informações de índice especificando qualquer um dentre os candidatos a fusão incluídos na lista de candidatos a fusão.
[391] As informações que indicam quando ou não usar o candidato a fusão de refinamento podem ser sinalizadas por meio de um fluxo de bits. As informações podem ser um sinalizador de 1 bit. Quando o valor do sinalizador é 1, um candidato a fusão refinado gerado com base no candidato a fusão de referência pode ser adicionado à lista de candidatos a fusão. Por outro lado, quando o valor do sinalizador é 0, a lista de candidatos a fusão pode não incluir o candidato a fusão de refinamento.
[392] Alternativamente, quando o número de candidatos a fusão previamente adicionados à lista de candidatos a fusão for menor do que o número máximo de candidatos a fusão que a lista de candidatos a fusão pode incluir, o candidato a fusão de refinamento pode ser adicionado à lista de candidatos a fusão. Aqui, os candidatos a fusão adicionados anteriormente podem incluir pelo menos um dentre um candidato a fusão espacial, um candidato a fusão temporal, um candidato a fusão inter-região e um candidato a fusão par a par. Por exemplo, quando o número de pelo menos um dentre os candidatos a fusão espacial, os candidatos a fusão temporal e os candidatos a fusão entre regiões incluídos na lista de candidatos a fusão for menor ou igual a um valor limite, o candidato a fusão de refinamento pode ser adicionado à lista de candidatos a fusão.
[393] Alternativamente, quando o número de candidatos a fusão previamente adicionados à lista de candidatos a fusão for maior ou igual a um valor limite, o candidato a fusão de refinamento pode ser usado.
[394] O número máximo de candidatos a fusão que a lista de candidatos a fusão pode incluir pode ser definido de forma diferente, dependendo se o candidato a fusão de refinamento é usado ou não. Por exemplo, quando está definido para não usar o candidato a fusão de refinamento, o número máximo de candidatos a fusão que a lista de candidatos a fusão pode incluir pode ser definido como N, enquanto quando é definido para usar o candidato a fusão de refinamento, o número máximo dos candidatos a fusão que a lista de candidatos a fusão pode incluir podem ser definidos como N + n.
[395] Um candidato a fusão de refinamento pode ter um índice maior do que os candidatos a fusão previamente adicionados à lista de candidatos a fusão. Por exemplo, a Tabela 11 mostra um exemplo de configuração de uma lista de candidatos a fusão. [TABELA 11] mergeCand[0]
mergeCand[1] mergeCand[2] mergeCand[3] mergeCand[4] mergeCand[5] mergeCand[6]: Refinar candidato a fusão do qual o vetor de movimento é (mvLx[0]+M, mvLx[1]) mergeCand[7]: Refinar candidato a fusão do qual o vetor de movimento é (mvLx[0]-M, mvLx[1]) mergeCand[8]: Refinar candidato a fusão do qual o vetor de movimento é (mvLx[0], mvLx[1]+M) mergeCand[9]: Refinar candidato a fusão do qual o vetor de movimento é (mvLx[0], mvLx[1]-M)
[396] Na Tabela 11, mergeCand[X] denota um candidato a fusão com um índice de X. mvLx[0] denota o vetor de movimento do componente x do candidato a fusão de referência e mvLx[1] denota o vetor de movimento do componente y do candidato a fusão de referência. Por exemplo, quando o candidato a fusão de referência é mergeCand[0], mvLx[0] e mvLx[1] podem indicar o vetor de movimento de mergeCand[0].
[397] A magnitude M do vetor de deslocamento pode ser predefinida no codificador e no decodificador. Por exemplo, a magnitude M do vetor de deslocamento pode ser definida como um número inteiro menor ou igual a 4, como 1 ou 4.
[398] Alternativamente, as informações para determinar um vetor de deslocamento podem ser sinalizadas por meio de um fluxo de bits. As informações podem ser sinalizadas em um nível de sequência, imagem, fatia ou de bloco. Por exemplo, o vetor de deslocamento pode ser determinado usando pelo menos uma dentre as informações de distance_idx para determinar a magnitude do vetor de deslocamento e as informações de direction_idx para determinar a direção do vetor de deslocamento descrito acima.
[399] Como mostrado no exemplo da Tabela 11, ao menos um candidato a fusão de refinamento derivado com base no candidato a fusão de referência pode ser adicionado à lista de candidatos a fusão. Quando há um candidato a fusão com informações de movimento iguais às do candidato a fusão de refinamento entre os candidatos a fusão adicionados anteriormente, o candidato a fusão de refinamento não pode ser adicionado à lista de candidatos a fusão. Por exemplo, quando um candidato a fusão de refinamento derivado com base no candidato a fusão de referência mergeCand[0] é o mesmo que qualquer um dentre os candidatos a fusão de mergeCand[1] para mergeCand[5], o candidato a fusão de refinamento não pode ser adicionado à lista de candidatos a fusão.
[400] Alternativamente, quando há um candidato a fusão com informações de movimento iguais às do candidato a fusão de refinamento, o candidato a fusão pode ser derivado novamente alterando o vetor de deslocamento ou reconfigurando um candidato a fusão com informações de movimento iguais às do candidato a fusão de refinamento como o candidato a fusão de refinamento. Por exemplo, quando as informações de movimento do candidato a fusão de refinamento mergeCand[6] derivado com base no candidato a fusão de referência mergeCand[0] é a mesma que a do candidato a fusão mergeCand[2], o vetor de movimento do candidato a fusão de refinamento mergeCand[6] pode ser alterado para um valor obtido pela adição ou subtração de um vetor de deslocamento para ou do vetor de movimento do candidato a fusão [2]. Por exemplo, o vetor de movimento de mergeCand[6] pode ser alterado de (mergeCand[0]_mxLx[0]+M, mergeCand[0]_mvLx[1]) para (mergeCand[2]_mxLx[0]+M, mergeCand[2]_mvLx[1]). Aqui, mergeCand[X] _mvLx denota um vetor de movimento de um candidato a fusão com um índice de X.
[401] Como outro exemplo, um vetor de deslocamento pode ser determinado usando uma lista de deslocamento de refinamento de fusão incluindo pelo menos um candidato a deslocamento de fusão. Quando um candidato a fusão especificado pelas informações de índice do bloco atual é um candidato a fusão de referência, o vetor de deslocamento pode ser determinado usando a lista de deslocamento de refinamento de fusão. Além disso, o vetor de movimento do bloco atual pode ser derivado adicionando ou subtraindo o vetor de deslocamento para ou do vetor de movimento do candidato a fusão. O candidato a fusão de referência pode ser um candidato a fusão com um valor de índice predefinido na lista de candidatos a fusão. Por exemplo, entre os candidatos a fusão incluídos na lista de candidatos a fusão, um candidato a fusão com o menor valor de índice (ou seja, um candidato a fusão com um valor de índice de 0) ou um candidato a fusão com o maior valor de índice pode ser definido como o candidato a fusão de referência. Alternativamente, um candidato a fusão inter-região com o menor valor de índice ou um candidato a fusão inter-região com o maior valor de índice na lista de informações de movimento inter-região pode ser definido como o candidato a fusão de referência.
[402] A Figura 33 é uma vista que mostra a configuração de uma lista de deslocamento de refinamento de fusão.
[403] Na Figura 33, presume-se que o candidato a fusão de referência é um candidato a fusão com um índice de 6.
[404] Quando o índice de um candidato a fusão especificado pelas informações de índice merge_idx indicando qualquer um dentre os candidatos a fusão não for 6, o vetor de movimento do candidato a fusão pode ser definido como o vetor de movimento do bloco atual.
[405] Por outro lado, quando o índice de um candidato a fusão especificado pelas informações de índice merge_idx é 6, um vetor de deslocamento pode ser derivado usando a lista de deslocamento de refinamento de fusão. As informações de índice MrgOffset_idx especificando qualquer um dentre os candidatos de deslocamento de fusão incluídos na lista de deslocamento de refinamento de fusão podem ser sinalizadas por meio de um fluxo de bits.
[406] Quando o vetor de deslocamento é especificado, o vetor de movimento do bloco atual pode ser derivado adicionando ou subtraindo o vetor de deslocamento para ou do vetor de movimento do candidato a fusão de referência.
[407] A lista de deslocamento de refinamento de fusão pode incluir pelo menos um candidato a deslocamento de fusão. Por exemplo, o número de candidatos a deslocamento de fusão que a lista de deslocamento de refinamento de fusão inclui pode ser 4, 8 ou 16.
[408] A Figura 34 e 35 são vistas que mostram vetores de deslocamento especificados por candidatos a deslocamento de fusão.
[409] A Figura 34 mostra um exemplo no qual o número de candidatos a deslocamento de fusão é 8, e a Figura 35 mostra um exemplo no qual o número de candidatos a deslocamento de fusão é 16.
[410] Como mostrado no exemplo da Figura 34 (a), vetores de deslocamento indicados pelos candidatos a deslocamento de fusão podem ser definidos de modo que o valor absoluto do vetor de movimento da direção horizontal e/ou o valor absoluto do vetor de movimento da direção vertical pode ter um valor fixo. Alternativamente, como mostrado no exemplo da Figura 35, vetores de deslocamento indicados por candidatos a deslocamento de fusão com um índice menor do que um valor limite entre os candidatos a deslocamento de fusão podem ser definidos de modo que o valor absoluto do vetor de movimento da direção horizontal e/ou o valor absoluto do vetor de movimento da direção vertical pode ter um primeiro valor e vetores de deslocamento indicados pelos outros candidatos a deslocamento de fusão podem ser definidos de modo que o valor absoluto do vetor de movimento da direção horizontal e/ou o valor absoluto do vetor de movimento da direção vertical possa ter um segundo valor.
[411] Alternativamente, conforme mostrado na Figura 34 (b), vetores de deslocamento indicados pelos candidatos a deslocamento de fusão podem ser definidos de modo que a soma do valor absoluto do vetor de movimento da direção horizontal e o valor absoluto do vetor de movimento da direção vertical pode ter um valor fixo.
[412] Uma pluralidade de candidatos a fusão de referência pode ser definida. Por exemplo, entre os candidatos a fusão incluídos na lista de candidatos a fusão, dois candidatos a fusão com o menor índice podem ser definidos como candidatos a fusão de referência. Consequentemente, quando o índice de um candidato a fusão especificado pelas informações de índice merge_idx é 0 ou 1, um vetor de deslocamento pode ser derivado usando a lista de deslocamento de refinamento de fusão. Alternativamente, um candidato a fusão com o menor valor de índice entre os candidatos a fusão incluídos na lista de candidatos a fusão e um candidato a fusão com o maior índice entre os candidatos a fusão incluídos na lista de candidatos a fusão inter-região pode ser definido como candidatos a fusão de referência.
[413] No modo de previsão de vetor de movimento avançado, o vetor de movimento do bloco atual pode ser derivado pela adição de um vetor de diferença de movimento a um vetor de previsão de movimento. O vetor de previsão de movimento do bloco atual pode ser determinado com base em uma lista de candidatos de previsão de vetor de movimento incluindo pelo menos um candidato a vetor de previsão de movimento. Por exemplo, qualquer um dentre os candidatos a vetor de previsão de movimento pode ser definido como o vetor de previsão de movimento do bloco atual.
[414] O candidato a previsão do vetor de movimento pode ser derivado com base em pelo menos um dentre um bloco vizinho espacialmente do bloco atual e um bloco vizinho temporalmente do bloco atual.
[415] A Figura 36 é uma vista que mostra blocos candidatos usados para derivar candidatos a previsão de vetor de movimento.
[416] O bloco espacialmente vizinho pode incluir blocos vizinhos superiores posicionados no topo do bloco atual e blocos vizinhos esquerdos posicionados no lado esquerdo do bloco atual. Os blocos vizinhos superiores podem incluir pelo menos um dentre o bloco B0 incluindo uma amostra na posição de
(xCb+CbW, yCb-1), bloco B1 incluindo uma amostra na posição de (xCb+CbW-1, yCb-1), bloco B2 incluindo uma amostra na posição de (xCb-1, yCb-1), e o bloco B3 incluindo uma amostra na posição de (xCb, yCb-1). Aqui, (xCb, yCb) denota a posição da amostra superior esquerda do bloco atual e CbW denota a largura do bloco atual. Os blocos vizinhos esquerdo podem incluir pelo menos um dentre o bloco A0 incluindo uma amostra na posição de (xCb-1, yCb+CbH), bloco A1 incluindo uma amostra na posição de (xCb-1, yCb+CbH-1), bloco A2 incluindo uma amostra na posição de (xCb-1, yCb). Aqui CbH denota a altura do bloco atual.
[417] O bloco temporariamente vizinho pode incluir pelo menos um dentre o bloco C0 incluindo uma amostra no centro de um bloco tendo uma posição e um tamanho iguais aos do bloco atual em um bloco colocado, e o bloco C1 incluindo uma amostra adjacente ao canto inferior direito do bloco.
[418] O número máximo de candidatos a previsão de vetor de movimento que a lista de candidatos a previsão de vetor de movimento pode incluir pode ser dois. A sequência de derivação dos candidatos a previsão de vetor de movimento é conforme descrito abaixo.
[419] 1. Quando pelo menos um dentre o bloco vizinho esquerdo A0 e o bloco vizinho esquerdo A1 está disponível, o vetor de movimento do bloco disponível é definido como um candidato a previsão de vetor de movimento.
[420] 2. Quando pelo menos um dentre o bloco vizinho superior B0, bloco vizinho superior B1 e bloco vizinho superior B2 está disponível, o vetor de movimento do bloco disponível é definido como um candidato a previsão de vetor de movimento.
[421] 3. Quando um bloco temporalmente vizinho está disponível, um vetor de movimento temporal é definido como um candidato a previsão de vetor de movimento.
[422] 4. Um vetor de movimento zero é definido como candidato a previsão de vetor de movimento.
[423] Alternativamente, quando o número de candidatos a previsão de vetor de movimento derivados na sequência de 1 a 3 é menor do que dois, um vetor de movimento incluído na lista de informações de movimento inter-região pode ser definido como um candidato a previsão de vetor de movimento. Quando a lista de informações de movimento inter- região está disponível, os candidatos a previsão de vetor de movimento podem ser derivados na sequência descrita abaixo.
[424] 1. Quando pelo menos um dentre o bloco vizinho esquerdo A0 e o bloco vizinho esquerdo A1 está disponível, o vetor de movimento do bloco disponível é definido como um candidato a previsão de vetor de movimento.
[425] 2. Quando pelo menos um dentre o bloco vizinho superior B0, bloco vizinho superior B1 e bloco vizinho superior B2 está disponível, o vetor de movimento do bloco disponível é definido como um candidato a previsão de vetor de movimento.
[426] 3. Quando um bloco temporalmente vizinho está disponível, um vetor de movimento temporal é definido como um candidato a previsão de vetor de movimento.
[427] 4. Um vetor de movimento incluído na lista de informações de movimento inter-região é definido como um candidato a previsão de vetor de movimento.
[428] 5. Um vetor de movimento zero é definido como candidato a previsão de vetor de movimento.
[429] Um candidato a previsão de vetor de movimento tendo um vetor de movimento derivado pela adição ou subtração de um vetor de deslocamento para ou do vetor de movimento de um candidato a previsão de vetor de movimento de referência pode ser adicionado à lista de candidatos a previsão do vetor de movimento. O candidato a previsão de vetor de movimento tendo um vetor de movimento derivado pela adição ou subtração de um vetor de deslocamento para ou do vetor de movimento de um candidato a previsão de vetor de movimento de referência pode ser referido como um candidato a previsão do vetor de movimento de refinamento.
[430] A Figura 37 é uma vista que mostra candidatos a vetor de movimento que podem ser definidos como um candidato a previsão de vetor de movimento de refinamento.
[431] Quando o vetor de movimento de um candidato a previsão de vetor de movimento de referência é (MvLX[0], MvLX[1]), o vetor de movimento do candidato a previsão do vetor de movimento de refinamento pode ser derivado adicionando ou subtraindo um deslocamento para ou de pelo menos um dentre o componente x e o componente y do vetor de movimento do candidato a previsão do vetor de movimento de referência. Por exemplo, o vetor de movimento do candidato a previsão do vetor de movimento de refinamento pode ser definido como (MvpLX[0]+M, MvpLX[1]), (MvpLX[0]-M, MvpLX[1]), (MvpLX[0], MvpLX[1]+M) ou (MvpLX[0], MvpLX[1]-M). M denota a magnitude do vetor de deslocamento.
[432] A magnitude M do vetor de deslocamento pode ser predefinida no codificador e no decodificador. Por exemplo, a magnitude M do vetor de deslocamento pode ser definida como um número inteiro menor ou igual a 4, como 1 ou 4.
[433] Alternativamente, as informações para determinar um vetor de deslocamento podem ser sinalizadas por meio de um fluxo de bits. As informações podem ser sinalizadas em um nível de sequência, imagem, fatia ou de bloco. Por exemplo, o vetor de deslocamento pode ser determinado usando pelo menos uma dentre as informações de distance_idx para determinar a magnitude do vetor de deslocamento e as informações de direction_idx para determinar a direção do vetor de deslocamento descrito acima.
[434] O candidato a previsão de vetor de movimento de referência pode ser um candidato a previsão de vetor de movimento tendo um valor de índice predefinido na lista de candidatos a previsão de vetor de movimento. Por exemplo, entre os candidatos a previsão de vetor de movimento incluídos na lista de candidatos a previsão de vetor de movimento, um candidato a previsão de vetor de movimento tendo um valor de índice de 0 ou um candidato a previsão de vetor de movimento tendo um valor de índice de 1 pode ser definido como o candidato a previsão de vetor de movimento de referência.
[435] Como outro exemplo, um vetor de deslocamento pode ser determinado usando uma lista de deslocamento de refinamento de fusão incluindo pelo menos um candidato a deslocamento de vetor de previsão. Quando um candidato a previsão de vetor de movimento especificado pelas informações de índice do bloco atual é um candidato a previsão de vetor de movimento de referência, o vetor de deslocamento pode ser determinado usando a lista de deslocamento de refinamento do vetor de previsão. Além disso, o vetor de previsão de movimento do bloco atual pode ser derivado adicionando ou subtraindo o vetor de deslocamento para ou do vetor de movimento do candidato a previsão do vetor de movimento. O candidato a previsão de vetor de movimento de referência pode ser um candidato a previsão de vetor de movimento tendo um valor de índice predefinido na lista de candidatos a previsão de vetor de movimento. Por exemplo, entre os candidatos a previsão de vetor de movimento incluídos na lista de candidatos a previsão de vetor de movimento, um candidato a previsão de vetor de movimento tendo o menor valor de índice ou um candidato a previsão de vetor de movimento tendo o maior valor de índice pode ser definido como o candidato a previsão do vetor de movimento de referência.
[436] Quando o vetor de deslocamento é calculado usando a lista de refinamento de deslocamento de vetor de previsão, o número máximo de candidatos a vetor de previsão que a lista de candidatos a vetor de previsão pode incluir pode ser definido para um valor maior que 2.
[437] A Figura 38 é uma vista que mostra a configuração de uma lista de deslocamento de refinamento de vetor de previsão.
[438] Na Figura 38, presume-se que o candidato a vetor de previsão de referência é um candidato a vetor de previsão com um índice de 2.
[439] Quando o índice de um candidato a vetor de previsão especificado pelas informações de índice AMVPcand_idx indicando qualquer um dentre os candidatos a vetor de previsão não for 2, o vetor de movimento do candidato a vetor de previsão pode ser definido como o vetor de previsão de movimento do bloco atual.
[440] Por outro lado, quando o índice de um candidato a vetor de previsão especificado pelas informações de índice AMVPcand_idx é 2, um vetor de deslocamento pode ser derivado usando a lista de deslocamento de refinamento de vetor de previsão. As informações de índice AMVPOffset_idx especificando qualquer um dentre os candidatos a deslocamento do vetor de previsão incluídos na lista de deslocamento de refinamento do vetor de previsão podem ser sinalizadas por meio de um fluxo de bits.
[441] Quando o vetor de deslocamento é especificado, o vetor de previsão de movimento do bloco atual pode ser derivado adicionando ou subtraindo o vetor de deslocamento para ou do vetor de movimento do candidato a vetor de previsão de referência.
[442] Mesmo quando o bloco de codificação é codificado com base no modelo de movimento afim, uma técnica de refinamento de um vetor de movimento pode ser usada. Por exemplo, quando o modo de previsão de vetor de movimento avançado afim é aplicado, vetores de origem afins do bloco de codificação podem ser derivados adicionando um vetor de diferença de origem afins a um vetor de previsão de origem afim. Aqui, o vetor de previsão de origem afim pode ser derivado com base em um vetor de origem afim de um bloco espacialmente vizinho ou um bloco temporalmente vizinho do bloco de codificação. O vetor de diferença de origem afim pode ser determinado com base nas informações sinalizadas de um fluxo de bits. Neste ponto, o mesmo vetor de diferença de origem afim pode ser aplicado a todos os pontos de controle. Alternativamente, as informações para determinar o vetor de origem afim podem ser sinalizadas para cada ponto de controle.
[443] Quando um vetor afim para um sub-bloco é derivado com base nos vetores de origem afins do bloco de codificação, o vetor afim pode ser definido como um vetor de movimento inicial e, em seguida, um vetor de deslocamento pode ser derivado. O vetor de movimento de cada sub-bloco pode ser derivado pela adição ou subtração de um vetor de deslocamento ao ou do vetor de movimento inicial.
[444] Em vez de sinalizar informações para determinar um vetor de deslocamento, o decodificador pode derivar o vetor de deslocamento. Especificamente, o vetor de deslocamento pode ser derivado usando um valor médio para gradientes de direção horizontal e um valor médio para gradientes de direção vertical de amostras de previsão incluídas no sub-bloco.
[445] A intraprevisão é para prever um bloco atual usando amostras reconstruídas que foram codificadas/decodificadas na vizinhança do bloco atual. Neste ponto, as amostras reconstruídas antes de um filtro no circuito ser aplicado podem ser usadas para intraprevisão do bloco atual.
[446] A técnica de intraprevisão inclui a intraprevisão baseada em matriz e intraprevisão geral considerando a direcionalidade em relação às amostras reconstruídas vizinhas. As informações que indicam a técnica de interprevisão do bloco atual podem ser sinalizadas por meio de um fluxo de bits. As informações podem ser um sinalizador de 1 bit. Alternativamente, a técnica de intraprevisão do bloco atual pode ser determinada com base em pelo menos um dentre a localização, o tamanho e o formato do bloco atual ou com base em uma técnica de intraprevisão de um bloco vizinho. Por exemplo, quando o bloco atual existe através de uma fronteira de imagem, ele pode ser configurado para não aplicar a previsão intraprevisão baseada em matriz ao bloco atual.
[447] A intraprevisão com base em matriz de intraprevisão é um método de aquisição de um bloco de previsão do bloco atual por um codificador e um decodificador com base em um produto de matriz entre uma matriz armazenada anteriormente e amostras reconstruídas na vizinhança do bloco atual. As informações para especificar qualquer um dentre uma pluralidade de matrizes armazenadas podem ser sinalizadas por meio de um fluxo de bits. O decodificador pode determinar uma matriz para a intraprevisão do bloco atual com base nas informações e no tamanho do bloco atual.
[448] A intraprevisão geral é um método de aquisição de um bloco de previsão para o bloco atual com base em um modo de intraprevisão não angular ou um modo de intraprevisão angular.
[449] Uma imagem residual derivada pode ser derivada subtraindo um vídeo de previsão de um vídeo original. Nesse ponto, quando o vídeo residual é alterado para o domínio da frequência, a qualidade subjetiva do vídeo não é significativamente reduzida, embora os componentes de alta frequência entre os componentes de frequência sejam removidos. Consequentemente, quando os valores dos componentes de alta frequência são convertidos para pequenos ou os valores dos componentes de alta frequência são definidos como 0, há um efeito de aumento da eficiência de compressão sem gerar distorção visual significativa. Ao refletir esta característica, o bloco atual pode ser transformado para decompor um vídeo residual em componentes de frequência bidimensionais. A transformada pode ser realizada usando uma técnica de transformada, como Transformada Discreta de Cosseno (DCT) ou Transformada Discreta de Seno (DST).
[450] Depois que o bloco atual é transformado usando DCT ou DST, o bloco atual transformado pode ser transformado novamente. Neste ponto, a transformada baseada em DCT ou DST pode ser definida como uma primeira transformada, e transformar novamente um bloco ao qual a primeira transformada é aplicada pode ser definido como uma segunda transformada.
[451] A primeira transformada pode ser realizada usando qualquer um dentre uma pluralidade de candidatos a núcleo de transformada. Por exemplo, a primeira transformada pode ser realizada usando qualquer uma dentre DCT2, DCT8 ou DCT7.
[452] Diferentes núcleos de transformada podem ser usados para a direção horizontal e a direção vertical. As informações que indicam a combinação de um núcleo de transformada da direção horizontal e um núcleo de transformada da direção vertical podem ser sinalizadas através de um fluxo de bits.
[453] As unidades para realizar a primeira transformada e a segunda transformada podem ser diferentes. Por exemplo, a primeira transformada pode ser realizada em um bloco 8 × 8 e a segunda transformada pode ser realizada em um sub-bloco de tamanho 4 × 4 entre o bloco 8 × 8 transformado. Neste ponto, os coeficientes de transformada das regiões residuais que não foram realizados na segunda transformada podem ser definidos como 0.
[454] Alternativamente, a primeira transformada pode ser realizada em um bloco 4 × 4 e a segunda transformada pode ser realizada em uma região de tamanho 8 × 8 incluindo o bloco 4 × 4 transformado.
[455] As informações que indicam se a segunda transformada é aplicada ou não podem ser sinalizadas por meio de um fluxo de bits.
[456] O decodificador pode realizar uma transformada inversa da segunda transformada (uma segunda transformada inversa) e pode realizar uma transformada inversa da primeira transformada (uma primeira transformada inversa) em um resultado da transformada inversa. Como resultado da realização da segunda transformada inversa e da primeira transformada inversa, os sinais residuais para o bloco atual podem ser adquiridos.
[457] A quantização é para reduzir a energia de um bloco, e o processo de quantização inclui um processo de divisão de um coeficiente de transformada por um valor constante específico. O valor constante pode ser derivado por um parâmetro de quantização e o parâmetro de quantização pode ser definido como um valor entre 1 e 63.
[458] Quando o codificador realiza transformada e quantização, o decodificador pode adquirir um bloco residual por meio de quantização inversa e transformada inversa. O decodificador pode adquirir um bloco reconstruído para o bloco atual adicionando um bloco de previsão e o bloco residual.
[459] Quando um bloco reconstruído do bloco atual é adquirido, a perda de informações que ocorre no processo de quantização e codificação pode ser reduzida por meio de filtragem em circuito. Um filtro no circuito pode incluir pelo menos um dentre um filtro de desbloqueio, uma unidade de filtro de deslocamento adaptativo (SAO) e um filtro de circuito adaptativo (ALF).
[460] A aplicação das modalidades descritas acima com foco em um processo de decodificação ou um processo de codificação para um processo de codificação ou um processo de decodificação está incluída no escopo da presente revelação. A alteração das modalidades descritas em uma ordem predeterminada em uma ordem diferente da ordem descrita também está incluída no escopo da presente revelação.
[461] Embora as modalidades acima tenham sido descritas com base em uma série de etapas ou fluxogramas, isso não limita a ordem da série temporal da presente revelação e pode ser realizada simultaneamente ou em uma ordem diferente, conforme necessário. Além disso, cada um dos componentes (por exemplo, unidades, módulos, etc.) que constituem o diagrama de blocos nas modalidades descritas acima podem ser implementados como um dispositivo de hardware ou software, ou uma pluralidade de componentes podem ser combinados para serem implementados como um único dispositivo de hardware ou software. As modalidades descritas acima podem ser implementadas na forma de comandos de programa que podem ser executados por meio de vários componentes de computador e gravados em uma mídia de gravação legível por computador. A mídia de gravação legível por computador pode incluir comandos de programa, arquivos de dados, estruturas de dados e semelhantes, independentemente ou em combinação. A mídia de gravação legível por computador inclui, por exemplo, mídia magnética, como um disco rígido, um disquete e uma fita magnética, mídia de gravação óptica, como um CD-ROM e um DVD, mídia magneto-óptica, como um disco flexível, e dispositivos de hardware especialmente configurados para armazenar e executar comandos de programa, como ROM, RAM, memória flash e semelhantes. Os dispositivos de hardware descritos acima podem ser configurados para operar usando um ou mais módulos de software para realizar o processo da presente revelação e vice-versa.
[462] A presente revelação pode ser aplicada a um dispositivo eletrônico que codifica e decodifica um vídeo.

Claims (10)

REIVINDICAÇÕES
1. MÉTODO DE DECODIFICAÇÃO DE VÍDEO, caracterizado por compreender as etapas de: determinar se um método de codificação de diferença de movimento de fusão é aplicado a um bloco atual gerar uma lista de candidatos a fusão para o bloco atual; especificar um candidato a fusão para o bloco atual com base na lista de candidatos a fusão; e derivar um vetor de movimento para o bloco atual com base no candidato a fusão, em que quando o método de codificação de diferença de movimento de fusão é aplicado ao bloco atual, o vetor de movimento do bloco atual é derivado pela adição de um vetor de deslocamento a um vetor de movimento do candidato a fusão, quando o número máximo de candidatos a fusão que a lista de candidatos a fusão pode incluir é plural, o candidato a fusão do bloco atual é selecionado com base em informações de índice decodificadas de um fluxo de bits indicando qualquer um dentre os candidatos a fusão, e quando o número máximo é 1, o candidato a fusão é determinado sem decodificar as informações de índice.
2. MÉTODO, de acordo com a reivindicação 1, caracterizado pela magnitude do vetor de deslocamento ser determinada com base nas primeiras informações de índice que especificam um dentre os candidatos de magnitude de movimento.
3. MÉTODO, de acordo com a reivindicação 2, caracterizado por pelo menos um dentre um valor máximo e um valor mínimo dos candidatos a magnitude de movimento ser definido de forma diferente de acordo com um valor de um sinalizador que indica valores numéricos dos candidatos a magnitude de movimento, em que o sinalizador é sinalizado a um nível de imagem.
4. MÉTODO, de acordo com a reivindicação 2, caracterizado por pelo menos um dentre um valor máximo e um valor mínimo dos candidatos a magnitude de movimento ser definido de forma diferente de acordo com a precisão do vetor de movimento para o bloco atual.
5. MÉTODO, de acordo com qualquer uma das reivindicações 2 a 4, caracterizado pela direção do vetor de deslocamento ser determinada com base nas segundas informações de índice que especificam um dentre os candidatos de direção de vetor.
6. MÉTODO DE CODIFICAÇÃO DE VÍDEO, caracterizado por compreender as etapas de: determinar se um método de codificação de diferença de movimento de fusão é aplicado a um bloco atual gerar uma lista de candidatos a fusão para o bloco atual; especificar um candidato a fusão para o bloco atual com base na lista de candidatos a fusão; e derivar um vetor de movimento para o bloco atual com base no candidato a fusão, em que quando o método de codificação de diferença de movimento de fusão é aplicado ao bloco atual, o vetor de movimento do bloco atual é derivado pela adição de um vetor de deslocamento a um vetor de movimento do candidato a fusão, quando o número máximo de candidatos a fusão que a lista de candidatos a fusão pode incluir for plural, as informações de índice que indicam o candidato a fusão do bloco atual dentre os candidatos a fusão são codificadas, e quando o número máximo for 1, a codificação das informações do índice é omitida.
7. MÉTODO, de acordo com a reivindicação 6, caracterizado por compreender adicionalmente a etapa de codificação das primeiras informações de índice para especificar um candidato a magnitude de movimento que indica uma magnitude do vetor de deslocamento entre uma pluralidade de candidatos de magnitude de movimento.
8. MÉTODO, de acordo com a reivindicação 7, caracterizado por compreender adicionalmente a etapa de codificar um sinalizador que indica valores numéricos dos candidatos a magnitude de movimento, em que pelo menos um dentre um valor máximo e um valor mínimo dos candidatos a magnitude de movimento é definido de forma diferente de acordo com um valor de sinalizador, em que o sinalizador é codificado a um nível de imagem.
9. MÉTODO, de acordo com a reivindicação 7, caracterizado por pelo menos um dentre um valor máximo e um valor mínimo dos candidatos a magnitude de movimento ser definido de forma diferente de acordo com a precisão do vetor de movimento para o bloco atual.
10. MÉTODO, de acordo com qualquer uma das reivindicações 7 a 9, caracterizado por compreender adicionalmente a etapa de codificação das segundas informações de índice para especificar um candidato a direção de vetor que indica uma direção do vetor de deslocamento entre uma pluralidade de candidatos a direção de vetor.
BR112021008720-6A 2018-11-08 2019-11-08 método de codificação de vídeo e método de decodificação vídeo BR112021008720A2 (pt)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
KR20180136262 2018-11-08
KR10-2018-0136262 2018-11-08
KR20180167979 2018-12-21
KR10-2018-0167979 2018-12-21
PCT/KR2019/015198 WO2020096426A1 (ko) 2018-11-08 2019-11-08 영상 신호 부호화/복호화 방법 및 이를 위한 장치

Publications (1)

Publication Number Publication Date
BR112021008720A2 true BR112021008720A2 (pt) 2021-08-03

Family

ID=70611562

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112021008720-6A BR112021008720A2 (pt) 2018-11-08 2019-11-08 método de codificação de vídeo e método de decodificação vídeo

Country Status (17)

Country Link
US (1) US20210235075A1 (pt)
EP (2) EP3860123B1 (pt)
JP (4) JP7460616B2 (pt)
KR (1) KR20200054111A (pt)
CN (5) CN113382234B (pt)
AU (1) AU2019376595B2 (pt)
BR (1) BR112021008720A2 (pt)
CA (2) CA3117479C (pt)
CL (1) CL2021001126A1 (pt)
ES (1) ES2972074T3 (pt)
IL (1) IL282664B1 (pt)
MX (1) MX2021004886A (pt)
PH (1) PH12021550912A1 (pt)
PL (1) PL3860123T3 (pt)
SG (1) SG11202104531TA (pt)
WO (1) WO2020096426A1 (pt)
ZA (1) ZA202103282B (pt)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
BR112021008091A2 (pt) 2018-11-08 2021-08-03 Guangdong Oppo Mobile Telecommunications Corp., Ltd. método de codificação e decodificação de sinal de vídeo e aparelho de decodificação de vídeo
CN113039780B (zh) 2018-11-17 2023-07-28 北京字节跳动网络技术有限公司 视频处理中用运动矢量差的Merge
WO2020125751A1 (en) * 2018-12-21 2020-06-25 Beijing Bytedance Network Technology Co., Ltd. Information signaling in current picture referencing mode
CN117615155A (zh) 2019-09-19 2024-02-27 北京字节跳动网络技术有限公司 视频编解码中的参考样点位置推导
EP4026336A4 (en) 2019-10-05 2022-12-07 Beijing Bytedance Network Technology Co., Ltd. LEVEL-BASED SIGNALING OF VIDEO CODING TOOLS
WO2021068956A1 (en) 2019-10-12 2021-04-15 Beijing Bytedance Network Technology Co., Ltd. Prediction type signaling in video coding
JP7414980B2 (ja) 2019-10-13 2024-01-16 北京字節跳動網絡技術有限公司 参照ピクチャリサンプリングと映像コーディングツールとの間の相互作用
BR112022012807A2 (pt) * 2019-12-27 2022-09-27 Beijing Bytedance Network Tech Co Ltd Método de processamento de vídeo, aparelho para processar dados de vídeo e meios não transitórios legíveis por computador

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011095260A1 (en) * 2010-02-05 2011-08-11 Telefonaktiebolaget L M Ericsson (Publ) Managing predicted motion vector candidates
US20130114717A1 (en) * 2011-11-07 2013-05-09 Qualcomm Incorporated Generating additional merge candidates
US8964845B2 (en) * 2011-12-28 2015-02-24 Microsoft Corporation Merge mode for motion information prediction
US20130294513A1 (en) * 2012-05-07 2013-11-07 Qualcomm Incorporated Inter layer merge list construction for video coding
CN104521236B (zh) * 2012-07-27 2017-10-20 寰发股份有限公司 三维视频编码或解码方法
WO2014163458A1 (ko) * 2013-04-05 2014-10-09 삼성전자주식회사 인터 레이어 복호화 및 부호화 방법 및 장치를 위한 인터 예측 후보 결정 방법
WO2016034058A1 (en) * 2014-09-01 2016-03-10 Mediatek Inc. Method of intra picture block copy for screen content and video coding
WO2016070808A1 (en) * 2014-11-05 2016-05-12 Mediatek Singapore Pte. Ltd. Method and apparatus of video coding with prediction offset
JP6938612B2 (ja) * 2016-07-12 2021-09-22 エレクトロニクス アンド テレコミュニケーションズ リサーチ インスチチュートElectronics And Telecommunications Research Institute 画像復号方法、画像符号化方法、及び非一時的なコンピュータ可読の記録媒体
US10812791B2 (en) * 2016-09-16 2020-10-20 Qualcomm Incorporated Offset vector identification of temporal motion vector predictor
KR20180043151A (ko) * 2016-10-19 2018-04-27 에스케이텔레콤 주식회사 영상 부호화 또는 복호화를 위한 장치 및 방법
WO2018173432A1 (ja) * 2017-03-21 2018-09-27 シャープ株式会社 予測画像生成装置、動画像復号装置、および動画像符号化装置
KR102450863B1 (ko) * 2017-03-22 2022-10-05 에스케이텔레콤 주식회사 움직임벡터를 부호화 또는 복호화하기 위한 장치 및 방법
US10701391B2 (en) * 2017-03-23 2020-06-30 Qualcomm Incorporated Motion vector difference (MVD) prediction
CN109218733B (zh) * 2017-06-30 2022-03-29 华为技术有限公司 一种确定预测运动矢量预测的方法以及相关设备
CN111971966A (zh) * 2018-03-30 2020-11-20 韩国电子通信研究院 图像编码/解码方法和设备以及存储比特流的记录介质
WO2019208372A1 (ja) * 2018-04-25 2019-10-31 パナソニック インテレクチュアル プロパティ コーポレーション オブ アメリカ 符号化装置、復号装置、符号化方法及び復号方法
EP3826305A4 (en) * 2018-07-18 2021-08-18 Panasonic Intellectual Property Corporation of America ENCODING DEVICE, DECODING DEVICE, ENCODING PROCESS, AND DECODING PROCESS

Also Published As

Publication number Publication date
MX2021004886A (es) 2021-06-15
EP3860123B1 (en) 2023-12-27
JP2024069564A (ja) 2024-05-21
JP2024069562A (ja) 2024-05-21
EP4287622A2 (en) 2023-12-06
CA3117479C (en) 2023-06-13
US20210235075A1 (en) 2021-07-29
KR20200054111A (ko) 2020-05-19
CN113039788A (zh) 2021-06-25
EP3860123A1 (en) 2021-08-04
JP2024069563A (ja) 2024-05-21
JP2022509743A (ja) 2022-01-24
IL282664B1 (en) 2024-10-01
JP7460616B2 (ja) 2024-04-04
IL282664A (en) 2021-06-30
PH12021550912A1 (en) 2021-11-29
CA3117479A1 (en) 2020-05-14
WO2020096426A1 (ko) 2020-05-14
SG11202104531TA (en) 2021-05-28
CN116208765A (zh) 2023-06-02
CA3199533A1 (en) 2020-05-14
ZA202103282B (en) 2022-08-31
CN116074506A (zh) 2023-05-05
EP3860123A4 (en) 2021-11-03
CL2021001126A1 (es) 2021-10-01
CN116074505A (zh) 2023-05-05
AU2019376595A1 (en) 2021-05-20
PL3860123T3 (pl) 2024-05-13
EP4287622A3 (en) 2024-02-21
ES2972074T3 (es) 2024-06-11
CN113382234A (zh) 2021-09-10
CN113382234B (zh) 2023-03-10
AU2019376595B2 (en) 2024-10-10

Similar Documents

Publication Publication Date Title
BR112021008731A2 (pt) método de decodificação de vídeo e método de codificação de vídeo
BR112021008720A2 (pt) método de codificação de vídeo e método de decodificação vídeo
US11575932B2 (en) Video signal encoding and decoding method, and apparatus therefor
BR112021008654A2 (pt) método de decodificação vídeo, método de codificação de vídeo, e aparelho de decodificação de vídeo
BR112021008625A2 (pt) método de decodificação e codificação de vídeo e aparelho de decodificação e codificação de vídeo
KR20190038405A (ko) 영상 부호화/복호화 방법, 장치 및 비트스트림을 저장한 기록 매체
BR112021005175A2 (pt) método de decodificação de vídeo, método de codificação de vídeo, aparelho de decodificação de vídeo e aparelho de codificação de vídeo
BR112021004922A2 (pt) método de decodificação de vídeo, decodificador de vídeo, codificador de vídeo, e mídia legível por computador não transitório
RU2809582C2 (ru) Способ и устройство для кодирования и декодирования видеосигналов
RU2802731C2 (ru) Способ и устройство для кодирования и декодирования видеосигналов
RU2824092C1 (ru) Способ и устройство для кодирования и декодирования видеосигналов
RU2810054C2 (ru) Способ и устройство для кодирования и декодирования видеосигналов
RU2809324C2 (ru) Способ и устройство для кодирования и декодирования видеосигналов
RU2813667C2 (ru) Способ и устройство для кодирования и декодирования видеосигналов