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

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

Info

Publication number
BR112021008091A2
BR112021008091A2 BR112021008091-0A BR112021008091A BR112021008091A2 BR 112021008091 A2 BR112021008091 A2 BR 112021008091A2 BR 112021008091 A BR112021008091 A BR 112021008091A BR 112021008091 A2 BR112021008091 A2 BR 112021008091A2
Authority
BR
Brazil
Prior art keywords
block
current block
vector
motion
merge
Prior art date
Application number
BR112021008091-0A
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 BR112021008091A2 publication Critical patent/BR112021008091A2/pt

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors
    • 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/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/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/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
    • 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/523Motion estimation or motion compensation with sub-pixel accuracy
    • 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/577Motion compensation with bidirectional frame interpolation, i.e. using B-pictures
    • 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 E DECODIFICAÇÃO DE SINAL DE VÍDEO E APARELHO DE DECODIFICAÇÃO DE VÍDEO. Trata-se de um método de codificação de vídeo, de acordo com a presente invenção, que inclui as etapas de: gerar uma lista de candidato de mescla para um bloco atual; determinar um candidato de mescla para o bloco atual dentre os candidatos de mescla incluídos na lista de candidato de mescla; derivar um vetor de deslocamento para o bloco atual; e derivar um vetor de movimento para o bloco atual, adicionando-se o vetor de deslocamento a um vetor de movimento do candidato de mescla.

Description

MÉTODO DE CODIFICAÇÃO E DECODIFICAÇÃO DE SINAL DE VÍDEO E APARELHO DE DECODIFICAÇÃO DE VÍDEO ANTECEDENTES DA INVENÇÃO CAMPO DA INVENÇÃO
[001] A presente invenção refere-se a um método de codificação e decodificação de sinal de vídeo e um aparelho para o mesmo.
ANTECEDENTES DA TÉCNICA RELACIONADA
[002] Conforme painéis de exibição se tornam cada vez maiores, serviços de vídeo de qualidade muito maior são cada vez mais necessários. O maior problema de serviços de vídeo de alta definição é o aumento significativo de volume de dados, e, para solucionar esse problema, estudos para aprimorar a taxa de compressão de vídeo são ativamente conduzidos. Como um exemplo representativo, o Grupo de Especialistas de Foto em Movimento (MPEG) e o Grupo de Especialistas de Conversão em Código de Vídeo (VCEG) sob a Telecomunicação de União de Telecomunicação Internacional (ITU-T) formaram o Time Colaborativo Unido em Conversão em Código de Vídeo (JCT-VC) em
2009. O JCT-VC propôs Conversão em Código de Vídeo de Alta Eficiência (HEVC), que é um padrão de compressão de Vídeo que tem um desempenho de compressão cerca de duas vezes tão alto quanto o desempenho de compressão de H.264/AVC, e o mesmo é aprovado como um 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 revela gradualmente suas limitações.
SUMARIO DA INVENÇÃO
[003] Um objetivo da presente invenção é fornecer um método para refinar um vetor de movimento derivado de um candidato de mescla 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 objetivo da presente invenção é fornecer um método de sinalização de 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 invenção não são limitados aos problemas técnicos mencionados acima, e outros problemas não mencionados podem ser claramente entendidos pelos elementos versados na técnica a partir da descrição a seguir.
[006] Um método de decodificação/codificação de um sinal de vídeo de acordo com a presente invenção inclui as etapas de: gerar uma lista de candidatos de mescla para um bloco atual; determinar um candidato de mescla para o bloco atual entre os candidatos de mescla incluídos na lista de candidatos de mescla; derivar um vetor de deslocamento para o bloco atual; e derivar um vetor de movimento para o bloco atual, adicionando o vetor de deslocamento a um vetor de movimento do candidato de mescla.
[007] No método de codificação e decodificação de sinal de vídeo de acordo com a presente invenção, a magnitude do vetor de deslocamento pode ser determinada com base nas primeiras informações de índice que especificam um dentre os candidatos de magnitude de movimento.
[008] No método de codificação e decodificação de sinal de vídeo de acordo com a presente invenção, pelo menos um dentre um valor numérico máximo e um valor numérico mínimo dos candidatos de magnitude de movimento pode ser definido de forma diferente de acordo com um valor numérico de um sinalizador indicando uma faixa numérica 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 invenção, o sinalizador pode ser sinalizado através de um conjunto de parâmetros de foto.
[010] No método de codificação e decodificação de sinal de vídeo de acordo com a presente invenção, pelo menos um dentre um valor numérico máximo e um valor numérico mínimo dos candidatos de 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 invenção, em que a magnitude do vetor de deslocamento pode ser obtida aplicando- se uma operação de deslocamento a um valor indicado pelo candidato de 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 invenção, em que a direção do vetor de deslocamento pode ser determinada com base nas segundas informações de índice que especifica um dentre os candidatos de direção do vetor.
[013] Recursos brevemente resumidos acima em relação à presente invenção são meramente aspectos exemplificadores da descrição detalhada da presente invenção que serão descritos abaixo, e não limitam o escopo da presente invenção.
[014] De acordo com a presente invenção, a eficiência de interpredição pode ser aprimorada refinando-se um vetor de movimento de um candidato de mescla com base em um vetor de deslocamento.
[015] De acordo com a presente invenção, a eficiência de interpredição pode ser aprimorada determinando- se de forma adaptativa uma magnitude e uma direção de um vetor de deslocamento.
[016] Os efeitos que podem ser obtidos da presente invenção não são limitados aos efeitos mencionados acima, e outros efeitos não mencionados podem ser claramente entendidos pelos elementos versados na técnica a partir da descrição a seguir.
BREVE DESCRIÇÃO DAS FIGURAS
[017] A Figura 1 é um diagrama que mostra um codificador de vídeo de acordo com uma modalidade da presente invenção.
[018] A Figura 2 é um diagrama de blocos que mostra um decodificador de vídeo de acordo com uma modalidade da presente invenção.
[019] A Figura 3 é uma vista que mostra uma unidade de árvore de conversão em código básica de acordo com uma modalidade da presente invenção.
[020] A Figura 4 é uma vista que mostra vários tipos de particionamento de um bloco de conversão em código.
[021] A Figura 5 é uma vista que mostra um padrão de particionamento de uma unidade de árvore de conversão.
[022] A Figura 6 é um fluxograma que ilustra um método de interpredição de acordo com uma modalidade da presente invenção.
[023] A Figura 7 é uma vista que mostra um movimento não linear de um objeto.
[024] A Figura 8 é um fluxograma que ilustra um método de interpredição com base em um movimento afim de acordo com uma modalidade da presente invenção.
[025] A Figura 9 é uma vista que mostra um exemplo de vetores de semente afim de cada modelo de movimento afim.
[026] A Figura 10 é uma vista que mostra um exemplo de vetores afins de sub-blocos em um modelo de movimento de 4 parâmetros.
[027] A Figura 11 é um fluxograma que ilustra um processo de derivação de informações de movimento de um bloco atual com uso de um modo de mescla.
[028] A Figura 12 é uma vista que mostra um exemplo de blocos candidatos usado para derivar um candidato de mescla.
[029] A Figura 13 é uma vista que mostra posições de amostras de referência.
[030] A Figura 14 é uma vista que mostra um exemplo de blocos candidatos usado para derivar um candidato de mescla.
[031] A Figura 15 é uma vista que mostra um exemplo no qual a posição de uma amostra de referência é mudada.
[032] A Figura 16 é uma vista que mostra um exemplo no qual a posição de uma amostra de referência é mudada.
[033] A Figura 17 é uma vista que mostra um vetor de deslocamento de acordo com os valores de distance_idx que indica uma magnitude de um vetor de deslocamento e direction_idx que indica uma direção do vetor de deslocamento.
[034] A Figura 18 é uma vista que mostra um vetor de deslocamento de acordo com os valores de distance_idx que indica uma magnitude de um vetor de deslocamento e direction_idx que indica uma direção do vetor de deslocamento.
DESCRIÇÃO DETALHADA DA MODALIDADE PREFERENCIAL
[035] Doravante, uma modalidade da presente invenção será descrita em detalhes com referência aos desenhos anexos.
[036] A codificação e decodificação de um vídeo é realizada pela unidade do bloco. Por exemplo, um processo de codificação/decodificação, tal como transformada, quantização, predição, filtração em circuito, reconstrução ou similares pode ser realizado em um bloco de conversão em código, um bloco de transformada ou um bloco de predição.
[037] Doravante, um bloco a ser codificado/decodificado será denominado como um “bloco atual”. Por exemplo, o bloco atual pode representar um bloco de conversão em código, um bloco de transformada ou um bloco de predição de acordo com uma etapa atual de processo de codificação/decodificação.
[038] Adicionalmente, pode ser entendido que o termo “unidade” usado neste relatório descritivo indica uma unidade básica para realizar um processo específico de codificação/decodificação, e o termo “bloco” indica um arranjo de amostra de um tamanho predeterminado. A menos que declarado de outro modo, “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 conversão em código e uma unidade de conversão em código têm o mesmo significado.
[039] A Figura 1 é um diagrama que mostra um codificador de vídeo de acordo com uma modalidade da presente invenção.
[040] Em referência à Figura 1, um aparelho de codificação de vídeo 100 pode incluir uma parte de particionamento de foto 110, uma parte de predição 120 e 125, uma parte de transformada 130, uma parte de quantização 135, uma parte de rearranjo 160, uma parte de conversão em código de entropia 165, uma parte de quantização inversa 140, uma parte de transformada inversa 145, uma parte de filtro 150 e uma memória 155.
[041] Cada um dos componentes mostrados na Figura 1 é independentemente mostrado para representar funções características diferentes uma da outra em um aparelho de codificação de vídeo, e isso não significa que cada componente seja formado pela unidade de configuração de hardware separado ou hardware único. Ou seja, cada componente é incluído para ser listado como um componente para conveniência de explicação, e pelo menos dois dos componentes podem ser combinados para formar um componente único, ou um componente pode ser dividido em uma pluralidade de componentes para realizar uma função. Modalidades integradas e modalidades separadas dos componentes são também incluídos no escopo da presente invenção se os mesmos não se afastarem da essência da presente invenção.
[042] Adicionalmente, alguns dos componentes não são componentes essenciais que realizam funções essenciais na presente invenção, mas podem ser componentes opcionais somente para aprimorar o desempenho. A presente invenção pode ser implementada para incluir somente componentes essenciais para implementar a essência da presente invenção excluindo componentes usados para aprimorar o desempenho, e uma estrutura que inclui somente os componentes essenciais excluindo os componentes opcionais usados para aprimorar desempenho é também incluído no escopo da presente invenção.
[043] A parte de particionamento de foto 110 pode particionar uma foto de entrada em pelo menos uma unidade de processamento. Nesse ponto, a unidade de processamento pode ser uma unidade de predição (PU), uma unidade de transformada (TU), ou uma unidade de conversão em código (CU). A parte de particionamento de foto 110 pode particionar uma foto em uma combinação de uma pluralidade de unidades de conversão em código, unidades de predição, e unidades de transformada, e codificar uma foto selecionando-se uma combinação de uma unidade de conversão em código, uma unidade de predição, e uma unidade de transformada com base em um critério predeterminado (por exemplo, uma função de custo).
[044] Por exemplo, uma foto pode ser particionada em uma pluralidade de unidades de conversão em código. De modo a particionar as unidades de conversão em código em uma foto, uma estrutura de árvore recursiva, tal como uma estrutura de árvore quadrática pode ser usada. Um vídeo ou uma unidade de conversão em código particionada em diferentes unidades de conversão em código com uso da maior unidade de conversão em código como uma raiz pode ser particionada para ter tantos nós filhos quanto o número de unidades de conversão em código particionadas. Uma unidade de conversão em código que não é mais particionada de acordo com uma restrição predeterminada se torna um nó de folha. Ou seja, quando é assumido que somente particionamento quadrado é possível para uma unidade de conversão em código, a uma unidade de conversão em código pode ser particionada em até quatro diferentes unidades de conversão em código.
[045] Doravante, em uma modalidade da presente invenção, a unidade de conversão em código pode ser usada como um significado de uma unidade que realiza codificação ou um significado de uma unidade que realiza decodificação.
[046] A unidade de predição pode ser uma que é particionada em um formato de pelo menos um quadrado, retângulo ou similares do mesmo tamanho dentro de uma unidade de conversão em código, ou a mesma pode ser qualquer uma unidade de predição, dentre as unidades de predição particionadas dentro de uma unidade de conversão em código, que é particionada para ter um formato e/ou tamanho diferente daqueles de outra unidade de predição.
[047] Se a unidade de conversão em código não for uma menor unidade de conversão em código quando uma unidade de predição que realiza intrapredição com base na unidade de conversão em código é gerada, intrapredição pode ser realizada sem particionar uma foto em uma pluralidade de unidades de predição N × N.
[048] A parte de predição 120 e 125 pode incluir uma parte de interpredição 120 que realiza interpredição e uma parte de intrapredição 125 que realiza intrapredição. Pode ser determinada a possibilidade de usar interpredição ou realizar intrapredição para uma unidade de predição, e determinar informações específicas (por exemplo, modo de intrapredição, vetor de movimento, foto de referência, etc.) de acordo com cada método de predição. Nesse ponto, uma unidade de processamento para realizar predição pode ser diferente de uma unidade de processamento para determinar um método de predição e conteúdo específico. Por exemplo, um método de predição e um modo de predição pode ser determinado em uma unidade de predição, e predição pode ser realizado em uma unidade de transformada. Um coeficiente residual (bloco residual) entre o bloco de predição reconstruído e o bloco original pode ser inserido na parte de transformada 130. Adicionalmente, informações de modo de predição, informações de vetor de movimento e similares usados para predição podem ser codificadas pela parte de conversão em código de entropia 165 em conjunto 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 o mesmo é e transmitido a um decodificador sem gerar um bloco de predição através da parte de predição 120 e 125.
[049] A parte de interpredição 120 pode prever uma unidade de predição com base em informações em pelo menos uma foto dentre fotos antes e depois da foto atual e, em alguns casos, a mesma pode prever uma unidade de predição com base em informações em uma área parcial que foi codificada na foto atual. A parte de interpredição 120 pode incluir uma parte de interpolação de foto de referência, uma parte de predição de movimento e uma parte de compensação de movimento.
[050] A parte de interpolação de foto de referência pode receber informações de foto de referência da memória 155 e gerar informações de pixel de um número inteiro de pixels ou menos da foto 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 variado pode ser usado para gerar informações de pixel de um número inteiro de pixels ou menos pela unidade de 1/4 pixels. No caso de um sinal de diferença de cor, um filtro de interpolação d 4 toques baseado em DCT com um coeficiente de filtro variado pode ser usado para gerar informações de pixel de um número inteiro de pixels ou menos pela unidade de 1/8 pixels.
[051] A parte de predição de movimento pode realizar predição de movimento com base na foto de referência interpolada pela parte de interpolação de foto de referência. Vários métodos, tais como um algoritmo de compatibilidade de bloco baseada em busca total (FBMA), uma busca em três etapas (TSS), e um novo algoritmo de busca 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 predição de movimento pode prever uma unidade de predição atual variando-se o modo de predição de movimento. Vários métodos, tais como um modo de salto, um modo de mescla, um modo de predição de vetor de movimento avançado (AMVP), um modo de intrabloco de cópia e similares pode ser usado como o modo de predição de movimento.
[052] A parte de intrapredição 125 pode gerar uma unidade de predição com base nas informações em pixels de referência na vizinhança do bloco atual, que é informações de pixel na foto atual. Quando um bloco na vizinhança da unidade de predição atual é um bloco no qual interpredição foi realizado e desse modo o pixel de referência é um pixel no qual a interpredição foi realizada, o pixel de referência incluído no bloco no qual interpredição foi realizada pode ser usada no lugar de informações de pixel de referência de um bloco na vizinhança no qual a intrapredição foi realizada. Ou seja, quando um pixel de referência está indisponível, pelo menos um pixel de referência dentre pixels disponíveis de referência pode ser usado no lugar de informações indisponíveis de pixel de referência.
[053] Na intrapredição, o modo de predição pode ter um modo de predição angular que usa informações de pixel de referência de acordo com uma direção de predição, e um modo de predição não angular que não usa informações direcionais ao realizar predição. Um modo para prever informações de luminância pode ser diferente de um modo para prever informações de diferença de cor, e informações de modo de intraprediçã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 diferença de cor.
[054] Se o tamanho da unidade de predição for igual ao tamanho da unidade de transformada quando intrapredição é realizada, a intrapredição pode ser realizada para a unidade de predição com base em um pixel no lado esquerdo, um pixel no lado esquerdo superior, e um pixel no topo da unidade de predição. No entanto, se o tamanho da unidade de predição for diferente do tamanho da unidade de transformada quando a intrapredição é realizada, a intrapredição pode ser realizada com uso de um pixel de referência com base na unidade de transformada. Adicionalmente, a intrapredição que usa particionamento tipo N × N pode ser usada somente para a menor unidade de conversão em código.
[055] O método de intrapredição pode gerar um bloco de predição depois de aplicar um filtro de Intrassuavização Adaptativa (AIS) ao pixel de referência de acordo com um modo de predição. O tipo do filtro de AIS aplicado ao pixel de referência pode variar. De modo a realizar o método de intrapredição, o modo de intrapredição da unidade de predição atual pode ser previsto do modo de intrapredição da unidade de predição que existe na vizinhança da unidade de predição atual. Quando um modo de predição da unidade de predição atual é previsto com uso das informações de modo previstas da unidade de predição vizinha, se os modos de intrapredição da unidade de predição atual forem iguais à unidade de predição na vizinhança, informações que indicam que os modos de predição da unidade de predição atual são iguais à unidade de predição na vizinhança podem ser transmitidas com uso de informações de sinalização predeterminadas, e se os modos de predição da unidade de predição atual e da unidade de predição na vizinhança forem diferentes uns dos outros, informações de modo de predição do bloco atual podem ser codificadas realizando-se conversão em código de entropia.
[056] Adicionalmente, um bloco residual que inclui uma unidade de predição que realizou predição com base na unidade de predição gerada pela parte de predição 120 e 125, e informações de coeficiente residual, que é um valor de diferença da unidade de predição com o bloco original, podem ser geradas. O bloco residual gerado pode ser inserido na parte de transformada 130.
[057] A parte de transformada 130 pode transformar o bloco residual que inclui o bloco original e as informações de coeficiente residual da unidade de predição geradas através da parte de predição 120 e 125 com uso de um método de transformada, tal como Transformada de Cosseno Discreta (DCT), Transformada de Seno Discreta (DST). Aqui, o núcleo de transformação DCT inclui pelo menos um dentre DCT2 e DCT8, e o núcleo de transformação DST inclui DST7. A possibilidade de aplicar a DCT ou DST para transformar o bloco residual pode ser determinada com base em informações de modo de intrapredição de uma unidade de predição usada para gerar o bloco residual. A transformação no bloco residual pode ser saltada. Um sinalizador indicando se deve ou não saltar a transformação no bloco residual pode ser codificado. O salto de transformação pode ser permitido para um bloco residual que contém um tamanho menor ou igual a um limítrofe, um componente de luma ou um componente de croma abaixo de formato 4 : 4 : 4.
[058] A parte de quantização 135 pode quantizar valores transformados no domínio de frequência pela parte de transformada 130. 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 à parte de quantização inversa 140 e à parte de rearranjo 160.
[059] A parte de rearranjo 160 pode rearranjar valores de coeficiente para os coeficientes residuais quantizados.
[060] A parte de rearranjo 160 pode mudar coeficientes de um formato de bloco bidimensional em um formato de vetor unidimensional através de um método de leitura de coeficiente. Por exemplo, a parte de rearranjo 160 pode ler coeficientes de DC até coeficientes de domínio de alta frequência com uso de um método de varredura em zigue-zague, e mudar os coeficientes para um formato de vetor unidimensional. De acordo com o tamanho da unidade de transformada e o modo de intrapredição, uma leitura vertical de leitura dos coeficientes de um formato de bloco bidimensional na direção de coluna e uma leitura horizontal de leitura dos coeficientes de um formato de bloco bidimensional na direção de fileira pode ser usada em vez da leitura em zigue-zague. Ou seja, de acordo com o tamanho da unidade de transformada e o modo de intrapredição, um método de leitura que será usado pode ser determinado dentre a leitura em zigue- zague, a leitura de direção vertical, e a leitura de direção horizontal.
[061] A parte de conversão em código de entropia 165 pode realizar conversão em código de entropia com base em valores calculados pela parte de rearranjo 160. A conversão em código de entropia pode usar vários métodos de codificação, tais como Golomb Exponencial, Conversão em Código de Comprimento Variável Adaptativo de Contexto (CAVLC), Conversão em Código Aritmético Binário Adaptativo de Contexto (CABAC) e similares.
[062] A parte de conversão em código de entropia 165 pode codificar várias informações, tais como informações de coeficiente residual e informações de tipo de bloco de uma unidade de conversão em código, informações de modo de predição, informações de unidade de particionamento, informações de unidade de prediçã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 informações de filtração inseridas a partir da parte de rearranjo 160 e a partes de predição 120 e 125.
[063] A parte de conversão em código de entropia 165 pode codificar por entropia o valor de coeficiente de uma entrada de unidade de conversão em código inseridas da parte de rearranjo 160.
[064] A parte de quantização inversa 140 e a parte de transformada inversa 145 quantizam de modo inverso os valores quantizados pela parte de quantização 135 e transformam de modo inverso 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 podem ser combinados com a unidade de predição previstos através de uma parte de estimativa de movimento, uma parte de compensação de movimento, e uma parte de intrapredição incluída na parte de predição 120 e 125 para gerar um bloco reconstruído.
[065] A parte de 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).
[066] O filtro de desbloqueio pode remover a distorção de bloco gerada pela delimitação entre blocos na foto reconstruída. De modo a determine a possibilidade ou não de realizar desbloqueio, a possibilidade ou não de aplicar o filtro de desbloqueio ao bloco atual pode ser determinado com base nos pixels incluídos em várias colunas ou fileiras incluídas no bloco. Um filtro forte ou um filtro fraco pode ser aplicado de acordo com a intensidade de filtração de desbloqueio necessária quando o filtro de desbloqueio é aplicado a um bloco. Adicionalmente, quando filtração de direção vertical e filtração de direção horizontal são realizadas ao aplicar o filtro de desbloqueio, filtração de direção horizontal e filtração de direção vertical podem ser processadas em paralelo.
[067] A unidade de correção de deslocamento pode corrigir um deslocamento ao vídeo original pela unidade de pixel para um vídeo no qual o desbloqueio foi realizado. De modo a realizar correção de deslocamento para uma foto específica, é possível usar um método de divisão de pixels incluídos no vídeo a um determinado número de áreas, determinando uma área para realizar deslocamento, e aplicar a deslocamento à área, ou um método de aplicação de um deslocamento em consideração de informações de borda de cada pixel.
[068] Filtração de Circuito Adaptativo (ALF) pode ser realizada com base em um valor obtido comparando-se o vídeo reconstruído e filtrado com o vídeo original. Depois de dividir os pixels incluídos no vídeo em grupos predeterminados, um filtro a ser aplicado a um grupo normal pode ser determinado, e filtração pode ser realizada de modo diferente para cada grupo. Um sinal de luminância, que é as informações relacionadas à possibilidade ou não de aplicar ALF, pode ser transmitido para cada unidade de conversão em código (CU), e o formato e coeficiente de filtro de um filtro de ALF a ser aplicado pode variar de acordo com cada bloco. Adicionalmente, um filtro de ALF do mesmo tipo (tipo fixo) pode ser aplicado independentemente da característica de um bloco a ser aplicado.
[069] A memória 155 pode armazenar a bloco ou foto reconstruída calculada através da parte de filtro 150, e o bloco ou foto reconstruída ou armazenada pode ser fornecida à parte de predição 120 e 125 quando interpredição é realizada.
[070] A Figura 2 é um diagrama de blocos que mostra um decodificador de vídeo de acordo com uma modalidade da presente invenção.
[071] Em referência à Figura 2, um vídeo decodificador 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 predição 230 e 235, uma parte de filtro 240 e uma memória 245.
[072] Quando um fluxo de bits de vídeo é inserido a partir 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.
[073] A parte de decodificação de entropia 210 pode realizar decodificação de entropia em um procedimento oposto ao de realizar conversão em código 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, tal como Golomb Exponencial, Conversão em Código de Comprimento Variável Adaptativo de Contexto (CAVLC), e Conversão em Código Aritmético Binário Adaptativo de Contexto (CABAC), podem ser aplicados.
[074] A parte de decodificação de entropia 210 pode decodificar informações relacionadas à intrapredição e interpredição realizada pelo codificador.
[075] A parte de rearranjo 215 pode realizar rearranjo no fluxo de bits decodificado por entropia pela parte de decodificação de entropia 210 com base no rearranjo método realizado pelo codificador. Os coeficientes expressos em um formato de vetor unidimensional podem ser reconstruídos e rearranjados como coeficientes de formato de bloco bidimensional. A parte de rearranjo 215 pode receber informações relacionadas à leitura de coeficiente realizada pela parte de codificação e realizar reconstrução através de um método de leitura inversa com base na ordem de leitura realizada pela parte de codificação correspondente.
[076] 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.
[077] A parte de transformada inversa 225 pode realizar 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 ou DST inversa. Aqui, o núcleo de transformada DCT pode incluir pelo menos um dentre DCT2 e DCT8, e o núcleo de transformada DST pode incluir DST7. Alternativamente, quando a transformada é saltada 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 vídeo decodificador pode realizar seletivamente uma técnica de transformada (por exemplo, DCT ou DST) de acordo com uma pluralidade de informações, tais como um método de predição, um tamanho de um bloco atual, uma direção de predição e similares.
[078] A parte de predição 230 e 235 pode gerar um bloco de predição com base em informações relacionadas à geração de um bloco de predição fornecido pelo decodificador de entropia 210 e informações em um bloco ou foto anteriormente decodificado fornecido pela memória 245.
[079] Conforme descrito acima, se o tamanho da unidade de predição e o tamanho da unidade de transformada forem iguais quando intrapredição é realizada da mesma maneira que a operação do codificador de vídeo, intrapredição é realizada na unidade de predição com base no pixel existente no lado esquerdo, o pixel no lado esquerdo superior e o pixel no topo da unidade de predição. No entanto, se o tamanho da unidade de predição e o tamanho da unidade de transformada forem diferentes quando a intrapredição é realizada, intrapredição pode ser realizada com uso de um pixel de referência com base em uma unidade de transformada. Adicionalmente, a intrapredição que usa particionamento tipo N × N pode ser usada somente para a menor unidade de conversão em código.
[080] A parte de predição 230 e 235 pode incluir uma parte de determinação de unidade de predição, uma parte de interpredição e uma parte de intrapredição. A parte de determinação de unidade de predição pode receber várias informações, tais como informações de unidade de predição input da parte de decodificação de entropia 210, informações de modo de predição do método de intrapredição, informações relacionadas à predição de movimento de um método de interpredição, e similares, identificar a unidade de predição a partir da unidade de conversão em código atual, e determinar a possibilidade de a unidade de predição realizar interpredição ou intrapredição. A parte de interpredição 230 pode realizar interpredição na unidade de predição atual com base em informações incluídas em pelo menos uma foto dentre fotos antes e depois da foto atual que inclui a unidade de predição atual com uso de informações necessárias para interpredição da unidade de predição atual fornecida pelo codificador de vídeo. Alternativamente, a parte de interpredição 230 pode realizar interpredição com base em informações em uma área parcial anteriormente reconstruída na foto atual incluindo a unidade de predição atual.
[081] De modo a realizar interpredição, a mesma pode ser determinada, com base na unidade de conversão em código, a possibilidade do método de predição de movimento da unidade de predição incluída em uma unidade de conversão em código correspondente é um modo de salto, um modo de mescla, um vetor de movimento modo de predição (AMVP modo), ou um modo de intrabloco de cópia.
[082] A parte de intrapredição 235 pode gerar um bloco de predição com base nas informações no pixel na foto atual. Quando a unidade de predição é uma unidade de predição que realizou intrapredição, a intrapredição pode ser realizada com base em informações de modo de intrapredição da unidade de predição fornecida pelo codificador de vídeo. A parte de intrapredição 235 pode incluir um filtro de Intrassuavização Adaptativa (AIS), uma parte de interpolação de pixel de referência, e um filtro de DC. O filtro de AIS é uma parte que realiza filtração no pixel de referência do bloco atual, e pode determinar a possibilidade ou não de aplicar o filtro de acordo com o modo de predição da unidade de predição atual e aplicar o filtro. A filtração de AIS pode ser realizada no pixel de referência do bloco atual com uso do modo de predição e informações de filtro de AIS da unidade de predição fornecida pelo codificador de vídeo. Quando o modo de predição do bloco atual é um modo que não realiza filtração de AIS, o filtro de AIS pode não ser aplicado.
[083] Quando o modo de predição da unidade de predição é uma unidade de predição que realiza intrapredição com base em um pixel valor obtido interpolando-se o 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 que tem um valor de número inteiro ou menos interpolando-se o pixel de referência. Quando o modo de predição da unidade de predição atual é um modo de predição que gera um bloco de predição sem interpolar o pixel de referência, o pixel de referência pode não ser interpolado. O filtro de DC pode gerar um bloco de predição através de filtração quando o modo de predição do bloco atual é o modo de DC.
[084] O bloco ou foto reconstruída pode ser fornecida à parte de filtro 240. A parte de filtro 240 pode incluir um filtro de desbloqueio, uma unidade de correção de deslocamento e uma ALF.
[085] Informações na possibilidade de um filtro de desbloqueio são aplicadas a um bloco ou foto correspondente e informações na possibilidade de um filtro forte ou um filtro fraco é aplicado quando um filtro de desbloqueio é aplicado pode ser fornecido pelo codificador de vídeo. O filtro de desbloqueio do vídeo decodificador pode ser dotado de informações relacionadas ao filtro de desbloqueio fornecido pelo codificador de vídeo, e o vídeo decodificador pode realizar filtração de desbloqueio em um bloco correspondente.
[086] A unidade de correção de deslocamento pode realizar correção de deslocamento no vídeo reconstruído com base no tipo de correção de deslocamento e informações de valor de deslocamento aplicadas ao vídeo quando codificação é realizada.
[087] A ALF pode ser aplicada a uma unidade de conversão em código com base em informações na possibilidade ou não de aplicar a ALF e informações em coeficientes de ALF fornecidas pelo codificador. As informações de ALF podem ser fornecidas para serem incluídas em um conjunto de parâmetros específicos.
[088] A memória 245 pode armazenar a foto reconstruída ou bloco e usa-la como uma foto de referência ou um bloco de referência e pode fornecer a foto reconstruída a uma unidade de saída.
[089] A Figura 3 é uma vista que mostra uma unidade de árvore de conversão em código básica de acordo com uma modalidade da presente invenção.
[090] Um bloco de conversão em código de um tamanho máximo pode ser definido como um bloco de árvore de conversão em código. Uma foto é particionada em uma pluralidade de unidades de árvore de conversão em código (CTUs). A unidade de árvore de conversão em código é uma unidade de conversão em código que tem um tamanho máximo e pode ser denominado como uma Unidade de Conversão em Código Grande (LCU). A Figura 3 mostra um exemplo no qual uma foto é particionada em uma pluralidade de unidades de árvore de conversão em código.
[091] O tamanho da unidade de árvore de conversão em código pode ser definido em um nível de foto ou um nível de sequência. Para essa finalidade, informações que indicam o tamanho da unidade de árvore de conversão em código podem ser sinalizadas através de um conjunto de parâmetros de foto ou um conjunto de parâmetros de sequência.
[092] Por exemplo, o tamanho da unidade de árvore de conversão em código para a foto inteira em uma sequência pode ser ajustado para 128×128. Alternativamente, no nível de foto, qualquer um dentre 128×128 e 256×256 pode ser determinado como o tamanho da unidade de árvore de conversão em código.
Por exemplo, o tamanho da unidade de árvore de conversão em código pode ser ajustado para 128×128 em uma primeira foto, e o tamanho da unidade de árvore de conversão em código pode ser ajustado para 256×256 em uma segunda foto.
[093] Blocos de codificação podem ser geradas particionando-se uma unidade de árvore de conversão em código. O bloco de conversão em código indica uma unidade básica para realizar codificação/decodificação. Por exemplo, predição ou transformada pode ser realizada para cada bloco de conversão em código, ou um modo de codificação de predição pode ser determinado para cada bloco de conversão em código. Aqui, o modo de codificação de predição indica um método de geração de uma foto de predição. Por exemplo, o modo de codificação de predição pode incluir predição dentro de uma foto (intrapredição), predição entre fotos (interpredição), referência de foto atual (CPR) ou intrabloco de cópia (IBC) ou predição combinada. Para o bloco de conversão em código, um bloco de predição pode ser gerado com uso de pelo menos um modo de codificação de predição dentre a intrapredição, a interpredição, a referência de foto atual e a predição combinada.
[094] Informações que indicam o modo de codificação de predição do bloco atual podem ser sinalizadas através de um fluxo de bits. Por exemplo, as informações podem ser uma sinalização de 1 bit que indica a possibilidade de o modo de codificação de predição ser um intramodo ou um intermodo. Somente quando o modo de codificação de predição do bloco atual é determinado como o intermodo, a referência de foto atual ou a predição combinada pode ser usada.
[095] A referência de foto atual é para ajustar a foto atual como uma foto de referência e obter um bloco de predição do bloco atual a partir de uma área que já foi codificada/decodificada na foto atual. Aqui, a foto atual significa uma foto que inclui o bloco atual. Informações que indicam a possibilidade de a referência de foto atual ser aplicada ao bloco atual podem ser sinalizadas através de um fluxo de bits. Por exemplo, as informações podem ser uma sinalização de 1 bit. Quando a sinalização é verdadeira, o modo de codificação de predição do bloco atual pode ser determinado como a referência de foto atual, e quando a sinalização é falsa, o modo de predição do bloco atual pode ser determinado como interpredição.
[096] Alternativamente, o modo de codificação de predição do bloco atual pode ser determinado com base em uma foto de referência o índice. Por exemplo, quando o índice de foto de referência indica a foto atual, o modo de codificação de predição do bloco atual pode ser determinado como a referência de foto atual. Quando o índice de foto de referência indica uma foto diferente de a foto atual, o modo de codificação de predição do bloco atual pode ser determinado como interpredição. Ou seja, a referência de foto atual é um método de predição com uso de informações em uma área na qual a codificação/decodificação foi concluída na foto atual, e interpredição é um método de predição com uso de informações em outra foto na qual a codificação/decodificação foi concluída.
[097] A predição combinada representa um modo de codificação no qual duas ou mais dentre a intrapredição, a interpredição e a foto de referência atual são combinadas. Por exemplo, quando a predição combinada é aplicada, um primeiro bloco de predição pode ser gerado com base em uma dentre a intrapredição, a interpredição, e a referência de foto atual, e um segundo bloco de predição pode ser gerado com base um no outro. Quando o primeiro bloco de predição e o segundo bloco de predição são gerados, um bloco de predição final pode ser gerado através de uma operação média ou uma operação de soma ponderada do primeiro bloco de predição e do segundo bloco de predição. Informações que indicam a possibilidade ou não de a predição combinada ser aplicada podem ser sinalizadas através de um fluxo de bits. As informações podem ser um sinalizador de 1 bit.
[098] A Figura 4 é uma vista que mostra vários tipos de particionamento de um bloco de conversão em código.
[099] O bloco de conversão em código pode ser particionado em uma pluralidade de blocos de conversão em código com base em particionamento de árvore quádrupla, particionamento de árvore binária, ou particionamento de árvore ternária. O bloco de conversão particionado em código pode ser particionado novamente em uma pluralidade de blocos de conversão em código com base no particionamento de árvore quádrupla, o particionamento de árvore binária ou o particionamento de árvore ternária.
[100] O particionamento de árvore quádrupla se refere a uma técnica de particionamento que particiona um bloco atual em quatro blocos. Como resultado do particionamento de árvore quádrupla, o bloco atual pode ser particionado em quatro partições em formato de quadrado (consultar “SPLIT_QT” da Figura 4(a)).
[101] O particionamento de árvore binária se refere a uma técnica de particionamento que particiona um bloco atual em dois blocos. O particionamento de um bloco atual em dois blocos ao longo da direção vertical (isto é, com uso de uma linha vertical que corta bloco atual) pode ser denominado como particionamento de árvore binária de direção vertical, e particionamento um bloco atual em dois blocos ao longo da direção horizontal (isto é, com uso de uma linha horizontal que corta o bloco atual) pode ser denominado como particionamento de árvore binária de direção horizontal. Como resultado do particionamento de árvore binária, o bloco atual pode ser particionado em duas partições em formato não quadrado. “SPLIT_BT_VER” da Figura 4(b) mostra um resultado do particionamento de árvore binária de direção vertical, e “SPLIT_BT_HOR” da Figura 4(c) mostra um resultado do particionamento de árvore binária de direção horizontal.
[102] O particionamento de árvore ternária se refere a uma técnica de particionamento que particiona um bloco atual em três blocos. O particionamento um bloco atual em três blocos ao longo da direção vertical (isto é, com uso de duas linhas verticais que cortam bloco atual) pode ser denominado como particionamento de árvore ternária de direção vertical, e particionamento um bloco atual em três blocos ao longo da direção horizontal (isto é, com uso de duas linhas horizontais que cortam o bloco atual) pode ser denominado como particionamento de árvore ternária de direção horizontal. Como resultado do particionamento de árvore ternária, o bloco atual pode ser particionado em três partições em formato não quadrado. Nesse ponto, a largura/altura de uma partição posicionado no centro do bloco atual pode ser duas vezes tão larga quanto a largura/altura das outras partições. “SPLIT_TT_VER” da Figura 4(d) mostra um resultado do particionamento de árvore ternária de direção vertical, e “SPLIT_TT_HOR” da Figura 4 (e) mostra um resultado do particionamento de árvore ternária de direção horizontal.
[103] O número de vezes de particionamento de uma unidade de árvore de conversão em código pode ser definido como uma profundidade de particionamento. A profundidade de particionamento máximo de uma unidade de árvore de conversão em código pode ser determinado na sequência ou nível de foto. Consequentemente, a profundidade de particionamento máximo de uma unidade de árvore de conversão em código pode ser diferente para cada sequência ou foto.
[104] Alternativamente, a profundidade de particionamento máximo para cada técnica de particionamento pode ser individualmente determinada. Por exemplo, a profundidade de particionamento máximo permitida para o particionamento de árvore quádrupla pode ser diferente da profundidade de particionamento máximo permitida para o particionamento de árvore binária e/ou o particionamento de árvore ternária.
[105] O codificador pode sinalizar informações que indicam pelo menos um dentre o tipo de particionamento e a profundidade de particionamento do bloco atual através de um fluxo de bits. O decodificador pode determinar o tipo de particionamento e a profundidade de particionamento de uma unidade de árvore de conversão em código com base nas informações analisadas a partir do fluxo de bits.
[106] A Figura 5 é uma vista que mostra um padrão de particionamento de uma unidade de árvore de conversão em código.
[107] O particionamento um bloco de conversão em código com uso de uma técnica de particionamento, tal como particionamento de árvore quádrupla, particionamento de árvore binária, e/ou particionamento de árvore tripla pode ser denominado como particionamento de múltiplas árvores.
[108] Blocos de codificação gerados aplicando-se o particionamento de múltiplas árvores a um bloco de conversão em código pode ser denominado como blocos de conversão em código inferiores. Quando a profundidade de particionamento de um bloco de conversão em código é k, a profundidade de particionamento dos blocos de conversão em código inferiores é ajustada para k + 1.
[109] De modo contrário, para blocos de conversão em código que tem uma profundidade de particionamento de k + 1, um bloco de conversão em código que tem uma profundidade de particionamento de k pode ser denominado como um bloco de conversão em código superior.
[110] O tipo de particionamento do bloco de conversão em código atual pode ser determinado com base em pelo menos um dentre um tipo de particionamento de um bloco de conversão em código superior e um tipo de particionamento de um bloco de conversão em código vizinho. Aqui, o bloco de conversão em código vizinho é um bloco de conversão em código adjacente ao bloco de conversão em código atual e pode incluir pelo menos um dentre um bloco vizinho superior e um bloco vizinho esquerdo do bloco de conversão em código atual, e um bloco vizinho adjacente ao canto esquerdo superior. Aqui, o tipo de particionamento pode incluir pelo menos um dentre a possibilidade ou não de um particionamento de árvore quádrupla, a possibilidade ou não de um particionamento de árvore binária, direção de particionamento de árvore binária, a possibilidade ou não de um particionamento de árvore tripla e direção de particionamento de árvore ternária.
[111] De modo a determine um tipo de particionamento de um bloco de conversão em código, informações que indicam a possibilidade ou não de o bloco de conversão em código podem ser particionadas podem ser sinalizadas através de um fluxo de bits. As informações é uma sinalização de 1 bit de “split_cu_flag”, e quando a sinalização é verdadeira, isso indica que o bloco de conversão em código é particionado por uma técnica de particionamento de árvore múltipla.
[112] Quando split_cu_flag é verdadeiro, informações que indicam a possibilidade de o bloco de conversão em código ser particionado com árvore quádrupla podem ser sinalizadas através de um fluxo de bits. As informações é uma sinalização de 1 bit de split_qt_flag, e quando a sinalização é verdadeira, o bloco de conversão em código pode ser particionado em quatro blocos.
[113] Por exemplo, no exemplo mostrado na Figura 5, visto que uma unidade de árvore de conversão em código é particionada com árvore quádrupla, quatro blocos de conversão em código que tem uma profundidade de particionamento de 1 são geradas. Adicionalmente, é mostrado que particionamento de árvore quádrupla é aplicado novamente ao primeiro e quarto blocos de conversão em código dentre os quatro blocos de conversão em código gerados como um resultado do particionamento de árvore quádrupla. Como resultado, quatro blocos de conversão em código que tem uma profundidade de particionamento de 2 pode ser gerada.
[114] Adicionalmente, blocos de conversão em código que tem uma profundidade de particionamento de 3 podem ser geradas aplicando-se o particionamento de árvore quádrupla novamente a um bloco de conversão em código que tem uma profundidade de particionamento de 2.
[115] Quando particionamento de árvore quádrupla não é aplicado ao bloco de conversão em código, a possibilidade de particionamento de árvore binária ou particionamento de árvore ternária ser realizada no bloco de conversão em código pode ser determinada considerando pelo menos um dentre o tamanho do bloco de conversão em código, a possibilidade de o bloco de conversão em código ser posicionado na delimitação de foto, a profundidade de particionamento máximo, e o tipo de particionamento de um bloco vizinho. Quando é determinado para realizar particionamento de árvore binária ou particionamento de árvore ternária no bloco de conversão em código, informações que indicam a direção de particionamento podem ser sinalizadas através de um fluxo de bits. As informações podem ser uma sinalização de 1 bit de mtt_split_cu_vertical_flag. Com base na sinalização, a possibilidade de a direção de particionamento ser uma direção vertical ou uma direção horizontal pode ser determinada. Adicionalmente, informações que indicam a possibilidade de particionamento de árvore binária ou particionamento de árvore ternária ser aplicada ao bloco de conversão em código podem ser sinalizadas através de um fluxo de bits. As informações podem ser uma sinalização de 1 bit de mtt_split_cu_binary_flag. Com base na sinalização, a possibilidade de particionamento de árvore binária ou particionamento de árvore ternária ser aplicada ao bloco de conversão em código pode ser determinada.
[116] Por exemplo, no exemplo mostrado na Figura 5, é mostrado que particionamento de árvore binária de direção vertical é aplicado a um bloco de conversão em código que tem uma profundidade de particionamento de 1, particionamento de árvore ternária de direção vertical é aplicado ao bloco de conversão em código de lado esquerdo dentre os blocos de conversão em código gerados como um resultado do particionamento, e particionamento de árvore binária de direção vertical é aplicado ao bloco de conversão em código de lado direito.
[117] Interpredição é um modo de codificação de predição que prevê um bloco atual com uso de informações de uma foto anterior. Por exemplo, um bloco na mesma posição que o bloco atual na foto anterior (doravante, um bloco colocado) pode ser ajustado como o bloco de predição do bloco atual. Doravante, um bloco de predição gerado com base em um bloco na mesma posição que o bloco atual será denominado como um bloco colocado de predição.
[118] Por outro lado, quando um objeto que existe na foto anterior se moveu para outra posição na foto atual, o bloco atual pode ser previsto de modo eficaz com uso de um movimento do objeto. Por exemplo, quando a direção de movimento e o tamanho de um objeto pode ser conhecida comparando-se a foto anterior e a foto atual, um bloco de predição (ou uma foto de predição) do bloco atual pode ser gerado considerando informações de movimento do objeto. Doravante, o bloco de predição gerado com uso de informações de movimento pode ser denominado como um bloco de predição de movimento.
[119] Um bloco residual pode ser gerado subtraindo-se o bloco de predição do bloco atual. Nesse ponto, quando há um movimento de um objeto, a energia do bloco residual pode ser reduzida com uso do bloco de predição de movimento em vez do bloco colocado de predição e, portanto, o desempenho de compressão do bloco residual pode ser aprimorado.
[120] Conforme descrito acima, a geração de um bloco de predição com uso de informações de movimento pode ser denominada como predição de compensação de movimento. Na maior parte da interpredição, um bloco de predição pode ser gerado com base na predição de compensação de movimento.
[121] As informações de movimento podem incluir pelo menos um dentre um vetor de movimento, uma foto de referência o índice, uma direção de predição e um índice de peso bidirecional. O vetor de movimento representa a direção de movimento e o tamanho de um objeto. A foto de referência o índice especifica uma foto de referência do bloco atual dentre fotos de referência incluídas em uma lista de foto de referência. A direção de predição indica qualquer um dentre predição unidirecional L0, predição unidirecional L1 e predição bidirecional (predição L0 e predição L1). De acordo com a direção de predição do bloco atual, pelo menos uma dentre informações de movimento na direção L0 e informações de movimento na direção L1 pode ser usada. O índice de peso bidirecional especifica um valor de ponderação aplicado a um bloco de predição L0 e um valor de ponderação aplicado a um bloco de predição L1.
[122] A Figura 6 é um fluxograma que ilustra um método de interpredição de acordo com uma modalidade da presente invenção.
[123] Em referência à Figura 6, o método de interpredição inclui as etapas de determinar um modo de interpredição de um bloco atual (S601), adquirir informações de movimento do bloco atual de acordo com o modo de interpredição determinado (S602), e realizar predição de compensação de movimento para o bloco atual com base nas informações de movimento adquiridas (S603).
[124] Aqui, o modo de interpredição representa várias técnicas para determinar informações de movimento do bloco atual, e pode incluir um modo de interpredição que usa informações de movimento translacional e um modo de interpredição que usa informações de movimento afim. Por exemplo, o modo de interpredição com uso de informações de movimento translacional pode incluir um modo de mescla e um vetor de movimento modo de predição, e o modo de interpredição com uso de informações de movimento afim pode incluir um modo de mescla afim e um modo de predição de vetor de movimento 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 interpredição.
[125] Doravante, o método de interpredição com uso de informações de movimento afim será descrito em detalhes.
[126] A Figura 7 é uma vista que mostra um movimento não linear de um objeto.
[127] Um movimento não linear de um objeto pode ser gerado em um vídeo. Por exemplo, conforme mostrado no exemplo da Figura 7, um movimento não linear de um objeto, tal como ampliação, redução, rotação, transformada afim ou similares de uma câmera pode ocorrer. Quando um movimento não linear de um objeto ocorre, o movimento do objeto não pode ser expresso de modo eficaz com um vetor de movimento translacional. Consequentemente, a eficiência de codificação pode ser aprimorada com uso de um movimento afim em vez de um movimento translacional em uma área em que um movimento não linear de um objeto ocorre.
[128] A Figura 8 é um fluxograma que ilustra um método de interpredição com base em um movimento afim de acordo com uma modalidade da presente invenção.
[129] A possibilidade de uma técnica de interpredição com base em um movimento afim ser aplicada ao bloco atual pode ser determinada com base nas informações analisadas a partir de um fluxo de bits. Especificamente, a possibilidade de a técnica de interpredição com base em um movimento afim ser aplicada ao bloco atual pode ser determinada com base em pelo menos um dentre uma sinalização que indica a possibilidade de o modo de mescla afim ser aplicado ao bloco atual e uma sinalização que indica a possibilidade de o modo de predição de vetor de movimento afim ser aplicado ao bloco atual.
[130] Quando a técnica de interpredição com base em um movimento afim é aplicada ao bloco atual, um modelo de movimento afim do bloco atual pode ser determinado (S801). 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 com uso de seis parâmetros, e o modelo de movimento afim de quatro parâmetros expressa um movimento afim com uso de quatro parâmetros.
[131] A Equação 1 expressa um movimento afim com uso de seis parâmetros. O movimento afim representa um movimento translacional para uma área predeterminada determinada por vetores de semente afim.
【EQUAÇÃO 1】 𝑣𝑥 = 𝑎𝑥 − 𝑏𝑦 + 𝑒 𝑣𝑦 = 𝑐𝑥 + 𝑑𝑦 + 𝑓
[132] Quando um movimento afim é expresso com uso de 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, eficiência de codificação pode ser diminuída. Consequentemente, o movimento afim pode ser expresso com uso de quatro parâmetros. A Equação 2 expressa um movimento afim com uso de quatro parâmetros. 【EQUAÇÃO 2】 𝑣𝑥 = 𝑎𝑥 − 𝑏𝑦 + 𝑒 𝑣𝑦 = 𝑏𝑥 + 𝑎𝑦 + 𝑓
[133] Informações para determinar um modelo de movimento afim do bloco atual podem ser codificadas e sinalizadas através de um fluxo de bits. Por exemplo, as informações podem ser uma sinalização de 1 bit de “affine_type_flag”. Quando o valor numérico da sinalização é 0, o mesmo pode indicar que um modelo de movimento afim de 4 parâmetros é aplicado, e quando o valor numérico da sinalização é 1, o mesmo pode indicar que um modelo de movimento afim de 6 parâmetros é aplicado. A sinalização pode ser codificada pela unidade de fatia, peça ou bloco (por exemplo, pela unidade de bloco de conversão em código ou árvore de conversão em código). Quando uma sinalização é sinalizada no nível de fatia, um modelo de movimento afim determinado no nível de fatia pode ser aplicado a todos os blocos pertencentes à fatia.
[134] Alternativamente, um modelo de movimento afim do bloco atual pode ser determinado com base em um modo de interpredição afim do bloco atual. Por exemplo, quando o modo de mescla 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 predição de vetor de movimento afim é aplicado, informações para determinar o modelo de movimento afim do bloco atual podem ser codificadas e sinalizadas através de um fluxo de bits. Por exemplo, quando o modo de predição de vetor de movimento afim é aplicado ao bloco atual, o modelo de movimento afim do bloco atual pode ser determinado com base na sinalização de 1 bit de “affine_type_flag”.
[135] Em seguida, um vetor de semente afim do bloco atual pode ser derivado (S802). 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 denominado como um vetor de semente afim. O ponto de controle pode incluir pelo menos um dentre o canto esquerdo superior, o canto direito superior e o canto esquerdo inferior do bloco atual.
[136] A Figura 9 é uma vista que mostra um exemplo de vetores de semente afim de cada modelo de movimento afim.
[137] No modelo de movimento afim de 4 parâmetros, vetores de semente afim podem ser derivados para dois dentre o canto esquerdo superior, o canto direito superior e o canto esquerdo de fundo. Por exemplo, conforme mostrado no exemplo da Figura 9(a), quando um modelo de movimento afim de
4 parâmetros é selecionado, um vetor afim pode ser derivado com uso do vetor de semente afim sv0 para o canto esquerdo superior do bloco atual (por exemplo, amostra esquerda superior (x1, y1)) e o vetor de semente afim sv1 para o canto direito superior do bloco atual (por exemplo, a amostra direita superior (x1, y1)). Também é possível usar um vetor de semente afim para o canto esquerdo de fundo em vez do vetor de semente afim para o canto esquerdo superior, ou usar um vetor de semente afim para o canto esquerdo de fundo em vez do vetor de semente afim para o canto direito superior.
[138] No modelo de movimento afim de 6 parâmetros, vetores de semente afim podem ser derivados para o canto esquerdo superior, o canto direito superior e o canto esquerdo de fundo. Por exemplo, conforme mostrado no exemplo da Figura 9 (b), quando um modelo de movimento afim de 6 parâmetros é selecionado, um vetor afim pode ser derivado com uso do vetor de semente afim sv0 para o canto esquerdo superior do bloco atual (por exemplo, amostra esquerda superior (x1, y1)), o vetor de semente afim sv1 para o canto direito superior do bloco atual (por exemplo, a amostra direita superior (x1, y1)), e o vetor de semente afim sv2 para o canto esquerdo superior do bloco atual (por exemplo, amostra esquerda superior (x2, y2)).
[139] Na modalidade descrito abaixo, no modelo de movimento afim de 4 parâmetros, os vetores de semente afim do ponto de controle esquerdo superior e do ponto de controle direito superior serão denominados como um primeiro vetor de semente afim e um segundo vetor de semente afim, respectivamente. Nas modalidades que usam o primeiro vetor de semente afim e o segundo vetor de semente afim descritos abaixo, pelo menos um dentre o primeiro vetor de semente afim e o segundo vetor de semente afim podem ser substituídos pelo vetor de semente afim do ponto de controle esquerdo de fundo (um terceiro vetor de semente afim) ou o vetor de semente afim do ponto de controle direito de fundo (um quarto vetor de semente afim).
[140] Adicionalmente, no modelo de movimento afim de 6 parâmetros, os vetores de semente afim do ponto de controle esquerdo superior, o ponto de controle direito superior, e o ponto de controle esquerdo de fundo serão denominados como um primeiro vetor de semente afim, um segundo vetor de semente afim, e um terceiro vetor de semente afim, respectivamente. Nas modalidades que usam o primeiro vetor de semente afim, o segundo vetor de semente afim, e o terceiro vetor de semente afim descritos abaixo, pelo menos um dentre o primeiro vetor de semente afim, o segundo vetor de semente afim, e o terceiro vetor de semente afim podem ser substituídos pelo vetor de semente afim do ponto de controle direito de fundo (um quarto vetor de semente afim).
[141] Um vetor afim pode ser derivado para cada sub-bloco com uso dos vetores de semente afim (S803). Aqui, o vetor afim representa um vetor de movimento translacional derivado com base nos vetores de semente afim. O vetor afim de um sub-bloco pode ser denominado como um vetor de movimento de sub-bloco afim ou um vetor de movimento de sub-bloco.
[142] A Figura 10 é uma vista que mostra um exemplo de vetores afins de sub-blocos em um modelo de movimento de 4 parâmetros.
[143] 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 semente afim. Por exemplo, a Equação 3 mostra um exemplo de derivação de um vetor de sub-bloco afim. 【EQUAÇÃO 3】 (𝑠𝑣1𝑥 − 𝑠𝑣0𝑥 ) (𝑠𝑣1𝑦 − 𝑠𝑣0𝑦 ) 𝑣𝑥 = (𝑥 − 𝑥0 ) − (𝑦 − 𝑦0 ) + 𝑠𝑣0𝑥 (𝑥1 − 𝑥0 ) (𝑥1 − 𝑥0 ) (𝑠𝑣1𝑦 − 𝑠𝑣0𝑦 ) (𝑠𝑣1𝑥 − 𝑠𝑣0𝑥 ) 𝑣𝑦 = (𝑥 − 𝑥0 ) − (𝑦 − 𝑦0 ) + 𝑠𝑣0𝑦 (𝑥1 − 𝑥0 ) (𝑥1 − 𝑥0 )
[144] 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 esquerdo superior do sub-bloco, ou uma amostra cujo pelo menos um dentre as coordenadas de 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 semente afim. Adicionalmente, (x1, y1) denota a posição do segundo ponto de controle, e (sv1x, sv1y) denota o segundo vetor de semente afim.
[145] Quando o primeiro ponto de controle e o segundo ponto de controle correspondem ao canto esquerdo superior e ao canto direito superior do bloco atual respectivamente, x1-x0 pode ser ajustado para a um valor igual à largura do bloco atual.
[146] Em seguida, a predição de compensação de movimento para cada sub-bloco pode ser realizada com uso do vetor afim de cada sub-bloco (S804). Como resultado de realização da predição de compensação de movimento, um bloco de predição para cada sub-bloco pode ser gerado. Os blocos de predição dos sub-blocos podem ser ajustados como os blocos de predição do bloco atual.
[147] Em seguida, um método de interpredição com uso de informações de movimento translacional será descrito em detalhes.
[148] Informações de movimento do bloco atual podem ser derivadas de informações de movimento de outro bloco. Aqui, outro bloco pode ser um bloco codificado/decodificado por interpredição antes do bloco atual. O ajuste 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 mescla. Adicionalmente, o ajuste do vetor de movimento de outro bloco como a predição valor do vetor de movimento do bloco atual pode ser definido como um vetor de movimento modo de predição.
[149] A Figura 11 é um fluxograma que ilustra um processo de derivação de informações de movimento de um bloco atual com uso de um modo de mescla.
[150] Um candidato de mescla do bloco atual pode ser derivado (S1101). O candidato de mescla do bloco atual pode ser derivado de um bloco codificado/decodificado por interpredição antes do bloco atual.
[151] A Figura 12 é uma vista que mostra um exemplo de blocos candidatos usado para derivar um candidato de mescla.
[152] Os blocos candidatos podem incluir pelo menos um dentre blocos vizinhos que incluem uma amostra adjacente ao bloco atual ou blocos não vizinhos incluindo uma amostra não adjacente ao bloco atual. Doravante, amostras para determinar blocos candidatos são definidas como amostras de referência. Adicionalmente, uma amostra de referência adjacente ao bloco atual é denominada como amostra de referência vizinha, e uma amostra de referência não adjacente ao bloco atual é denominada como amostra de referência não vizinha.
[153] A amostra de referência vizinha pode ser incluída em uma coluna vizinha da coluna mais à esquerda do bloco atual ou uma fileira vizinha da fileira superior do bloco atual. Por exemplo, quando as coordenadas da amostra esquerda superior do bloco atual é (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 uma 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. Em referência ao desenho, blocos vizinhos do índice 0 a 4 podem ser usados como blocos candidatos.
[154] A amostra de referência não vizinha representa uma amostra cujo pelo menos uma dentre uma distância de eixo geométrico x e uma distância de eixo geométrico y de uma amostra de referência adjacente ao bloco atual tem um valor pré-definido. Por exemplo, pelo menos um dentre um bloco que inclui uma amostra de referência cuja distância de eixo geométrico x da amostra de referência esquerda é um valor pré- definido, um bloco que inclui uma amostra não vizinha cuja distância de eixo geométrico y da amostra de referência superior é um valor pré-definido, e um bloco que inclui uma amostra não vizinha cuja distância de eixo geométrico x e a distância de eixo geométrico y da amostra de referência esquerda superior são valores pré-definidos pode ser usada como um bloco candidato. Os valores pré-definidos podem ser um número natural, tal como 4, 8, 12, 16 ou similares. Em referência ao desenho, pelo menos um dentre os blocos do índice 5 ao 26 podem ser usados como um bloco candidato.
[155] Uma amostra não posicionada na mesma linha vertical, linha horizontal, ou linha diagonal visto que a amostra de referência vizinha pode ser ajustada como uma amostra de referência não vizinha.
[156] A Figura 13 é uma vista que mostra posições de amostras de referência.
[157] Conforme mostrado no exemplo da Figura 13, as coordenadas x das amostras de referência não vizinhas superior podem ser ajustadas para serem diferentes das coordenadas x das amostras de referência vizinhas superior. Por exemplo, quando a posição da amostra de referência superior vizinha é (W-1, -1), a posição de uma amostra de referência superior não vizinha separadas tanto quanto N da amostra de referência superior vizinha no eixo geométrico y pode ser ajustada a ((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 superior vizinha no eixo geométrico y pode ser ajustada para (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.
[158] Doravante, um bloco candidato incluindo uma amostra de referência vizinha dentre os blocos candidatos é denominado como um bloco vizinho, e um bloco que inclui uma amostra de referência não vizinha é denominado como um bloco não vizinho.
[159] Quando a distância entre o bloco atual e o bloco candidato é maior ou igual a um valor limítrofe, o bloco candidato pode ser ajustado para ser disponível como um candidato de mescla. O valor limítrofe pode ser determinado com base no tamanho da unidade de árvore de conversão em código. Por exemplo, o valor limítrofe pode ser ajustado à altura (ctu_height) da unidade de árvore de conversão em código ou um valor obtido adicionando-se ou subtraindo-se um deslocamento à altura ou da mesma (por exemplo, ctu_height ± N) da unidade de árvore de conversão em código. O deslocamento N é um valor pré-definido no codificador e no decodificador, e pode ser ajustado para 4, 8, 16, 32 ou ctu_height.
[160] Quando a diferença entre a coordenada de eixo geométrico y do bloco atual e a coordenada de eixo geométrico y de uma amostra incluída em um bloco candidato é maior do que o valor limítrofe, o bloco candidato pode ser determinado para ser indisponível como um candidato de mescla.
[161] Alternativamente, um bloco candidato que não pertence à mesma unidade de árvore de conversão em código visto que o bloco atual pode ser ajustado para ser indisponível como um candidato de mescla. Por exemplo, quando uma amostra de referência se desvia da delimitação superior de uma unidade de árvore de conversão em código à qual o bloco atual pertence, um bloco candidato incluindo a amostra de referência pode ser ajustado para ser indisponível como um candidato de mescla.
[162] Quando a delimitação superior do bloco atual é adjacente à delimitação superior da unidade de árvore de conversão em código, uma pluralidade de blocos candidatos é determinada para ser indisponível como um candidato de mescla, e desse modo, a eficiência de codificação/decodificação do bloco atual pode diminuir. Para solucionar esse problema, blocos candidatos podem ser ajustados 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.
[163] A Figura 14 é uma vista que mostra um exemplo de blocos candidatos usado para derivar um candidato de mescla.
[164] Conforme mostrado no exemplo da Figura 14, blocos superiores pertencentes às N colunas de bloco superior do bloco atual e blocos de lado esquerdo pertencentes ao M colunas de bloco de lado esquerdo do bloco atual podem ser ajustadas como blocos candidatos. Nesse ponto, o número de blocos de lado esquerdo candidatos pode ser ajustado para ser maior do que o número de blocos candidatos superiores ajustando-se M para ser maior do que N.
[165] Por exemplo, a diferença entre a coordenada de eixo geométrico y da amostra de referência no bloco atual e a coordenada de eixo geométrico y do bloco superior que pode ser usado como um bloco candidato pode ser ajustado para não exceder N vezes a altura do bloco atual. Adicionalmente, a diferença entre a coordenada de eixo geométrico x da amostra de referência no bloco atual e a coordenada de eixo geométrico x do bloco de lado esquerdo que pode ser usado como um bloco candidato pode ser ajustado para não exceder M vezes a largura do bloco atual.
[166] Por exemplo, no exemplo mostrado na Figura 14, é mostrado que blocos pertencentes às colunas de dois blocos superiores do bloco atual e blocos pertencentes às colunas de cinco blocos de lado esquerdas do bloco atual são ajustadas como blocos candidatos.
[167] Como outro exemplo, quando um bloco candidato não pertence a uma unidade de árvore de conversão em código igual à do bloco atual, um candidato de mescla pode ser derivado com uso de um bloco pertencente à mesma unidade de árvore de conversão em código as o bloco atual ou um bloco que inclui uma amostra de referência adjacente à delimitação da unidade de árvore de conversão em código, em vez do bloco candidato.
[168] A Figura 15 é uma vista que mostra um exemplo no qual a posição de uma amostra de referência é mudada.
[169] Quando uma amostra de referência é incluída em uma unidade de árvore de conversão em código diferente do bloco atual, e a amostra de referência não é adjacente à delimitação da unidade de árvore de conversão em código, um bloco candidato pode ser determinado com uso de uma amostra de referência adjacente à delimitação da unidade de árvore de conversão em código, em vez da amostra de referência.
[170] Por exemplo, nos exemplos mostrados nas Figuras 15 (a) e 15 (b), quando a delimitação superior do bloco atual e a delimitação superior da unidade de árvore de conversão em código estão em contato entre si, as amostras de referência no topo do bloco atual pertencentes a uma unidade de árvore de conversão em código diferente do bloco atual. Dentre as amostras de referência pertencentes à unidade de árvore de conversão em código diferente do bloco atual, uma amostra de referência não adjacente à delimitação superior da unidade de árvore de conversão em código pode ser substituída por uma amostra adjacente à delimitação superior da unidade de árvore de conversão em código.
[171] Por exemplo, conforme mostrado no exemplo da Figura 15 (a), a amostra de referência na posição 6 é substituída pela amostra na posição 6’ posicionada na delimitação superior da unidade de árvore de conversão em código, e conforme mostrado no exemplo da Figura 15 (b), a amostra de referência na posição 15 é substituída pela amostra na posição 15’ posicionada na delimitação superior da unidade de árvore de conversão em código. Nesse ponto, a coordenada y da amostra de substituição é mudada para uma posição adjacente à unidade de árvore de conversão em código, e a coordenada x da amostra de substituição pode ser ajustada 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.
[172] Alternativamente, um valor obtido adicionando-se ou subtraindo-se um deslocamento à coordenada x ou a partir da mesma da amostra de referência pode ser ajustada como a coordenada x da amostra de substituição. Por exemplo, quando as coordenadas x da amostra de referência vizinha posicionadas no topo do bloco atual e a amostra de referência não vizinha são iguais, um valor obtido adicionando- se ou subtraindo-se um deslocamento à coordenada x ou a partir da mesma da amostra de referência pode ser ajustada como a coordenada x da amostra de substituição. Isso é para evitar 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.
[173] A Figura 16 é uma vista que mostra um exemplo no qual a posição de uma amostra de referência é mudada.
[174] Ao substituir uma amostra de referência que é incluída em uma unidade de árvore de conversão em código diferente do bloco atual e não é adjacente à delimitação da unidade de árvore de conversão em código com uma amostra posicionada na delimitação da unidade de árvore de conversão em código, um valor obtido adicionando-se ou subtraindo-se um deslocamento à coordenada x e a partir da mesma da amostra de referência pode ser ajustada como a coordenada x da amostra de substituição.
[175] Por exemplo, no exemplo mostrado na Figura 16, a amostra de referência na posição 6 e a amostra de referência na posição 15 pode ser substituída com a amostra na posição 6’ e a amostra na posição 15’ respectivamente, cujas coordenadas y são iguais às da fileira adjacente à delimitação superior da unidade de árvore de conversão em código. Nesse ponto, a coordenada x da amostra na posição 6’ pode ser ajustada para um valor obtido subtraindo-se 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 ajustada para um valor obtido subtraindo-se W-1 da coordenada x da amostra de referência na posição 15.
[176] Diferente dos exemplos mostrados nas Figuras 15 e 16, a coordenada y da fileira posicionada no topo da fileira superior do bloco atual ou a coordenada y da delimitação superior da unidade de árvore de conversão em código pode ser ajustada como a coordenada y da amostra de substituição.
[177] Embora não seja mostrada, uma amostra que substitui a amostra de referência pode ser determinada com base na delimitação de lado esquerdo da unidade de árvore de conversão em código. Por exemplo, quando a amostra de referência não é incluída na mesma unidade de árvore de conversão em código as o bloco atual e não é adjacente à delimitação de lado esquerdo da unidade de árvore de conversão em código, a amostra de referência pode ser substituída por uma amostra adjacente à delimitação de lado esquerdo da unidade de árvore de conversão em código. Nesse 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- se ou subtraindo-se um deslocamento à coordenada y e a partir da mesma da amostra de referência.
[178] Em seguida, um bloco que inclui a amostra de substituição pode ser ajustado como um bloco candidato, e um candidato de mescla do bloco atual pode ser derivado com base no bloco candidato.
[179] Um candidato de mescla também pode ser derivado de um bloco temporariamente vizinho incluído em uma foto diferente do bloco atual. Por exemplo, um candidato de mescla pode ser derivado de um bloco colocado incluído em uma foto colocalizada.
[180] As informações de movimento do candidato de mescla podem ser ajustadas para serem iguais às informações de movimento do bloco candidato. Por exemplo, pelo menos um dentre um vetor de movimento, uma foto de referência o índice, uma direção de predição, e um índice de peso bidirecional do bloco candidato pode ser ajustado como informações de movimento do candidato de mescla.
[181] Uma lista de candidatos de mescla incluindo candidatos de mescla pode ser gerada (S1102). Os candidatos de mescla podem ser divididos em um candidato de mescla adjacente derivado de um bloco vizinho adjacente ao bloco atual e um candidato de mescla não adjacente derivado de um bloco não vizinho.
[182] Índices dos candidatos de mescla na lista de candidatos de mescla podem ser designados em uma ordem predeterminada. Por exemplo, um índice designado para um candidato de mescla adjacente pode ter um valor menor do que um índice designado para um candidato de mescla não adjacente. Alternativamente, um índice pode ser designado para cada um dos candidatos de mescla com base no índice de cada bloco mostrado na Figura 12 ou 14.
[183] Quando uma pluralidade de candidatos de mescla é incluída na lista de candidatos de mescla, pelo menos um dentre a pluralidade de candidatos de mescla pode ser selecionado (S1103). Nesse ponto, informações que indicam a possibilidade de informações de movimento do bloco atual serem derivadas de um candidato de mescla adjacente podem ser sinalizadas através de um fluxo de bits. As informações podem ser um sinalizador de 1 bit. Por exemplo, um elemento de sintaxe isAdjancentMergeFlag que a possibilidade de as informações de movimento do bloco atual serem derivadas de um candidato de mescla adjacente pode ser sinalizado através de um fluxo de bits. Quando o valor dos elementos de sintaxe isAdjancentMergeFlag é 1, informações de movimento do bloco atual podem ser derivadas com base no candidato de mescla adjacente. Por outro lado, quando o valor dos elementos de sintaxe isAdjancentMergeFlag é 0, informações de movimento do bloco atual podem ser derivadas com base em um candidato de mescla não adjacente.
[184] A tabela 1 mostra uma tabela de sintaxe que inclui elemento de sintaxe isAdjancentMergeFlag. 【TABELA 1】 coding_unit( x0, y0, cbWidth, cbHeight, treeType Descritor ) { 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)
coding_unit( x0, y0, cbWidth, cbHeight, treeType Descritor ) { } } } 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) }
[185] Informações para especificar um dentre uma pluralidade de candidatos de mescla podem ser sinalizadas através de um fluxo de bits. Por exemplo, informações que indicam um índice de qualquer um dentre os candidatos de mescla incluídos na lista de candidatos de mescla podem ser sinalizadas através de um fluxo de bits.
[186] Quando isAdjacentMergeflag é 1, elementos de sintaxe merge_idx que especificar um dentre os candidatos de mescla adjacentes podem ser sinalizados. O valor numérico máximo de elementos de sintaxe merge_idx pode ser ajustado para um valor obtido subtraindo-se 1 do número de candidatos de mescla adjacentes.
[187] Quando isAdjacentMergeflag é 0, elementos de sintaxe NA_merge_idx que especificam um dentre os candidatos de mescla não adjacentes podem ser sinalizados. Os elementos de sintaxe NA_merge_idx representa um valor obtido subtraindo- se o número de candidatos de mescla adjacentes do índice do candidato de mescla não adjacente. O decodificador pode selecionar um candidato de mescla não adjacente adicionando- se o número de candidatos de mescla adjacentes a um índice especificado por NA_merge_idx.
[188] Quando o número de candidatos de mescla incluídos na lista de candidatos de mescla é menor do que um valor limítrofe, o candidato de mescla incluído na lista de informações de movimento de inter-região pode ser adicionado à lista de candidatos de mescla. Aqui, o valor limítrofe pode ser o número máximo de candidatos de mescla que pode ser incluído na lista de candidatos de mescla ou um valor obtido subtraindo-se um deslocamento do número máximo de candidatos de mescla. O deslocamento pode ser um número natural, tal como 1, 2 ou similares. A lista de informações de movimento de inter-região pode incluir um candidato de mescla derivado com base em um bloco codificado/decodificado antes do bloco atual.
[189] A lista de informações de movimento de inter-região inclui um candidato de mescla derivado de um bloco codificado/decodificado com base em interpredição na foto atual. Por exemplo, informações de movimento de um candidato de mescla incluído na lista de informações de movimento de inter-região podem ser ajustadas para serem iguais às informações de movimento de um bloco codificado/decodificado com base em interpredição. Aqui, as informações de movimento podem incluir pelo menos um dentre um vetor de movimento, uma foto de referência o índice, uma direção de predição e um índice de peso bidirecional. Para conveniência de explicação, um candidato de mescla incluído na lista de informações de movimento de inter-região será denominado como um candidato de mescla de inter-região.
[190] Quando um candidato de mescla do bloco atual é selecionado, o vetor de movimento do candidato de mescla selecionado é definido como um vetor de movimento inicial, e a predição de compensação de movimento pode ser realizada para o bloco atual usando um vetor de movimento derivado pela adição ou subtração de um vetor de deslocamento de ou a partir do vetor de movimento inicial. A derivação de um novo vetor de movimento pela adição ou subtração de um vetor de deslocamento de ou a partir de um vetor de movimento de um candidato de mescla pode ser definida como um método de codificação de diferença de movimento de mescla.
[191] As informações que indicam se devem ou não usar o método de codificação de deslocamento de mescla podem ser sinalizadas por meio de um fluxo de bits. As informações podem ser sinalizadas merge_offset_vector_flag de um bit. Por exemplo, quando o valor de merge_offset_vector_flag for 1, indica que o método de codificação de diferença de movimento de mescla é aplicado ao bloco atual. Quando o método de codificação de diferença de movimento de mescla é aplicado ao bloco atual, o vetor de movimento do bloco atual pode ser derivado adicionando-se ou subtraindo-se um vetor de deslocamento para ou do vetor de movimento do candidato de mescla. Quando o valor de merge_offset_vector_flag de 0, indica que o método de codificação de diferença de movimento de mescla não é aplicado ao bloco atual. Quando o método de codificação de deslocamento de mescla não for aplicado, o vetor de movimento do candidato de mescla pode ser definido como o vetor de movimento do bloco atual.
[192] O sinalizador pode ser sinalizado apenas quando o valor de um sinalizador de salto, indicando se um modo de salto foi aplicado, for verdadeiro ou quando o valor de um sinalizador de mescla, indicando se um modo de mescla foi aplicado, for verdadeiro. Por exemplo, quando o valor de skip_flag indicando se o modo de salto é aplicado ao bloco atual for 1 ou quando o valor de merge_flag indicando se o modo de mescla é aplicado ao bloco atual for 1, merge_off_vector_flag pode ser codificado e sinalizado.
[193] Quando for determinado que o método de codificação de deslocamento de mescla é aplicado ao bloco atual, pelo menos uma dentre as informações que especificam um dentre os candidatos de mescla incluídos na lista de candidato de mescla, informações que indiquem a magnitude do vetor de deslocamento e informações que indiquem a direção do vetor de deslocamento, podem ser sinalizadas adicionalmente.
[194] As informações para determinar o número máximo de candidatos de mescla que a lista de candidato de mescla podem incluir, podem ser sinalizadas por meio de um fluxo de bits. Por exemplo, o número máximo de candidatos de mescla que a lista de candidato de mescla pode incluir, pode ser definido como um número natural de 6 ou menor.
[195] Quando é determinado que o método de codificação de deslocamento de mescla é aplicado ao bloco atual, apenas o número máximo de candidatos de mescla definido com antecedência pode ser definido como o vetor de movimento inicial do bloco atual. Ou seja, o número de candidatos de mescla, 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 mescla é aplicado. Por exemplo, quando o valor de merge_offset_vector_flag é definido para 0, o número máximo de candidatos de mescla que pode ser usado pelo bloco atual pode ser definido para M, enquanto que quando o valor de merge_offset_vector_flag é definido para 1, o número máximo de candidatos de mescla que pode ser usado pelo bloco atual pode ser definido para N. Aqui, M denota o número máximo de candidatos de mescla que a lista de candidato de mescla pode incluir, e N denota um número natural igual ou menor que M.
[196] Por exemplo, quando M for 6 e N for 2, dois candidatos de mescla com o menor índice entre os candidatos de mescla incluídos na lista de candidato de mescla podem ser definidos como estando disponíveis para o bloco atual. Consequentemente, um vetor de movimento de um candidato de mescla com um valor de índice de 0 ou um vetor de movimento de um candidato de mescla com um valor de índice 1 pode ser definido como um vetor de movimento inicial do bloco atual. Quando M e N forem o mesmo (por exemplo, quando M e N forem 2), todos os candidatos de mescla incluídos na lista de candidato de mescla pode ser definido como disponível para o bloco atual.
[197] Alternativamente, se um bloco vizinho pode ser usado como um candidato de mescla pode ser determinado com base em se o método de codificação de diferença de movimento de mescla for aplicado ao bloco atual. Por exemplo, quando o valor de merge_offset_vector_flag for 1, pelo menos um dentre um bloco vizinho adjacente ao canto superior direito do bloco atual, um bloco vizinho adjacente ao canto esquerdo de fundo e um bloco vizinho adjacente ao canto esquerdo de fundo pode ser definido como indisponível como um candidato de mescla. Consequentemente, quando o método de codificação de diferença de movimento de mescla é 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 de fundo esquerdo e um bloco vizinho adjacente ao canto de fundo esquerdo, não pode ser definido como um vetor de movimento inicial. Alternativamente, quando o valor de merge_offset_vector_flag for 1, um bloco vizinho temporário do bloco atual pode ser definido como indisponível como um candidato de mescla.
[198] Quando o método de codificação de diferença de movimento de mescla é aplicado ao bloco atual, ele pode ser configurado para não usar pelo menos um dentre um candidato de mescla por pares e um candidato de mescla zero. Consequentemente, quando o valor de merge_offset_vector_flag for 1, pelo menos um dentre o candidato de mescla por pares e o candidato de mescla zero não pode ser adicionado à lista de candidato de mescla, embora o número de candidatos de mescla incluídos na lista de candidato de mescla seja menor que o número máximo.
[199] O vetor de movimento do candidato de mescla pode ser definido como um vetor de movimento inicial do bloco atual. Neste ponto, quando o número de candidatos de mescla,
que podem ser usados pelo bloco atual for plural, as informações que especificam um dentre a pluralidade de candidatos de mescla podem ser sinalizadas por meio de um fluxo de bits. Por exemplo, quando o número máximo de candidatos de mescla que a lista de candidato de mescla pode incluir for maior que 1, as informações merge_idx indicando qualquer um dentre a pluralidade de candidatos de mescla, pode ser sinalizada por meio de um fluxo de bits. Ou seja, no método de codificação de deslocamento de mescla, um candidato de mescla pode ser especificado pelas informações merge_idx para especificar um dentre a pluralidade de candidatos de mescla. O vetor de movimento inicial do bloco atual pode ser definido como o vetor de movimento de um candidato de mescla indicado por merge_idx.
[200] Por outro lado, quando o número de candidatos de mescla que podem ser usados pelo bloco atual for 1, a sinalização de informações para especificar um candidato de mescla pode ser omitida. Por exemplo, quando o número máximo de candidatos de mescla, que a lista de candidatos de mescla pode incluir, não for maior que 1, a sinalização de informações merge_idx para especificar um candidato de mescla pode ser omitida. Ou seja, no método de codificação de deslocamento de mescla, quando um candidato de mescla for incluído na lista de candidato de mescla, a codificação de informações merge_idx para determinar o candidato de mescla pode ser omitida e o vetor de movimento inicial pode ser determinado com base no candidato de mescla incluído na lista de candidato de mescla. O vetor de movimento do candidato de mescla pode ser definido como um vetor de movimento inicial do bloco atual.
[201] Como outro exemplo, após um candidato de mescla do bloco atual ser determinado, se deve ou não aplicar o método de codificação de diferença de movimento de mescla ao bloco atual pode ser determinado.
Por exemplo, quando o número máximo de candidatos de mescla que a lista de candidato de mescla pode incluir for maior que 1, as informações merge_idx para especificar um dentre candidatos de mescla, podem ser sinalizadas.
Depois que um candidato de mescla é selecionado com base em merge_idx, merge_offset_vector_flag indicando se o método de codificação de diferença de movimento de mescla é aplicado ou não ao bloco atual pode ser decodificado.
A Tabela 2 é uma vista que mostra uma tabela de sintaxe de acordo com a modalidade descrita acima. 【TABELA 2】
coding_unit( x0, y0, cbWidth, cbHeight, treeType Descritor ) { 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 )
coding_unit( x0, y0, cbWidth, cbHeight, treeType Descritor ) { intra_chroma_pred_mode[ x0 ][ y0 ] ae(v) } else { /* MODE_INTER*/ if (cu_skip_falg[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 &&
coding_unit( x0, y0, cbWidth, cbHeight, treeType Descritor ) { 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) } }
[202] Como outro exemplo, após um candidato de mescla do bloco atual ser determinado, se deve ou não aplicar o método de codificação de diferença de movimento de mescla ao bloco atual, pode ser determinado apenas quando o índice do candidato de mescla determinado for menor do que o número máximo de candidatos de mescla que podem ser usados quando o método de codificação de diferença de movimento de mescla for aplicado. Por exemplo, apenas quando o valor de informações de índice merge_idx for menor que N, merge_offset_vector_flag, indicando se deve ou não aplicar o método de codificação de diferença de movimento de mescla ao bloco atual pode ser codificado e sinalizado. Quando o valor de informações do índice merge_idx for 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 for omitida, pode ser determinado que o método de codificação de diferença de movimento de mescla não é aplicado ao bloco atual.
[203] Alternativamente, após um candidato de mescla do bloco atual ser determinado, se deve ou não aplicar o método de codificação de diferença de movimento de mescla ao bloco atual, pode ser determinado considerando se o candidato de mescla determinado tem informações de movimento bidirecional ou informações de movimento unidirecional. Por exemplo, merge_offset_vector_flag indicando se deve ou não aplicar o método de codificação de diferença de movimento de mescla ao bloco atual, pode ser codificado e sinalizado apenas quando o valor de informações de índice merge_idx for menor que N e o candidato de mescla selecionado pelas informações de índice tem informações de movimento bidirecional. Alternativamente, merge_offset_vector_flag indicando se deve ou não aplicar o método de codificação de diferença de movimento de mescla ao bloco atual, pode ser codificado e sinalizado apenas quando o valor de informações de índice merge_idx for menor que N e o candidato de mescla selecionado pelas informações de índice tem informações de movimento unidirecional.
[204] Alternativamente, aplicar ou não o método de codificação de diferença de movimento de mescla 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 delimitação de uma unidade de árvore de conversão em código. Quando pelo menos um dentre o tamanho do bloco atual, o formato do bloco atual e se o bloco atual está em contato com a delimitação de uma unidade de árvore de conversão em código não satisfaz uma condição predefinida, a codificação de merge_offset_vector_flag indicando se deve ou não aplicar o método de codificação de diferença de movimento de mescla ao bloco atual, pode ser omitido.
[205] Quando um candidato de mescla é selecionado, o vetor de movimento do candidato de mescla 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.
[206] As informações que indicam a magnitude do vetor de deslocamento podem ser informações de índice que indicam qualquer um dentre os candidatos de magnitude do movimento. Por exemplo, as informações de índice distance_idx indicando qualquer um dentre os candidatos de magnitude de movimento pode ser sinalizada através de um fluxo de bits. A Tabela 3 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 3】 DistFromMergeMV[x0] distance_idx[x][y] binarização [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
[207] A magnitude de um vetor de deslocamento pode ser derivada dividindo a variável DistFromMergeMV por um valor predefinido. A Equação 4 mostra um exemplo de determinação da magnitude de um vetor de deslocamento. 【EQUAÇÃO 4】 𝑎𝑏𝑠(𝑜𝑓𝑓𝑠𝑒𝑡𝑀𝑉) = 𝐷𝑖𝑠𝑡𝐹𝑟𝑜𝑚𝑀𝑒𝑟𝑔𝑒𝑀𝑉 ≪ 2
[208] De acordo com a Equação 4, um valor obtido pela divisão da variável DistFromMergeMV por 4 ou um valor obtido pelo deslocamento da variável DistFromMergeMV para a esquerda por 2, pode ser definido como a magnitude de um vetor de deslocamento.
[209] Um número maior de candidatos de magnitude de movimento ou um número menor de candidatos de magnitude de movimento do que o exemplo mostrado na Tabela 3 pode ser usado ou uma faixa de candidatos de tamanho de vetor de movimento de deslocamento, 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 4 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 4】 DistFromMergeMV[x0] distance_idx[x][y] binarização [y0] 0 0 1 1 10 2 2 110 4 3 111 8
[210] Alternativamente, uma faixa de candidatos de tamanho de deslocamento do 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 pixel fracionário (fractional-pel), os valores da variável DistFromMergeMV correspondentes aos valores das informações de índice distance_idx podem ser definidos como 1, 2, 4, 8, 16 ou similares. Aqui, o pixel fracionário inclui pelo menos um dentre 1/16 pel, oitavo-pel, quarto-pel e meio-pel. Por outro lado, quando a precisão do vetor de movimento para o bloco atual é um pixel de número inteiro, os valores da variável DistFromMergeMV correspondentes aos valores de informações de índice distance_idx podem ser definidos como 4, 8, 16, 32, 64 e similares. Ou seja, uma tabela citada 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.
[211] Por exemplo, quando a precisão do vetor de movimento do bloco atual ou de um candidato de mescla é um quarto-pel, a variável DistFromMergeMV indicada por distance_idx pode ser derivada usando a Tabela 3. Por outro lado, quando a precisão do vetor de movimento do bloco atual ou de um candidato de mescla é um pixel de número inteiro, valor obtido tomando-se N vezes (por exemplo, 4 vezes) do valor da variável DistFromMergeMV indicada por distance_idx na Tabela 3, pode ser derivado como um valor da variável DistFromMergeMV.
[212] As informações para determinar a 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 uma sequência, foto, fatia ou nível de bloco.
Consequentemente, a faixa de candidatos de 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 de mescla do bloco atual. Por exemplo, a precisão do vetor de movimento do bloco atual pode ser definida para ser a mesma que a precisão do vetor de movimento do candidato de mescla.
[213] Alternativamente, informações para determinar uma faixa de busca do vetor de deslocamento podem ser sinalizadas através de um fluxo de bits. Pelo menos um dentre o número de candidatos de magnitude de movimento, um valor numérico mínimo dentre os candidatos de magnitude de movimento e um valor numérico máximo dentre os candidatos de magnitude de movimento, podem ser determinados com base na faixa de busca. Por exemplo, o sinalizador merge_offset_vector_flag para determinar uma faixa de busca do vetor de deslocamento pode ser sinalizado através de um fluxo de bits. As informações podem ser sinalizadas através de um cabeçalho de sequência, um cabeçalho de foto ou um cabeçalho de fatia.
[214] 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 numérico máximo de DistFromMergeMV pode ser definido para 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 vector 32 distâncias de amostra. Consequentemente, o valor numérico máximo de DistFromMergeMV pode ser definido para 128.
[215] 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 limítrofe. Por exemplo, o sinalizador distance_flag que indica se a magnitude do vetor de deslocamento é maior do que um valor limítrofe pode ser sinalizado por meio de um fluxo de bits. O valor limítrofe pode ser de 1, 2, 4, 8 ou 16. Por exemplo, quando distance_flag é 1, indica que a magnitude do vetor de deslocamento é maior que 4. Por outro lado, quando distance_flag é 0, indica que a magnitude do vetor de deslocamento é 4 ou inferior.
[216] Quando a magnitude do vetor de deslocamento é maior do que um valor limítrofe, um valor de diferença entre a magnitude do vetor de deslocamento e o valor limítrofe, 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 5 é uma tabela de sintaxe que mostra um processo de codificação distance_flag e distance_idx. 【TABELA 5】 coding_unit( x0, y0, cbWidth, cbHeight, treeType Descritor ) { if (slice_type! = I) { cu_skip_flag[x0][y0] ae(v) if (cu_skip_flag[x0][y0] = = 0) pred_mode_flag ae(v) }
coding_unit( x0, y0, cbWidth, cbHeight, treeType Descritor ) { 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_falg[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) {
coding_unit( x0, y0, cbWidth, cbHeight, treeType Descritor ) { 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) } }
[217] A Equação 5 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 5】 𝐷𝑖𝑠𝑡𝐹𝑟𝑜𝑚𝑀𝑒𝑟𝑔𝑒𝑀𝑉 = 𝑁 ∗ 𝑑𝑖𝑠𝑡𝑎𝑛𝑐_𝑓𝑙𝑎𝑔 + (1 ≪ 𝑑𝑖𝑠𝑡𝑎𝑛𝑐_𝑖𝑑𝑥)
[218] Na Equação 5, 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 similar. N denota um coeficiente determinado por um valor limítrofe. Por exemplo,
quando o valor limítrofe é 4, N pode ser definido como 16.
[219] 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 de direção do vetor. Por exemplo, informações de índice direction_idx que indicam qualquer um dentre os candidatos de direção do vetor podem ser sinalizados por meio de um fluxo de bits. A Tabela 6 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 6】 direction_idx[ binarização sinal[x][y][0] sinal[x][y][1] x][y] 0 00 +1 0 1 01 -1 0 2 10 0 +1 3 11 0 -1
[220] Na Tabela 6, o sinal [0] indica a direção horizontal e o sinal [1] indica a direção vertical. +1 indica que o valor do componente x ou o 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 6 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 6】 𝑜𝑓𝑓𝑠𝑒𝑡𝑀𝑉[0] = 𝑎𝑏𝑠(𝑜𝑓𝑓𝑠𝑒𝑡𝑀𝑉) ∗ 𝑠𝑖𝑔𝑛[0] 𝑜𝑓𝑓𝑠𝑒𝑡𝑀𝑉[1] = 𝑎𝑏𝑠(𝑜𝑓𝑓𝑠𝑒𝑡𝑀𝑉) ∗ 𝑠𝑖𝑔𝑛[1]
[221] Na Equação 6, 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.
[222] A Figura 17 é uma vista que mostra um vetor de deslocamento de acordo com os valores de distance_idx que indica uma magnitude de um vetor de deslocamento e direction_idx que indica uma direção do vetor de deslocamento.
[223] Conforme mostrado no exemplo da Figura 17, 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 limítrofe. Aqui, o valor limítrofe pode ter um valor predefinido no codificador e no decodificador. Por exemplo, o valor limítrofe pode ser de 32 distâncias de amostra. Alternativamente, o valor limítrofe pode ser determinado de acordo com a magnitude do vetor de movimento inicial. Por exemplo, o valor limítrofe 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 limítrofe para a direção vertical pode ser definido com base na magnitude do componente de direção vertical do vetor de movimento inicial.
[224] Quando um candidato de mescla tem informações de movimento bidirecional, o vetor de movimento L0 do candidato de mescla pode ser definido como vetor de movimento L0 inicial do bloco atual e o vetor de movimento L1 do candidato de mescla 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 foto de referência L0 do candidato de mescla e a foto atual (doravante, citado como valor de diferença L0) e um valor de diferença de ordem de saída entre L1 foto de referência do candidato de mescla e a foto atual (doravante, citado como valor de diferença L1).
[225] 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.
[226] A magnitude do vetor de deslocamento L0 e a magnitude do vetor de deslocamento L1 podem ser definidas para serem as mesmas. Alternativamente, a magnitude do vetor de deslocamento L1 pode ser determinada escalando-se o vetor de deslocamento L0 com base no valor de diferença L0 e no valor de diferença L1.
[227] Por exemplo, a Equação 7 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 7】 𝑜𝑓𝑓𝑠𝑒𝑡𝑀𝑉𝐿0[0] = 𝑎𝑏𝑠(𝑜𝑓𝑓𝑠𝑒𝑡𝑀𝑉) ∗ 𝑠𝑖𝑔𝑛[0] 𝑜𝑓𝑓𝑠𝑒𝑡𝑀𝑉𝐿0[1] = 𝑎𝑏𝑠(𝑜𝑓𝑓𝑠𝑒𝑡𝑀𝑉) ∗ 𝑠𝑖𝑔𝑛[1] 𝑜𝑓𝑓𝑠𝑒𝑡𝑀𝑉𝐿1[0] = 𝑎𝑏𝑠(𝑜𝑓𝑓𝑠𝑒𝑡𝑀𝑉) ∗ 𝑠𝑖𝑔𝑛[0] 𝑜𝑓𝑓𝑠𝑒𝑡𝑀𝑉𝐿1[1] = 𝑎𝑏𝑠(𝑜𝑓𝑓𝑠𝑒𝑡𝑀𝑉) ∗ 𝑠𝑖𝑔𝑛[1]
[228] Na Equação 7, 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.
[229] 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 diferentes. 【EQUAÇÃO 8】 𝑜𝑓𝑓𝑠𝑒𝑡𝑀𝑉𝐿0[0] = 𝑎𝑏𝑠(𝑜𝑓𝑓𝑠𝑒𝑡𝑀𝑉) ∗ 𝑠𝑖𝑔𝑛[0] 𝑜𝑓𝑓𝑠𝑒𝑡𝑀𝑉𝐿0[1] = 𝑎𝑏𝑠(𝑜𝑓𝑓𝑠𝑒𝑡𝑀𝑉) ∗ 𝑠𝑖𝑔𝑛[1] 𝑜𝑓𝑓𝑠𝑒𝑡𝑀𝑉𝐿1[0] = −1 ∗ 𝑎𝑏𝑠(𝑜𝑓𝑓𝑠𝑒𝑡𝑀𝑉) ∗ 𝑠𝑖𝑔𝑛[0] 𝑜𝑓𝑓𝑠𝑒𝑡𝑀𝑉𝐿1[1] = −1 ∗ 𝑎𝑏𝑠(𝑜𝑓𝑓𝑠𝑒𝑡𝑀𝑉) ∗ 𝑠𝑖𝑔𝑛[1]
[230] Mais de quatro candidatos de direção de vetor podem ser definidos. As Tabelas 7 e 8 mostram exemplos em que oito candidatos de direção de vetor são definidos. 【TABELA 7】 direction_idx[ binarização sinal[x][y][0] sinal[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 8】 direction_idx[ binarização sinal[x][y][0] sinal[x][y][1] x][y] 0 000 +1 0 direction_idx[ binarização sinal[x][y][0] sinal[x][y][1] x][y] 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
[231] Nas Tabelas 7 e 8, quando os valores absolutos de sinal [0] e sinal [1] são maiores que 0, indica que o vetor de deslocamento está na direção diagonal. Quando a Tabela 6 é usada, as magnitudes dos componentes do eixo geométrico x e o eixo geométrico y do vetor de deslocamento diagonal, são definidas para abs (offsetMV), enquanto quando a Tabela 7 é usada, as magnitudes dos componentes do geométrico x e o eixo geométrico y do vetor de deslocamento diagonal são definidos como abs (offsetMV/2).
[232] A Figura 18 é uma vista que mostra um vetor de deslocamento de acordo com os valores de distance_idx que indica uma magnitude de um vetor de deslocamento e direction_idx que indica uma direção do vetor de deslocamento.
[233] A Figura 18 (a) é uma vista que mostra um exemplo quando a Tabela 6 é aplicada, e a Figura 18 (b) é uma vista que mostra um exemplo quando a Tabela 7 é aplicada.
[234] As informações para determinar pelo menos um dentre o número e os tamanhos dos candidatos de direção do vetor podem ser sinalizadas através de um fluxo de bits. Por exemplo, o sinalizador merge_offset_direction_range_flag para determinar os candidatos de 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, foto ou fatia. Por exemplo, quando o valor numérico do sinalizador é 0, quatro candidatos de direção de vetor exemplificados na Tabela 6 podem ser usados. Por outro lado, quando o valor numérico do sinalizador for 1, oito candidatos de direção de vetor exemplificados na Tabela 7 ou Tabela 8 podem ser usados.
[235] Alternativamente, pelo menos um dentre o número e tamanhos de candidatos de 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 for igual ou menor que um valor de limiar, oito candidatos de direção de vetor exemplificados na Tabela 7 ou Tabela 8 podem ser usados. Por outro lado, quando o valor da variável DistFromMergeMV for maior do que o valor limítrofe, quatro candidatos de direção de vetor exemplificados na Tabela 6 podem ser usados.
[236] 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 no 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 for menor ou igual a um valor limítrofe, oito candidatos de direção de vetor exemplificados na Tabela 7 ou Tabela 8 podem ser usados. Por outro lado, quando a diferença entre MVx e MVy ou o valor absoluto da diferença for maior do que o valor limítrofe, quatro candidatos de direção de vetor exemplificados na Tabela 6 podem ser usados.
[237] O vetor de movimento do bloco atual pode ser derivado adicionando-se um vetor de deslocamento ao vetor de movimento inicial. A Equação 9 mostra um exemplo de determinação de um vetor de movimento do bloco atual. 【EQUAÇÃO 9】 𝑚𝑣𝐿0[0] = 𝑚𝑒𝑟𝑔𝑒𝑀𝑉𝐿0[0] + 𝑜𝑓𝑓𝑠𝑒𝑡𝑀𝑉𝐿0[0] 𝑚𝑣𝐿0[1] = 𝑚𝑒𝑟𝑔𝑒𝑀𝑉𝐿0[1] + 𝑜𝑓𝑓𝑠𝑒𝑡𝑀𝑉𝐿0[1] 𝑚𝑣𝐿1[0] = 𝑚𝑒𝑟𝑔𝑒𝑀𝑉𝐿1[0] + 𝑜𝑓𝑓𝑠𝑒𝑡𝑀𝑉𝐿1[0] 𝑚𝑣𝐿1[1] = 𝑚𝑒𝑟𝑔𝑒𝑀𝑉𝐿1[1] + 𝑜𝑓𝑓𝑠𝑒𝑡𝑀𝑉𝐿1[1]
[238] Na Equação 9, 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 é, o vetor de movimento L0 de um candidato de mescla), 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.
[239] A intrapredição é para prever um bloco atual com uso de amostras reconstruídas que foram codificados/decodificados na vizinhança do bloco atual. Nesse ponto, amostras reconstruídas antes de um filtro em circuito é aplicado pode ser usado para intrapredição do bloco atual.
[240] A técnica de intrapredição inclui intrapredição baseada em matriz, e intrapredição geral considerando a direcionalidade em relação às amostras reconstruídas vizinhas. Informações que indicam a técnica de intrapredição do bloco atual podem ser sinalizadas através de um fluxo de bits. As informações podem ser um sinalizador de 1 bit. Alternativamente, a técnica de intraprediçã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 intrapredição de um bloco vizinho. Por exemplo, quando o bloco atual existe através de uma delimitação de foto, o mesmo pode ser ajustado para não aplicar a intrapredição baseada em matriz ao bloco atual.
[241] A intrapredição baseada em matriz intrapredição é um método de aquisição de um bloco de predição do bloco atual por um codificador e um decodificador com base em um produto de matriz entre uma matriz anteriormente armazenada e amostras reconstruídas na vizinhança do bloco atual. Informações para especificar um dentre uma pluralidade de matrizes anteriormente armazenadas podem ser sinalizadas através de um fluxo de bits. O decodificador pode determinar uma matriz para intrapredição do bloco atual com base nas informações e no tamanho do bloco atual.
[242] A intrapredição geral é um método de aquisição de um bloco de predição para o bloco atual com base em um modo de intrapredição não angular ou um modo de intrapredição angular.
[243] Uma foto residual derivada pode ser derivada subtraindo-se um vídeo de predição de um vídeo original. Nesse ponto, quando o vídeo residual é mudado para o domínio de frequência, a qualidade de vídeo subjetiva do vídeo não é significativamente diminuída embora os componentes de alta frequência dentre os componentes de frequência sejam removidos. Consequentemente, quando valores dos componentes de alta frequência são convertidos para serem pequenos ou os valores dos componentes de alta frequência são ajustados para 0, há um efeito de aumentar a eficiência de compressão sem gerar distorção visual significativa. Refletindo essa 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 com uso de uma técnica de transformada tal como Transformada de Cosseno Discreta (DCT) ou Transformada de Seno Discreta (DST).
[244] Depois que o bloco atual é transformado com uso de DCT ou DST, o bloco atual transformado pode ser transformado novamente. Nesse ponto, a transformada com base em DCT ou DST pode ser definida como uma primeira transformada, e transformar novamente um bloco ao qual a primeira transformada é aplicada pode ser definida como uma segunda transformada.
[245] A primeira transformada pode ser realizada com uso de qualquer um dentre uma pluralidade de candidatos de núcleo de transformada. Por exemplo, a primeira transformada pode ser realizada com uso de qualquer um dentre DCT2, DCT8 ou DCT7.
[246] Diferentes núcleos de transformada podem ser usados para a direção horizontal e a direção vertical. Informações que indicam combinação de um núcleo de transformada da direção horizontal e um núcleo de transformada da direção vertical podem ser sinalizados através de um fluxo de bits.
[247] Unidades para realizar a primeira transformada e a segunda transformada podem ser diferentes. Por exemplo, a primeira transformada pode ser realizada em um bloco de 8×8, e a segunda transformada pode ser realizada em um sub-bloco de um tamanho de 4×4 dentre o bloco de 8×8 transformado. Nesse ponto, os coeficientes de transformada das regiões residuais que não foram realizados, a segunda transformada pode ser ajustada para 0.
[248] Alternativamente, a primeira transformada pode ser realizada em um bloco de 4 x 4, e a segunda transformada pode ser realizada em uma região de um tamanho de 8×8 incluindo o bloco de 4×4 transformado.
[249] Informações que indicam a possibilidade ou não de a segunda transformada ter sido realizada pode ser sinalizada através de um fluxo de bits.
[250] 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 de realizar a segunda transformada inversa e a primeira transformada inversa, sinais residuais para o bloco atual podem ser adquiridos.
[251] 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.
[252] Quando o codificador realiza transforma e quantização, o decodificador pode adquirir um bloco residual através de quantização inversa e transformada inversa. O decodificador pode adquirir um bloco reconstruído para o bloco atual adicionando-se um bloco de predição e o bloco residual.
[253] 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 através de filtração em circuito. Um filtro em circuito pode incluir pelo menos um dentre um filtro de desbloqueio, um filtro de deslocamento adaptativo de amostra (SAO) e um filtro de circuito adaptativo (ALF).
[254] A aplicação das modalidades descritas acima com foco em um processo de decodificação ou um processo de codificação a um processo de codificação ou um processo de decodificação é incluída no escopo da presente invenção. Mudar as modalidades descritas em uma ordem predeterminada em uma ordem diferente da ordem descrita é também incluída no escopo da presente invenção.
[255] Embora as modalidades acima foram descritas com base em uma série de etapas ou fluxogramas, isso não limita a ordem de série de tempo da presente invenção, e pode ser realizada simultaneamente ou em uma ordem diferente conforme necessário. Adicionalmente, cada um dos componentes (por exemplo, unidades, módulos, etc.) que constituem o diagrama de blocos nas modalidades descritas acima pode ser implementado 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 através de vários componentes de computador e registrados em uma mídia de registro legível por computador. A mídia de registro legível por computador pode incluir comandos de programa, arquivos de dados, estruturas de dados e similares independentemente ou em combinação. A mídia de registro legível por computador inclui, para exemplo, mídias magnéticas tais como um disco rígido, um disquete e uma fita magnética, mídias de registro óptico, tais como um CD-ROM e um DVD, mídias magneto-ópticas, tal como um disco floptical, e dispositivos de hardware especificamente configurados para armazenar e executar comandos de programa, tais como um ROM, um RAM, uma memória flash e similares. Os dispositivos de hardware descritos acima podem ser configurados para operar com uso de um ou mais módulos de software para realizar o processo da presente invenção e vice-versa.
[256] A presente invenção pode ser aplicada a um dispositivo eletrônico que codifica e decodifica um vídeo.

Claims (15)

REIVINDICAÇÕES
1. MÉTODO DE DECODIFICAÇÃO DE VÍDEO, caracterizado por compreender as etapas de: gerar uma lista de candidato de mescla para um bloco atual; determinar um candidato de mescla para o bloco atual dentre candidatos de mescla incluídos na lista de candidato de mescla; derivar um vetor de deslocamento para o bloco atual; e derivar um vetor de movimento para o bloco atual adicionando-se o vetor de deslocamento a um vetor de movimento do candidato de mescla.
2. MÉTODO, de acordo com a reivindicação 1, caracterizado pela magnitude do vetor de deslocamento ser determinada com base nas informações do primeiro índice, especificando um dentre os candidatos de magnitude do movimento.
3. MÉTODO, de acordo com a reivindicação 2, caracterizado por pelo menos um dentre um valor numérico máximo e um valor numérico mínimo dos candidatos de magnitude de movimento ser definido de forma diferente, de acordo com um valor numérico de um sinalizador, que indica uma faixa numérica dos candidatos de magnitude de movimento.
4. MÉTODO, de acordo com a reivindicação 3, caracterizado pelo sinalizador ser sinalizado em um nível de foto.
5. MÉTODO, de acordo com a reivindicação 2, caracterizado por pelo menos um dentre um valor numérico máximo e um valor numérico mínimo dos candidatos de magnitude de movimento ser definido de forma diferente, de acordo com a precisão do vetor de movimento para o bloco atual.
6. MÉTODO, de acordo com a reivindicação 2, caracterizado pela magnitude do vetor de deslocamento ser obtida aplicando-se uma operação de deslocamento a um valor indicado pelo candidato de magnitude de movimento especificado pelas primeiras informações de índice.
7. MÉTODO, de acordo com a reivindicação 2, caracterizado pela direção do vetor de deslocamento ser determinada com base nas informações do segundo índice, especificando um dentre os candidatos de direção de vetor.
8. MÉTODO DE CODIFICAÇÃO DE VÍDEO, caracterizado por compreender as etapas de: gerar uma lista de candidato de mescla para um bloco atual; selecionar um candidato de mescla para o bloco atual dentre os candidatos de mescla incluídos na lista de candidatos de mescla; derivar um vetor de deslocamento para o bloco atual; e derivar um vetor de movimento para o bloco atual adicionando-se o vetor de deslocamento a um vetor de movimento do candidato de mescla.
9. MÉTODO, de acordo com a reivindicação 8, caracterizado por compreender ainda a etapa de codificação de informações de primeiro índice, para especificar um candidato de magnitude de movimento, indicando uma magnitude do vetor de deslocamento dentre uma pluralidade de candidatos de magnitude de movimento.
10. MÉTODO, de acordo com a reivindicação 9,
caracterizado por compreender ainda a etapa de codificação de um sinalizador, que indica uma faixa numérica dos candidatos de magnitude de movimento, em que pelo menos um dentre um valor numérico máximo e um valor numérico mínimo dos candidatos de magnitude de movimento é definido de forma diferente de acordo com um valor numérico do sinalizador.
11. MÉTODO, de acordo com a reivindicação 10, caracterizado pelo sinalizador ser codificado em um nível de foto.
12. MÉTODO, de acordo com a reivindicação 9, caracterizado por pelo menos um dentre um valor numérico máximo e um valor numérico mínimo dos candidatos de magnitude de movimento ser definido de forma diferente, de acordo com a precisão do vetor de movimento para o bloco atual.
13. MÉTODO, de acordo com a reivindicação 9, caracterizado pelo candidato de magnitude de movimento ter um valor derivado pela aplicação de uma operação de deslocamento para a magnitude do vetor de deslocamento.
14. MÉTODO, de acordo com a reivindicação 9, caracterizado por compreender ainda a etapa de codificação de informações de segundo índice, para especificar um candidato de direção de vetor, indicando uma direção do vetor de deslocamento entre uma pluralidade de candidatos de direção de vetor.
15. APARELHO DE DECODIFICAÇÃO DE VÍDEO, caracterizado por compreender uma parte de interpredição para gerar uma lista de candidatos de mescla para um bloco atual, determinando um candidato de mescla para o bloco atual dentre os candidatos de mescla incluídos na lista de candidato de mescla, que deriva um vetor de deslocamento para o bloco atual e deriva um vetor de movimento para o bloco atual, adicionando- se o vetor de deslocamento a um vetor de movimento do candidato de mescla.
BR112021008091-0A 2018-11-08 2019-11-08 método de codificação e decodificação de sinal de vídeo e aparelho de decodificação de vídeo BR112021008091A2 (pt)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
KR20180136261 2018-11-08
KR10-2018-0136261 2018-11-08
PCT/KR2019/015194 WO2020096425A1 (ko) 2018-11-08 2019-11-08 영상 신호 부호화/복호화 방법 및 이를 위한 장치

Publications (1)

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

Family

ID=70612147

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112021008091-0A BR112021008091A2 (pt) 2018-11-08 2019-11-08 método de codificação e decodificação de sinal de vídeo e aparelho de decodificação de vídeo

Country Status (15)

Country Link
US (4) US11330290B2 (pt)
EP (2) EP4373082A1 (pt)
JP (2) JP7391958B2 (pt)
KR (1) KR20200054110A (pt)
CN (2) CN113691807B (pt)
AU (1) AU2019374663B2 (pt)
BR (1) BR112021008091A2 (pt)
CA (1) CA3118882C (pt)
CL (1) CL2021001135A1 (pt)
IL (1) IL282787A (pt)
MX (1) MX2021005149A (pt)
PH (1) PH12021551032A1 (pt)
SG (1) SG11202104427RA (pt)
WO (1) WO2020096425A1 (pt)
ZA (1) ZA202103323B (pt)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SG11202104427RA (en) * 2018-11-08 2021-05-28 Guangdong Oppo Mobile Telecommunications Corp Ltd Video signal encoding and decoding method, and apparatus therefor
CN113840144B (zh) * 2019-03-25 2023-06-02 Oppo广东移动通信有限公司 图像分量的预测方法、编码器、解码器及计算机存储介质
CN113678453B (zh) 2019-04-12 2024-05-14 北京字节跳动网络技术有限公司 基于矩阵的帧内预测的上下文确定
WO2020211807A1 (en) 2019-04-16 2020-10-22 Beijing Bytedance Network Technology Co., Ltd. Matrix derivation in intra coding mode
JP2022531147A (ja) 2019-05-01 2022-07-06 北京字節跳動網絡技術有限公司 フィルタリングを用いた行列ベースイントラ予測
CN113728647B (zh) 2019-05-01 2023-09-05 北京字节跳动网络技术有限公司 基于矩阵的帧内预测的上下文编码
KR20220011127A (ko) 2019-05-22 2022-01-27 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드 업샘플링을 이용한 행렬 기반 인트라 예측
JP2022535726A (ja) 2019-05-31 2022-08-10 北京字節跳動網絡技術有限公司 行列ベースイントラ予測における制約されたアップサンプリングプロセス
CN117768652A (zh) 2019-06-05 2024-03-26 北京字节跳动网络技术有限公司 视频处理方法、装置、介质、以及存储比特流的方法
KR20220082847A (ko) 2019-10-28 2022-06-17 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드 색상 성분에 기초한 신택스 시그널링 및 파싱
CN113727119B (zh) * 2020-05-20 2023-03-17 Oppo广东移动通信有限公司 帧间预测方法、编码器、解码器以及计算机存储介质

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2532159A1 (en) 2010-02-05 2012-12-12 Telefonaktiebolaget L M Ericsson (PUBL) Selecting predicted motion vector candidates
US9237355B2 (en) * 2010-02-19 2016-01-12 Qualcomm Incorporated Adaptive motion resolution for video coding
US20120051431A1 (en) * 2010-08-25 2012-03-01 Qualcomm Incorporated Motion direction based adaptive motion vector resolution signaling for video coding
JP2012186759A (ja) * 2011-03-08 2012-09-27 Jvc Kenwood Corp 動画像符号化装置、動画像符号化方法及び動画像符号化プログラム
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
TWI618401B (zh) * 2011-12-28 2018-03-11 Jvc Kenwood Corp Motion picture coding device, motion picture coding method and memory medium
JP5846133B2 (ja) * 2012-01-18 2016-01-20 株式会社Jvcケンウッド 動画像復号装置、動画像復号方法、及び動画像復号プログラム、並びに、受信装置、受信方法、及び受信プログラム
DK3833022T3 (da) 2012-04-12 2022-04-19 Jvckenwood Corp Fusionskandidatlistekonstruktion
US20130294513A1 (en) * 2012-05-07 2013-11-07 Qualcomm Incorporated Inter layer merge list construction for video coding
US10812822B2 (en) * 2015-10-02 2020-10-20 Qualcomm Incorporated Intra block copy merge mode and padding of unavailable IBC reference region
US10412407B2 (en) * 2015-11-05 2019-09-10 Mediatek Inc. Method and apparatus of inter prediction using average motion vector for video coding
CN116614639A (zh) * 2016-07-12 2023-08-18 韩国电子通信研究院 图像编码/解码方法和用于所述方法的记录介质
US10812791B2 (en) * 2016-09-16 2020-10-20 Qualcomm Incorporated Offset vector identification of temporal motion vector predictor
CN109997363B (zh) 2016-11-28 2023-12-05 英迪股份有限公司 图像编码/解码方法和装置以及存储有比特流的记录介质
KR102450863B1 (ko) 2017-03-22 2022-10-05 에스케이텔레콤 주식회사 움직임벡터를 부호화 또는 복호화하기 위한 장치 및 방법
US10701391B2 (en) 2017-03-23 2020-06-30 Qualcomm Incorporated Motion vector difference (MVD) prediction
US11051025B2 (en) 2018-07-13 2021-06-29 Tencent America LLC Method and apparatus for video coding
AU2019303651B2 (en) * 2018-07-18 2023-04-20 Panasonic Intellectual Property Corporation Of America Encoder, decoder, encoding method, and decoding method
US11039157B2 (en) * 2018-09-21 2021-06-15 Tencent America LLC Techniques for simplified affine motion model coding with prediction offsets
US10999589B2 (en) * 2018-10-04 2021-05-04 Tencent America LLC Method and apparatus for video coding
US11317099B2 (en) * 2018-10-05 2022-04-26 Tencent America LLC Method and apparatus for signaling an offset in video coding for intra block copy and/or inter prediction
SG11202104427RA (en) 2018-11-08 2021-05-28 Guangdong Oppo Mobile Telecommunications Corp Ltd Video signal encoding and decoding method, and apparatus therefor

Also Published As

Publication number Publication date
US11812051B2 (en) 2023-11-07
AU2019374663B2 (en) 2023-02-09
US20220232246A1 (en) 2022-07-21
US11330290B2 (en) 2022-05-10
CN113691807A (zh) 2021-11-23
US20220232245A1 (en) 2022-07-21
WO2020096425A1 (ko) 2020-05-14
JP7391958B2 (ja) 2023-12-05
CA3118882A1 (en) 2020-05-14
PH12021551032A1 (en) 2021-11-22
CL2021001135A1 (es) 2021-11-12
EP4373082A1 (en) 2024-05-22
JP2024020503A (ja) 2024-02-14
CA3118882C (en) 2023-09-26
CN113302921A (zh) 2021-08-24
EP3873092B1 (en) 2024-06-19
MX2021005149A (es) 2021-11-12
EP3873092A1 (en) 2021-09-01
CN113691807B (zh) 2023-05-09
AU2019374663A1 (en) 2021-06-03
EP3873092A4 (en) 2021-11-10
US11575932B2 (en) 2023-02-07
KR20200054110A (ko) 2020-05-19
US20230412834A1 (en) 2023-12-21
US20210314599A1 (en) 2021-10-07
SG11202104427RA (en) 2021-05-28
IL282787A (en) 2021-06-30
JP2022506429A (ja) 2022-01-17
ZA202103323B (en) 2022-07-27

Similar Documents

Publication Publication Date Title
BR112021008091A2 (pt) método de codificação e decodificação de sinal de vídeo e aparelho de decodificação de vídeo
BR112021008731A2 (pt) método de decodificação de vídeo e método de codificação de vídeo
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
KR20200104253A (ko) 영상 신호 부호화/복호화 방법 및 이를 위한 장치
US20210235075A1 (en) Video encoding and decoding method, video encoder, and video decoder
BR112021008625A2 (pt) método de decodificação e codificação de vídeo e aparelho de decodificação e codificação de vídeo
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
KR102597461B1 (ko) 영상 신호 부호화/복호화 방법 및 이를 위한 장치
RU2813667C2 (ru) Способ и устройство для кодирования и декодирования видеосигналов
KR20230063314A (ko) 영상 신호 부호화/복호화 방법 및 이를 기초로 생성된 비트스트림을 저장하는 기록 매체