BR112017020632B1 - Métodos e dispositivo para processar dados de vídeo e memória legível por computador - Google Patents

Métodos e dispositivo para processar dados de vídeo e memória legível por computador Download PDF

Info

Publication number
BR112017020632B1
BR112017020632B1 BR112017020632-3A BR112017020632A BR112017020632B1 BR 112017020632 B1 BR112017020632 B1 BR 112017020632B1 BR 112017020632 A BR112017020632 A BR 112017020632A BR 112017020632 B1 BR112017020632 B1 BR 112017020632B1
Authority
BR
Brazil
Prior art keywords
block
motion
video
sub
current block
Prior art date
Application number
BR112017020632-3A
Other languages
English (en)
Other versions
BR112017020632A2 (pt
Inventor
Xiang Li
Ying Chen
Li Zhang
Hongbin Liu
Jianle Chen
Marta Karczewicz
Original Assignee
Qualcomm Incorporated
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
Priority claimed from US15/080,480 external-priority patent/US11330284B2/en
Application filed by Qualcomm Incorporated filed Critical Qualcomm Incorporated
Publication of BR112017020632A2 publication Critical patent/BR112017020632A2/pt
Publication of BR112017020632B1 publication Critical patent/BR112017020632B1/pt

Links

Abstract

INFORMAÇÕES DE MOVIMENTO DE DERIVAÇÃO PARA SUB-BLOCOS EM CONVERSÃO DE VÍDEO EM CÓDIGO. Trata-se de um método para processamento de dados de vídeo que inclui dividir um bloco atual de dados de vídeo em uma pluralidade de sub-blocos para derivar informações de movimento do bloco atual, sendo que as informações de movimento indicam movimento do bloco atual com relação aos dados de vídeo de referência. O método também inclui derivar, separadamente para cada respectivo sub-bloco da pluralidade de sub-blocos, informações de movimento que compreendem realizar uma busca de movimento para um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora de cada respectivo sub-bloco. O método também inclui decodificar a pluralidade de sub-blocos com base nas informações de movimento derivadas e sem decodificar elementos de sintaxe representativos das informações de movimento.

Description

[001] Este pedido reivindica o benefício do Pedido Provisório sob no U.S. 62/139.572 depositado em 27 de março de 2015 e do Pedido Provisório sob no U.S. 62/182.367 depositado em 19 de junho de 2015, cujos conteúdos inteiros são incorporados no presente documento, a título de referência.
CAMPO DA TÉCNICA
[002] Esta revelação refere-se à codificação de vídeo.
ANTECEDENTES
[003] As capacidades de vídeo digital podem ser incorporadas em uma grande variedade de dispositivos, incluindo televisões digitais, sistemas de difusão direta digital, sistema de difusão sem fio, assistentes digitais pessoais (PDAs), computadores do tipo laptop ou desktop, computadores do tipo tablet, leitores de e-book, câmeras digitais, dispositivos de gravação digital, reprodutores de mídia digital, dispositivos de jogos eletrônicos, consoles de jogos eletrônicos, telefones de rádio via satélite ou celular, os chamados de "telefones inteligentes", dispositivos de teleconferência por vídeo, dispositivos de transmissão contínua de vídeo e similares. Os dispositivos de vídeo digital implantam técnicas de codificação de vídeo como aqueles descritos nos padrões definidos por MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, Parte 10, Codificação de Vídeo Avançada (AVC), o padrão de Codificação de Vídeo de Alta Eficiência (HEVC) e extensões de tais padrões. Os dispositivos de vídeo podem transmitir, receber, codificar, decodificar e/ou armazenar informações de vídeo digital de maneira mais eficiente implantando-se tais técnicas de codificação de vídeo.
[004] As técnicas de codificação de vídeo incluem predição espacial (intraimagem) e/ou predição temporal (interimagem) para reduzir ou remover a redundância inerente em sequências de vídeo. Para a codificação de vídeo com base em bloco, uma fatia de vídeo (por exemplo, um quadro de vídeo ou uma porção de um quadro de vídeo) pode ser particionada em blocos de vídeo que, para algumas técnicas, também podem ser denominados como blocos em árvore, unidades de codificação (CUs) e/ou nós de codificação. Os blocos de vídeo em uma fatia intracodificada (I) de uma imagem são codificados com o uso de predição espacial em relação às amostras de referência em blocos próximos na mesma imagem. Os blocos de vídeo em uma fatia intercodificada (P ou B) de uma imagem podem usar predição espacial em relação a amostras de referência em blocos próximos na mesma imagem ou predição temporal em relação às amostras de referência em outras imagens de referência. As imagens podem ser denominadas como quadros e as imagens de referência podem ser denominadas como quadros de referência.
[005] A predição espacial ou temporal resulta em um bloco preditivo para um bloco a ser codificado. Os dados residuais representam diferenças de pixel entre o bloco original a ser codificado e o bloco preditivo. Um bloco intercodificado é codificado de acordo com um vetor de movimento que aponta para um bloco de amostras de referência que forma o bloco preditivo, e em que os dados residuais indicam a diferença entre o bloco codificado e o bloco preditivo. Um bloco intracodificado é codificado de acordo com um modo de intracodificação e os dados residuais. Para compactação adicional, os dados residuais podem ser transformados do domínio de pixel para um domínio da transformada, resultando em coeficientes de transformada residuais que podem, então, ser quantizados. Os coeficientes de transformada quantizados dispostos inicialmente em uma matriz bidimensional podem ser varridos a fim de produzir um vetor monodimensional de coeficiente de transformada e a codificação por entropia pode ser aplicada para conseguir ainda mais compactação.
SUMÁRIO
[006] As técnicas desta revelação se referem à derivação de informações de movimento na codificação de vídeo. Por exemplo, um codificador (coder) de vídeo (um codificador (encoder) de vídeo ou decodificador de vídeo) pode gerar informações de movimento que não estão inclusas no fluxo de bits para codificar dados de vídeo que estão inclusos no fluxo de bits. Derivando-se as informações de movimento no ciclo de codificação ou decodificação, uma economia de bits pode ser alcançada em relação a técnicas que incluem informações de movimento no fluxo de bits como técnicas de interpredição tradicionais.
[007] Em um exemplo, um método para decodificar dados de vídeo inclui selecionar um modo de derivação de informações de movimento a partir de uma pluralidade de modos de derivação de informações de movimento para determinar informações de movimento para um bloco atual, em que cada modo de derivação de informações de movimento da pluralidade compreende realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual, e em que as informações de movimento indicam movimento do bloco atual em relação aos dados de vídeo de referência, determinar as informações de movimento para o bloco atual com o uso do modo de derivação de informações de movimento selecionado e decodificar o bloco atual com o uso das informações de movimento determinadas e sem decodificar os elementos de sintaxe representativos das informações de movimento.
[008] Em outro exemplo, um método para codificar dados de vídeo inclui selecionar um modo de derivação de informações de movimento a partir de uma pluralidade de modos de derivação de informações de movimento para determinar informações de movimento para um bloco atual, em que cada modo de derivação de informações de movimento da pluralidade compreende realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual, e em que as informações de movimento indicam movimento do bloco atual em relação aos dados de vídeo de referência, e determinar as informações de movimento para o bloco atual com o uso do modo de derivação de informações de movimento selecionado e codificar o bloco atual com o uso das informações de movimento determinadas e sem codificar os elementos de sintaxe representativos das informações de movimento.
[009] Em outro exemplo, um dispositivo para codificar dados de vídeo inclui uma memória configurada para armazenar um bloco atual de dados de vídeo, e um ou mais processadores configurados para selecionar um modo de derivação de informações de movimento a partir de uma pluralidade de modos de derivação de informações de movimento para determinar informações de movimento para o bloco atual, em que cada modo de derivação de informações de movimento da pluralidade compreende realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual, e em que as informações de movimento indicam movimento do bloco atual em relação aos dados de vídeo de referência, determinar as informações de movimento para o bloco atual com o uso do modo de derivação de informações de movimento selecionado e codificar o bloco atual com o uso das informações de movimento determinadas e sem elementos de sintaxe de codificação representativos das informações de movimento.
[0010] Em outro exemplo, um aparelho para codificar dados de vídeo inclui meios para selecionar um modo de derivação de informações de movimento a partir de uma pluralidade de modos de derivação de informações de movimento para determinar informações de movimento para um bloco atual, em que cada modo de derivação de informações de movimento da pluralidade compreende realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual, e em que as informações de movimento indicam movimento do bloco atual em relação aos dados de vídeo de referência, meios para determinar as informações de movimento para o bloco atual com o uso do modo de derivação de informações de movimento selecionado e meios para codificar o bloco atual com o uso das informações de movimento determinadas e sem decodificar os elementos de sintaxe representativos das informações de movimento.
[0011] Em outro exemplo, uma mídia legível por computador não transitória tem instruções armazenadas na mesma que, quando executadas, fazem com que um ou mais processadores selecionem um modo de derivação de informações de movimento a partir de uma pluralidade de modos de derivação de informações de movimento para determinar informações de movimento para um bloco atual, em que cada modo de derivação de informações de movimento da pluralidade compreende realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual, e em que as informações de movimento indicam movimento do bloco atual em relação aos dados de vídeo de referência, determinar as informações de movimento para o bloco atual com o uso do modo de derivação de informações de movimento selecionado, e codificar o bloco atual com o uso das informações de movimento determinadas e sem decodificar elementos de sintaxe representativos das informações de movimento.
[0012] Em outro exemplo, um método para processar dados de vídeo inclui determinar um vetor de movimento candidato para derivar informações de movimento de um bloco atual de dados de vídeo, em que as informações de movimento indicam o movimento do bloco atual em relação aos dados de vídeo de referência e determinar um vetor de movimento derivado para o bloco atual com base no vetor de movimento candidato determinado, em que determinar o vetor de movimento derivado compreende realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual.
[0013] Em outro exemplo, um dispositivo para processar dados de vídeo inclui uma memória configurada para armazenar um bloco atual de dados de vídeo, e um ou mais processadores configurados para determinar um vetor de movimento candidato para derivar informações de movimento de um bloco atual de dados de vídeo, em que as informações de movimento indicam movimento do bloco atual em relação aos dados de vídeo de referência, e determinar um vetor de movimento derivado para o bloco atual com base no vetor de movimento candidato determinado, em que determinar o vetor de movimento derivado compreende realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual.
[0014] Em outro exemplo, um aparelho para processar dados de vídeo inclui meios para determinar um vetor de movimento candidato para derivar informações de movimento de um bloco atual de dados de vídeo, em que as informações de movimento indicam movimento do bloco atual em relação aos dados de vídeo de referência, e meios para determinar um vetor de movimento derivado para o bloco atual com base no vetor de movimento candidato determinado, em que os meios para determinar o vetor de movimento derivado compreendem meios para realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual.
[0015] Em outro exemplo, uma mídia legível por computador não transitória tem instruções armazenadas na mesma que, quando executadas, fazem com que um ou mais processadores determinem um vetor de movimento candidato para derivar informações de movimento de um bloco atual de dados de vídeo, em que as informações de movimento indicam movimento do bloco atual em relação aos dados de vídeo de referência, e determinar um vetor de movimento derivado para o bloco atual com base no vetor de movimento candidato determinado, em que, para determinar o vetor de movimento derivado, as instruções fazem com que o um ou mais processadores realizem uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual.
[0016] Em outro exemplo, um método para processar dados de vídeo inclui dividir um bloco atual de dados de vídeo em uma pluralidade de sub-blocos para derivar informações de movimento do bloco atual, em que as informações de movimento indicam movimento do bloco atual em relação aos dados de vídeo de referência, derivar, separadamente para cada respectivo sub-bloco dentre a pluralidade de sub-blocos, em que as informações de movimento compreendem realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora de cada respectivo sub- bloco e decodificar a pluralidade de sub-blocos com base nas informações de movimento derivadas e sem decodificar os elementos de sintaxe representativos das informações de movimento.
[0017] Em outro exemplo, um método para processar dados de vídeo inclui dividir um bloco atual de dados de vídeo em uma pluralidade de sub-blocos para derivar informações de movimento do bloco atual, em que as informações de movimento indicam movimento do bloco atual em relação aos dados de vídeo de referência, derivar, separadamente para cada respectivo sub-bloco dentre a pluralidade de sub-blocos, em que as informações de movimento compreendem realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora de cada respectivo sub- bloco e codificar a pluralidade de sub-blocos com base nas informações de movimento derivadas e sem codificar os elementos de sintaxe representativos das informações de movimento.
[0018] Em outro exemplo, um dispositivo para processar dados de vídeo inclui uma memória configurada para armazenar um bloco atual de dados de vídeo, e um ou mais processadores configurados para dividir um bloco atual de dados de vídeo em uma pluralidade de sub-blocos para derivar informações de movimento do bloco atual, em que as informações de movimento indicam movimento do bloco atual em relação aos dados de vídeo de referência, derivar, separadamente para cada respectivo sub-bloco dentre a pluralidade de sub-blocos, em que as informações de movimento compreendem realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora de cada respectivo sub- bloco e codificar a pluralidade de sub-blocos com base nas informações de movimento derivadas e sem codificar os elementos de sintaxe representativos das informações de movimento.
[0019] Em outro exemplo, uma mídia legível por computador não transitória tem instruções armazenadas na mesma que, quando executadas, fazem com que o um ou mais processadores dividam um bloco atual de dados de vídeo em uma pluralidade de sub-blocos para derivar informações de movimento do bloco atual, em que as informações de movimento indicam movimento do bloco atual em relação aos dados de vídeo de referência, derivar, separadamente para cada respectivo sub-bloco dentre a pluralidade de sub-blocos, em que as informações de movimento compreendem realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora de cada respectivo sub-bloco e decodificar a pluralidade de sub-blocos com base nas informações de movimento derivadas e sem decodificar os elementos de sintaxe representativos das informações de movimento.
[0020] Em outro exemplo, um dispositivo para processar dados de vídeo inclui uma memória configurada para armazenar uma imagem atual, e um ou mais processadores configurados para obter um fluxo de bits codificado que contém uma pluralidade de imagens codificadas, interpolar uma ou mais imagens de referência que não estão inclusas no fluxo de bits codificado e decodificar dados de vídeo de uma imagem atual do fluxo de bits codificado com base na uma ou mais imagens de referência interpoladas.
[0021] Os detalhes de um ou mais exemplos da revelação são apresentados nos desenhos anexos e na descrição abaixo. Outros recursos, objetivos e vantagens serão evidentes a partir da descrição, desenhos e reivindicações.
BREVE DESCRIÇÃO DOS DESENHOS
[0022] A Figura 1 é um diagrama de blocos que ilustra um sistema de decodificação e codificação de vídeo exemplificativo que pode implantar técnicas desta revelação.
[0023] A Figura 2 é um diagrama de blocos que ilustra um exemplo de codificador de vídeo que pode implantar técnicas desta revelação.
[0024] A Figura 3 é um diagrama de blocos que ilustra um exemplo de decodificador de vídeo que pode implantar técnicas desta revelação.
[0025] As Figuras 4A e 4B são diagramas conceituais que ilustram candidatos de vetor de movimento vizinhos espaciais exemplificativos para um modo de mescla e um modo de predição de vetor de movimento avançada (AMVP).
[0026] As Figuras 5A e 5B são diagramas conceituais que ilustram um candidato de preditor de vetor de movimento temporal (TMVP) exemplificativo e escalonamento de vetor de movimento.
[0027] A Figura 6 é um diagrama conceitual que ilustra um exemplo de estimativa de movimento unilateral (ME) em conversão ascendente (up-conversion) de taxa de quadros (FRUC).
[0028] A Figura 7 é um diagrama conceitual que ilustra um exemplo de estimativa de movimento bilateral (ME) em FRUC.
[0029] A Figura 8 é um diagrama conceitual que ilustra um exemplo de derivação de vetor de movimento de lado de decodificador (DMVD) com base em correspondência de modelo.
[0030] A Figura 9 é um diagrama conceitual que ilustra um exemplo de derivação de vetor de movimento bidirecional com base em espelho em DMVD.
[0031] A Figura 10 é um diagrama conceitual que ilustra derivação de vetor de movimento com base em correspondência bilateral estendida.
[0032] A Figura 11 é um fluxograma que ilustra um exemplo de decodificação de uma unidade de predição (PU) com o uso de DMVD.
[0033] A Figura 12 é um fluxograma que ilustra um processo exemplificativo para determinar um modo de derivação de informações de movimento para codificar um bloco de dados de vídeo.
[0034] A Figura 13 é um fluxograma que ilustra um processo exemplificativo para derivar um vetor de movimento para codificar um bloco de dados de vídeo.
[0035] A Figura 14 é um fluxograma que ilustra um processo exemplificativo para derivar informações de movimento para sub-blocos de um bloco de dados de vídeo.
DESCRIÇÃO DETALHADA
[0036] As técnicas desta revelação se referem à derivação de informações de movimento de lado de decodificador, particionamento de bloco e/ou interpolação de dados de na codificação de vídeo com base em bloco. As técnicas podem ser aplicadas a qualquer um dos codecs de vídeo existentes, como Codificação de Vídeo de Alta Eficiência (HEVC) ou ser uma ferramenta de codificação eficaz para quaisquer padrões de codificação de vídeo futuros.
[0037] Os dispositivos de codificação de vídeo implantam técnicas de compactação de vídeo para codificar e decodificar os dados de vídeo de modo eficaz. As técnicas de compactação de vídeo podem incluir aplicar predição espacial (por exemplo, predição intraquadro), predição temporal (por exemplo, predição interquadros), e/ou outras técnicas de predição para reduzir ou remover a redundância inerente em sequências de vídeo. Um codificador de vídeo particiona, tipicamente, cada imagem de uma sequência de vídeo original em regiões retangulares referidas como blocos de vídeo ou unidades de codificação (descritos em maiores detalhes abaixo). Esses blocos de vídeo podem ser codificados com o uso de um modo de predição particular.
[0038] Para modos de interpredição, um codificador de vídeo busca, tipicamente, por um bloco semelhante àquele sendo codificado em um quadro em outro local temporal, referido como quadro de referência. O codificador de vídeo pode restringir a busca a um determinado deslocamento espacial do bloco a ser codificado. Uma melhor correspondência pode ser localizada com o uso de um vetor de movimento bidimensional (2D) que inclui um componente de deslocamento horizontal e um componente de deslocamento vertical. Para um modo de intrapredição, um codificador de vídeo pode formar o bloco predito com o uso de técnicas de predição espaciais com base nos dados de blocos vizinhos anteriormente codificados dentro da mesma imagem.
[0039] O codificador de vídeo pode determinar um erro de predição, isto é, a diferença entre os valores de pixel no bloco sendo codificado e no bloco predito (também referido como residual). O codificador de vídeo também pode aplicar uma transformada ao erro de predição, como uma transformada de cosseno distinta (DCT), para gerar coeficientes de transformada. Após a transformada, o codificador de vídeo pode quantizar os coeficientes de transformada. Os coeficientes de transformada quantizados e os vetores de movimento podem ser representados com o uso de elementos de sintaxe e, juntamente com informações de controle, formam uma representação codificada de uma sequência de vídeo. Em alguns casos, o codificador de vídeo pode codificar por entropia elementos de sintaxe, reduzindo, assim, adicionalmente, o número de bits necessário para sua representação.
[0040] Um decodificador de vídeo pode, com o uso dos elementos de sintaxe e informações de controle discutidos acima, construir dados preditivos (por exemplo, um bloco preditivo) para decodificar um quadro atual. Por exemplo, o decodificador de vídeo pode adicionar o bloco predito e o erro de predição compactado. O decodificador de vídeo pode determinar o erro de predição compactado ponderando-se as funções de base de transformada com o uso dos coeficientes quantizados. A diferença entre o quadro reconstruído e o quadro original é chamado de erro de reconstrução.
[0041] Em alguns casos, um decodificador de vídeo ou dispositivo de pós-processamento pode interpolar imagens com base em uma ou mais imagens de referência. Essas imagens interpoladas não estão inclusas em um fluxo de bits codificado. O decodificador de vídeo ou dispositivo de pós- processamento pode interpolar imagens para converter de modo ascendente uma taxa de quadros original de um fluxo de bits codificado. Esse processo pode ser chamado de conversão ascendente de taxa de quadros (FRUC). Alternativamente, o decodificador de vídeo ou dispositivo de pós-processamento pode interpolar imagens para inserir uma ou mais imagens que foram puladas por um codificador de vídeo para codificar uma sequência de vídeo em uma taxa de quadros reduzida. Em qualquer caso, o decodificador de vídeo ou dispositivo de pós-processamento interpola quadros que não estão inclusos em um fluxo de bits codificado que foi recebido pelo decodificador de vídeo. O decodificador de vídeo ou dispositivo de pós-processamento pode interpolar as imagens com o uso de qualquer uma dentre várias técnicas de interpolação, por exemplo, com o uso de interpolação de quadro compensada por movimento, repetição de quadro, ou cálculo de média de quadros.
[0042] Embora determinadas técnicas para interpolar imagens tenham sido usadas para propósitos de conversão ascendente, essas técnicas não foram usadas amplamente durante a codificação de vídeo, por exemplo, para codificar dados de vídeo que estão inclusos em um fluxo de bits codificado. Por exemplo, as técnicas para interpolar imagens podem ser relativamente demoradas e/ou exigir uma quantidade de potência de processamento relativamente grande. Consequentemente, essas técnicas, tipicamente, não foram realizadas em ciclo quando se decodifica dados de vídeo.
[0043] De acordo com os aspectos desta revelação, um codificador de vídeo (por exemplo, um codificador de vídeo ou um decodificador de vídeo) pode derivar informações de movimento quando se codifica um fluxo de bits. Por exemplo, o codificador de vídeo pode gerar informações de movimento que não estão inclusas no fluxo de bits para codificar dados de vídeo que estão inclusos no fluxo de bits. Derivando-se as informações de movimento no ciclo de codificação ou decodificação, uma economia de bits pode ser alcançada em relação a técnicas que incluem informações de movimento no fluxo de bits (como as técnicas de interpredição supracitadas).
[0044] De acordo com alguns aspectos desta revelação, um codificador de vídeo pode utilizar uma pluralidade de técnicas de derivação de informações de movimento durante a codificação. Nesses exemplos, o codificador de vídeo pode determinar um modo de derivação de informações de movimento para determinar quais técnicas de derivação de informações de movimento usar quando se determina informações de movimento para um bloco atual. Em geral, usar um modo de derivação de informações de movimento para derivar informações de movimento pode incluir realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual. Por exemplo, usar o modo de derivação de informações de movimento (por exemplo, uma técnica de correspondência bilateral, uma técnica de correspondência de modelo, ou outra técnica, conforme descrito em maiores detalhes abaixo), o codificador de vídeo pode selecionar um vetor de movimento candidato em uma lista de candidatos de vetor de movimento. O codificador de vídeo pode selecionar o vetor de movimento candidato com base no vetor de movimento candidato que identifica dados de referência em uma imagem de referência que corresponde de modo relativamente aproximado dados da imagem atual (que podem ser referidos como determinar uma “melhor correspondência” de dados de referência).
[0045] Em alguns casos, o codificador de vídeo pode usar o candidato de vetor de movimento selecionado para identificar uma janela de busca em uma imagem de referência. O codificador de vídeo pode refinar o vetor de movimento candidato com base em dados de referência na janela de busca que corresponde de modo relativamente aproximado dados correspondentes na imagem atual. Isto é, o codificador de vídeo pode derivar novas informações de movimento para o bloco atual com base no movimento entre os dados de referência na janela de busca que corresponde de modo aproximado dados na imagem atual. O codificador de vídeo pode, então, realizar a compensação de movimento para o bloco atual com o uso das informações de movimento derivadas. Desta forma, o codificador de vídeo pode derivar informações de movimento para um bloco atual sem informações de movimento sendo sinalizadas em um fluxo de bits codificado.
[0046] De acordo com os aspectos desta revelação, em alguns exemplos, o codificador de vídeo pode dividir um bloco de dados de vídeo em sub-blocos quando se deriva as informações de movimento. Por exemplo, o codificador de vídeo pode derivar separadamente informações de movimento para cada sub-bloco de um bloco maior. Em alguns casos, o codificador de vídeo pode, inicialmente, determinar informações de movimento para o bloco e usar as informações de movimento derivadas como informações de movimento de candidato para cada um dos sub-blocos. O codificador de vídeo pode, então, refinar adicionalmente as informações de movimento derivadas para cada um dos sub-blocos, por exemplo, com o uso de um modo de derivação de informações de movimento (por exemplo, uma técnica de correspondência bilateral, uma técnica de correspondência de modelo, ou outra técnica, conforme descrito em maiores detalhes abaixo).
[0047] As técnicas desta revelação também podem incluir técnicas para interpolar imagens. Em alguns casos, qualquer combinação das técnicas acima pode ser usada para interpolar uma imagem que não está inclusa no fluxo de bits, por exemplo, semelhante à conversão ascendente de taxa de quadros. Entretanto, ao invés de simplesmente adicionar a imagem interpolada à sequência de vídeo, um decodificador de vídeo pode usar o quadro interpolado durante a codificação. Por exemplo, o decodificador de vídeo pode decodificar dados de uma imagem atual com base em pelo menos uma porção da imagem interpolada. Em alguns casos, o decodificador de vídeo pode estabelecer a imagem interpolada igual à imagem atual. Por exemplo, o decodificador de vídeo pode decodificar dados de sintaxe para a imagem atual que está inclusa no fluxo de bits (por exemplo, dados de cabeçalho de fatia e similares), interpolar a imagem, e estabelecer a imagem interpolada como a imagem atual. Em outros casos, o decodificador de vídeo pode interpolar a imagem e decodificar dados para a imagem atual em relação à imagem interpolada. Neste caso, o decodificador de vídeo pode adicionar a imagem interpolada a uma memória de imagem de referência para fins de predição.
[0048] Por conseguinte, determinadas técnicas descritas no presente documento se referindo a FRUC podem, em alguns exemplos, ser usadas para determinar informações de movimento (por exemplo, em um processo de derivação de informações de movimento de lado de decodificador). Em outros exemplos, as técnicas descritas no presente documento se referindo a FRUC podem ser usadas para interpolar dados de vídeo, por exemplo, para referência para codificar dados de vídeo, ou para emitir.
[0049] A Figura 1 é um diagrama de blocos que ilustra um sistema de decodificação e codificação de vídeo exemplificativo 10 que pode utilizar técnicas para derivar informações de movimento, realizar particionamento de bloco e/ou interpolar dados de vídeo. Conforme mostrado na Figura 1, o sistema 10 inclui um dispositivo de origem 12 que fornece dados de vídeo codificados a serem decodificados em um momento posterior por um dispositivo de destino 14. Em particular, o dispositivo de origem 12 fornece os dados de vídeo para o dispositivo de destino 14 por meio de uma mídia legível por computador 16. O dispositivo de origem 12 e o dispositivo de destino 14 podem compreender qualquer um dentre uma ampla faixa de dispositivos, incluindo computadores do tipo desktop, computadores do tipo notebook (isto é, computadores do tipo laptop), computadores do tipo tablet, decodificadores de sinais, aparelhos de telefone, tais como, os então chamados telefones "inteligentes", os então chamados dispositivos do tipo pad "inteligentes", televisões, câmeras, dispositivos de exibição, reprodutores de mídia digital, consoles de videogame, dispositivo de transmissão contínua de vídeo, ou semelhantes. Em alguns casos, o dispositivo de origem 12 e o dispositivo de destino 14 podem estar equipados para comunicação sem fio.
[0050] O dispositivo de destino 14 pode receber os dados de vídeo codificados a serem decodificados por meio da mídia legível por computador 16. A mídia legível por computador 16 pode compreender qualquer tipo de mídia ou dispositivo com capacidade para mover os dados de vídeo codificados a partir do dispositivo de origem 12 ao dispositivo de destino 14. Em um exemplo, a mídia legível por computador 16 pode compreender uma mídia de comunicação para possibilitar que um dispositivo de origem transmita os dados de vídeo codificados diretamente a um dispositivo de destino 14 em tempo real. Os dados de vídeo codificados podem ser modulados de acordo com um padrão de comunicação, como um protocolo de comunicação sem fio, e transmitidos para o dispositivo de destino 14. A mídia de comunicação pode compreender qualquer mídia de comunicação sem fio ou com fio, como um espectro de radiofrequência (RF) ou uma ou mais linhas de transmissão físicas. A mídia de comunicação pode fazer parte de uma rede com base em pacote, como uma rede de área local, uma rede de área ampla ou uma rede global como a Internet. A mídia de comunicação pode incluir roteadores, comutadores, estações-base ou qualquer outro equipamento que possa ser útil para facilitar a comunicação a partir do dispositivo de origem 12 para o dispositivo de destino 14.
[0051] Em alguns exemplos, os dados codificados podem ser emitidos a partir da interface de saída 22 para um dispositivo de armazenamento. De modo semelhante, os dados codificados podem ser acessados a partir do dispositivo de armazenamento pela interface de entrada. O dispositivo de armazenamento pode incluir qualquer um dentre uma variedade de mídias de armazenamento de dados acessados localmente ou distribuídos como um disco rígido, discos Blu-ray, DVDs, CD- ROMs, memória flash, memória volátil ou não volátil ou quaisquer outras mídias de armazenamento digital adequadas para armazenar dados de vídeo codificados. Em um exemplo adicional, o dispositivo de armazenamento pode corresponder a um servidor de arquivos ou outro dispositivo de armazenamento intermediário que pode armazenar o vídeo codificado gerado pelo dispositivo de origem 12 O dispositivo de destino 14 pode acessar dados de vídeo armazenados a partir do dispositivo de armazenamento por meio de transmissão contínua ou transferência por download. O servidor de arquivos pode ser qualquer tipo de servidor com capacidade para armazenar dados de vídeo codificados e transmitir aqueles dados de vídeo codificados para o dispositivo de destino 14. Os servidores de arquivo exemplificativos incluem um servidor da web (por exemplo, para um site da web), um servidor FTP, dispositivos de armazenamento anexado à rede (NAS) ou uma unidade de disco local. O dispositivo de destino 14 pode acessar os dados de vídeo codificados através de qualquer conexão de dados padrão, incluindo uma conexão com a Internet. Isso pode incluir um canal sem fio (por exemplo, uma conexão Wi-Fi), uma conexão com fio (por exemplo, DSL, modem de cabo, etc.) ou uma combinação de ambos que seja adequada para acessar dados de vídeo codificados armazenados em um servidor de arquivos. A transmissão de dados de vídeo codificados a partir do dispositivo de armazenamento pode ser uma transmissão de transferência contínua, uma transmissão de transferência por download ou uma combinação das mesmas.
[0052] As técnicas desta revelação não estão necessariamente limitadas a aplicativos ou definições sem fio. As técnicas podem ser aplicadas à codificação de vídeo visando o suporte a qualquer uma dentre uma variedade de aplicativos de multimídia, tais como difusões de televisão pelo ar, transmissões de televisão a cabo, transmissões de televisão por satélite, transmissões contínuas de vídeo pela Internet, tais como transmissão contínua adaptativa dinâmica através de HTTP (DASH), vídeo digital que é codificado em uma mídia de armazenamento de dados, decodificação de vídeo digital armazenado em uma mídia de armazenamento de dados ou outros aplicativos. Em alguns exemplos, o sistema 10 pode ser configurado para suportar transmissão de vídeo unidirecional ou bidirecional para suportar aplicações como transmissão contínua de vídeo, reprodução de vídeo, difusão de vídeo e/ou telefonia por vídeo.
[0053] No exemplo da Figura 1, o dispositivo de origem 12 inclui uma fonte de vídeo 18, um codificador de vídeo 20 e uma interface de saída 22. O dispositivo de destino 14 inclui uma interface de entrada 28, um decodificador de vídeo 30 e um dispositivo de exibição 32. De acordo com esta revelação, o codificador de vídeo 20 do dispositivo de origem 12 pode ser configurado para aplicar as técnicas para derivar informações de movimento, realizar particionamento de bloco e/ou interpolar dados de vídeo. Em outros exemplos, um dispositivo de origem e um dispositivo de destino podem incluir outros componentes ou disposições. Por exemplo, o dispositivo de origem 12 pode receber dados de vídeo a partir de uma fonte de vídeo externa 18, como uma câmera externa. Da mesma forma, o dispositivo de destino 14 pode fazer interface com um dispositivo de exibição externo, ao invés de incluir um dispositivo de exibição integrado.
[0054] O sistema ilustrado 10 da Figura 1 é meramente um exemplo. As técnicas para derivar informações de movimento, realizar particionamento de bloco e/ou interpolar dados de vídeo podem ser realizadas por qualquer dispositivo de codificação e/ou decodificação de vídeo digital. Embora, de modo geral, as técnicas desta revelação sejam realizadas por dispositivo codificador de vídeo de vídeo, as técnicas também podem ser realizadas por um codificador/decodificador de vídeo denominado tipicamente como "CODEC". Além disso, as técnicas desta revelação também podem ser realizadas por um pré-processador de vídeo. O dispositivo de origem 12 e o dispositivo de destino 14 são meramente exemplos de tais dispositivos de codificação em que o dispositivo de origem 12 gera dados de vídeo codificados para transmissão para o dispositivo de destino 14. Em alguns exemplos, os dispositivos 12, 14 podem operar de modo substancialmente simétrico de modo que cada um dos dispositivos 12, 14 incluem componentes de codificação e decodificação de vídeo. Por conseguinte, o sistema 10 pode suportar transmissão de vídeo unidirecional ou bidirecional entre os dispositivos de vídeo 12, 14, por exemplo, para a transmissão contínua de vídeo, reprodução de vídeo, difusão de vídeo ou telefonia por vídeo.
[0055] A fonte de vídeo 18 do dispositivo de origem 12 pode incluir um dispositivo de captura de vídeo, como uma câmera de vídeo, um arquivo de vídeo que contém um vídeo anteriormente capturado e/ou uma interface de alimentação de vídeo para receber vídeo a partir de um provedor de conteúdo de vídeo. Como uma alternativa adicional, a fonte de vídeo 18 pode gerar dados com base em gráficos de computador como o vídeo de fonte ou uma combinação de vídeo ao vivo, vídeo arquivado e vídeo gerado por computador. Em alguns casos, se a fonte de vídeo 18 for uma câmera de vídeo, o dispositivo de origem 12 e o dispositivo de destino 14 podem formar os chamados telefones de câmera ou videofones. Entretanto, conforme mencionado acima, as técnicas descritas nesta revelação podem ser aplicáveis à codificação de vídeo em geral e podem ser aplicadas às aplicações com fio e/ou sem fio. Em cada caso, o vídeo capturado, pré-capturado ou gerado por computador pode ser codificado pelo codificador de vídeo 20. As informações de vídeo codificado podem, então, ser emitidas pela interface de saída 22 na mídia legível por computador 16.
[0056] A mídia legível por computador pode incluir mídias transientes, como uma transmissão de rede com fio ou difusão sem fio ou mídias de armazenamento (isto é, mídias de armazenamento não transitórias), como um disco rígido, unidade flash, disco compacto, disco de vídeo digital, disco Blu-ray ou outras mídias legíveis por computador. Em alguns exemplos, um servidor de rede (não mostrado) pode receber dados de vídeo codificados a partir do dispositivo de origem 12 e fornecer os dados de vídeo codificados para o dispositivo de destino 14, por exemplo, por meio da transmissão de rede. De modo semelhante, um dispositivo de computação de uma instalação de produção de mídia, como uma instalação de rotulação de disco, pode receber dados de vídeo codificados a partir do dispositivo de origem 12 e produzir um disco que contém os dados de vídeo codificados. Portanto, a mídia legível por computador pode ser compreendida de modo a incluir uma ou mais mídias legíveis por computador de várias formas, em vários exemplos.
[0057] A interface de rede 28 do dispositivo de destino 14 recebe informações a partir da mídia legível por computador 16. As informações de mídia legível por computador 16 podem incluir informações de sintaxe definidas pelo codificador de vídeo 20, que também é usado pelo decodificador de vídeo 30, que inclui elementos de sintaxe que descrevem características e/ou processamento de blocos e outras unidades codificadas, por exemplo, GOPs. O dispositivo de exibição 32 exibe os dados de vídeo decodificados para um usuário e pode compreender qualquer um dentre uma variedade de dispositivos de exibição como um tubo de raio de cátodo (CRT), um visor de cristal líquido (LCD), um visor de plasma, um visor de diodo emissor de luz orgânico (OLED) ou outro tipo de dispositivo de exibição.
[0058] Embora não seja mostrado na Figura 1, em alguns aspectos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem, cada um, ser integrados a um codificador e decodificador de áudio e podem incluir unidades MUX-DEMUX apropriadas, ou outro hardware e software, para manipular a codificação tanto de áudio quanto de vídeo em um fluxo de dados comum ou fluxos de dados separados. Caso aplicável, as unidades MUX-DEMUX podem se conformar ao protocolo multiplexador ITU H.223, ou outros protocolos como protocolo de datagrama de usuário (UDP).
[0059] O codificador de vídeo 20 e o decodificador de vídeo 30 podem ser implantados como qualquer um dentre uma variedade de conjuntos de circuitos de codificador adequados, tal como um ou mais microprocessadores, processadores de sinal digital (DSPs), circuitos integrados específicos para aplicação (ASICs), matrizes de porta programável em campo (FPGAs), lógica discreta, software, hardware, firmware ou quaisquer combinações dos mesmos. Quando as técnicas foram implantadas parcialmente em software, um dispositivo pode armazenar instruções para o software em uma mídia legível por computador não transitória adequada e executar as instruções em hardware com o uso de um ou mais processadores para realizar as técnicas desta revelação. Cada um dentre o codificador de vídeo 20 e o decodificador de vídeo 30 pode estar incluído em um ou mais codificadores ou decodificadores, um dos quais pode ser integrado como parte de um codificador/decodificador (CODEC) combinado em um respectivo dispositivo.
[0060] Esta revelação pode, de modo geral, se referir ao codificador de vídeo 20 "que sinaliza" determinadas informações para outro dispositivo, como decodificador de vídeo 30. O termo “que sinaliza” pode se referir, de modo geral, à comunicação de elementos de sintaxe e/ou outros dados usados para decodificar os dados de vídeo compactados. Tal comunicação pode ocorrer em tempo real ou quase real. Alternativamente, essa comunicação pode ocorrer por um lapso de tempo, como pode ocorrer quando se armazena elementos de sintaxe em uma mídia de armazenamento legível por computador em um fluxo de bits codificado no momento de codificação, que pode, então, ser recuperado por um dispositivo de decodificação em qualquer momento após ser armazenado nessa mídia.
[0061] O codificador de vídeo 20 e decodificador de vídeo 30 podem operar de acordo com um padrão de codificação de vídeo. Os padrões de codificação de vídeo exemplificativos desenvolvidos pela Equipe de Colaboração Conjunta em Codificação de Vídeo (JCT-VC) bem como Equipe de Colaboração Conjunta em Desenvolvimento de Extensão de Vídeo 3D (JCT-3V) do Grupo de Especialistas de Codificação de Vídeo de ITU-T (VCEG) e Grupo de Especialistas de Imagem em Movimento de ISO/IEC (MPEG) incluem Codificação de Vídeo de Alta Eficiência (HEVC) ou ITU-T H.265, incluindo sua extensão de faixa, extensão de multivista (MV-HEVC) e extensão escalonável (SHVC). O documento de padrão de HEVC finalizados é publicado como “ITU-T H.265, SERIES H: AUDIOVISUAL AND MULTIMEDIA SYSTEMS Infrastructure of audiovisual services - Coding of moving video - High efficiency video coding”, Telecommunication Standardization Sector of International Telecommunication Union (ITU), abril de 2013. Alternativamente, o codificador de vídeo 20 e decodificador de vídeo 30 podem operar de acordo com outros padrões de indústria ou proprietários, como ISO/IEC MPEG-4 Visual e ITU-T H.264 (também conhecido como ISO/IEC MPEG-4 AVC), incluindo sua extensão de Codificação de Vídeo Escalonável (SVC) e extensão de Codificação de Vídeo de Multivista (MVC). Entretanto, as técnicas desta revelação não são limitadas a qualquer padrão de codificação particular. Por exemplo, as técnicas desta revelação podem ser usadas com uma variedade de outras técnicas de codificação de vídeo não proprietárias e proprietárias ou padrões subsequentes, como ITU-T H.266.
[0062] Conforme notado acima, para modos interpredição, o codificador de vídeo 20 pode buscar por um bloco semelhante àquele sendo codificado (um “bloco atual”) em uma imagem de outro local temporal, referida como imagem de referência. As informações usadas para identificar a imagem de referência podem ser referidas como informações de movimento. Por exemplo, para cada bloco, um conjunto de informações de movimento pode estar disponível. Um conjunto de informações de movimento contém informações de movimento para direções de predição para frente e para trás. No presente contexto, as direções de predição para frente e para trás são duas direções de predição de um modo de predição bidirecional e os termos “para frente” e “para trás” não têm necessariamente um significado de geometria, em vez disso os mesmos correspondem à lista de imagem de referência 0 (RefPicList0) e lista de imagem de referência 1 (RefPicList1) de uma imagem atual. Quando apenas uma lista de imagem de referência está disponível para uma imagem ou fatia, apenas a RefPicList0 está disponível e as informações de movimento de cada bloco de uma fatia estão sempre para frente.
[0063] Em alguns casos, um vetor de movimento juntamente com seu índice de referência é usado em processos de decodificação, esse vetor de movimento com o índice de referência associado é denotado como um conjunto uni- preditivo de informações de movimento.
[0064] Para cada direção de predição, as informações de movimento devem conter um índice de referência e um vetor de movimento. Em alguns casos, para simplicidade, um próprio vetor de movimento pode ser referido de uma forma que se supõe que tem um índice de referência associado. Um índice de referência é usado para identificar uma imagem de referência na lista de imagem de referência atual (RefPicList0 ou RefPicList1). Um vetor de movimento tem um componente horizontal e um vertical.
[0065] A contagem de ordem de imagem (POC) é amplamente usada em padrões de codificação de vídeo para identificar uma ordem de exibição de uma imagem. Embora existam casos em que duas imagens dentro de uma sequência de vídeo codificada podem ter o mesmo valor de POC, o mesmo, tipicamente, não ocorrer dentro de uma sequência de vídeo codificada. Quando múltiplas sequências de vídeo codificadas estão presentes em um fluxo de bits, as imagens com um mesmo valor de POC podem estar próximas entre si no que diz respeito à ordem de decodificação. Os valores de POC das imagens são tipicamente usados para construção de lista de imagem de referência, derivação do conjunto de imagem de referência como em HEVC e escalonamento de vetor de movimento.
[0066] Em H.264/AVC, cada inter macrobloco (MB) pode ser particionado em quatro formas diferentes que incluem: uma partição de 16 x 16 MB; duas partições de 16 x 8 MB; duas partições de 8 x 16 MB; e quatro partições de 8 x 8 MB. As partições de diferentes em um MB podem ter diferentes valores de índice de referência para cada direção (RefPicList0 ou RefPicList1). Quando um MB não for particionado em quatro partições de 8 x 8 MB, o tem apenas um vetor de movimento para cada partição de MB em cada direção.
[0067] Quando um MB for particionado em quatro partições de 8 x 8 MB, cada partição de 8 x 8 MB pode ser particionada adicionalmente em sub-blocos, cada um dos quais pode ter um vetor de movimento diferente em cada direção. Existem quatro formas diferentes de obter sub-blocos a partir de uma partição de 8 x 8 MB que incluem: um sub-bloco 8 x 8; dois sub-blocos 8 x 4; dois sub-blocos 4 x 8; e quatro sub- blocos 4 x 4. Cada sub-bloco pode ter um vetor de movimento diferente em cada direção. Portanto, o vetor de movimento está presente em um nível igual a maior do que sub-bloco.
[0068] Em AVC, o modo direto temporal poderia estar habilitado em MB ou nível de partição de MB para modo de salto ou direto em fatias de B. Para cada partição de MB, os vetores de movimento do bloco colocalizado com a partição de MB atual na RefPicList1 [0] do bloco atual são usados para derivar os vetores de movimento. Cada vetor de movimento no bloco colocalizado é escalonado com base em distâncias de POC. Em AVC, um modo direto também pode prever as informações de movimento a partir dos vizinhos espaciais, que podem ser referidos como modo direto espacial.
[0069] Em HEVC, para gerar uma representação codificada de uma imagem, o codificador de vídeo 20 pode gerar um conjunto de unidades de árvore de codificação (CTUs). Cada uma das CTUs pode compreender um bloco de árvore de codificação (CTB) de amostras de luma, dois CTBs correspondentes de amostras de croma, e estruturas de sintaxe usadas para codificar as amostras dos CTBs. Em imagens de monocroma ou imagens que têm três planos de cor separados, uma CTU pode compreender um único bloco CTB e estruturas de sintaxe usadas para codificar as amostras do bloco de árvore de codificação.
[0070] Um bloco de árvore de codificação pode ser um bloco NxN de amostras. O tamanho de um CTB pode estar nas faixas de 16 x 16 a 64 x 64 no perfil principal de HEVC (embora, tecnicamente, os tamanhos de CBT de 8 x 8 possam ser suportados). Uma unidade de codificação (CU) poderia ser do mesmo tamanho de um CTB e tão pequeno quanto 8 x 8. Cada unidade de codificação é codificada com um modo. Uma CTU também pode ser denominada como "bloco de árvore" ou uma "maior unidade de codificação" (LCU). As CTUs de HEVC podem ser amplamente análogas aos macroblocos de outros padrões, como H.264/AVC. No entanto, a CTU não se limita necessariamente a um tamanho particular e pode incluir uma ou mais unidades de codificação (CUs). Uma fatia pode incluir um número inteiro de CTUs ordenadas consecutivamente em uma ordem de varredura raster.
[0071] A fim de gerar uma CTU codificada, o codificador de vídeo 20 pode realizar, recursivamente, o particionamento de árvore quadrática nos blocos de árvore de codificação de uma CTU para dividir os blocos de árvore de codificação em blocos de codificação, por conseguinte, o nome "unidades de árvore de codificação". Um bloco de árvore de codificação pode ser um bloco NxN de amostras. Uma CU pode compreender um bloco de codificação de amostras de luma e dois blocos de codificação correspondentes de amostras de croma de uma imagem que tem uma matriz de amostra de luma, uma matriz de amostra de Cb e uma matriz de amostra de Cr e estruturas de sintaxe usadas para codificar as amostras dos blocos de codificação. Em imagens de monocroma ou imagens que têm três planos de cor separados, uma CU pode compreender um único bloco de codificação e estruturas de sintaxe usadas para codificar as amostras do bloco de codificação.
[0072] O codificador de vídeo 20 pode particionar um bloco de codificação de uma CU em um ou mais blocos preditivos. Um bloco preditivo é um bloco (isto é, quadrado ou não quadrado) retangular de amostras no qual a mesma predição é aplicada. Uma unidade de predição (PU) de uma CU pode compreender um bloco preditivo de amostras de luma, dois blocos preditivos correspondentes de amostras de croma e estruturas de sintaxe usadas para prever os blocos preditivos. Nas imagens de monocroma ou em imagens que têm três planos de cor separados, uma PU pode compreender um único bloco preditivo e estruturas de sintaxe usadas para prever o bloco preditivo. O codificador de vídeo 20 pode gerar blocos preditivos de luma, de Cb e de Cr para blocos preditivos de luma, de Cb e de Cr de cada PU da CU.
[0073] O codificador de vídeo 20 pode usar intrapredição ou interpredição para gerar os blocos preditivos para uma PU. Se o codificador de vídeo 20 usar intrapredição para gerar os blocos preditivos de uma PU, o codificador de vídeo 20 pode gerar blocos preditivos da PU com base nas amostras decodificadas da imagem associada à PU. Se o codificador de vídeo 20 usar interpredição para gerar os blocos preditivos de uma PU, o codificador de vídeo 20 pode gerar os blocos preditivos da PU com base em amostras decodificadas de uma ou mais imagens diferentes da imagem associada à PU. Quando uma CU for intercodificada, a CU pode ser particionada adicionalmente em duas ou quatro PUs. Quando duas PUs estão presentes em uma CU, as PUs podem, em alguns casos, ter o tamanho de meio retângulo ou tamanho de dois retângulos com um tamanho de um-quarto ou três-quartos da CU.
[0074] Após o codificador de vídeo 20 gerar blocos de luma, de Cb e de Cr preditivos para uma ou mais PUs de uma CU, o codificador de vídeo 20 pode gerar um bloco residual de luma para a CU. Cada amostra no bloco residual de luma da CU indica uma diferença entre uma amostra de luma em um dos blocos preditivos de luma da CU e uma amostra correspondente no bloco de codificação de luma original da CU. Além disso, o codificador de vídeo 20 pode gerar um bloco residual de Cb para a CU. Cada amostra no bloco residual de Cb da CU pode indicar uma diferença entre uma amostra de Cb em um dentre os blocos preditivos de Cb da CU e uma amostra correspondente no bloco de codificação de Cb original da CU. O codificador de vídeo 20 também pode gerar um bloco residual de Cr para a CU. Cada amostra no bloco residual de Cr da CU pode indicar uma diferença entre uma amostra de Cr em um dos blocos de Cr preditivos da CU e uma amostra correspondente no bloco de codificação de Cr original da CU.
[0075] Além disso, o codificador de vídeo 20 pode usar o particionamento de árvore quadrática para decompor os blocos residuais de luma, de Cb e de Cr de uma CU em um ou mais blocos de transformada de luma, de Cb e de Cr. Um bloco de transformada é um bloco (por exemplo, quadrado ou não quadrado) retangular de amostras no qual a mesma transformada é aplicada. Uma unidade de transformada (TU) de uma CU pode compreender um bloco de transformada de amostras de luma, dois blocos de transformada correspondentes de amostras de croma e estruturas de sintaxe usadas para transformar as amostras de bloco de transformada. Assim, cada TU de uma CU pode ser associada a um bloco de transformada de luma, um bloco de transformada de Cb e um bloco de transformada de Cr. O bloco de transformada de luma associado à TU pode ser um sub-bloco do bloco residual de luma da CU. O bloco de transformada de Cb pode ser um sub- bloco do bloco residual de Cb da CU. O bloco de transformada de Cr pode ser um sub-bloco do bloco residual de Cr da CU. Nas imagens de monocroma ou nas imagens que têm três planos de cor separados, uma TU pode compreender um único bloco de transformada e estruturas de sintaxe usadas para transformar as amostras do bloco de transformada.
[0076] O codificador de vídeo 20 pode aplicar uma ou mais transformadas a um bloco de transformada de luma de uma TU para gerar um bloco de coeficiente de luma para a TU. Um bloco de coeficiente pode ser uma matriz bidimensional de coeficientes de transformada. Um coeficiente de transformada pode ser uma quantidade escalar. O codificador de vídeo 20 pode aplicar uma ou mais transformadas a um bloco de transformada de Cb de uma TU para gerar um bloco de coeficiente de Cb para a TU. O codificador de vídeo 20 pode aplicar uma ou mais transformadas a um bloco de transformada de Cr de uma TU para gerar um bloco de coeficiente de Cr para a TU.
[0077] Após gerar um bloco de coeficiente (por exemplo, um bloco de coeficiente de luma, um bloco de coeficiente de Cb ou um bloco de coeficiente de Cr), o codificador de vídeo 20 pode quantizar o bloco de coeficiente. Em geral, a quantização se refere a um processo no qual os coeficientes de transformada são quantizados para possivelmente reduzir a quantidade de dados usados para representar os coeficientes de transformada, o que fornece uma compactação adicional. Após o codificador de vídeo 20 quantizar um bloco de coeficiente, o codificador de vídeo 20 pode codificar por entropia elementos de sintaxe que indicam os coeficientes de transformada quantizados. Por exemplo, o codificador de vídeo 20 pode realizar Codificação Aritmética Binária Adaptativa Ao Contexto (CABAC) nos elementos de sintaxe que indicam os coeficientes de transformada quantizados.
[0078] O codificador de vídeo 20 pode emitir um fluxo de bits que inclui uma sequência de bits que forma uma representação de imagens codificadas e dados associados. O fluxo de bits pode compreender uma sequência de unidades de camada de abstração de rede (NAL). Uma unidade de NAL é uma estrutura de sintaxe que contém uma indicação do tipo de dados na unidade de NAL e bytes e que contêm esses dados na forma de uma carga de sequência de bytes brutos (RBSP) intercalados conforme necessário com bits de prevenção de emulação. Cada uma das unidades de NAL inclui um cabeçalho de unidade NAL e encapsula uma RBSP.
[0079] Tipos diferentes de unidades de NAL podem encapsular tipos diferentes de RBSPs. Por exemplo, um primeiro tipo de unidade de NAL pode encapsular uma RBSP para um ajuste de parâmetro de imagem (PPS), um segundo tipo de unidade de NAL pode encapsular uma RBSP para uma fatia codificada, um terceiro tipo de unidade de NAL pode encapsular uma RBSP para as SEI e assim por diante. As unidades de NAL que encapsulam as RBSPs para dados de codificação de vídeo (em oposição às RBSPs para os conjuntos de parâmetros e mensagens de SEI) podem ser denominadas como unidades de NAL de camada de codificação de vídeo (VCL).
[0080] O decodificador de vídeo 30 pode receber um fluxo de bits gerado pelo codificador de vídeo 20. Além disso, o decodificador de vídeo 30 pode realizar análise sintática do fluxo de bits para obter elementos de sintaxe provenientes do fluxo de bits. O decodificador de vídeo 30 pode reconstruir as imagens dos dados de vídeo com base, pelo menos em parte, nos elementos de sintaxe obtidos a partir do fluxo de bits. O processo para reconstruir os dados de vídeo pode ser, em geral, recíproco ao processo realizado pelo codificador de vídeo 20. Além disso, o decodificador de vídeo 30 pode quantizar, inversamente, os coeficientes de blocos associados às TUs de uma CU atual. O decodificador de vídeo 30 pode realizar transformadas inversas nos blocos de coeficientes para reconstruir blocos de transformada associados às TUs da CU atual. O decodificador de vídeo 30 pode reconstruir os blocos de codificação da CU atual adicionando-se as amostras dos blocos preditivos para as PUs da CU atual às amostras correspondentes dos blocos de transformada das TUs da CU atual. Reconstruindo-se os blocos de codificação para cada CU de uma imagem, o decodificador de vídeo 30 pode reconstruir a imagem.
[0081] Quando uma CU for intercodificada, um conjunto de informações de movimento está presente para cada PU. Além disso, cada PU é codificada com um modo de interpredição exclusivo para derivar um conjunto de informações de movimento. No padrão de HEVC, existem dois modos de interpredição, denominados mescla (pular é considerado um caso especial de mescla) e modos de predição de vetor de movimento predição avançado (AMVP) respectivamente para uma unidade de predição (PU).
[0082] Em AMVP ou modo de mescla, uma lista de candidatos de vetor de movimento (MV) é mantida para múltiplos preditores de vetor de movimento. O vetor (ou vetores) de movimento, bem como índices de referência no modo de mescla, da PU atual é gerado tirando-se um candidato da lista de candidatos de MV.
[0083] A lista de candidatos de MV contém até cinco candidatos para o modo de mescla e dois candidatos para o modo de AMVP. Um candidato de mescla pode ter um conjunto de informações de movimento, por exemplo, vetores de movimento correspondentes a ambas as listas de imagem de referência (lista 0 e lista 1) e os índices de referência. Se um candidato de mescla for identificado por um índice de mescla, as imagens de referência são usadas para a predição dos blocos atuais, bem como os vetores de movimento associados são determinados. Entretanto, sob o modo de AMVP para cada direção de predição potencial a partir da lista 0 ou lista 1, um índice de referência precisa ser explicitamente sinalizado, juntamente com um índice de MVP para a lista de candidatos de MV visto que o candidato de AMVP contém apenas um vetor de movimento. No modo de AMVP, os vetores de movimento preditos podem ser adicionalmente refinados.
[0084] Bem como ser visto acima, um candidato de mescla corresponde a um conjunto de informações de movimento completo enquanto um candidato de AMVP contém apenas um vetor de movimento para uma direção de predição e índice de referência específica. Os candidatos para ambos os modos são derivados de modo semelhante dos mesmos blocos vizinhos espacial e temporal, conforme descrito em relação às Figuras 4 e 5 abaixo.
[0085] De acordo com os aspectos desta revelação, conforme descrito em maiores detalhes abaixo, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem ser configurados para realizar qualquer combinação das técnicas descritas no presente documento para derivar informações de movimento, realizar particionamento de bloco e/ou interpolar dados de vídeo. Em relação à derivação de informações de movimento, codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para derivar informações de movimento realizando-se uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual. A correspondência pode ser determinada com base em uma quantidade de semelhança entre dados de referência, e pode ser referida no presente documento como determinando uma “correspondência” ou “melhor correspondência”.
[0086] Em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode codificar inicialmente um ou mais elementos de sintaxe que indicam se o processo de derivação de movimento está habilitado. Em alguns casos, o um ou mais elementos de sintaxe podem ser incorporados com outro modo, como o modo de mescla descrito acima. Por exemplo, conforme descrito em maiores detalhes em relação ao exemplo da Figura 10, o codificador de vídeo 20 e/ou decodificador de vídeo 30 codificam um ou mais elementos de sintaxe quando se realiza o modo de mescla (por exemplo, um sinalizador, um índice em uma lista de candidatos de mescla, ou similares) que indica se deve realizar derivação de movimento.
[0087] Em casos em que derivação de movimento está habilitada, de acordo com aspectos desta revelação, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode realizar derivação de vetor de movimento correspondida em padrão. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode codificar um ou mais elementos de sintaxe que indica qual modo de derivação de informações de movimento deve aplicar a partir de uma pluralidade de modos de derivação de informações de movimento. O codificador de vídeo 20 e/ou decodificador de vídeo 30 pode codificar um sinalizador para distinguir entre dois modos de informações de derivação de movimento ou um índice para distinguir entre mais de dois modos de derivação de informações de movimento. Conforme descrito no presente documento, modos de derivação de informações de movimento correspondidos em padrão exemplificativos incluem correspondência bilateral ou correspondência de modelo.
[0088] Durante o processo de derivação de movimento, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode derivar um vetor de movimento inicial para um bloco inteiro (por exemplo, uma PU inteira) com base no processo de derivação de movimento selecionado. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode usar vetores de movimento a partir de uma lista de candidatos associado ao modo de mescla e determinar qual vetor de movimento a partir da lista de candidatos resulta em uma melhor correspondência. Isto é, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode determinar qual vetor de movimento a partir da lista de candidato, quando usado no processo de derivação de movimento selecionado, resulta em um primeiro conjunto de dados de referência que correspondem a u segundo conjunto de dados de referência fora do bloco atual, por exemplo, dados de referência que correspondem de modo aproximado os dados na imagem atual ou outra imagem de referência. Em geral, “melhor correspondência” pode se referir a dados de vídeo que são mais semelhantes em termos de diferenças de pixel.
[0089] Como um exemplo para propósito de ilustração, conforme descrito em maiores detalhes em relação à Figura 8, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode selecionar um modo de derivação de informações de movimento de correspondência de modelo. Neste exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode selecionar o vetor de movimento candidato a partir do modo de mescla com base no candidato de vetor que resulta em um modelo que corresponde de modo mais próximo um modelo em uma imagem de referência. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode configurado para realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual, em que o primeiro conjunto de dados compreende o modelo na imagem atual e o segundo conjunto de dados de referência compreende o modelo na imagem de referência. Em alguns casos, conforme descrito em maiores detalhes abaixo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode adicional ou alternativamente selecionar um vetor de movimento candidato com base em um custo de correspondência mínimo.
[0090] De acordo com os aspectos desta revelação, após determinar o vetor de movimento candidato, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode, adicionalmente, refinar o vetor de movimento candidato para derivar informações de movimento para o bloco atual. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode realizar uma busca (por exemplo, uma busca com o uso do modo de derivação de informações de movimento) em uma área predefinida da imagem de referência indicada pelo vetor de movimento candidato. O codificador de vídeo 20 e/ou decodificador de vídeo 30 pode derivar as informações de movimento para o bloco atual com base no vetor de movimento que indica dados de referência na área predefinida que têm uma melhor correspondência e/ou um custo de correspondência mínimo a dados de vídeo da imagem atual.
[0091] Em alguns casos, de acordo com aspectos desta revelação, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode dividir o bloco de dados de vídeo em sub- blocos quando se deriva informações de movimento. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode derivar separadamente informações de movimento para cada sub-bloco de um bloco maior. Em alguns casos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode usar as informações de movimento derivadas para um bloco (por exemplo, com o uso do processo descrito acima) como informações de movimento de candidato para cada um dos sub- blocos. O codificador de vídeo 20 e/ou decodificador de vídeo 30 pode, então, refinar adicionalmente as informações de movimento derivadas para cada um dos sub-blocos, por exemplo, com o uso de um modo de derivação de informações de movimento particular (por exemplo, uma técnica de correspondência bilateral, uma técnica de correspondência de modelo, ou outra técnica, conforme descrito em maiores detalhes abaixo).
[0092] A Figura 2 é um diagrama de blocos que ilustra um exemplo de codificador de vídeo 20 que pode implantar técnicas para derivar informações de movimento, realizar particionamento de bloco e/ou interpolar os dados de vídeo. O codificador de vídeo 20 pode realizar intracodificação e intercodificação de blocos de vídeo dentro de fatias de vídeo. A intracodificação depende da predição espacial para reduzir ou remover a redundância espacial no vídeo dentro de uma determinada imagem de quadro de vídeo. A intercodificação depende da predição temporal para reduzir ou remover a redundância temporal no vídeo dentro de quadros ou imagens adjacentes de uma sequência de vídeo. O intramodo (modo I) pode se referir a qualquer um dentre vários modos de codificação com base em espaço. Os intermodos, tal como predição monodirecional (modo P) ou predição bidirecional (modo B), podem se referir a qualquer um dentre diversos modos de codificação à base temporal.
[0093] Conforme mostrado na Figura 2, o codificador de vídeo 20 recebe um bloco de vídeo atual dentro de um quadro de vídeo a ser codificado. No exemplo da Figura 2, o codificador de vídeo 20 inclui memória de dados de vídeo 38, unidade de seleção de modo 40, memória de imagem de referência 64, somador 50, unidade de processamento de transformada 52, unidade de quantização 54 e unidade de codificação por entropia 56. A unidade de seleção de modo 40, por sua vez, inclui a unidade de compensação de movimento 44, unidade de estimativa de movimento 42, unidade de intrapredição 46 e unidade de partição 48. Para a reconstrução do bloco de vídeo, o codificador de vídeo 20 também inclui a unidade de quantização inversa 58, a unidade de transformada inversa 60 e o somador 62. Um filtro de remoção de blocos (não mostrado na Figura 2) também pode ser incluso aos limites de bloco de filtro para remover artefatos de blocagem do vídeo reconstruído. Caso desejado, o filtro de remoção de blocos filtraria tipicamente a saída do somador 62. Os filtros adicionais (em laço ou pós-laço) também podem ser usados adicionalmente ao filtro de remoção de blocos. Esses filtros não são mostrados para propósitos de brevidade, mas caso desejado, podem filtrar a saída do somador 50 (como um filtro em laço).
[0094] Durante o processo de codificação, o codificador de vídeo 20 recebe um quadro ou fatia de vídeo para ser codificada. O quadro ou fatia pode ser dividido em múltiplos blocos de vídeo. A memória de dados de vídeo 38 pode armazenar os dados de vídeo a serem codificados pelos componentes do codificador de vídeo 20. Os dados de vídeo armazenados na memória de dados de vídeo 38 podem ser obtidos, por exemplo, a partir da fonte de vídeo 18. A memória de imagem de referência 64 pode ser referida como um DPB que armazena dados de vídeo de referência para uso em dados de vídeo de codificação pelo codificador de vídeo 20, por exemplo, em modos de intra ou intercodificação. A memória de dados de vídeo 38 e uma memória de imagem de referência 64 podem ser formadas por qualquer um dentre uma variedade de dispositivos de memória, tal como memória dinâmica de acesso aleatório (DRAM), que inclui DRAM síncrona (SDRAM), RAM magnetorresistiva (MRAM), RAM resistiva (RRAM) ou outros tipos de dispositivos de memória. A memória de dados de vídeo 38 e a memória de imagem de referência 64 podem ser fornecidas pelo mesmo dispositivo de memória ou dispositivos de memória separados. Em vários exemplos, a memória de dados de vídeo 38 pode estar no chip com outros componentes de codificador de vídeo 20, ou fora do chip em relação àqueles componentes.
[0095] A unidade de estimativa de movimento 42 e unidade de compensação de movimento 44 realizam codificação interpreditiva do bloco de vídeo recebido em relação a um ou mais blocos em um ou mais quadros de referência para fornecer predição temporal. A unidade de intrapredição 46 pode, alternativamente, realizar codificação intrapreditiva do bloco de vídeo recebido em relação a um ou mais blocos vizinhos no mesmo quadro ou fatia que o bloco a ser codificado para fornecer predição espacial. O codificador de vídeo 20 pode realizar múltiplos passos de codificação, por exemplo, para selecionar um modo de codificação apropriado para cada bloco de dados de vídeo.
[0096] Ademais, a unidade de partição 48 pode particionar blocos de dados de vídeo em sub-blocos, com base na avaliação dos esquemas de particionamento anteriores em passos de codificação anteriores. Por exemplo, a unidade de partição 48 pode particionar inicialmente um quadro ou fatia em LCUs, e particionar cada uma das LCUs em sub-CUs com base na análise de distorção de taxa (por exemplo, otimização de distorção de taxa). A unidade de seleção de modo 40 pode produzir adicionalmente uma estrutura de dados de árvore quadrática que indica o particionamento de uma LCU em sub- CUs. As CUs de nó folha da árvore quadrática podem incluir uma ou mais PUs e uma ou mais TUs.
[0097] A unidade de seleção de modo 40 pode selecionar um dos modos de codificação, intra ou inter, por exemplo, com base em resultados de erro, e fornece o bloco intra ou intercodificado resultante ao somador 50 para gerar dados de bloco residual e ao somador 62 para reconstruir o bloco codificado para uso como um quadro de referência. A unidade de seleção de modo 40 também fornece elementos de sintaxe, como vetores de movimento, indicadores intramodo, informações de partição, e outras dessas informações de sintaxe, à unidade de codificação por entropia 56.
[0098] A unidade de estimativa de movimento 42 e a unidade de compensação de movimento 44 podem ser altamente integradas, mas são ilustradas separadamente para propósitos de conceito. A estimativa de movimento, realizada pela unidade de estimativa de movimento 42, é o processo de gerar vetores de movimento, que estimam o movimento para blocos de vídeo. Um vetor de movimento, por exemplo, pode indica o deslocamento de uma PU de um bloco de vídeo dentro de um quadro de vídeo ou imagem atual em relação a um bloco preditivo dentro de um quadro de referência (ou outra unidade codificada) em relação ao bloco atual sendo codificado dentro do quadro atual (ou outra unidade codificada). Um bloco preditivo é um bloco que se encontra em correspondência muito próxima ao bloco a ser codificado em termos de diferença de pixels, que pode ser determinado pelo somatório da diferença absoluta (SAD), somatório da diferença quadrada (SSD) ou outras medidas de diferença.
[0099] Em alguns exemplos, o codificador de vídeo 20 pode realizar uma busca de movimento rápida para determinar um vetor de movimento de um bloco. Existem muitos métodos de busca de movimento rápida propostos na literatura, como Busca por Método de Máximo Declive com base em Bloco (BBGDS) conforme descrito, por exemplo, em Lurng-Kuo Liu, Ephraim Feig, “A block-based gradient descent search algorithm for block motion estimation in video coding,” IEEE Trans. Circuits Syst. Video Technol. , vol. 6, páginas 419 a 422, agosto de 1996, Unrestricted Center-Biased Diamond Search (UCBDS), conforme descrito, por exemplo, em Jo Yew Tham, Surendra Ranganath, Maitreya Ranganath e Ashraf Ali Kassim, “A novel unrestricted center-biased diamond search algorithm for block motion estimation,” IEEE Trans. Circuits Syst. Video Technol. , vol. 8, páginas 369 a 377, agosto de 1998, e HEXagon-Based Search (HEBS) conforme descrito, por exemplo, em Ce Zhu, Xiao Lin e Lap-Pui Chau, “Hexagon-Based Search Pattern for Fast Block Motion Estimation,” IEEE Trans. Circuits Syst. Video Technol. , vol. 12, páginas 349 a 355, maior de 2002. Basicamente, essas técnicas incluem buscar apenas um determinado número de posições dentro de uma janela de busca com base em padrões de busca predefinidos. Essas técnicas normalmente funcionam bem quando o movimento for pequeno e moderado.
[00100] Em alguns exemplos, o codificador de vídeo 20 pode calcular valores para posições de pixel subinteiro de imagens de referência armazenadas na memória de imagem de referência 64. Por exemplo, o codificador de vídeo 20 pode interpolar valores de posições de um quarto de pixel, posições de um oitavo de pixel ou outras posições fracionadas de pixel da imagem de referência. Portanto, a unidade de estimativa de movimento 42 pode realizar uma busca de movimento em relação às posições completas de pixel e posições fracionadas de pixel e emitir um vetor de movimento com precisão fracionada de pixel.
[00101] A unidade de estimativa de movimento 42 calcula um vetor de movimento para uma PU de um bloco de vídeo em uma fatia intercodificada comparando-se a posição da PU à posição de um bloco preditivo de uma imagem de referência. A imagem de referência pode ser selecionada a partir de uma primeira lista de imagens de referência (Lista 0) ou uma segunda lista de imagens de referência (Lista 1), cada uma das quais identifica uma ou mais imagens de referência armazenadas na memória de imagem de referência 64. A unidade de estimativa de movimento 42 envia o vetor de movimento calculado para a unidade de codificação por entropia 56 e a unidade de compensação de movimento 44.
[00102] A compensação de movimento, realizada pela unidade de compensação de movimento 44, pode envolver obter ou gerar o bloco preditivo com base no vetor de movimento determinado pela unidade de estimativa de movimento 42. Novamente, a unidade de estimativa de movimento 42 e a unidade de compensação de movimento 44 podem ser funcionalmente integradas, em alguns exemplos. Mediante o recebimento do vetor de movimento para a PU do bloco de vídeo atual, a unidade de compensação de movimento 44 pode localizar o bloco preditivo para o qual o vetor de movimento aponta em uma das listas de imagens de referência. O somador 50 forma um bloco de vídeo residual subtraindo-se valores de pixel do bloco preditivo dos valores de pixel do bloco de vídeo atual em codificação, formando valores de diferença de pixel, conforme discutido abaixo. Em geral, a unidade de estimativa de movimento 42 realiza a estimativa de movimento relativa aos componentes de luma, e a unidade de compensação de movimento 44 usa vetores de movimento calculados com base em componentes de luma para ambos os componentes de croma e componentes de luma. A unidade de seleção de modo 40 também pode gerar elementos de sintaxe associados aos blocos de vídeo e a fatia de vídeo para uso pelo decodificador de vídeo 30 na decodificação dos blocos de vídeo da fatia de vídeo.
[00103] A unidade de intrapredição 46 pode intrapredizer um bloco atual, como uma alternativa à intrapredição realizada pela unidade de estimativa de movimento 42 e a unidade de compensação de movimento 44, conforme descrito acima. Em particular, a unidade de intrapredição 46 pode determinar um modo de intrapredição a ser usado para codificar um bloco atual. Em alguns exemplos, a unidade de intrapredição 46 pode codificar um bloco atual com o uso de vários modos de intrapredição, por exemplo, durante passos de codificação separados, e a unidade de intrapredição 46 (ou unidade de seleção de modo 40, em alguns exemplos) pode selecionar um modo de intrapredição adequado para usar a partir dos modos testados.
[00104] Por exemplo, a unidade de intrapredição 46 pode calcular valores de distorção de taxa com o uso de uma análise de distorção de taxa para os vários modos de intrapredição testados e selecionar o modo de intrapredição que tem as melhores características de distorção de taxa dentre os modos testados. A análise de distorção de taxa geralmente determina uma quantidade de distorção (ou erro) entre um bloco codificado e um bloco original não codificado que foi codificado para produzir o bloco codificado, bem como uma taxa de bits (isto é, um número de bits) usada para produzir o bloco codificado. A unidade de intrapredição 46 pode calcular razões a partir de distorções e taxas para os vários blocos codificados para determinar qual modo de intrapredição exibe o melhor valor de distorção de taxa para o bloco.
[00105] Após selecionar um modo de intrapredição para um bloco, a unidade de intrapredição 46 pode fornecer informações indicativas do modo de intrapredição selecionado para o bloco para a unidade de codificação por entropia 56. A unidade de codificação por entropia 56 pode codificar as informações que indicam o modo de intrapredição selecionado. O codificador de vídeo 20 pode incluir no fluxo de bits transmitidos dados de configuração, que podem incluir uma pluralidade de tabelas de índices de modo de intrapredição e uma pluralidade de tabelas de índices de modo de intrapredição modificados (também referidas como tabelas de mapeamento de palavras-código), as definições de contextos de codificação para vários blocos e indicações de um modo de intrapredição mais provável, uma tabela de índices de modo de intrapredição e uma tabela de índices de modo de intrapredição modificados para usar para cada um dos contextos.
[00106] De acordo com os aspectos desta revelação, conforme descrito no presente documento, o codificador de vídeo 20 pode ser configurado para realizar qualquer combinação das técnicas descritas no presente documento para derivar informações de movimento, realizar particionamento de bloco e/ou interpolar dados de vídeo. Em particular, determinadas técnicas desta revelação podem ser realizadas pela unidade de derivação 49. Por exemplo, unidade de derivação 49 pode ser configurada para determinar informações de movimento para um bloco atual e sem incluir dados que indicam as informações de movimento no fluxo de bits.
[00107] Em alguns casos, a unidade de derivação 49 (e/ou unidade de seleção de modo 40) pode determinar se deve realizar a derivação de movimento para um bloco particular (por exemplo, versus intrapredição ou interpredição tradicional) com base em uma análise de distorção de taxa. Por exemplo, a unidade de derivação 49 pode determinar se deve realizar derivação de movimento de modo semelhante a uma seleção de custo de distorção de taxa como é realizado para candidatos de mescla no modo de mescla. Neste exemplo, a unidade de derivação 49 pode verificar cada modo de derivação de informações de movimento de uma pluralidade de modos de derivação de informações de movimento (por exemplo, um modo de correspondência bilateral, modo de correspondência de modelo, ou similares) com o uso de uma seleção de custo de distorção de taxa. A unidade de derivação 49 pode comparar adicionalmente o modo de derivação de informações de movimento que tem o custo mínimo a outros modos de PU (por exemplo, modos de intrapredição, um modo de interpredição tradicional, um modo de codificação de palete ou similares). Em casos em que o modo de derivação de movimento é o modo mais eficaz no que diz respeito à eficiência de codificação, o codificador de vídeo 20 pode codificar um ou mais elementos de sintaxe que indicam que as informações de movimento são derivadas (ao invés de sinalizadas) para o bloco atual. O codificador de vídeo 20 também pode codificar um ou mais elementos de sintaxe para indicar o modo de derivação de movimento a partir de uma pluralidade de modos de derivação de informações de movimento.
[00108] Em outros exemplos, de acordo com aspectos desta revelação, a unidade de derivação 49 pode interpolar dados de vídeo que não estão inclusos no fluxo de bits codificado para uma sequência de vídeo. Por exemplo, a unidade de derivação 49 pode realizar quaisquer técnicas de combinação de derivação de movimento para interpolar uma imagem que não está inclusa no fluxo de bits, por exemplo, semelhante à conversão ascendente de taxa de quadros. Em alguns casos, o codificador de vídeo 20 pode usar a imagem interpolada durante a codificação. Por exemplo, a unidade de derivação 49 pode interpolar uma imagem e o codificador de vídeo 20 pode codificar dados para uma imagem atual em relação à imagem interpolada. Neste exemplo, o codificador de vídeo 20 pode adicionar a imagem interpolada à memória de imagem de referência 64 e codificar dados de outras imagens com base em pelo menos uma porção da imagem interpolada.
[00109] Em outros exemplos, a unidade de derivação 49 pode interpolar uma imagem e o codificador de vídeo 20 pode estabelecer a imagem interpolada igual à imagem atual. Por exemplo, a unidade de derivação 49 pode interpolar a imagem atual e o codificador de vídeo 20 pode codificar dados de sintaxe para a imagem atual ser inclusa no fluxo de bits (por exemplo, dados de cabeçalho de fatia e similares), mas pode pular a codificação dos dados de vídeo para a imagem atual.
[00110] Embora a unidade de derivação 49 possa ser configurada para realizar determinadas técnicas de derivação e/ou interpolação, conforme descrito no presente documento, deve ser compreendido que uma ou mais outras unidades do codificador de vídeo 20 podem também ou alternativamente ser configuradas para interpolar dados. Por exemplo, o codificador de vídeo 20 pode incluir uma variedade de outros interpoladores ou filtros, por exemplo, para interpolar um pixel em um local de subpixel (sub-pel) durante a compensação de movimento.
[00111] O codificador de vídeo 20 forma um bloco de vídeo residual subtraindo-se os dados de predição da unidade de seleção de modo 40 do original bloco de vídeo sendo codificado. O somador 50 representa o componente ou os componentes que realizam essa operação de subtração. A unidade de processamento de transformada 52 aplica uma transformada, como uma transformada de cosseno distinta (DCT) ou uma conceitualmente semelhante, ao bloco residual, produzindo um bloco de vídeo que compreende valores de coeficiente de transformada residual. A unidade de processamento de transformada 52 pode realizar outras transformadas que são conceitualmente semelhantes a DCT. As transformadas de ondeleta, transformadas inteiras, transformadas de sub-banda ou outros tipos de transformadas também poderiam ser usadas.
[00112] Em todo caso, a unidade de processamento de transformada 52 aplica a transformada ao bloco residual, produzindo um bloco de coeficientes de transformada residuais. A transformada pode converter as informações residuais de um domínio de valor de pixel em um domínio da transformada, como um domínio da frequência. A unidade de processamento de transformada 52 pode enviar os coeficientes de transformada resultantes para a unidade de quantização 54. A unidade de quantização 54 quantiza os coeficientes de transformada para reduzir adicionalmente a taxa de bits. O processo de quantização pode reduzir a profundidade de bit associada a alguns ou todos os coeficientes. O grau de quantização pode ser modificado ajustando-se um parâmetro de quantização. Em alguns exemplos, a unidade de quantização 54, pode, então, realizar uma varredura da matriz que inclui os coeficientes de transformada quantizados. Alternativamente, a unidade de codificação por entropia 56 pode realizar a varredura.
[00113] Após a quantização, a unidade de codificação por entropia 56 codifica por entropia os coeficientes de transformada quantizados. Por exemplo, a unidade de codificação por entropia 56 pode realizar a codificação de comprimento variável adaptativa a contexto (CAVLC), codificação aritmética binária adaptativa a contexto (CABAC), codificação aritmética binária adaptativa a contexto com base em sintaxe (SBAC), codificação por entropia de particionamento de intervalo de probabilidade (PIPE) ou outra técnica de codificação por entropia. No caso de codificação por entropia com base em contexto, o contexto pode se basear em blocos vizinhos. Após a codificação por entropia pela unidade de codificação por entropia 56, o fluxo de bits codificado pode ser transmitido para outro dispositivo (por exemplo, decodificador de vídeo 30) ou arquivado para transmissão ou recuperação posterior.
[00114] A unidade de quantificação inversa 58 e a unidade de transformada inversa 60 aplicam quantificação inversa e transformada inversa, respectivamente, para reconstruir o bloco residual no domínio de pixels, por exemplo, para uso posterior como um bloco de referência. A unidade de compensação de movimento 44 pode calcular um bloco de referência adicionando-se o bloco residual a um bloco preditivo de um dos quadros da memória de imagem de referência 64. A unidade de compensação de movimento 44 também pode aplicar um ou mais filtros de interpolação ao bloco residual reconstruído para calcular valores de pixel de subnúmeros inteiros para uso na estimativa de movimento. O somador 62 adiciona o bloco residual reconstruído ao bloco preditivo compensado em movimento produzido pela unidade de compensação de movimento 44 para produzir um bloco de vídeo reconstruído para armazenamento na memória de imagem de referência 64. O bloco de vídeo reconstruído pode ser usado pela unidade de estimativa de movimento 42 e pela unidade de compensação de movimento 44 como um bloco de referência para intercodificar um bloco em um quadro de vídeo subsequente.
[00115] A Figura 3 é um diagrama de blocos que ilustra um exemplo de decodificador de vídeo 30 que pode implantar técnicas para derivar informações de movimento, realizar particionamento de bloco e/ou interpolar os dados de vídeo. No exemplo da Figura 3, o decodificador de vídeo 30 inclui memória de dados de vídeo 68, uma unidade de decodificação por entropia 70, unidade de compensação de movimento 72, unidade de intrapredição 74, unidade de quantização inversa 76, unidade de transformada inversa 78, memória de imagem de referência 82 e somador 80. O decodificador de vídeo 30 pode, em alguns exemplos, realizar um passo de decodificação geralmente recíproco ao passo de codificação descrito em relação ao codificador de vídeo 20 (Figura 2). A unidade de compensação de movimento 72 pode gerar dados de predição com base em vetores de movimento recebidos a partir da unidade de decodificação por entropia 70, enquanto a unidade de intrapredição 74 pode gerar dados de predição com base nos indicadores de modo de intrapredição recebidos a partir da unidade de decodificação por entropia 70.
[00116] Durante o processo de decodificação, o decodificador de vídeo 30 recebe um fluxo de bits de vídeo codificado que representa blocos de vídeo de uma fatia de vídeo codificada e elementos de sintaxe associados provenientes do codificador de vídeo 20. Os dados de vídeo armazenados na memória de dados de vídeo 68 podem ser obtidos, por exemplo, a partir da mídia legível por computador, por exemplo, a partir de uma fonte de vídeo local, tal como uma câmera, através de comunicação de rede sem fio ou com fio de dados de vídeo ou acessando-se mídias de armazenamento de dados físicas. A memória de dados de vídeo 68 pode formar um armazenamento temporário de imagem codificada (CPB) que armazena dados de vídeo codificados a partir de um fluxo de bits de vídeo codificado.
[00117] A memória de imagem de referência 82 pode ser referida como um DPB que armazena dados de vídeo de referência para uso em dados de vídeo de decodificação pelo decodificador de vídeo 30, por exemplo, em modos de intra ou intercodificação. A memória de dados de vídeo 68 e uma memória de imagem de referência 82 podem ser formadas por qualquer um dentre uma variedade de dispositivos de memória, tal como memória dinâmica de acesso aleatório (DRAM), que inclui DRAM síncrona (SDRAM), RAM magnetorresistiva (MRAM), RAM resistiva (RRAM) ou outros tipos de dispositivos de memória. A memória de dados de vídeo 68 e a memória de imagem de referência 82 podem ser fornecidas pelo mesmo dispositivo de memória ou dispositivos de memória separados. Em vários exemplos, a memória de dados de vídeo 68 pode estar no chip com outros componentes de decodificador de vídeo 30 ou fora do chip em relação àqueles componentes.
[00118] A unidade de decodificação por entropia 70 do decodificador de vídeo 30 decodifica por entropia o fluxo de bits para gerar coeficientes quantizados, vetores de movimento ou indicadores de modo de intrapredição e outros elementos de sintaxe. A unidade de decodificação por entropia 70 encaminha os vetores de movimento e outros elementos de sintaxe para a unidade de compensação de movimento 72. O decodificador de vídeo 30 pode receber os elementos de sintaxe no nível de fatia de vídeo e/ou no nível de bloco de vídeo.
[00119] Quando a fatia de vídeo for codificada como uma fatia intracodificada (I), a unidade de intrapredição 74 pode gerar dados de predição para um bloco de vídeo da fatia de vídeo atual com base em um modo de intrapredição sinalizado e dados provenientes de blocos decodificados anteriormente do quadro ou imagem atual. Quando o quadro de vídeo for codificado como uma fatia intercodificada (isto é, B, P ou GPB), a unidade de compensação de movimento 72 produz blocos preditivos para um bloco de vídeo da fatia de vídeo atual com base nos vetores de movimento e outros elementos de sintaxe recebidos a partir da unidade de decodificação por entropia 70. Os blocos preditivos podem ser produzidos a partir de uma das imagens de referência dentro de uma das listas de imagens de referência. O decodificador de vídeo 30 pode construir as listas de quadro de referência, a Lista 0 e a Lista 1, com o uso de técnicas de construção padrão com base nas imagens de referência armazenadas na memória de imagens de referência 82.
[00120] A unidade de compensação de movimento 72 determina informações de predição para um bloco de vídeo da fatia de vídeo atual analisando-se os vetores de movimento e outros elementos de sintaxe, e usa as informações de predição para produzir os blocos preditivos para o bloco de vídeo atual em decodificação. Por exemplo, a unidade de compensação de movimento 72 pode usar uma parte dos elementos de sintaxe recebidos para determinar um modo de predição (por exemplo, intra ou interpredição) usado para codificar os blocos de vídeo da pedaço de vídeo, um tipo de fatia de interpredição (por exemplo, fatia B, fatia P ou fatia GPB), informações de construção para uma ou mais dentre as listas de imagens de referência para a fatia, vetores de movimento para cada bloco de vídeo intercodificado da fatia, status de interpredição para cada bloco de vídeo intercodificado da fatia e outras informações para decodificar os blocos de vídeo na fatia de vídeo atual.
[00121] A unidade de compensação de movimento 72 também pode realizar interpolação com base em filtros de interpolação. A unidade de compensação de movimento 72 pode usar filtros de interpolação conforme usado pelo codificador de vídeo 20 durante a codificação dos blocos de vídeo para calcular valores interpolados para pixels subinteiros de blocos de referência. Nesse caso, a unidade de compensação de modo 72 pode determinar os filtros de interpolação usados pelo codificador de vídeo 20 a partir dos elementos de sintaxe recebidos e usar os filtros de interpolação para produzir blocos preditivos.
[00122] De acordo com os aspectos desta revelação o decodificador de vídeo 30 pode ser configurado para realizar qualquer combinação das técnicas descritas no presente documento para derivar informações de movimento, realizar particionamento de bloco e/ou interpolar dados de vídeo. Em particular, determinadas técnicas desta revelação podem ser realizadas pela unidade de derivação 75. Por exemplo, de acordo com os aspectos desta revelação, a unidade de derivação 75 pode ser configurada para determinar informações de movimento para um bloco atual e sem decodificar as informações de movimento de um fluxo de bits codificado.
[00123] Em alguns casos, a unidade de derivação 75 pode determinar se deve realizar a derivação de movimento para um bloco particular (por exemplo, versus intrapredição ou interpredição tradicional). Por exemplo, o decodificador de vídeo 30 pode decodificar um ou mais elementos de sintaxe que indicam que as informações de movimento são derivadas (ao invés de sinalizadas) para um bloco sendo decodificado. O decodificador de vídeo 30 também pode decodificar um ou mais elementos de sintaxe que indicam um modo de derivação de informações de movimento a partir de uma pluralidade de modos de derivação de informações de movimento a serem usados para decodificar um bloco. A unidade de derivação 75 pode determinar se deve realizar a derivação de movimento e o modo de derivação de informações de movimento para um bloco com base na sintaxe decodificada. Em alguns exemplos, conforme descrito no presente documento, a sintaxe pode ser associada a um ou mais outros modos, como modo de mescla, AMVP, ou outras funções de decodificação.
[00124] De acordo com outros aspectos desta revelação, a unidade de derivação 75 pode interpolar dados de vídeo que não estão inclusos no fluxo de bits codificado para uma sequência de vídeo. Por exemplo, a unidade de derivação 75 pode realizar quaisquer técnicas de combinação de derivação de movimento para interpolar uma imagem que não está inclusa no fluxo de bits analisado sintaticamente, por exemplo, semelhante à conversão ascendente de taxa de quadros. Em alguns casos, o decodificador de vídeo 30 pode usar a imagem interpolada durante a codificação. Por exemplo, a unidade de derivação 75 pode interpolar uma imagem e o decodificador de vídeo 30 pode decodificar dados para uma imagem atual em relação à imagem interpolada. Neste exemplo, o decodificador de vídeo 30 pode adicionar a imagem interpolada à memória de imagem de referência 82 e decodificar dados de outras imagens com base em pelo menos uma porção da imagem interpolada.
[00125] Em outros exemplos, a unidade de derivação 75 pode interpolar uma imagem e o decodificador de vídeo 30 pode estabelecer a imagem interpolada igual à imagem atual. Por exemplo, a unidade de derivação 75 pode interpolar a imagem atual e o decodificador de vídeo 30 pode decodificar elementos de sintaxe para a imagem atual a partir do fluxo de bits codificado (por exemplo, dados de cabeçalho de fatia e similares), mas pode pular a decodificação dos dados de vídeo para a imagem atual e ao invés disso interpolar a imagem atual.
[00126] Embora a unidade de derivação 75 possa ser configurada para realizar determinadas técnicas interpolação, conforme descrito no presente documento, deve ser compreendido que uma ou mais outras unidades do decodificador de vídeo 30 podem também ou alternativamente ser configuradas para interpolar dados. Por exemplo, o decodificador de vídeo 30 pode incluir uma variedade de outros interpoladores ou filtros, por exemplo, para interpolar um pixel em um local de subpixel (sub-pel) durante a compensação de movimento.
[00127] A unidade de quantização inversa 76 quantiza inversamente, por exemplo, desquantiza, o coeficiente de transformada quantificados fornecidos no fluxo de bits e decodificados pela unidade de decodificação por entropia 70. O processo de quantização inversa pode incluir o uso de um parâmetro de quantização calculado pelo decodificador de vídeo 30 para cada bloco de vídeo na fatia de vídeo para determinar um grau de quantização e, de modo semelhante, um grau de quantização inversa que deve ser aplicado.
[00128] A unidade de transformada inversa 78 aplica uma transformada inversa 78, por exemplo, uma DCT, uma transformada de número inteiro inversa ou um processo de transformada inversa conceitualmente semelhante, aos coeficientes de transformada a fim de produzir blocos residuais no domínio de pixel.
[00129] Após a unidade de compensação de modo 72 gerar o bloco preditivo para o bloco de vídeo atual com base nos vetores de movimento e outros elementos de sintaxe, o decodificador de vídeo 30 forma um bloco de vídeo decodificado somando-se os blocos residuais provenientes da unidade de transformada inversa 78 com os blocos preditivos correspondentes gerados pela unidade de compensação de modo 72. O somador 80 representa o componente ou componentes que realizam essa operação de soma. Caso seja desejado, um filtro de remoção de blocos também pode ser aplicado para filtrar os blocos decodificados a fim de remover os artefatos de característica de bloqueio. Outros filtros em laço (tanto no laço de codificação quanto após o laço de codificação) também podem ser usados para suavizar as transições de pixel, ou, de outro modo, melhorar a qualidade de vídeo. Os blocos de vídeo decodificados em um dado quadro ou imagem de referência são, então, armazenados na memória de imagem 82, que armazena imagens de referência usadas para a compensação de movimento subsequente. A memória de imagem de referência 82 também armazena o vídeo decodificado para apresentação posterior em um dispositivo de exibição, como o dispositivo de exibição 32 da Figura 1.
[00130] As Figuras 4A e 4B são diagramas conceituais que ilustram candidatos vizinhos espaciais em HEVC. Em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode derivar candidatos de vetor de movimento (MV) espacial a partir do bloco vizinho 0, bloco vizinho 1, bloco vizinho 2, bloco vizinho 3 ou bloco vizinho 4 para PU0.
[00131] Em alguns casos, as técnicas para gerar os candidatos de MV dos blocos diferem para os modos de mescla e AMVP. A Figura 4A ilustra um exemplo para o modo de mescla. Por exemplo, em HEVC, um codificador de vídeo (por exemplo, como codificador de vídeo 20 e/ou decodificador de vídeo 30 das Figuras 1 a 3) pode derivar até quatro candidatos de MV espaciais. Os candidatos podem estar inclusos em uma lista de candidatos que tem uma ordem particular. Em um exemplo, a ordem para o exemplo da Figura 4A pode ser o bloco vizinho 0 (A1), bloco vizinho 1 (B1), bloco vizinho 2 (B0), bloco vizinho 3 (A0) e bloco vizinho 4 (B2).
[00132] A Figura 4B ilustra um exemplo para o modo de AMVP. Por exemplo, em HEVC, o codificador de vídeo pode dividir blocos vizinhos em dois grupos: em que o grupo esquerdo inclui o bloco vizinho 0 e bloco vizinho 1 e o grupo acima inclui o bloco vizinho 2, bloco vizinho 3 e bloco vizinho 4. Para cada grupo, o candidato de vetor de movimento potencial associado a um bloco vizinho que se refere à mesma imagem de referência que aquela indicada pelo índice de referência sinalizado (para o bloco atualmente sendo codificado) pode ter a maior prioridade para ser escolhida para formar um candidato final do grupo. É possível que nenhum dos blocos vizinhos contenha um vetor de movimento que aponta para a mesma imagem de referência. Portanto, se tal candidato não puder ser encontrado, o codificador de vídeo pode escalonar o primeiro candidato disponível para formar o candidato final, assim, as diferenças de distância temporal podem ser compensadas.
[00133] De acordo com os aspectos desta revelação, os candidatos de vetor de movimento, como os vetores de movimento associados aos blocos vizinhos mostrados nas Figuras 4A e 4B podem ser usados para derivar um vetor de movimento para um bloco. Por exemplo, o codificador de vídeo pode gerar uma lista de candidatos que inclui candidatos de vetor de movimento a partir dos blocos vizinhos mostrados nas Figuras 4A e 4B. Neste exemplo, o codificador de vídeo pode usar um ou mais dos candidatos da lista de candidatos como um vetor de movimento inicial em um processo de derivação de informações de movimento (por exemplo, correspondência bilateral, correspondência de modelo ou similares). O codificador de vídeo pode aplicar um ou mais dos candidatos de vetor de movimento em uma busca de movimento de um vetor de processo de derivação de movimento para identificar dados de referência. O codificador de vídeo pode selecionar o candidato a partir da lista que identifica dados de referência de correspondência próxima (por exemplo, conforme descrito em relação às Figuras 8 a 9 abaixo). Por exemplo, o codificador de vídeo pode realizar a busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual. O codificador de vídeo pode, em alguns casos, refinar adicionalmente o candidato, por exemplo, realizando-se uma busca de movimento adicionalmente em uma área indicada pelo candidato selecionado, para determinar um vetor de movimento derivado com o uso do processo de derivação de informações de movimento.
[00134] As Figuras 5A e 5B são diagramas conceituais que ilustra vetor de movimento predição temporal em HEVC. Um candidato de preditor de vetor de movimento (TMVP) temporal, se habilitado e disponível, é adicionado em uma lista de candidatos de MV após candidatos de vetor de movimento espaciais. Em HEVC, o processo de derivação de vetor de movimento para um candidato de TMVP é o mesmo para ambos os modos de mescla e AMVP, entretanto, o índice de referência alvo para o candidato de TMVP no modo de mescla é tipicamente estabelecido como zero.
[00135] A Figura 5A ilustra uma localização de bloco primário (mostrado como bloco “T”) para um candidato de TMVP, que é o bloco direito inferior fora da PU colocalizada. A localização pode compensar pela inclinação aos blocos acima e esquerdo usados para gerar candidatos vizinhos espaciais. Entretanto, se o bloco T estiver localizado fora da fileira de CTB atual ou informações de movimento não estiverem disponíveis, o bloco é substituído por um bloco central da PU, conforme ilustrado pelas setas tracejadas do bloco T na Figura 5A.
[00136] A Figura 5B ilustra a derivação de um candidato de TMVP 84 for um bloco atual 86 de uma imagem atual 88 a partir de uma PU colocalizada 90 de uma imagem colocalizada 92, conforme indicado no nível de fatia (por exemplo, em um cabeçalho de fatia). Semelhante ao modo direto temporal em AVC, um vetor de movimento do candidato de TMVP pode ser submetido ao escalonamento de vetor de movimento, que é realizado para compensar as diferenças de distância, por exemplo, distâncias temporais entre imagens. Em relação ao escalonamento de vetor de movimento, um codificador de vídeo (como o codificador de vídeo 20 e/ou decodificador de vídeo 30) pode ser configurado para determinar inicialmente que o valor dos vetores de movimento é proporcional à distância das imagens no tempo de apresentação. Um vetor de movimento associa duas imagens, a imagem de referência e a imagem que contém o vetor de movimento (a saber, a imagem de contenção). Quando um vetor de movimento for utilizado para prever o outro vetor de movimento, a distância da imagem de contenção e a imagem de referência é calculada com base nos valos de Contagem de Ordem de Imagem (POC).
[00137] Para um vetor de movimento ser predito, tanto a imagem de contenção associada para o vetor de movimento quanto uma imagem de referência do vetor de movimento podem ser diferentes. Portanto, o codificador de vídeo pode calcular uma nova distância com base em valores de POC, e o codificador de vídeo pode escalonar o vetor de movimento com base nessas duas distâncias de POC. Para um candidato vizinho espacial, as imagens de contenção para os dois vetores de movimento são as mesmas, enquanto as imagens de referência são diferentes. Em HEVC, o escalonamento de vetor de movimento aplica tanto a TMVP quanto a AMVP para candidatos vizinhos espaciais e temporais.
[00138] Em alguns exemplos, um codificador de vídeo pode ser configurado para determinar um ou mais candidatos de vetor de movimento artificiais. Por exemplo, se uma lista de candidatos de vetor de movimento não estiver completa, o codificador de vídeo pode gerar candidatos de vetor de movimento artificial e inserir os candidatos de vetor de movimento artificiais no fim da lista até a lista incluir um número predeterminado de entradas. No modo de mescla, existem dois tipos de candidatos de MV artificiais que incluem um candidato combinado derivado apenas para fatias B e um candidato zero. Em alguns casos, o zero candidato é usado apenas para AMVP se o tipo combinado não fornecer candidatos artificiais suficientes.
[00139] Para cada par de candidatos que já estão na lista de candidatos e têm informações de movimento necessárias, os candidatos de vetor de movimento combinados bidirecionais são derivados por uma combinação do vetor de movimento do primeiro candidato que se refere a uma imagem na lista 0 e o vetor de movimento de um segundo candidato que se refere a uma imagem na lista 1.
[00140] De acordo com os aspectos desta revelação, os candidatos de vetor de movimento, como o TMVP mostrado nas Figuras 5A e 5B, podem ser usados para derivar um vetor de movimento para um bloco. Por exemplo, o codificador de vídeo pode gerar uma lista de candidatos que inclui um TMVP determinado de acordo com o processo descrito acima. Neste exemplo, o codificador de vídeo pode usar o TMVP como um vetor de movimento inicial em um processo de derivação de informações de movimento (por exemplo, correspondência bilateral, correspondência de modelo ou similares). O codificador de vídeo pode aplicar o TMVP em um vetor de processo de derivação de movimento para identificar dados de referência. O codificador de vídeo pode selecionar o TMVP em casos em que o TMVP identifica dados de referência de correspondência próxima (por exemplo, conforme descrito em relação às Figuras 8 a 9 abaixo). O codificador de vídeo pode, em alguns casos, refinar adicionalmente o TMVP para determinar um vetor de movimento derivado com o uso do processo de derivação de informações de movimento.
[00141] Em alguns exemplos, o codificador de vídeo pode remover uma lista de candidatos que inclui candidatos de vetor de movimento (como aqueles descritos em relação às Figuras 4A a 5B). Por exemplo, em alguns casos, os candidatos de diferentes blocos podem ser iguais, o que diminui a eficiência de uma lista de candidatos de mescla/AMVP. O código de vídeo pode aplicar um processo de remoção para solucionar esse problema. O codificador de vídeo pode comparar um candidato contra os outros na lista de candidatos atual para evitar inserir um candidato idêntico. Para reduzir a complexidade, o codificador de vídeo pode apenas aplicar números limitados de processos de remoção ao invés de comparar cada potencial a todos os outros existentes.
[00142] A Figura 6 é um diagrama conceitual que ilustra um exemplo de estimativa de movimento unilateral (ME) em conversão ascendente de taxa de quadros (FRUC). Em particular, a Figura 6 ilustra um quadro atual 100, um quadro de referência 102 e um quadro interpolado 104. Em alguns casos, um decodificador de vídeo ou dispositivo de pós- processamento pode interpolar imagens com base em uma ou mais imagens de referência. O decodificador de vídeo ou dispositivo de pós-processamento pode interpolar imagens para converter de modo ascendente uma taxa de quadros original de um fluxo de bits codificado. Alternativamente, o decodificador de vídeo ou dispositivo de pós-processamento pode interpolar imagens para inserir uma ou mais imagens que foram puladas por um codificador de vídeo para codificar uma sequência de vídeo em uma taxa de quadros reduzida. Em todo caso, o decodificador de vídeo ou dispositivo de pós- processamento interpola quadros (como quadro interpolado 104) que não estão inclusos em um fluxo de bits codificado que foi recebido pelo decodificador de vídeo com o uso de imagens que foram decodificadas (como quadro atual 100 e quadro de referência 102). O decodificador de vídeo ou dispositivo de pós-processamento pode interpolar as imagens com o uso de qualquer uma dentre várias técnicas de interpolação, por exemplo, com o uso de interpolação de quadro compensada por movimento, repetição de quadro, ou cálculo de média de quadros.
[00143] As técnicas de interpolação de quadro notadas acima são tipicamente implantadas pós-ciclo. Por exemplo, um decodificador de vídeo tipicamente recebe e decodifica um fluxo de bits codificado para gerar uma representação reconstruída de uma sequência de vídeo que inclui o quadro atual 100 e o quadro de referência 102. Após o ciclo de decodificação, o decodificador de vídeo ou outro dispositivo de pós-processamento pode interpolar as imagens para ser incluso com a representação reconstruída que inclui o quadro interpolado 104. Em alguns casos, o processo de interpolar a imagem pode ser referido como conversão ascendente de taxa de quadros (FRUC), devido ao fato de que a sequência resultante das imagens inclui (interpoladas) imagens adicionais que não estavam inclusas no fluxo de bits codificado.
[00144] Consequentemente, a tecnologia de FRUC pode ser usada para gerar vídeos de taxa de quadros alta com base em vídeos de taxa de quadros baixa. FRUC foi usada na indústria de visores. Os exemplos incluem H. Liu, R. Xiong, D. Zhao, S. Ma, W. Gao, “Multiple Hypotheses Bayesian Frame Rate Up-Conversion by Adaptive Fusion of Motion-Compensated Interpolations”, IEEE transactions on circuits and systems for video technology, vol. 22, No. 8, agosto de 2012; W. H. Lee, K. Choi, J. B. Ra, “Frame rate up conversion based on variational image fusion”, IEEE transactions on image processing, vol. 23, No. 1, janeiro de 2014; e U. S. Kim, M. H. Sunwoo, “New frame rate up-conversion algorithms with low computational complexity”, IEEE transactions on circuits and systems for video technology, vol. 24, no 3, março de 2014.
[00145] Os algoritmos de FRUC podem ser divididos em dois tipos. Um tipo de métodos interpola quadros intermediários por cálculo de média ou repetição de quadro simples. Entretanto, esse método fornece resultados inadequados em uma imagem que contém muito movimento. O outro tipo de método, chamado de FRUC compensada em movimento (MC- FRUC), considera o movimento de objeto quando o mesmo gera quadros intermediários e consiste em duas etapas: estimativa de movimento (ME) e interpolação compensada em movimento (MCI). A ME gera vetores de movimento (MVs), que representam movimento de objeto com o uso de vetores, considerando que a MCI usa MVs para gerar quadros intermediários.
[00146] O algoritmo de correspondência de bloco (BMA) é amplamente usado para ME em MC-FRUC como é simples de implantar. BMA divide uma imagem em blocos e detecta o movimento daqueles blocos, por exemplo, para determinar se os blocos correspondem. Dois tipos de ME são primeiramente usados para BMA: ME unilateral e ME bilateral.
[00147] Conforme mostrado na Figura 6, a ME unilateral obtém MVs buscando-se a melhor correspondência de bloco do quadro de referência 102 do quadro atual 100. Então, o bloco na trajetória de movimento no quadro interpolado pode estar localizado de modo que o MV seja alcançado. Conforme mostrado na Figura 6, três blocos que incluem 106 A, 106B e 106C do quadro atual 100, do quadro de referência 102 e do quadro interpolado 104, respectivamente, estão envolvidos seguindo a trajetória de movimento. Embora o bloco 106 A no quadro atual 100 pertença a um bloco codificado, o melhor bloco de correspondência 106B no quadro de referência 102 pode pertencer não completamente a um bloco codificado, e nem o bloco 106C no quadro interpolado 104. Consequentemente, as regiões sobrepostas dos blocos e regiões não preenchidas (furos) podem ocorrer no quadro interpolado.
[00148] Para manipular sobreposições, algoritmos de FRUC simples meramente envolvem o cálculo de média e sobrescrever os pixels sobrepostos. Ademais, os furos são cobertos pelos valores de pixel de uma referência ou um quadro atual. Entretanto, esses algoritmos resultam nos artefatos de blocagem e embaçamento. Por conseguinte, a segmentação de campo de movimento, extrapolação consecutiva com o uso da transformada Hartley distinta, e retoque de imagem são propostos para manipular furos e sobreposições sem aumentar os artefatos de blocagem e embaçamento.
[00149] De acordo com os aspectos desta revelação, um codificador de vídeo (como codificador de vídeo 20 e/ou decodificador de vídeo 30) pode gerar quadro interpolado 104 no ciclo de codificação ou decodificação com o uso da técnica de correspondência unilateral mostrada na Figura 6. Por exemplo, o codificador de vídeo pode usar FRUC de nível de imagem para interpolar quadro interpolado 104 como um preditor da imagem atual, com o uso da matriz de pixel reconstruída. Em alguns exemplos, essa imagem interpolada pode ser considerada como uma imagem de referência ou a reconstrução do quadro atual 100. Em outros exemplos, o codificador de vídeo pode estabelecer a imagem atual igual à imagem interpolada. Essa imagem pode ser marcada como uma imagem descartável e/ou imagem de não referência por elementos de sintaxe ou processos de decodificação.
[00150] Em alguns exemplos, o codificador de vídeo pode interpolar uma imagem atual de modo que um modo de FRUC seja o único modo permitido, em que o modo de FRUC indica a técnica de correspondência unilateral mostrada na Figura 6 ou qualquer outra derivação de informações de movimento ou técnicas de interpolação descritas no presente documento. Por conseguinte, ao invés de uma sinalização de estrutura de CU com base em árvore quadrática, todos os blocos podem ter o mesmo tamanho predefinido ou sinalizado. Em alguns casos, apenas um subconjunto de modos de codificação de Cu válidos, como pular regular, mescla regular, modo de FRUC, e intra modo pode ser permitido. Alternativa ou adicionalmente, um modo de preenchimento de furo para FRUC pode ser permitido nessa imagem ou fatia.
[00151] De acordo com os aspectos desta revelação, uma mensagem de SEI pode ser introduzida para indicar quais imagens ou subsequência de imagens são codificadas pela FRUC de nível de imagem. Essas imagens podem ser descartadas sem impactar a qualidade das outras imagens. Essa mensagem de SEI pode indicar (ou indicar adicionalmente) qual nível (ou níveis) temporal contém imagens codificadas de FRUC, ou contém apenas imagens codificadas de FRUC. Essas informações em mensagem de SEI também podem estar presentes como outros locais da sintaxe de alto nível, como PPS, SPS e VPS.
[00152] Em alguns exemplos, um codificador de vídeo pode codificar uma porção de uma imagem e interpolar os dados de vídeo restantes. Por exemplo, o codificador de vídeo pode codificar uma chamada “dica” para a conversão ascendente de taxa de quadros de lado de decodificador, o que pode permitir que decodificadores ricos em recurso ou inteligentes gerem opcionalmente os quadros de FRUC. Por exemplo, várias regiões chave (como regiões de retângulo) podem ser sinalizadas como uma dica para esses quadros de FRUC. Quando a dica for recebida e opcionalmente processada, o método de FRUC especificado como parte do decodificador pode ser usado primeiramente pelas regiões que não são regiões chave, enquanto que as regiões chave devem ser processadas adicionalmente pelos meios que podem não ser especificados pelo decodificador, como métodos de preenchimento de furo.
[00153] Em relação ao preenchimento de furo, de acordo com os aspectos desta revelação, um codificador de vídeo pode implantar técnicas de preenchimento de furo com base em bloco. Por exemplo, uma técnica de preenchimento de furo é usar interblocos espacialmente vizinhos para prever o intra bloco atual na mesma CTU. Por exemplo, o codificador de vídeo pode codificar/decodificar uma CTU duas vezes. A primeira codificação/decodificação é conforme o normal. Na segunda rodada, apenas intra blocos são codificados/decodificados e sobrescritos. Para um intra bloco, todos os seus interblocos espacialmente vizinhos na mesma CTU, que incluem aquelas à direta inferior do bloco atual, são marcadas como disponíveis para intra predição. O método de preenchimento de furo também pode ser fatia, recorte, imagem ou qualquer outro nível. Outro método de preenchimento de furo pode usar uma técnica de retoque de imagem. Outras técnicas de preenchimento de furo também podem ser aplicáveis.
[00154] A Figura 7 é um diagrama conceitual que ilustra um exemplo de estimativa de movimento bilateral (ME) em FRUC. Em particular, a Figura 7 ilustra um bloco interpolado 108 de um quadro interpolado 110 que é interpolado a partir de um bloco atual 112 de um quadro atual 114 e um bloco de referência 116 de um quadro de referência 118. Conforme mostrado na Figura 7, a ME bilateral é outra solução (em MC-FRUC) que pode ser usada para evitar os problemas causados por sobreposições e furos mostrados na Figura 6. A ME bilateral obtém MVs passando através do bloco interpolado 108 com o uso da simetria temporal entre os blocos 112 e 116 de quadro atual 114 e quadro de referência 118, respectivamente. Como um resultado, não gera sobreposições e furos. Visto que se supõe que o bloco atual é um bloco que está sendo processado, em uma determinada ordem, por exemplo, como no caso de codificação de vídeo, uma sequência desses blocos cobriria a imagem intermediária total sem sobreposição. Por exemplo, no caso de codificação de vídeo, os blocos podem ser processados na ordem de decodificação.
[00155] De acordo com os aspectos desta revelação, a estimativa de movimento bilateral mostrada no exemplo da Figura 7 pode ser aproveitada para derivar informações de movimento. Por exemplo, conforme descrito em maiores detalhes em relação à Figura 9 abaixo, um codificador de vídeo (como codificador de vídeo 20 ou decodificador de vídeo 30) pode aplicar a correspondência bilateral como um modo de derivação de informações de movimento para derivar informações de movimento durante a codificação. Na correspondência bilateral, o codificador de vídeo pode realizar uma busca de movimento por um primeiro conjunto de dados de referência em uma primeira imagem de referência que corresponde a um segundo conjunto de dados de referência em uma segunda imagem de referência.
[00156] De acordo com outros aspectos desta revelação, um codificador de vídeo (como codificador de vídeo 20 e/ou decodificador de vídeo 30) pode gerar o quadro interpolado no ciclo de codificação ou decodificação com o uso da técnica de correspondência bilateral mostrada na Figura 7. Por exemplo, o codificador de vídeo pode usar FRUC de nível de imagem para interpolar a imagem interpolada como um preditor da imagem atual, com o uso da matriz de pixel reconstruída. Em alguns exemplos, essa imagem interpolada pode ser considerada como uma imagem de referência ou a reconstrução da imagem atual. Em outros exemplos, o codificador de vídeo pode estabelecer a imagem atual igual à imagem interpolada. Essa imagem pode ser marcada como uma imagem descartável e/ou imagem de não referência por elementos de sintaxe ou processos de decodificação.
[00157] A Figura 8 é um diagrama conceitual que ilustra um exemplo de derivação de vetor de movimento de lado de decodificador (DMVD) com base em correspondência de modelo. Com os codecs de vídeo avançados, a porcentagem de bit das informações de movimento em fluxo de bits se torna maior e maior. Em alguns casos, a DMVD pode reduzir o custo de bits das informações de movimento. A DMVD com base em correspondência de modelo pode exibir um aprimoramento de eficiência de codificação , conforme descrito, por exemplo, em S. Kamp, M. Wien, “Decoder-side motion vector derivation for block-based video coding”, IEEE transactions on circuits and systems for video technology, vol. 22, no 12, dezembro de 2012.
[00158] No exemplo da Figura 8, uma imagem atual 120 inclui um alvo de predição 122 (por exemplo, um bloco atualmente sendo codificado) e um modelo 124. As imagens de referência 126 incluem um modelo colocalizado 128, uma melhor correspondência 130 e um vetor de deslocamento 132. Um codificador de vídeo (como codificador de vídeo 20 e/ou decodificador de vídeo 30) pode usar modelo 124 para buscar por uma melhor correspondência para alvo de predição 122 (por exemplo, ao invés de usar o próprio alvo de predição 122, que está ainda a ser codificado). Por exemplo, o codificador de vídeo pode realizar uma busca de movimento para identificar um primeiro conjunto de dados de referência (por exemplo, melhor correspondência 130) que corresponde a um segundo conjunto de dados de referência fora do alvo de predição 122 (por exemplo, modelo 124). Conforme notado acima, a correspondência pode ser determinada com base em uma quantidade de semelhança entre dados de referência, e pode ser referida no presente documento como determinando uma “correspondência” ou “melhor correspondência”.
[00159] No exemplo mostrado, o codificador de vídeo pode identificar o modelo colocalizado 128 nas imagens de referência 126. O codificador de vídeo pode, então, buscar pela melhor correspondência 130, que inclui valores de pixel que são semelhantes ao modelo 124. O codificador de vídeo pode determinar o vetor de deslocamento 132 com base no deslocamento do modelo colocalizado 128 e a melhor correspondência 130 em imagens de referência 126.
[00160] Supondo que o modelo 124 e o alvo de predição 122 são provenientes do mesmo objeto, o vetor de movimento do modelo pode ser usado como o vetor de movimento do alvo de predição. Por conseguinte, no exemplo da Figura 8, o codificador de vídeo pode aplicar o vetor de deslocamento 132 para o alvo de predição 122. Visto que a correspondência de modelo é conduzida tanto em um codificador de vídeo quanto um decodificador de vídeo, o vetor de movimento pode ser derivado no lado de decodificador para evitar o custo de sinalização.
[00161] De acordo com os aspectos desta revelação, o codificador de vídeo pode aplicar a correspondência de modelo como um modo de derivação de informações de movimento. Por exemplo, o codificador de vídeo pode aplicar a correspondência de modelo para derivar informações de movimento de um bloco atual localizando-se uma melhor correspondência entre o modelo 124 da imagem atual e dados de referência correspondentes em imagens de referência 126. Embora o exemplo da Figura 8 ilustre o modelo 124 como um bloco de dados de vídeo em formato de L, deve ser compreendido que outros modelos podem ser usados. Por exemplo, o codificador de vídeo pode usar múltiplos blocos como um modelo, por exemplo, um ou mais blocos posicionados à esquerda do alvo de predição 122 e um ou mais blocos posicionados acima do alvo de predição 122.
[00162] De acordo com os aspectos desta revelação, o codificador de vídeo pode aplicar as técnicas de correspondência de modelo mostradas na Figura 8 com o uso de um ou mais vetores de movimento a partir de uma lista de candidatos de vetores de movimento. Por exemplo, o codificador de vídeo pode ser configurado para determinar um ou mais vetores de movimento candidatos com o uso de qualquer combinação das técnicas descritas no presente documento (por exemplo, candidatos de modo de mescla, candidatos de AMVP, um TMVP ou similares). O codificador de vídeo pode, então, ser configurado para aplicar um ou mais dos vetores de movimento candidatos ao modelo 124 para localizar o modelo colocalizado 128 (nesse exemplo, a localização do modelo colocalizado 128 é ditada pelo um ou mais vetores de movimento candidatos e não necessariamente estritamente colocalizado). O codificador de vídeo pode ser configurado para determinar quais dos vetores de movimento candidatos resultam em uma melhor correspondência entre o modelo 124 e o modelo colocalizado 128.
[00163] De acordo com os aspectos desta revelação, o codificador de vídeo pode, então, ser configurado para refinar o vetor de movimento candidato para derivar informações de movimento para o alvo de predição 122. Por exemplo, o codificador de vídeo pode buscar por uma melhor correspondência para o modelo 124 em uma região das imagens de referência 126 identificada pelo vetor de movimento candidato. Mediante a determinação de uma melhor correspondência, o codificador de vídeo pode determinar um deslocamento entre o modelo 124 e a correspondência com base em determinação. O codificador de vídeo pode designar o deslocamento como um vetor de movimento derivado para o alvo de predição 122.
[00164] A Figura 9 é um diagrama conceitual que ilustra um exemplo de derivação de vetor de movimento bidirecional em DMVD. Outra categoria de DMVD é a derivação de MV bidirecional com base em espelho, conforme descrito, por exemplo, em Y.-J. Chiu, L. Xu, W. Zhang, H. Jiang, “Decoder-side Motion Estimation and Wiener filter for F£EVC”, Visual communications and Image Processing (VCIP), 2013. O conceito de derivação de vetor de movimento bidirecional em DMVD pode ser semelhante à ME bilateral em FRUC. Por exemplo, a derivação de MV com base em espelho pode ser aplicada pela estimativa de movimento centrossimétrica ao redor de centros de busca em precisão de amostra fracionária.
[00165] O exemplo da Figura 9 inclui a imagem atual 140 que tem o bloco atual 142 (em que o bloco é atualmente codificado), um primeiro vetor de movimento candidato PMV0 que identifica um primeiro bloco de modelo 144 de uma primeira imagem de referência 146 (ref L0), e um segundo vetor de movimento candidato PMV1 que identifica um segundo bloco de modelo 148 de uma segunda imagem de referência 150. O codificador de vídeo pode aplicar dMV como um desvio para localizar um primeiro bloco de referência 152 na janela de busca 154 da primeira imagem de referência 146 e para localizar um segundo bloco de referência 156 na janela de busca 158 da segunda imagem de referência 150.
[00166] Por exemplo, o codificador de vídeo pode adicionar dMV a PMV0 e subtrair a dMV da PMV1 para gerar um par de MV, MV0 e MV1. O codificador de vídeo pode verificar todos os valores de dMV dentro da janela de busca 154 e 158 para determinar qual valor de dMV resulta na melhor correspondência entre o primeiro bloco de referência 152 (por exemplo, um primeiro conjunto de dados de referência) de ref L0 e o segundo bloco de referência 156 (por exemplo, um segundo conjunto de dados de referência) de ref L1. Em alguns exemplos, o codificador de vídeo pode determinar a melhor correspondência com base na Soma da Diferença Absoluta (SAD). Em outros exemplos, o codificador de vídeo pode usar outra métrica para determinar a melhor correspondência. O tamanho e localização das janelas de busca 154 e 158 podem ser predefinidas ou podem ser sinalizadas em um fluxo de bits.
[00167] O codificador de vídeo pode selecionar o par de MV com a SAD mínima como a saída da estimativa de movimento centrossimétrica. Visto que essa técnica usa uma referência futura (referência em uma posição temporal posterior em relação ao quadro atual) e uma referência anterior (referência em uma posição temporal anterior em relação ao quadro atual) para a correspondência de SAD, não pode ser aplicada ao quadro P ou quadros B de baixo atraso em que apenas a última referência está disponível.
[00168] De acordo com os aspectos desta revelação, o codificador de vídeo pode aplicar as técnicas de derivação de vetor de movimento bidirecional como um modo de derivação de informações de movimento. Em alguns exemplos, o codificador de vídeo pode aplicar as técnicas mostradas na Figura 9 com o uso de um ou mais vetores de movimento a partir de uma lista de candidatos de vetores de movimento. Por exemplo, o codificador de vídeo pode ser configurado para determinar um ou mais vetores de movimento candidatos com o uso de qualquer combinação das técnicas descritas no presente documento (por exemplo, candidatos de modo de mescla, candidatos de AMVP, um TMVP ou similares). O codificador de vídeo pode, então, ser configurado para aplicar um ou mais dos vetores de movimento candidatos como PMV0 e/ou PMVl para localizar o primeiro bloco de modelo 144 e segundo bloco de modelo 148. O codificador de vídeo pode ser configurado para determinar qual dos vetores de movimento candidatos resulta em uma melhor correspondência entre o primeiro bloco de modelo 144 e o segundo bloco de modelo 148.
[00169] De acordo com os aspectos desta revelação, o codificador de vídeo pode, então, ser configurado para refinar o vetor de movimento candidato para derivar informações de movimento para o bloco atual 142. Por exemplo, o codificador de vídeo pode buscar por uma melhor correspondência aplicando-se uma variedade de valores de dMV, do modo descrito acima. Desta forma, o codificador de vídeo pode derivar o par de MV MV0 e MV1.
[00170] A Figura 11 é um diagrama conceitual que ilustra derivação de vetor de movimento com base em correspondência bilateral estendida. Uma desvantagem potencial da derivação de MV bidirecional com base em espelho (por exemplo, conforme mostrado na Figura 10) é que não funciona quando duas referências da imagem atual são ambas anteriores ou ambas posteriores em relação à imagem atual. As técnicas de correspondência bilateral estendida descrita no presente documento podem, em alguns casos, superar a desvantagem que em todas as imagens de referência da imagem atual estão no mesmo lado (na ordem de exibição) como a imagem atual.
[00171] O exemplo da Figura 11 inclui uma imagem atual 160 que inclui um bloco atual 162, uma primeira imagem de referência (Ref0) 164 que inclui um primeiro bloco de referência 166 e uma segunda imagem de referência (Ref1) 168 que inclui um segundo bloco de referência 170. Conforme mostrado na Figura 11, a primeira imagem de referência (Ref0) 164 e a segunda imagem de referência (Ref1) 168 estão ambas localizadas antes da imagem atual na direção temporal. Supondo que o primeiro bloco de referência 166, o segundo bloco de referência 170 e o bloco atual 162 estão ao longo da mesma trajetória de movimento, a razão entre MV0 e MV1 deverá ser igual à razão entre a distância temporal TDO e TD1. Em outras palavras, dadas as duas referências Ref0 e Ref1 com a distância temporal TDO e TD1 para a imagem atual, para qualquer MV0 em Ref0, MV1 em Ref1 podem ser determinados escalonando MV0.
[00172] O codificador de vídeo pode selecionar o par de MV0 e MV1 final como o par que minimiza o custo de correspondência entre o bloco par apontado por MV0 e MV1 (por exemplo, conforme descrito acima em relação à Figura 10). Teoricamente, o bloco atual 162 pode ser considerado como um bloco extrapolado com base em primeiro bloco de referência 166 e segundo bloco de referência 170. Deve ser notado que a correspondência bilateral estendida também funciona no caso bidirecional normal em que a imagem atual está temporariamente entre as duas referências. Nesse caso, o bloco atual 162 pode ser considerado como um bloco interpolado com base em primeiro bloco de referência 166 e segundo bloco de referência 170. Ademais, as técnicas de correspondência bilateral descritas no presente documento não exigem “relação de espelho” entre MV0 e MV1, até mesmo no caso bidirecional. A suposição de correspondência bilateral é que a razão entre MV0 e MV1 está na proporção à razão entre a distância temporal a partir de Ref0 para a imagem atual e aquela a partir de Ref1 para a imagem atual.
[00173] Claramente, para blocos de referência além do primeiro bloco de referência 166 e segundo bloco de referência 170, o codificador de vídeo pode derivar um par de MV diferente. Em um exemplo, o decodificador de vídeo pode selecionar imagens de referência para realizar a correspondência bilateral de acordo com uma ordem em que as imagens de referência aparecem em uma lista de imagem de referência. Por exemplo, o codificador de vídeo pode selecionar a primeira referência na lista de referência 0 como Ref0 e a primeira referência na lista de referência 1 como Ref1. O codificador de vídeo pode, então, busca o par de MV (MV0, MV1). Em outro exemplo, o codificador de vídeo seleciona Ref0 com base em uma entrada em uma lista inicial (por exemplo, uma lista de candidatos de vetor de movimento inicial). O codificador de vídeo pode, então, estabelecer Ref1 como uma imagem de referência na outra lista de imagem de referência que está temporariamente mais próxima à imagem atual. Consequentemente, o codificador de vídeo pode buscar o par de MV (MV0, MV1) em Ref0 e Ref1.
[00174] Por conseguinte, de acordo com aspectos desta revelação, o codificador de vídeo pode aplicar as técnicas de derivação de movimento bidirecional estendida ilustradas na Figura 11 como um modo de derivação de informações de movimento. Por exemplo, o codificador de vídeo pode usar a correspondência bilateral para derivar informações de movimento de bloco atual 162 encontrando-se a melhor correspondência entre dois blocos (por exemplo, como primeiro bloco de referência 166 e segundo bloco de referência 170) ao longo da trajetória de movimento do bloco atual em duas imagens de referência diferentes. Sob a suposição de trajetória de movimento contínua, os vetores de movimento MV0 e MV1 que apontam para os dois blocos de referência, o primeiro bloco de referência 166 e o segundo bloco de referência 170 deverão ser proporcionais ás distâncias temporais, isto é, TD0 e TD1, entre a imagem atual e as duas imagens de referência. Como um caso especial, quando a imagem atual 160 estiver temporariamente entre duas imagens de referência (conforme mostrado no exemplo da Figura 10) e a distância temporal da imagem atual para as duas imagens de referência é a mesma, a correspondência bilateral se torna derivação de MV bidirecional com base em espelho.
[00175] A Figura 11 é um fluxograma que ilustra um exemplo de decodificação de uma unidade de predição (PU) com o uso de DMVD. Em Y.-J. Chiu, L. Xu, W. Zhang, H. Jiang, “Decoder-side Motion Estimation and Wiener filter for HEVC”, Visual communications and Image Processing (VCIP), 2013, foi proposto adicionalmente combinar a derivação de MV bidirecional com base em espelho com modo de mescla em HEVC. Na técnica proposta, um sinalizador chamado de pu_dmvd_flag é adicionado a uma PU de fatias B para indicar se um modo de DMVD for aplicado à PU atual. Devido ao fato de que o modo de DMVD não transmite explicitamente quaisquer informações de MV no fluxo de bits, o elemento de sintaxe pu_dmvd_flag é integrado com a sintaxe de modo de mescla em HEVC (que usa um índice para os dados representativos de um vetor de movimento ao invés do próprio vetor de movimento).
[00176] No exemplo da Figura 11, um decodificador de vídeo (como decodificador de vídeo 30) pode começar a decodificação de uma PU (180). O decodificador de vídeo 30 pode determinar se o modo usado para decodificar a PU é o modo de mescla (182), por exemplo, com base na sintaxe inclusa em um fluxo de bits que inclui a PU. Se o modo de mescla não for usado (a ramificação “não” da etapa 182), o decodificador de vídeo 30 pode usar um processo regular para uma PU sem mescla para decodificar a PU (184) e acabar o processo (186).
[00177] Se o modo de mescla for usado (a ramificação “sim” da etapa 182), o decodificador de vídeo 30 pode determinar se DMVD for usada para determinar informações de movimento para a PU com base no valor do elemento de sintaxe pu_dmvd_flag (188). Se DMVD não for usada (a ramificação “não” da etapa 188), o decodificador de vídeo 30 pode usar um modo de mescla regular para decodificar a PU (190) e acabar o processo (186). Se DMVD for usada (a ramificação “sim” da etapa 188), o decodificador de vídeo 30 pode aplicar um processo de DMVD para determinar as informações de movimento para a PU (192) e acabar o processo (186).
[00178] Em alguns casos, as técnicas de codificação de vídeo atuais podem ter determinadas limitações. Por exemplo, determinadas técnicas de DMVD podem ser consideradas como um subconjunto da tecnologia de FRUC. Embora DMVD tenha sido aplicada na codificação de vídeo, outras técnicas de FRUC eficazes não foram implantadas na codificação de vídeo, por exemplo, no ciclo de codificação de vídeo por um codificador de vídeo ou decodificador de vídeo. Além disso, embora técnicas diferentes de DMVD tenham sido propostas, a interação e sobreposição dessas técnicas não são exploradas no decodificador. Isto é, apenas um modo de DMVD foi usado em outros sistemas de codificação de vídeo. A forma em que usar uma pluralidade das técnicas DMVD para aprimorar adicionalmente a eficiência de codificação não foi estudada.
[00179] Como outra potencial limitação, a DMVD pode se aplicas apenas a blocos relativamente grandes de dados de vídeo e, portanto, podem não ser muito eficazes. Aplicar esses métodos para blocos menores pode levar a sobrecarga significativa devido ao custo de sinalização. Em alguns casos, a faixa de busca por técnicas de DMVD tradicionais pode ser relativamente pequena, e apenas diversos pontos são buscados, por exemplo, 16 pontos. Além disso, conforme notado acima, a derivação de MV bidirecional com base em espelho não pode ser aplicada no caso de B de baixo atraso, devido ao fato de que duas imagens de referência com ordem de exibição antes e após uma imagem atual precisam ser identificadas e essa não é possível no caso de baixo atraso.
[00180] Outra limitação potencial pode ser que, no decodificador, o custo de correspondência das técnicas de DMVD tradicionais podem apenas considerar distorção. Entretanto, a magnitude de vetor de movimento ainda não foi considerada no custo de correspondência, que pode levar à otimização local ou resultado impreciso da correspondência, por exemplo, devido ao ruído no domínio de pixel. Ademais, a complexidade das técnicas de DMVD tradicionais pode ser relativamente alta, no que diz respeito tanto a largura de banda de memória quanto complexidade computacional, especialmente devido ao fato de que a interpolação é necessária para vetores de movimento de pel fracionários durante a busca no decodificador.
[00181] As técnicas desta revelação podem abordar uma ou mais das limitações potenciais descritas acima. Em alguns exemplos, as técnicas para derivar informações de movimento podem ser aplicadas individualmente. Alternativamente, qualquer combinação das técnicas descritas no presente documento pode ser aplicada juntas. Conforme descrito no presente documento, as informações de índice de referência podem, em geral, ser consideradas como parte das informações de movimento. Em alguns casos, as informações de vetor de movimento e informações de índice de referência podem ser referidas como um conjunto de informações de movimento.
[00182] Determinadas técnicas desta revelação incluem selecionar um modo de derivação de movimento a partir de uma pluralidade de modos de derivação de movimento potenciais. Por exemplo, de acordo com os aspectos desta revelação, um codificador de vídeo (por exemplo, o codificador de vídeo 20 ou decodificador de vídeo 30) pode usar duas ou mais técnicas de derivação de movimento para fornecer melhor predição das informações de movimento em um decodificador de vídeo para evitar a sinalização das informações de movimento no fluxo de bits. As duas ou mais técnicas de derivação de movimento podem incluir, mas não são limitadas a correspondência bilateral, correspondência de modelo e qualquer outro método de correspondência. Essas técnicas podem, em geral, ser referidas como modos de derivação de informações de movimento ou modos de FRUC. Por conseguinte, deve ser compreendido que em alguns casos uma técnica referida como um modo de FRUC pode ao invés disso ser usada para interpolar informações de movimento para um bloco atual (por exemplo, ao invés de interpolar um novo bloco de dados de vídeo).
[00183] Em alguns exemplos, quando múltiplos métodos de derivação de movimento foram usados, ao invés de ter métodos de otimização diferentes para diferentes métodos de derivação, o processo para encontrar o melhor movimento para dois ou mais dos métodos de derivação de movimento podem ser alinhados, no que diz respeito à seleção dos pontos iniciais para buscar e como buscar ao redor dos pontos iniciais. Por exemplo, o codificador de vídeo pode construir uma lista de candidatos de vetor de movimento, selecionar um candidato inicial a partir da lista, e refinar o candidato com o uso das mesmas técnicas de correspondência e busca. Neste exemplo, a derivação de movimento bidirecional e derivação de movimento com base em correspondência de modelo pode ser usada de modo adaptativo no lado de decodificador.
[00184] De acordo com os aspectos desta revelação, a sinalização adicional no nível de bloco é introduzida para identificar qual método de derivação de movimento é usado para codificar o bloco atual. Por exemplo, o codificador de vídeo pode codificar um ou mais elementos de sintaxe para indicar se a derivação de informações de movimento está habilitada. O codificador de vídeo também pode codificar um ou mais elementos de sintaxe para indicar um modo de derivação de informações de movimento particular a partir de uma pluralidade de modos potenciais. Em outros exemplos, a técnica de derivação de informações de movimento a ser usada pode não ser sinalizada, mas derivada no decodificador de vídeo, por exemplo, com base em um modo de predição ou outras informações disponíveis antes de o bloco atual ser decodificado. Ema inda outros exemplos, o codificador de vídeo pode realizar múltiplos modos de derivação de informações de movimento e determinar uma média ponderada das predições das duas ou mais técnicas de derivação para codificar o bloco atual.
[00185] Em um exemplo para fins de ilustração, um decodificador de vídeo, como decodificador de vídeo 30, pode primeiro identificar se deve aplicar um modo de interpolação de informações de movimento (por exemplo, com base em sintaxe no fluxo de bits). O decodificador de vídeo 30 pode, então, identificar qual modo de derivação de informações de movimento deve ser aplicado (por exemplo, com base em sintaxe no fluxo de bits). Em um exemplo, quando múltiplos métodos de derivação de movimento forem suportados simultaneamente, por exemplo, tanto correspondência bilateral estendida quanto modos de correspondência de modelo, um valor de índice pode ser sinalizado no fluxo de bits para indicar qual método de derivação de movimento está realmente em uso para um bloco atual. O índice pode ter três valores que incluem, correspondência bilateral e correspondência de modelo.
[00186] Quando se usa a codificação de CABAC, dois receptáculos podem ser usados para representar o índice. Os dois receptáculos podem ambos usar vizinhos espaciais como contextos ou apenas um dos mesmos usam contextos de vizinhos espaciais. Alternativamente, um ou ambos receptáculos podem usar outras informações codificadas, como a profundidade de CU, conforme os contextos. A binarização do índice pode ser predefinida, como “0” para desativo, “10” para correspondência bilateral estendida e “11” para correspondência de modelo. Alternativamente, a binarização do índice pode ser sinalizada em um cabeçalho de fatia ou derivado das informações codificadas como tipo de fatia, nível temporal ou informações de QP.
[00187] De acordo com os aspectos desta revelação, a sintaxe que indica um modo de derivação de informações de movimento pode estar inclusa com outro modo de codificação. Em um exemplo, um modo de derivação de informações de movimento pode ser considerado um candidato de mescla particular, assim indicado por um índice de mescla. Nesse caso, o tamanho da lista de candidatos de mescla pode ser aumentada para acomodar o índice adicional. O índice de candidato de mescla para o modo de derivação de informações de movimento pode ser predefinido ou sinalizado no fluxo de bits.
[00188] Em alguns exemplos, a correspondência bilateral estendida e correspondência de modelo são ambas suportadas com o modo de mescla. Nesses exemplos, quando o sinalizador de mescla for igual a 1, uma nova derivação de informações de movimento sinalizador é sinalizada para indicar se as informações de movimento são derivadas para a PU atual. O sinalizador pode usar o mesmo sinalizador de seu vizinho espacial, como blocos de superior e esquerdo como contextos de codificação de CABAC. Quando esse sinalizador estiver ativado, um segundo sinalizador é sinalizado para indicar qual modo de derivação de informações de movimento (por exemplo, correspondência bilateral estendida ou correspondência de modelo) é usado para derivar as informações de movimento do bloco. Quando a derivação de movimento estiver ativada, até mesmo quando o modo atual for o modo de mescla, nenhum índice de mescla é sinalizado. Alternativa ou adicionalmente, uma derivação de informações de movimento particular (por exemplo, como correspondência de modelo) não é permitida se a PU não for a primeira PU de uma CU na ordem de decodificação. Nesse caso, apenas o sinalizador precisa ser sinalizado para indicar se a correspondência bilateral estendida por usada para a PU ou não.
[00189] Em outro exemplo, o modo de derivação de informações de movimento pode ser combinado com o modo de AMVP, por exemplo, no nível de PU. Em um exemplo, os elementos de sintaxe adicionais (por exemplo, um sinalizador adicional) pode ser sinalizado para indicar o modo de derivação de informações de movimento. Quando este modo estiver ativado, nenhum índice de AMVP pode ser sinalizado no fluxo de bits. De outro modo, um índice de AMVP regular pode ser sinalizado no fluxo de bits. Em outro exemplo, o modo de derivação de informações de movimento pode ser considerado como um candidato de AMVP particular, como o primeiro candidato de AMVP, em uma lista de candidatos de AMVP. Em alguns casos, quando combinado com o modo de AMVP, um vetor de movimento pode não ser derivado em um nível de sub-PU.
[00190] De acordo com outros aspectos, um codificador de vídeo pode, de modo inicial, condicionalmente codificar um sinalizador de nível de CU (por exemplo, para uma CU intercodificada) para indicar se todas as PUs dentro da CU atual usam o modo de derivação de informações de movimento. Em um exemplo, o sinalizador de nível de PU não é sinalizado. Em outro exemplo, quando o sinalizador de CU for igual a 0 (isto é, nem todas as PUs são codificadas com o modo), o sinalizador de nível de PU da primeira PU é sinalizado adicionalmente quando a segunda PU não inclui o sinalizador de nível de PU.
[00191] Em alguns exemplos, o modo de derivação de informações de movimento pode ser desabilitado para tipos de fatia específicos, níveis temporais, tipos de bloco ou tamanhos de bloco. Em um exemplo, a derivação de informações de movimento não é permitida quando a fatia atual inclui apenas imagens de referência cujas posições temporais são todas antes ou após aquela da imagem atual. Em outro exemplo, a derivação de informações de movimento não é permitida para PUs diferentes de 2Nx2N. Quando se desabilita a derivação de informações de movimento, nenhuma sinalização de nível de bloco relacionada à derivação de informações de movimento é necessária.
[00192] De acordo com os aspectos desta revelação, habilitar ou desabilitar as técnicas de derivação de informações de movimento descritas no presente documento pode ser controlado por sintaxe de nível alto para fornecer uma troca de melhor complexidade versus eficiência de codificação e/ou flexibilidade de codificador/decodificador. Em um exemplo, um sinalizador pode ser sinalizado em um SPS, PPS, cabeçalho de fatia ou qualquer outro cabeçalho de sintaxe de nível alto para indicar o uso de um modo de derivação de informações de movimento. Quando esse sinalizador indicar que esse modo de codificação não está habilitado, os sinalizadores de nível de CU/PU podem não ser codificados no fluxo de bits.
[00193] Em alguns casos, sintaxe de alto nível pode adicional ou alternativamente ser usada para indicar outros parâmetros de derivação de informações de movimento. Por exemplo, um índice do algoritmo de busca que deve ser usado para buscar pelo vetor de movimento de nível de PU pode ser codificado em um fluxo de bits dentro de um SPS, PPS ou cabeçalho de fatia. Em alguns casos, um índice do algoritmo de busca que é usado para buscar o vetor de movimento de nível de sub-bloco pode ser codificado no fluxo de bits dentro de um SPS, PPS ou cabeçalho de fatia. Em alguns exemplos, para manter a complexidade computacional baixa no lado de decodificador, os números máximos de correspondência de bloco/partição no nível de PU, os números máximos da correspondência de bloco/partição no subnível de PU e/ou o número de correspondência total de ambos níveis de PU e sub-PU podem ser restringidos. Em alguns casos, esses números máximos podem ser predefinidos ou sinalizados no fluxo de bits.
[00194] As técnicas desta revelação incluem uma variedade de técnicas para derivar informações de movimento. Em alguns exemplos, o codificador de vídeo pode determinar uma lista inicial (lista de candidatos inicial) de entradas que contêm vetores de movimento, e um melhor ponto inicial é identificado como uma entrada a partir da lista inicial. As entradas que contêm vetores de movimento podem ser vetores de movimento de vizinhos espaciais, vizinhos temporais e/ou vetores de movimento derivados por outros meios. Alternativamente, o melhor ponto inicial (ou índice do melhor ponto inicial) pode ser sinalizado ao decodificador.
[00195] Em alguns exemplos, a lista inicial pode conter os vetores de movimento dos vizinhos espaciais e/ou temporais. Cada entrada da lista inicial pode ser um conjunto de informações de movimento uni-preditivo, incluindo um vetor de movimento e seu índice de referência. Em um exemplo, a lista inicial pode ser gerada da mesma forma que a lista de candidatos de predição de movimento usada em outro modo de codificação, por exemplo, o mesmo que a lista de candidatos de mescla. Neste caso, até dois vetores de movimento de cada candidato de mescla podem ser usados para gerar até duas entradas na lista inicial. Em alguns casos, as entradas na lista inicial podem ser geradas a partir de um subconjunto de candidatos de predição de movimento em uma lista usada em outro modo de codificação, por exemplo, um subconjunto da lista de candidatos de mescla.
[00196] Em outro exemplo, vetores de movimento adicionais podem ser adicionados na lista inicial, além daqueles na lista de candidatos de predição de movimento usada em outro modo de codificação, por exemplo, além daqueles na lista de candidatos de mescla. Alternativa ou adicionalmente, os vetores de movimento dos vizinhos espaciais do bloco atual, como um bloco superior, um bloco esquerdo, um bloco direito superior, ou outro bloco pode ser adicionado à lista inicial. Em alguns casos, zero vetores de movimento com diferentes índices de imagem de referência também podem ser adicionados à lista.
[00197] Alternativa ou adicionalmente, os vetores de movimento dos blocos do bloco atual temporalmente colocalizados (por exemplo, um TMVP para o bloco atual) e/ou vetores de movimento dos blocos temporalmente colocalizados à direita superior do bloco atual nas imagens de referência podem ser adicionados à lista inicial. Antes de adicionar um vetor de movimento candidato particular à lista, os vetores de movimento podem ser escalonados ou não com base na distância temporal.
[00198] De acordo com alguns aspectos, um vetor de movimento pode ser interpolado e/ou extrapolado de uma imagem de referência e pode ser adicionado na lista inicial. Por exemplo, antes da codificação de uma interimagem, um campo de movimento interpolado e/ou extrapolado da imagem pode ser gerado com base em suas imagens de referência com uma técnica similar a ME unilateral. O campo de movimento interpolado e/ou extrapolado de um bloco pode ser usado para a predição de MV ou usado como candidatos iniciais adicionais em uma busca de MV de um modo de derivação de informações de movimento. Observe que o campo de movimento interpolado e/ou extrapolado é salvo na unidade de 4 x 4 ou 8 x 8 ou qualquer outro nível de bloco predefinido/sinalizado, e uma PU pode conter múltiplos desses blocos de modo que os múltiplos MVs interpolados e/ou extrapolados possam ser usados.
[00199] Em um exemplo, o campo de movimento de cada uma das imagens de referência em ambas as listas de referência é cruzado pelo bloco NxN, em que N pode ser predefinido como 4, 8 ou 16, ou sinalizado. Para cada bloco, se o movimento associado ao bloco que passa através de um bloco NxN na imagem atual e o bloco não foi atribuído qualquer movimento interpolado, o movimento do bloco de referência é escalonado para a imagem atual da mesma forma que aquele do escalonamento de MV em TMVP e o movimento escalonado é atribuído ao bloco no quadro atual. Se nenhum MV escalonado for atribuído a um bloco NxN, o movimento do bloco é marcado como indisponível no campo de movimento interpolado. Em outro exemplo, um bloco NxN na imagem atual pode ser atribuído múltiplos vetores de movimento no campo de movimento interpolado.
[00200] Em alguns casos, um codificador de vídeo pode remover um ou mais candidatos de uma lista de candidato. A remoção pode ser aplicada para remover entradas idênticas de uma lista inicial antes do processo de seleção de melhor ponto inicial, por exemplo, antes de calcular o custo de correspondência para cada candidato da lista.
[00201] Em alguns casos, a primeira imagem em cada lista de referência pode ser usada como a imagem de referência, e candidatos de vetor de movimento são escalonados consequentemente se necessário. Nesse caso, o índice de referência de cada entrada da lista inicial pode ser modificado após o vetor de movimento ser escalonado com base, por exemplo, na distância de POC, semelhante ao TMVP. Em alguns casos, o índice de referência de cada entrada pode ser fixado a uma ou duas imagens e os vetores de movimento associados podem ser escalonados para essas imagens.
[00202] Em um exemplo, para a correspondência bilateral, um par de vetor de movimento, que é um conjunto de informações de movimento completo que contém ambos os vetores de movimento e seus índices de referência associados à lista de referência 0 e lista 1, respectivamente, pode ser obtido com base em cada entrada de uma lista de candidatos inicial. Um codificador de vídeo pode, então, realizar a correspondência bilateral para todos os pares de MV gerados a partir de todas as entradas na lista inicial e selecionar o candidato que leva ao custo de correspondência mínimo.
[00203] Para gerar o par de MV, o codificador de vídeo pode selecionar uma entrada da lista inicial como o primeiro vetor de movimento e gerar o segundo vetor de movimento. Por exemplo, suponha que uma entrada contém o primeiro vetor de movimento atual MVA e está associada a um índice de referência (com valor de POC POCA) para uma primeira imagem de referência na lista de imagem de referência A (com A sendo igual a 0 ou 1). Supondo que o valor de POC da imagem atual é POCC, o codificador de vídeo pode ser configurado para encontrar uma segunda imagem de referência a partir da lista de imagem de referência B (com B sendo igual a 1-A) de modo que seu valor de POC POCB seja igual a (2 X POCC - POCA). Se nenhuma imagem de referência na lista de imagem de referência B tiver valor de POC igual a (2 X POCC-POC0), o codificador de vídeo pode selecionar a segunda imagem de referência verificando-se todas as imagens de referência na lista B de modo que o POCB não seja a um POCA e o valor absoluto de POCC-POCB seja o mínimo. Em suma, o codificador de vídeo pode selecionar uma imagem localizada no outro lado da imagem atual (na ordem de exibição) que tem a mesma distância de POC. Se não estiver disponível, o codificador de vídeo pode selecionar uma imagem no outro lado que tem a menor distância para a imagem atual. Se todas as imagens de referência estiverem no mesmo lado temporal que a primeira referência com POCA em comparação à imagem atual, o codificador de vídeo pode selecionar a referência que está temporalmente mais próxima à imagem atual e tem um POC além de POCA- Sob as suposições supracitadas, o codificador de vídeo pode escalonar o primeiro vetor de movimento MVA para gerar o segundo vetor de movimento associado à segunda imagem de referência, por exemplo, com base na diferença de POC como em TMVP. Alternativamente, quaisquer técnicas com base na suposição de MV bilateral podem ser usadas para gerar a segunda imagem de referência e seu vetor de movimento.
[00204] De acordo com alguns aspectos, dois vetores de movimento iniciais podem ser selecionados a partir da lista inicial. Cada um desses dois vetores de movimento é selecionado (no que diz respeito a um custo de correspondência mínimo) das entradas em dois subconjuntos da lista inicial. Cada subconjunto contém vetores de movimento associados ao índice de referência apenas à lista de imagem de referência 0 ou apenas à lista de imagem de referência 1.
[00205] De acordo com os aspectos desta revelação, um codificador de vídeo pode ser configurado para selecionar um candidato a partir de um candidato com base em um custo de correspondência associado ao vetor de movimento. Além disso, após selecionar um candidato a partir de uma lista de candidato, o codificador de vídeo pode refinar o vetor de movimento candidato para derivar informações de movimento para um bloco. Por exemplo, o vetor de movimento candidato pode ser usado para indicar um ponto inicial de uma imagem de referência, que pode, então, ser buscada para encontrar uma melhor correspondência com base em um custo de correspondência.
[00206] De acordo com os aspectos desta revelação, uma variedade de custos de correspondência pode ser usada, por exemplo, quando se determina uma melhor correspondência para um candidato de vetor de movimento inicial e/ou quando se refina o candidato de vetor de movimento inicial. Em um exemplo, quando se busca o movimento de um bloco, um custo de MV pode estar incluso no custo de correspondência para evitar impacto negativo por ruído. Por exemplo, a porção de refinamento do vetor de movimento (por exemplo, diferença entre o MV atual e o centro de busca), denotada como MVR pode ser usada para calcular o custo. Neste exemplo, o custo pode ser w*(|MVR[0]|+|MVR[1]|), em que w é um fator de ponderação que pode ser sinalizado ou predefinido e MVR[0] e MVR[1] são os dois componentes de MVR. Alternativamente, o vetor de movimento refinado MV pode ser usado para calcular o custo, por exemplo, como w*(|MV[0]|+|MV[1]|).
[00207] Em alguns exemplos, quando o bloco for relativamente pequeno, por exemplo, 4 x 4 ou menor, um bloco maior que cobre o bloco (por exemplo o bloco com limites estendidos) pode ser usado no cálculo de custo de correspondência a fim de suprimir o ruído. Por exemplo, quando se busca a melhor correspondência para um bloco 4 x 4, o custo de correspondência pode ser calculado com base no bloco 8 x 8 com um bloco de centro sendo o bloco.
[00208] Em alguns exemplos, o custo de correspondência pode ser qualquer tipo de distância/custo, como a soma de diferenças absolutas (SAD), soma de erros quadráticos de predição (SSE), ou soma de diferenças de transformada absolutas (SATD). Para reduzir a complexidade computacional a SAD, a SSE, ou outro custo pode ser calculado com resolução reduzida nas direções horizontal, vertical ou ambas. Por exemplo, para um bloco 8 x 8, a SAD pode ser calculada com base em apenas fileiras ímpares. Em outro exemplo, o custo de correspondência pode ser calculado com base em um subconjunto selecionado de um bloco, por exemplo, apenas uma região central de a pode ser usada.
[00209] De acordo com os aspectos desta revelação, o processo de refinamento para a melhor correspondência (por exemplo, o candidato selecionado com base no custo de correspondência) pode ser realizado dentro de uma janela de busca predefinida ou sinalizada ao invés de sempre com o uso de uma janela pequena, por exemplo, dentro de uma janela de 2 x 2 (no presente contexto a unidade é pixel e vetores de movimento fracionários podem ser buscados dentro de uma janela) para alcançar uma busca de complexidade baixa porém eficaz. Neste exemplo, a faixa de uma janela de busca (por exemplo, com um tamanho de 16 x 16) pode ser predefinido ou sinalizado no fluxo de bits.
[00210] O algoritmo de busca para buscar pode ser predefinido, como uma busca completa, uma busca de três etapas, uma busca diamante, um algoritmo de busca descendente de gradiente com base em bloco (BBGDS) conforme descrito, por exemplo, em Lurng-Kuo Liu, Ephraim Feig, “A block-based gradient descent search algorithm for block motion estimation in video coding,” IEEE Trans. Circuits Syst. Video Technol. , vol. 6, páginas 419 a 422, agosto de 1996, ou um algoritmo busca diamante próximo ao centro não restrito (UCBDS) conforme descrito, por exemplo, em Jo Yew Tham, Surendra Ranganath, Maitreya Ranganath, and Ashraf Ali Kassim, “A novel unrestricted center-biased diamond search algorithm for block motion estimation,” IEEE Trans. Circuits Syst. Video Technol. , vol. 8, páginas 369 a 377, agosto de 1998.
[00211] Em alguns casos, diferentes técnicas de busca podem ser usadas em diferentes casos com base na sinalização ou critérios predefinidos. Por exemplo, para buscar uma PU inteira, uma busca diamante pode ser usada. Para buscar uma sub-PU, uma busca de diamante pequeno pode ser usada. Adicional ou alternativamente, a parada antecipada pode ser aplicada durante a busca, por exemplo, quando o custo de correspondência estiver abaixo de limites adaptativos ou predefinidos. Quando se usa a correspondência de modelo, uma restrição pode ser aplicada adicionalmente, a qual os dois vetores de movimento das duas listas de referência após o refinamento não apontarão para o mesmo bloco na mesma imagem de referência.
[00212] Conforme notado acima, esta revelação descreve determinadas técnicas de otimização para processos de DMVD existentes. Por exemplo, conforme descrito acima em relação ao exemplo da Figura 10, as técnicas incluem estender a correspondência bilateral a partir da predição bidirecional para a predição unidirecional. A correspondência bilateral também pode ser aplicada quando as posições temporais de duas imagens de referência forem antes ou após a posição temporal da fatia atual (isto é, os valores de POC são menores ou maiores do que aquele da imagem atual). Essas técnicas podem ser referidas coletivamente no presente documento como correspondência bilateral estendida.
[00213] Outros aspectos desta revelação se referem às técnicas de interpolação. Por exemplo, de acordo com os aspectos desta revelação, as técnicas de interpolação podem ser simplificadas para reduzir a complexidade. Conforme notado acima em relação à Figura 2, a busca de movimento é tipicamente realizada com o uso da precisão de subpixel. Consequentemente, a interpolação é necessária para posições de pixel não inteiras. Para reduzir a complexidade computacional, de acordo com os aspectos desta revelação, um codificador de vídeo pode usar um filtro de interpolação com derivações mais curtas em comparação à interpolação de compensação de movimento normal. Em um exemplo, o codificador de vídeo pode usar um filtro de interpolação bilinear durante a busca de movimento, por exemplo, quando se aplica vetores de movimento candidatos iniciais ou se refina esses vetores de movimento. Em outro exemplo, o codificador de vídeo pode ser configurado para realizar inicialmente a busca de movimento com o uso das posições de pixel-inteiro, seguido pela realização de busca de movimento em posições de pixel fracionárias com a melhor correspondência de posição de pixel-inteiro como o ponto inicial.
[00214] Outras técnicas desta revelação se referem à derivação de informações de movimento para sub- blocos. Por exemplo, de acordo com os aspectos desta revelação, um codificador de vídeo pode dividir um bloco/PU em (não sobreposto) sub-PUs/sub-blocos com base em qualquer técnica de derivação de movimento. Quando uma PU for dividida em múltiplas sub-PUs de tamanho menor, o codificador de vídeo pode derivar um conjunto de informações de movimento único para cada sub-PU.
[00215] Em um exemplo para fins de ilustração, uma PU 32x32 pode ser dividida em 16 sub-PUs 8 x 8. Neste exemplo, o codificador de vídeo pode determinar diferentes índices de referência e/ou vetores de movimento para cada uma das sub-PUs 8 x 8. Em outros exemplos, sub-PUs podem ter outros tamanhos, por exemplo, 4 x 4, 2 x 2 ou 1 x 1.
[00216] Em alguns casos, o tamanho do sub- bloco/sub-PU pode ser predefinido e fixo independentemente do tamanho do bloco/PU. Em outros exemplos, uma profundidade dividida D para PUs pode ser definida, a qual controla o número de vezes que uma PU pode ser dividida de acordo com uma estrutura de árvore quadrática. Em alguns exemplos, um tamanho de sub-PU/sub-bloco mínimo pode ser predefinido ou sinalizado para indicar o tamanho alvo do sub-bloco/sub-PU para o qual o bloco atual/PU deverá ser dividido. O tamanho alvo pode ser o maior entre o tamanho de sub-PU/sub-bloco mínimo e o tamanho obtido dividindo-se o bloco atual D vezes de acordo com uma estrutura de árvore quadrática.
[00217] De acordo com os aspectos desta revelação, um codificador de vídeo pode aproveitar as informações de movimento derivadas para uma PU quando se deriva informações de movimento para sub-PUs da PU. Por exemplo, o codificador de vídeo pode, para cada sub-PU, buscar por respectivas informações de movimento únicas estabelecendo-se as informações de movimento do bloco inteiro como o centro de busca (ponto de busca inicial). O codificador de vídeo pode, então, refinar o movimento para cada sub-PU. Alternativamente, o centro de busca de cada sub-PU pode ser derivado de uma lista de candidatos de ponto inicial.
[00218] Em outro exemplo, uma lista de candidatos de vetor de movimento pode ser gerada para a sub- PU com o uso de qualquer uma das técnicas descritas no presente documento. O codificador de vídeo pode, então, verificar cada candidato na lista após verificar o centro de busca (por exemplo, o ponto de busca inicial derivado da PU). De acordo com os aspectos desta revelação, sub-PUs podem ser refinadas com o uso de qualquer uma das técnicas descritas no presente documento como sendo aplicáveis a blocos regulares. Em outros exemplos, o refinamento pode ser sempre ou condicionalmente pulado para sub-PUs após verificar a lista de candidatos de vetor de movimento para uma melhor correspondência da forma descrita acima. Uma condição possível pode ser se a melhor correspondência permanece o candidato indicado pelas informações de movimento da PU (por exemplo, o ponto de busca inicial) após verificar a lista de candidato. Se for verdadeiro, o codificador de vídeo pode pular o refinamento. De outro modo, o codificador de vídeo pode realizar o refinamento.
[00219] Em alguns exemplos, a filtração de vetor de movimento pode ser realizada para sub-PU a fim de corrigir um vetor de movimento errado isolado. Por exemplo, um codificador de vídeo pode usar um filtro de mediana com o vetor de movimento da sub-PU atual e vetores de movimento de até quatro sub-PUs vizinhas. De acordo com os aspectos desta revelação, quando se aplica transformadas, o codificador de vídeo pode considerar a PU inteira como um bloco inteiro de modo que uma transformada possa cruzar os limites sub-PU. Em outros exemplos, o codificador de vídeo pode aplicar transformadas a cada sub-PU de modo que o tamanho de transformada não seja maior do que o tamanho de sub-PU. Em alguns casos, quando a correspondência de modelo for usada, um PU completo também pode ser dividido adicionalmente em sub-PUs menores. Para sub-PUs cujos vizinhos espaciais estão todos na PU atual (seus modelos não estão disponíveis), o codificador de vídeo pode estabelecer seus vetores de movimento aos vetores de movimento derivados para a PU inteira.
[00220] Em alguns exemplos, um codificador de vídeo pode codificar elementos de sintaxe separados que indicam se um bloco particular é dividido. Em outro exemplo, todos os blocos 2Nx2N com modo de correspondência bilateral estendido são adicionalmente divididos em partições pequenas e nenhum sinalizador adicional é sinalizado. O tamanho do sub-bloco pode ser predefinido ou sinalizado. Alternativamente, o tamanho do sub-bloco pode se basear no tamanho do bloco atual. Por exemplo, o tamanho de sub-bloco pode ser derivado como o maior número dentre dois valores. O primeiro valor é um tamanho de sub-bloco predefinido ou sinalizado mínimo (por exemplo, como 4 x 4 ou 8 x 8). O segundo valor é um tamanho relativo ao bloco atual, como (S»d)x(S»d) em que SxS é o tamanho de bloco atual, enquanto d é um valor predefinido ou sinalizado para indicar a profundidade de árvore quadrática com a qual o bloco atual é dividido em sub-blocos. Nos exemplos acima, deve ser compreendido que o termo PU é usado de modo intercambiável com o termo bloco e o termo sub-PU é usado de modo intercambiável com o termo sub-bloco.
[00221] Conforme notado acima, as técnicas descritas no presente documento podem ser usadas de modo independente ou em combinação. Como um exemplo, um processo de derivação de informações de movimento associado a um modo de derivação de informações de movimento (por exemplo, um modo de correspondência bilateral estendido, um modo de correspondência de modelo ou qualquer outro modo) pode incluir três etapas, apesar de a terceira etapa poder ser condicionalmente realizada com base em tipo de fatia, nível temporal, tipo de bloco, tamanho de bloco, ou sintaxe definida no fluxo de bits.
[00222] Em uma primeira etapa, um codificador de vídeo pode formar uma lista de candidatos inicial de conjuntos unipreditos de informações de movimento para um bloco atual. O codificador de vídeo pode selecionar o candidato que tem o melhor ponto inicial a partir da lista, por exemplo, com base em um custo de correspondência. Em uma segunda etapa, o codificador de vídeo pode refinar o candidato selecionado para derivar as informações de movimento para o bloco atual. O refinamento também pode se basear em um custo de correspondência, conforme descrito no presente documento. O codificador de vídeo pode, então, opcionalmente dividir mais o bloco atual em sub-blocos conforme descrito no presente documento, e refinar cada vetor de movimento para cada sub-bloco. Finalmente, o codificador de vídeo pode aplicar compensação de movimento para o bloco atual com o uso das informações de movimento derivadas. Se a divisão tiver sido realizada, o codificador de vídeo pode aplicar a compensação de movimento em um sub-bloco por base de sub-bloco.
[00223] Em um exemplo, o seguinte pseudocódigo pode ser usado para reconstruir um bloco com o uso de um modo de derivação de informações de movimento, em que as informações de movimento são derivadas por correspondência bilateral ou correspondência de modelo. Quando a correspondência bilateral for usada, o bloco é dividido adicionalmente em sub-blocos (observe que o MV no presente contexto inclui informações de referência): RECONSTRUIR BLOCO B (COM TAMANHO WXH) EM FRUC Construir lista inicial se B for correspondência bilateral { Encontrar a melhor correspondência (por exemplo, correspondência bilateral) na lista inicial como o ponto inicial com a medição de correspondência bilateral Refinar o MV com base no ponto inicial com correspondência bilateral para obter o vetor de movimento MVB para o bloco B para cada sub-bloco no bloco B { utilizar MVB como o ponto inicial, refinar MV para cada sub- bloco fazer compensação de movimento para o sub-bloco com as informações de MV derivadas } } senão // correspondência de modelo { Encontrar a melhor correspondência (por exemplo, correspondência de modelo) na lista inicial como o ponto inicial com a medição de correspondência de modelo Refinar o MV com base no ponto inicial com correspondência de modelo }
[00224] Por conseguinte, de acordo com os aspectos desta revelação, o codificador de vídeo 20 ou decodificador de vídeo 30 pode determinar um modo de interpolação de informações de movimento para determinar informações de movimento para um bloco atual (um bloco atualmente sendo codificado ou decodificado). Com o uso do modo de interpolação de informações de movimento (por exemplo, correspondência bilateral, correspondência de modelo ou outra técnica), o codificador de vídeo 20 ou decodificador de vídeo 30 pode determinar o melhor vetor de movimento candidato em uma lista de candidatos de vetor de movimento, por exemplo, o vetor de movimento que identifica um bloco de referência que corresponde intimamente ao bloco atual. O codificador de vídeo 20 ou decodificador de vídeo 30 pode usar o vetor de movimento candidato para identificar uma janela de busca em uma imagem de referência.
[00225] O codificador de vídeo 20 ou decodificador de vídeo 30 pode refinar o vetor de movimento candidato com base em um bloco de referência na janela de busca que corresponde inteiramente ao bloco atual. Isto é, o codificador de vídeo 20 ou decodificador de vídeo 30 pode determinar um novo vetor de movimento interpolado para o bloco atual com base no movimento entre o bloco de referência na janela de busca que corresponde intimamente ao bloco atual e ao bloco atual. O codificador de vídeo 20 ou decodificador de vídeo 30 pode, então, realizar a compensação de movimento para o bloco atual com o uso do vetor de movimento interpolado.
[00226] Em alguns casos, o codificador de vídeo 20 ou o decodificador de vídeo 30 pode dividir o bloco atual em mais de um sub-bloco para fins de predição. Ademais, em outros exemplos, o codificador de vídeo 20 ou o decodificador de vídeo 30 pode realizar mais, menos ou uma disposição diferente de técnicas para interpolar informações de movimento.
[00227] Por conseguinte, determinadas técnicas desta revelação podem ser generalizadas como uma ferramenta de codificação de nível de bloco que aproveita determinados conceitos do FRUC, dada a suposição de que um bloco atual de uma imagem atual pode ser considerado como predito pelas imagens de referência de modo semelhante a uma imagem atual pode ser considerada como interpolada por imagens de referência em FRUC. Em um exemplo, apenas os processos com base em movimento são usados para a ferramenta de codificação de nível de bloco. Em outro exemplo, apenas os processos com base em pixel são usados para a ferramenta de codificação de nível de bloco. Em outro exemplo, os processos com base em movimento ou os processos com base em pixel são usados para um dado bloco. Em outro exemplo, tanto os processos com base em pixel quantos os processos com base em movimento são usados para a ferramenta de codificação de nível de bloco. Em outro exemplo, outra sintaxe pode ser reutilizada ou predita a partir dos outros quadros temporais e podem ser utilizados para a ferramenta de codificação, como informações da árvore de codificação, SAO, ALF, RQT.
[00228] A Figura 12 é um fluxograma que ilustra um processo exemplificativo para determinar um modo de derivação de informações de movimento para codificar um bloco de dados de vídeo. O processo exemplificativo da Figura 12 é descrito em relação a um codificador de vídeo, que pode ser configurado como codificador de vídeo 20, decodificador de vídeo 30 ou outro processador.
[00229] No exemplo da Figura 12, o codificador de vídeo pode selecionar um modo de derivação de movimento a partir de uma pluralidade de modos de derivação de movimento (200). Em geral, cada um dos modos de derivação de movimento pode incluir realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual. Por exemplo, em relação à correspondência de modelo, o codificador de vídeo pode realizar uma busca de movimento para identificar um modelo em uma imagem atual (por exemplo, um primeiro conjunto de dados de referência) que corresponde ao modelo em uma imagem de referência (por exemplo, um segundo conjunto de dados de referência). Em outro exemplo, em relação à movimentação bilateral, o codificador de vídeo pode realizar uma busca de movimento para identificar um bloco de referência em uma primeira imagem de referência (por exemplo, um primeiro conjunto de dados de referência) que corresponde a um segundo bloco de referência em uma segunda imagem de referência (por exemplo, um segundo conjunto de dados de referência). Os modos de derivação de movimento exemplificativos podem incluir, um modo de estimativa de movimento unilateral, um modo de correspondência bilateral, um modo de correspondência de modelo ou um modo com base em espelho.
[00230] De acordo com alguns aspectos, o codificador de vídeo pode selecionar o modo de derivação de informações de movimento de acordo com um ou mais elementos de sintaxe inclusos em um fluxo de bits. Por exemplo, um decodificador de vídeo pode analisar sintaticamente e decodificar o um ou mais elementos de sintaxe a partir do fluxo de bits e determinar o modo de derivação de informações de movimento com base na sintaxe. Um codificador de vídeo pode testar a pluralidade de modos de derivação de informações de movimento, selecionar o modo que tem o melhor custo de RD e codificar o um ou mais elementos de sintaxe no fluxo de bits que indica o modo selecionado.
[00231] O codificador de vídeo pode determinar informações de movimento para o bloco com o uso do modo de derivação de movimento selecionado, que pode incluir determinar informações de movimento inicial com o uso do modo selecionado (202) e usar um processo de otimização para refinar as informações de movimento inicial (204). Por exemplo, o codificador de vídeo pode construir uma lista de candidatos de vetor de movimento com candidatos para determinar informações de movimento iniciais. As informações de movimento inicial podem fornecer um ponto inicial para refinar as informações de movimento, conforme descrito no presente documento.
[00232] O codificador de vídeo pode, então, codificar o bloco com o uso das informações de movimento determinadas e sem codificar a sintaxe representativa das informações de movimento (206). Por exemplo, em casos em que o codificador de vídeo compreende um decodificador de vídeo, o decodificador de vídeo pode determinar um bloco de referência em uma imagem de referência com base nas informações de movimento determinadas, decodificar dados residuais para cada sub-bloco a partir de um fluxo de bits codificado e combinar o bloco de referência determinado e residual decodificado para reconstruir o bloco atual. Em casos em que o codificador de vídeo compreende um codificador de vídeo, o codificador de vídeo pode codificar dados residuais para o bloco atual em um fluxo de bits codificado sem índices de referência de codificação ou vetores de movimento para os dados residuais.
[00233] A Figura 13 é um fluxograma que ilustra um processo exemplificativo para derivar um vetor de movimento para codificar um bloco de dados de vídeo. O processo exemplificativo da Figura 13 é descrito em relação a um codificador de vídeo, que pode ser configurado como codificador de vídeo 20, decodificador de vídeo 30 ou outro processador.
[00234] O codificador de vídeo pode gerar uma lista de candidatos de vetor de movimento (210). A lista de vetores de movimento candidatos pode incluir um ou mais candidatos de vetor de movimento que podem ser usados para derivar informações de movimento para o bloco atual. Em alguns exemplos, os candidatos de vetor de movimento podem ser determinados a partir dos blocos espacialmente vizinhos, blocos temporais ou a partir de outros locais.
[00235] O codificador de vídeo pode determinar um candidato a partir da lista para derivar informações de movimento (212). Em alguns exemplos, o codificador de vídeo pode realizar um ou mais cálculos de custo para determinar o candidato com o uso de um modo de derivação de movimento particular. Por exemplo, o codificador de vídeo pode determinar um custo de correspondência para um primeiro conjunto de dados de referência e um segundo conjunto de dados de referência, que pode incluir um custo associado aos respectivos vetores de movimento, conforme descrito no presente documento.
[00236] O codificador de vídeo pode, então, determinar o vetor de movimento derivado com base no candidato determinado (214). Por exemplo, o codificador de vídeo pode refinar o candidato determinado para determinar o vetor de movimento derivado com o uso do modo de derivação de movimento. O codificador de vídeo pode, então, codificar o bloco com o uso do vetor de movimento derivado (216). Por exemplo, em casos em que o codificador de vídeo compreende um decodificador de vídeo, o decodificador de vídeo pode determinar um bloco de referência em uma imagem de referência com base no vetor de movimento derivado, decodificar dados residuais para cada sub-bloco a partir de um fluxo de bits codificado e combinar o bloco de referência determinado e residual decodificado para reconstruir o bloco atual. Em casos em que o codificador de vídeo compreende um codificador de vídeo, o codificador de vídeo pode codificar dados residuais para o bloco atual em um fluxo de bits codificado sem codificar o vetor de movimento derivado.
[00237] A Figura 14 é um fluxograma que ilustra um processo exemplificativo para derivar informações de movimento para sub-blocos de um bloco de dados de vídeo. O processo exemplificativo da Figura 14 é descrito em relação a um codificador de vídeo, que pode ser configurado como codificador de vídeo 20, decodificador de vídeo 30 ou outro processador.
[00238] O codificador de vídeo pode derivar informações de movimento para um bloco atual (220). Em alguns exemplos, o codificador de vídeo pode usar qualquer combinação de técnicas de derivação de informações de movimento descritas no presente documento para derivar as informações de movimento. Por exemplo, o codificador de vídeo pode qualquer uma das técnicas descritas no presente documento para realizar uma busca de movimento para um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual (por exemplo, correspondência de modelo, correspondência bilateral ou similares).
[00239] De acordo com os aspectos desta revelação, o codificador de vídeo também pode dividir o bloco em uma pluralidade de sub-blocos (222). O codificador de vídeo pode derivar separadamente informações de movimento para respectivos sub-blocos que compreendem uma busca de movimento para um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora de cada respectivo sub-bloco (224). Novamente, o codificador de vídeo pode usar quaisquer técnicas descritas no presente documento para derivar as informações de movimento como, por exemplo, correspondência de modelo, correspondência bilateral, ou similares. Por exemplo, o codificador de vídeo pode usar o vetor de movimento derivado como um ponto inicial para derivar informações de movimento para cada um dos sub-blocos, e pode refinar adicionalmente as informações de movimento derivadas com o uso de qualquer combinação das técnicas de derivação de informações de movimento descritas no presente documento.
[00240] O codificador de vídeo pode, então, codificar cada um dos sub-blocos com base em informações de movimento derivadas sem elementos de sintaxe de codificação representativos das informações de movimento (226). Por exemplo, em casos em que o codificador de vídeo compreende um decodificador de vídeo, o decodificador de vídeo pode determinar um bloco de referência em uma imagem de referência para cada sub-bloco com base nas informações de movimento determinadas, decodificar dados residuais para cada sub- bloco a partir de um fluxo de bits codificado e combinar o bloco de referência determinado e residual decodificado para reconstruir cada sub-bloco. Em casos em que o codificador de vídeo compreende um codificador de vídeo, o codificador de vídeo pode codificar dados residuais para cada sub-bloco em um fluxo de bits codificado sem índices de referência de codificação ou vetores de movimento para os dados residuais.
[00241] Deve ser reconhecido que, dependendo do exemplo, determinadas ações ou eventos de quaisquer uma das técnicas descritas no presente documento pode ser realizada em uma sequência diferente, podem ser adicionados, mesclados ou deixados totalmente de fora (por exemplo, nem todos as ações e eventos descritos são necessários para a prática das técnicas). Ademais, em determinados exemplos, ações ou eventos podem ser realizados de modo concomitante, por exemplo, através de processamento de múltiplos threads, processamento interrupto ou em múltiplos processadores, em vez de sequencialmente.
[00242] Em um ou mais exemplos, as funções descritas podem ser implantadas em hardware, software, firmware ou qualquer combinação dos mesmos. Caso implantadas em software, as funções podem ser armazenadas ou transmitidas como uma ou mais instruções ou código em uma mídia legível por computador e executadas por uma unidade de processamento com base em hardware. As mídias legíveis por computador podem incluir mídias de armazenamento legíveis por computador, que correspondem a uma mídia tangível como mídias de armazenamento de dados ou mídias de comunicação que incluem qualquer mídia que facilite a transferência de um programa de computador a partir de um lugar para outro, por exemplo, de acordo com um protocolo de comunicação. Desta forma, as mídias legíveis por computador podem, em geral, corresponder a (1) mídias de armazenamento legíveis por computador tangíveis que são não transitórias ou (2) uma mídia de comunicação como um sinal ou onda portadora. As mídias de armazenamento de dados podem ser quaisquer mídias disponíveis que possam ser acessadas por um ou mais computadores ou um ou mais processadores para recuperar instruções, estruturas de dados e/ou código para a implantação das técnicas descritas nesta revelação. Um produto de programa de computador pode incluir uma mídia legível por computador.
[00243] A título de exemplo, e não de limitação, tais mídias de armazenamento legíveis por computador podem compreender RAM, ROM, EEPROM, CD-ROM ou outro armazenamento de disco óptico, armazenamento de disco magnético ou outros dispositivos de armazenamento magnético, memória flash, ou qualquer outra mídia que possa ser usada para armazenar o código de programa desejado na forma de instruções ou estruturas de dados e que possa ser acessada por um computador. Além disso, qualquer conexão é denominada adequadamente como mídia legível por computador. Por exemplo, se as instruções forem transmitidas a partir de um site da web, servidor ou outra fonte remota com o uso de um cabo coaxial, cabo de fibra óptica, par trançado, linha de inscrição digital (DSL) ou tecnologias sem fio como infravermelho, rádio e micro-ondas, então, o cabo coaxial, o cabo de fibra óptica, o par trançado, a DSL ou as tecnologias sem fio como infravermelho, rádio e micro-ondas estão incluídos na definição de mídia. Deve ser compreendido, entretanto, que as mídias de armazenamento legíveis por computador e as mídias de armazenamento de dados não incluem conexões, ondas portadoras, sinais ou outras mídias transitórias, mas são, em vez disso, direcionadas para mídias de armazenamento não transitórias e tangíveis. Disco magnético e disco óptico, conforme usado no presente documento, incluem disco compacto (CD), disco laser, disco óptico, disco versátil digital (DVD), disquete e disco Blu- ray, em que os discos magnéticos reproduzem geralmente os dados de modo magnético, enquanto os discos ópticos reproduzem os dados de modo óptico com lasers. As combinações do supracitado também devem ser abrangidas pelo escopo das mídias legíveis por computador.
[00244] As instruções podem ser executadas por um ou mais processadores, como um ou mais processadores de sinal digital (DSPs), microprocessadores para propósitos gerais, circuitos integrados específicos para aplicativo (ASICs), matrizes de porta programável em campo (FPGAs) ou outro conjunto de circuitos lógicos equivalentes integrados ou distintos. Consequentemente, o termo "processador", conforme usado no presente documento pode se referir a qualquer uma das estruturas supracitadas ou qualquer outra estrutura adequada para a implantação das técnicas descritas no presente documento. Adicionalmente, em alguns aspectos, a funcionalidade descrita no presente documento pode ser fornecida dentro de módulos dedicados de hardware e/ou software configurados para codificação e decodificação, ou incorporados em um codec combinado. Além disso, as técnicas podem ser totalmente implantadas em um ou mais circuitos ou elementos lógicos.
[00245] As técnicas desta revelação podem ser implantadas em uma ampla variedade de dispositivos ou aparelhos, incluindo um monofone, um circuito integrado (IC) ou um conjunto de ICs (por exemplo, um conjunto de chips). Vários componentes, módulos ou unidades são descritos nesta revelação para enfatizar os aspectos funcionais dos dispositivos configurados para realizar as técnicas reveladas, mas não exigem necessariamente a realização por diferentes unidades de hardware. Em vez disso, conforme descrito acima, várias unidades podem ser combinadas em uma unidade de hardware de codec ou fornecidas por uma coleção de unidades de hardware interoperativas, incluindo um ou mais processadores, conforme descrito acima, em combinação com software e/ou firmware adequados.
[00246] Vários exemplos foram descritos. Esses e outros exemplos estão no escopo das reivindicações a seguir.

Claims (12)

1. Método para processar dados de vídeo, o método caracterizado pelo fato de que compreende: dividir um bloco atual de dados de vídeo de uma imagem atual em uma pluralidade de sub-blocos para derivar informações de movimento do bloco atual, em que as informações de movimento indicam movimento do bloco atual com relação a dados de vídeo de referência, e em que dividir o bloco atual compreende i) dividir o bloco atual para formar sub-blocos de um tamanho fixado independentemente do tamanho do bloco atual, ou ii) dividir o bloco atual com base em um tamanho de sub-bloco mínimo determinado com base em um parâmetro de profundidade de divisão D que indica uma profundidade de divisão máxima para o bloco atual; derivar informações de movimento para o bloco atual inteiro ao realizar uma busca de movimento para um respectivo primeiro conjunto de dados de vídeo de referência de uma imagem de referência com base em um respectivo segundo conjunto de dados de vídeo de referência, o respectivo segundo conjunto de dados de vídeo de referência estando fora do bloco atual, em que o segundo conjunto de dados de vídeo de referência é da imagem atual ou de uma segunda imagem de referência; derivar, separadamente para cada respectivo sub- bloco dentre a pluralidade de sub-blocos, informações de movimento, a derivação compreendendo realizar uma busca de movimento para um respectivo terceiro conjunto de dados de vídeo de referência de uma imagem de referência com base em um respectivo quarto conjunto de dados de vídeo de referência, o respectivo quarto conjunto de dados de vídeo de referência estando fora do respectivo sub-bloco, e em que a busca é realizada ao definir as informações de movimento para o bloco atual inteiro como o centro de busca e então refinar o movimento para cada sub-bloco; aplicar uma transformada ao bloco atual de forma que a transformada cruze limites de sub-bloco; e decodificar a pluralidade de sub-blocos com base nas informações de movimento derivadas e sem decodificar elementos de sintaxe representativos das informações de movimento.
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que as informações de movimento para cada um dos sub-blocos compreendem pelo menos um vetor de movimento e pelo menos um índice de referência de uma imagem de referência em uma lista de imagem de referência.
3. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o tamanho dos sub-blocos compreende pelo menos um dentre 1x1, 2x2, 4x4, 8x8, 16x16 ou 32x32.
4. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o bloco atual compreende uma unidade de predição, PU, e os sub-blocos compreendem subPUs.
5. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que derivar as informações de movimento para os respectivos sub-blocos compreende: buscar por uma respectiva melhor correspondência para os respectivos sub-blocos dentro de uma janela de busca; e derivar as informações de movimento para os respectivos sub-blocos com base na respectiva melhor correspondência.
6. Método, de acordo com a reivindicação 5, caracterizado pelo fato de que compreende adicionalmente: gerar uma lista de candidatos que compreende uma pluralidade de vetores de movimento candidatos, a lista de candidatos incluindo as informações de movimento derivadas para o bloco como um candidato da pluralidade de vetores de movimento candidatos; determinar respectivos vetores de movimento candidatos a partir da lista de candidatos para respectivos sub-blocos; e em que buscar a respectiva melhor correspondência compreende buscar com base nos respectivos vetores de movimento candidatos.
7. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente aplicar uma transformada ao bloco atual de modo que a transformada seja aplicada a todos os sub-blocos.
8. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que dividir o bloco atual compreende dividir o bloco atual com base em um ou mais elementos de sintaxe obtidos a partir de um fluxo de bits codificado, e em que decodificar a pluralidade de sub-blocos compreende: determinar um bloco de referência em uma imagem de referência para os respectivos sub-blocos com base nas informações de movimento derivadas; decodificar dados residuais para respectivos sub- blocos a partir de um fluxo de bits codificado; e combinar o resíduo decodificado para os respectivos sub-blocos e o bloco de referência para os respectivos sub-blocos para reconstruir os respectivos sub- blocos.
9. Método para processar dados de vídeo, o método caracterizado pelo fato de que compreende: dividir um bloco atual de dados de vídeo de uma imagem atual em uma pluralidade de sub-blocos para derivar informações de movimento do bloco atual, em que as informações de movimento indicam movimento do bloco atual com relação a dados de vídeo de referência, e em que dividir o bloco atual compreende i) dividir o bloco atual para formar sub-blocos de um tamanho fixado independentemente do tamanho do bloco atual, ou ii) dividir o bloco atual com base em um tamanho de sub-bloco mínimo determinado com base em um parâmetro de profundidade de divisão D que indica uma profundidade de divisão máxima para o bloco atual; derivar informações de movimento para o bloco atual inteiro ao realizar uma busca de movimento para um respectivo primeiro conjunto de dados de vídeo de referência de uma imagem de referência com base em um respectivo segundo conjunto de dados de vídeo de referência, o respectivo segundo conjunto de dados de vídeo de referência estando fora do bloco atual, em que o segundo conjunto de dados de vídeo de referência é da imagem atual ou de uma segunda imagem de referência; derivar, separadamente para cada respectivo sub- bloco dentre a pluralidade de sub-blocos, informações de movimento, a derivação compreendendo realizar uma busca de movimento para um respectivo terceiro conjunto de dados de vídeo de referência de uma imagem de referência com base em um respectivo quarto conjunto de dados de vídeo de referência, o respectivo quarto conjunto de dados de vídeo de referência estando fora do respectivo sub-bloco, e em que a busca é realizada ao definir as informações de movimento para o bloco atual inteiro como o centro de busca e então refinar o movimento para cada sub-bloco; aplicar uma transformada ao bloco atual de forma que a transformada cruze limites de sub-bloco; e codificar a pluralidade de sub-blocos com base nas informações de movimento derivadas e sem codificar elementos de sintaxe representativos das informações de movimento.
10. Dispositivo para processar dados de vídeo, o dispositivo caracterizado pelo fato de que compreende: uma memória configurada para armazenar um bloco atual de dados de vídeo; e um ou mais processadores configurados para: dividir um bloco atual de dados de vídeo em uma pluralidade de sub-blocos para derivar informações de movimento do bloco atual, em que as informações de movimento indicam movimento do bloco atual com relação a dados de vídeo de referência, e em que dividir o bloco atual compreende i) dividir o bloco atual para formar sub-blocos de um tamanho fixado independentemente do tamanho do bloco atual, ou ii) dividir o bloco atual com base em um tamanho de sub-bloco mínimo determinado com base em um parâmetro de profundidade de divisão D que indica uma profundidade de divisão máxima para o bloco atual; derivar informações de movimento para o bloco atual inteiro ao realizar uma busca de movimento para um respectivo primeiro conjunto de dados de vídeo de referência de uma imagem de referência com base em um respectivo segundo conjunto de dados de vídeo de referência, o respectivo segundo conjunto de dados de vídeo de referência estando fora do bloco atual, em que o segundo conjunto de dados de vídeo de referência é da imagem atual ou de uma segunda imagem de referência; derivar, separadamente para cada respectivo sub-bloco dentre a pluralidade de sub-blocos, informações de movimento, em que para derivar as informações de movimento o um ou mais processadores são configurados para realizar uma busca de movimento para um respectivo terceiro conjunto de dados de vídeo de referência com base em um respectivo quarto conjunto de dados de vídeo de referência fora de cada respectivo sub-bloco, e em que a busca é realizada ao definir as informações de movimento para o bloco atual inteiro como o centro de busca e então refinar o movimento para cada sub- bloco; aplicar uma transformada para o bloco atual de forma que a transformada cruze limites de sub-bloco; e codificar a pluralidade de sub-blocos com base nas informações de movimento derivadas e sem codificar elementos de sintaxe representativos das informações de movimento.
11. Dispositivo, de acordo com a reivindicação 10, caracterizado pelo fato de que o dispositivo compreende pelo menos um dentre: um circuito integrado; um microprocessador; ou um dispositivo de comunicação sem fio.
12. Memória legível por computador caracterizada pelo fato de que compreende instruções armazenadas na mesma que, quando executadas, fazem com que um computador realize o método conforme definido em qualquer uma das reivindicações 1 a 9.
BR112017020632-3A 2015-03-27 2016-03-25 Métodos e dispositivo para processar dados de vídeo e memória legível por computador BR112017020632B1 (pt)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US201562139572P 2015-03-27 2015-03-27
US62/139,572 2015-03-27
US201562182367P 2015-06-19 2015-06-19
US62/182,367 2015-06-19
US15/080,480 2016-03-24
US15/080,480 US11330284B2 (en) 2015-03-27 2016-03-24 Deriving motion information for sub-blocks in video coding
PCT/US2016/024323 WO2016160605A1 (en) 2015-03-27 2016-03-25 Deriving motion information for sub-blocks in video coding

Publications (2)

Publication Number Publication Date
BR112017020632A2 BR112017020632A2 (pt) 2018-06-26
BR112017020632B1 true BR112017020632B1 (pt) 2024-05-07

Family

ID=

Similar Documents

Publication Publication Date Title
AU2020207821B2 (en) Motion vector derivation in video coding
BR112021005357A2 (pt) aprimoramentos em preditor de vetor de movimento baseado em histórico
BR112020014522A2 (pt) Derivação aprimorada de vetor de movimento no lado de decodificador
BR112019027821A2 (pt) emparelhamento de gabarito com base em reconstrução parcial para derivação de vetor de movimento
BR112019013684A2 (pt) reconstruções de vetor de movimento para fluxo ótico bidirecional (bio)
BR112018006266B1 (pt) Fluxo ótico bidirecional avançado para codificação de vídeo
BR112016023406B1 (pt) Método e dispositivo para codificar ou decodificar dados de vídeo, e memória legível por computador
BR112016006574B1 (pt) Predição de vetor de movimento temporal com base em unidade de subpredição (pu) em hevc e projeto de sub-pu em 3d-hevc
BR112017020632B1 (pt) Métodos e dispositivo para processar dados de vídeo e memória legível por computador
BR112017020627B1 (pt) Derivação de vetor de movimento em codificação de vídeo