BR112017004490B1 - Método para a construção de uma tabela de hash para correspondência de bloco baseada em hash, dispositivo de computação e meio de armazenamento legível por computador - Google Patents

Método para a construção de uma tabela de hash para correspondência de bloco baseada em hash, dispositivo de computação e meio de armazenamento legível por computador Download PDF

Info

Publication number
BR112017004490B1
BR112017004490B1 BR112017004490-0A BR112017004490A BR112017004490B1 BR 112017004490 B1 BR112017004490 B1 BR 112017004490B1 BR 112017004490 A BR112017004490 A BR 112017004490A BR 112017004490 B1 BR112017004490 B1 BR 112017004490B1
Authority
BR
Brazil
Prior art keywords
block
hash
encoder
values
precision
Prior art date
Application number
BR112017004490-0A
Other languages
English (en)
Other versions
BR112017004490A2 (pt
Inventor
Bin Li
Ji-Zheng Xu
Original Assignee
Microsoft Technology Licensing, Llc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Technology Licensing, Llc filed Critical Microsoft Technology Licensing, Llc
Publication of BR112017004490A2 publication Critical patent/BR112017004490A2/pt
Publication of BR112017004490B1 publication Critical patent/BR112017004490B1/pt

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/523Motion estimation or motion compensation with sub-pixel accuracy
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/119Adaptive subdivision aspects, e.g. subdivision of a picture into rectangular or non-rectangular coding blocks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/136Incoming video signal characteristics or properties
    • H04N19/14Coding unit complexity, e.g. amount of activity or edge presence estimation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/142Detection of scene cut or scene change
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/154Measured or subjectively estimated visual quality after decoding, e.g. measurement of distortion
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction

Landscapes

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

Abstract

DISPOSITIVO DE COMPUTAÇÃO, MÉTODO PARA CODIFICAR VÍDEO PARA PRODUZIR DADOS CODIFICADOS E MÉTODO PARA DETECTAR UMA MUDANÇA DE CENA DURANTE A CODIFICAÇÃO DE VÍDEO. A presente invenção refere-se a inovações nas decisões do codificador que usa os resultados da combinação de blocos baseada em mesclagem. Por exemplo, algumas das inovações referem-se a maneiras de construir tabelas de mesclagem que incluem alguns (mas não todos) blocos uniformes. Outras inovações referem-se a maneiras de determinar a resolução do vetor de moção com base nos resultados da combinação de blocos baseada em mesclagem. Ainda outras inovações referem-se à detecção de mudança de cena, o que inclui a seleção de imagem de referência de longa duração e a determinação da qualidade de imagem durante a decodificação.

Description

ANTECEDENTES
[0001] Os engenheiros usam a compressão (também chamada de codificação de fonte ou decodificação de fonte) para reduzir a taxa de bits do vídeo digital. A compressão diminui o custo de armazenagem e transmissão das informações de vídeo convertendo as informações em uma forma de taxa de bit inferior. A decompressão (também chamada de decodificação) reconstrói uma versão das informações originais a partir da forma comprimida. Um "codec" é um sistema de codificação/decodificador.
[0002] Nas últimas duas décadas, vários padrões de codec de vídeo foram adotados, o que inclui os padrões IUT-T H.261, H.262 (MPEG-2 ou ISO/IEC 13818-2), H.263 e H.264 (MPEG-4 AVC ou ISO/IEC 14496-10), o padrão MPEG-1 (ISO/IEC 11172-2) e os padrões MPEG-4 Visual (ISO/IEC 14496-2) e SMPTE 421M (VC-1). Mais recentemente, o padrão H.265/HEVC (IUT-T H.265 ou ISO/IEC 23008-2) foi aprovado. As extensões para o padrão H.265/HEVC (por exemplo, para a codificação/decodificação de vídeo escalável, para a codificação/decodificação de vídeo com fidelidade maior em termos de profundidade de bit de amostra ou taxa de amostragem cromática, para o conteúdo de captura de tela ou para codificação/decodificação multivisual) estão atualmente em desenvolvimento. Um padrão de codec de vídeo define tipicamente opções para a sintaxe de um fluxo de bits de vídeo codificado, detalhando os parâmetros no fluxo de bits quando características particulares são usadas na codificação e decodificação. Em vários casos, um padrão de codec de vídeo também provê detalhes sobre as operações de decodificação que um decodificador deveria executar para obter resultados enquadrados na decodificação. Além dos padrões de codec, vários formatos de codec privados definem outras opções para a sintaxe de um fluxo de bits de vídeo codificado e para as operações de decodificação correspondentes.
[0003] Em geral, as técnicas de compressão de vídeo incluem compressão de "intraimagem" e compressão de "interimagem". As técnicas de compressão de intraimagem comprimem imagens individuais e as técnicas de compressão de interimagem comprimem imagens com referência a uma imagem precedente e/ou subsequente (frequentemente chamada de uma imagem de referência ou ancoragem) ou imagens.
[0004] As técnicas de compressão de interimagem usam frequentemente a estimativa de movimento e a compensação de movimento para reduzir a taxa de bit explorando a redundância temporal em uma sequência de vídeo. A estimativa de movimento é um processo para estimar a movimento entre as imagens. Em uma técnica comum, um codificador que usa a estimativa de movimento tenta combinar um bloco atual de valores de amostra em uma imagem atual com um bloco de candidatos do mesmo tamanho em uma área de pesquisa de outra imagem, a imagem de referência. Uma imagem de referência é, em geral, uma imagem que contém valores de amostra que podem ser usados para a predição durante o processo de decodificação de outras imagens.
[0005] Quanto a um bloco atual, quando o codificador encontra uma combinação exata ou "próxima o bastante" na área de pesquisa da imagem de referência, o codificador parametriza a mudança de posição entre o bloco atual e os blocos de candidatos como dados de movimento, tal como um vetor de movimento ("VM"). Um VM é convencionalmente um valor bidimensional que possui um componente de VM horizontal indicando o deslocamento espacial esquerdo ou direito e um componente de VM vertical indicando deslocamento espacial para cima ou para baixo. Em geral, a compensação de movimento é um processo de reconstruir imagens a partir de uma ou mais imagens de referência usando os dados de movimento.
[0006] Em algumas técnicas de decodificação, os blocos de uma imagem atual são combinados com os blocos de uma ou mais imagens de referência. No entanto, tais técnicas de combinação podem sofrer uma queda de desempenho quando um grande número de blocos precisa ser armazenado ou combinado. Em outras técnicas de decodificação, a precisão do vetor de movimento pode ser mudada (por exemplo, a cada troca de imagem), porém, decidir quando mudar a precisão do vetor de movimento pode ser uma tarefa difícil. Já em outras técnicas de decodificação, a detecção de mudança de cena é efetuada. No entanto, tais técnicas de detecção podem não detectar de forma eficiente ou precisa as mudanças de cena que envolvem o conteúdo da tela.
SUMÁRIO
[0007] No sumário, a descrição detalhada apresenta as inovações nas decisões por parte do codificador que usam os resultados da combinação de blocos com base em hash em efetuar várias tarefas e operações durante a decodificação. Por exemplo, algumas das inovações referem-se às maneiras de se construir tabelas de hash que incluem alguns (mas não todos) blocos uniformes. Outras inovações referem-se à determinação da resolução do vetor de movimento com base na combinação de blocos com base em hash. Por exemplo, os blocos de uma imagem podem ser classificados em uma pluralidade de categorias e o número de blocos atribuídos a cada categoria pode ser usado para determinar qual precisão do vetor de movimento usar. Outras inovações se referem à detecção de mudança de cena que usa, pelo menos em parte, as informações da combinação de blocos com base em hash. Por exemplo, as imagens podem ser identificadas em vários estágios de uma mudança de cena (por exemplo, durante uma cena estável, logo antes de uma mudança de cena, durante uma cena de transição e no início de uma nova cena). As informações de mudança de cena podem ser usadas para selecionar imagens de referência de longa duração e/ou no decorrer do ajuste de qualidade das imagens durante a decodificação.
[0008] A descrição supracitada e outros objetivos, características e vantagens da invenção se tornarão mais evidentes a partir da descrição detalhada a seguir, a qual prossegue com referência às figuras em anexo.
BREVE DESCRIÇÃO DOS DESENHOS
[0009] A figura 1 é um diagrama de um exemplo de sistema de computação no qual algumas modalidades descritas podem ser implantadas.
[00010] As figuras 2a e 2b são diagramas de ambientes de rede exemplares nos quais algumas modalidades descritas podem ser implantadas.
[00011] A figura 3 é um diagrama de um sistema de codificação exemplar, em conjunção com o qual algumas modalidades descritas podem ser implantadas.
[00012] As figuras 4a e 4b são diagramas que ilustram um codificador de vídeo exemplar, em conjunção com o qual algumas modalidades descritas podem ser implantadas.
[00013] A figura 5 é diagrama que ilustra um ambiente de área de trabalho de computador com conteúdo que pode prover registro para a captura de tela.
[00014] A figura 6 é um diagrama que ilustra um vídeo composto com conteúdo de vídeo natural e conteúdo de vídeo artificialmente criado.
[00015] A figura 7 é uma tabela que ilustra valores de hash de blocos de candidatos na combinação de blocos com base em hash.
[00016] As figuras 8a-8c são tabelas que ilustram estruturas de dados exemplares que organizam os blocos de candidatos para a combinação de blocos com base em hash.
[00017] As figuras 9a-9c são tabelas que ilustram exemplo estruturas de dados exemplares que organizam os blocos de candidatos para combinação iterativa de blocos com base em hash.
[00018] As figuras 10a-10c são diagramas que ilustram os padrões de blocos de candidatos.
[00019] A figura 11 é um fluxograma que ilustra uma técnica para selecionar blocos homogêneos usando um critério de seleção homogênea durante a construção da tabela de hash.
[00020] As figuras 12a e 12b são diagramas que ilustram a compensação de movimento com valores de VM que possuem um deslocamento espacial de amostra em número inteiro e um deslocamento espacial de amostra fracionada, respectivamente.
[00021] A figura 13 é um fluxograma que ilustra uma técnica para selecionar a precisão de VM dependendo dos resultados da classificação de bloco.
[00022] A figura 14 é um fluxograma que ilustra a técnica para efetuar a classificação de bloco usada durante a seleção de precisão de VM.
[00023] A figura 15 é um fluxograma que ilustra a técnica para detectar uma mudança de cena durante a decodificação de vídeo.
DESCRIÇÃO DETALHADA
[00024] A descrição detalhada apresenta inovações nas decisões por parte do codificador, que usam técnicas de combinação baseadas na hash para aprimorar o desempenho de vários tipos de operações. Por exemplo, algumas das inovações referem-se às maneiras de se construir tabelas de hash que incluem alguns (mas não todos) blocos uniformes (por exemplo, que incluem apenas esses blocos homogêneos que satisfazem um critério de seleção). Outras inovações referem-se à determinação da resolução do vetor de movimento com base na combinação de blocos com base em hash. Por exemplo, os blocos de uma imagem podem ser classificados em uma pluralidade de categorias e o número de blocos atribuído a cada categoria pode ser usado para determinar qual precisão do vetor de movimento usar. Outras inovações referem-se à detecção de mudança de cena que usa, pelo menos em parte, as informações da combinação de blocos com base em hash. Por exemplo, as imagens podem ser identificadas em vários estágios de uma mudança de cena (por exemplo, durante uma cena estável, logo antes de uma mudança de cena, durante uma cena de transição e no início de uma nova cena). As informações de mudança de cena podem ser usadas para selecionar imagens de referência de longa duração e/ou no decorrer do ajuste de qualidade das imagens durante a decodificação.
[00025] Em particular, as inovações podem prover maneiras computacionalmente eficientes para a definição de parâmetros durante a decodificação de conteúdo de vídeo artificialmente criado, tal como o conteúdo de captura de tela.
[00026] Embora as operações descritas aqui estejam em locais descritos como sendo efetuados por um codificador de vídeo, em vários casos, as operações podem ser efetuadas por outro tipo de ferramenta de processamento de mídia (por exemplo, codificador de imagem).
[00027] Algumas das inovações descritas aqui são ilustradas com referência aos elementos de sintaxe e operações específicas para o padrão H.265/HEVC. Por exemplo, referência é feita à versão de projeto JCTVC-P1005 do padrão H.265/HEVC - "Especificação de Texto das Extensões de Alcance de Codificação de Vídeo de Alta Eficiência (HEVC): Projeto 6," JCTVC-P1005_vl, fevereiro de 2014. As inovações descritas aqui também podem ser implantadas em outros padrões ou formatos.
[00028] Várias das inovações descritas aqui podem aprimorar os processos de tomada de decisão durante a decodificação de determinado conteúdo de vídeo artificialmente criado, tal como conteúdo de captura de tela, a partir da captura do módulo de tela. O conteúdo de captura de tela inclui tipicamente estruturas repetidas (por exemplo, gráficos, caracteres de texto). O Conteúdo de captura de tela é usualmente codificado em um formato (por exemplo, YUV 4:4:4 ou RGB 4:4:4) com alta resolução de amostragem cromática, embora ele também possa ser codificado em um formato com resolução inferior de amostragem cromática (por exemplo, YUV 4:2:0). Cenários comuns para codificar/decodificar o conteúdo de captura de tela incluem conferência remota via desktop e codificação/decodificação de sobreposições gráficas em vídeo natural ou outro vídeo com "conteúdo misturado". Essas inovações também podem ser usadas para conteúdo de vídeo natural, mas talvez não sejam tão eficientes.
[00029] Mais genericamente, várias alternativas aos exemplos descritos aqui são possíveis. Por exemplo, alguns dos métodos descritos aqui podem ser alterados mudando a ordem das etapas do método descrito, dividindo, repetindo ou omitindo determinadas etapas do método, etc. Os vários aspectos da tecnologia apresentada podem ser usados em combinação uns com os outros ou separadamente. Diferentes modalidades usam uma ou mais das inovações descritas.Algumas das inovações descritas aqui tratam de um ou mais dos problemas observados na guia "Antecedentes". De maneira típica, uma determinada técnica/ferramenta não soluciona todos esses problemas.
I. Sistemas de Computação Exemplares.
[00030] A figura 1 ilustra um exemplo geralizado de um sistema de computação adequado 100, no qual várias das inovações descritas podem ser implantadas. O sistema de computação 100 não se destina a sugerir nenhuma limitação ao escopo de uso ou funcionalidade, visto que as inovações podem ser implantadas em sistemas de computação com finalidade geral diversa ou com finalidade específica.
[00031] Com referência à figura 1, o sistema de computação 100 inclui uma ou mais unidades de processamento 110, 115 e uma memória 120, 125. As unidades de processamento 110, 115 executam instruções legíveis por computador. A unidade de processamento pode ser uma unidade de processamento central com finalidade genérica ("CPU"), um processador em um circuito integrado de aplicação específica ("ASIC") ou qualquer outro tipo de processador. Em um de sistema de multiprocessamento, múltiplas unidades de processamento executam instruções legíveis por computador para aumentar a potência do processamento. Por exemplo, a figura 1 mostra uma unidade de processamento central 110 bem como uma unidade de processamento de gráfico ou uma unidade de coprocessamento 115. A memória tangível 120, 125 pode ser uma memória volátil (por exemplo, registros, cachê, RAM), uma memória não volátil (por exemplo, ROM, EEPROM, memória flash, etc.) ou alguma combinação das duas, acessível pela(s) unidade(s) de processamento. A memória 120, 125 armazena o software 180 que implanta uma ou mais inovações para que o codificador tome decisões a partir dos resultados da combinação de blocos baseada na hash (por exemplo, para construir tabelas de hash, para selecionar a precisão de VM, para detectar mudanças de cena e tomar decisões com base nas mudanças de cena), na forma das instruções legíveis por computador adequadas para serem executadas por uma ou mais unidades de processamento.
[00032] Um sistema de computação pode ter características adicionais. Por exemplo, o sistema de computação 100 inclui um meio de armazenagem 140, um ou mais dispositivos de entrada 150, um ou mais dispositivos de saída 160 e uma ou mais conexões comunicação 170. Um mecanismo de interconexão (não mostrado), tal como um barramento, um controlador ou uma rede, interconecta os componentes do sistema de computação 100. De maneira típica, o software do sistema operacional (não mostrado) provê um ambiente operacional para outro software que é executado no sistema de computação 100 e coordenada as atividades dos componentes do sistema de computação 100.
[00033] A armazenagem tangível 140 pode ser removível ou não removível e inclui discos magnéticos, fitas magnéticas ou cassetes, CD-ROMs, DVDs ou qualquer outro meio que possa ser usado para armazenar informações e que possa ser acessado dentro do sistema de computação 100. O meio de armazenagem 140 armazena instruções no software 180 que implanta uma ou mais inovações para decisões do codificador a partir dos resultados da combinação de blocos com base em hash.
[00034] O(s) dispositivo(s) de entrada 150 pode ser um dispositivo de entrada de toque, tal como um teclado, um mouse, uma caneta ou um trackball, um dispositivo de entrada de voz, um dispositivo de varredura ou outro dispositivo que provê entrada no sistema de computação 100. Quanto ao vídeo, o(s) dispositivo(s) de entrada 150 pode ser uma câmera, cartão de vídeo, cartão sintonizador de TV, módulo de captura de tela ou um dispositivo similar que aceite entrada de vídeo na forma análoga ou digital, ou um CD-ROM ou CD-RW que lê vídeo adicionado ao sistema de computação 100. O(s) dispositivo(s) de saída 160 pode ser uma tela, uma impressora, um autofalante, gravador de CD ou outro dispositivo que forneça saída a partir do sistema de computação 100.
[00035] A(s) conexão(ões) de comunicação 170 permite a comunicação através de um meio de comunicação em outra entidade de computação. O meio de comunicação conduz informações, tais como instruções legíveis por computador, entrada ou saída de áudio ou vídeo ou outros dados em um sinal de dados modulados. Um sinal de dados modulados é um sinal que possui uma ou mais de suas características definidas ou mudadas de modo a codificar as informações do sinal. A título de exemplo e não de limitação, os meios de comunicação podem usar um carreador elétrico, ótico, de RF ou outra opção.
[00036] As inovações podem ser descritas no contexto geral dos meios de armazenagem legíveis por computador. Os meios de armazenagem legíveis por computador são qualquer meio tangível disponível que possa ser acessado dentro de um ambiente de computação. A título de exemplo, com o sistema de computação 100, meios legíveis por computador incluem memória 120, 125 e/ou meio de armazenagem (140. O termo meios de armazenagem legíveis por computador não inclui sinais e ondas carreadoras. Além disso, o termo meios de armazenagem legíveis por computador não incluem conexões de comunicação (por exemplo, 170).
[00037] As inovações podem ser descritas no contexto geral das instruções legíveis por computador, tais como aquelas incluídas em módulos de programa, que são executadas em um sistema de computação em um processador de objetivo real ou virtual. Em geral, módulos de programa incluem rotinas, programas, bibliotecas, objetos, classes, componentes, estruturas de dados, etc. que executam tarefas particulares ou implantam tipos particulares de dados abstratos. A funcionalidade dos módulos de programa pode ser combinada ou dividida entre os módulos de programa, conforme desejado, em várias modalidades. As instruções legíveis por computador para os módulos de programa podem ser executadas dentro de um sistema de computação local ou distribuído.
[00038] Os termos "sistema" e "dispositivo" são usados de forma intercambiável aqui, a menos que o contexto indique claramente o contrário, e nenhum dos termos impõe qualquer limitação ao tipo de sistema de computação ou ao dispositivo de computação. Em geral, um sistema de computação ou dispositivo de computação pode ser local ou distribuído e pode incluir qualquer combinação de hardware com finalidade específica e/ou hardware com finalidade genérica com o software que implanta a funcionalidade descrita aqui.
[00039] Os métodos apresentados também podem ser implantados usando-se hardware de computação especializado configurado para executar qualquer um dos métodos apresentados. Por exemplo, os métodos apresentados podem ser implantados por um circuito integrado (por exemplo, um ASIC (tal como um processador de sinal digital de ASIC ("DSP"), uma unidade de processamento de gráfico ("GUP") ou um dispositivo lógico programável ("PLD"), tal como um conjunto de portas programáveis em campo ("FPGA")) especialmente projetado ou configurado para implantar qualquer um dos métodos apresentados.
[00040] Para facilitar sua apresentação, a descrição detalhada utiliza termos como "determinar" e "usar" para descrever operações de computador em um sistema de computação. Esses termos são abstrações de alto nível para operações efetuadas por um computador e não devem ser confundidas com ações efetuadas por um ser humano. As reais operações de computador correspondentes a esses termos variam dependendo da implantação.
II. Ambientes de Rede Exemplares.
[00041] As figuras 2a e 2b mostram ambientes de rede exemplares 201, 202 que incluem codificadores de vídeo 220 e decodificadores de vídeo 270. Os codificadores 220 e decodificadores 270 são conectados por uma rede 250 usando-se um protocolo de comunicação apropriado. A rede 250 pode incluir a Internet ou outra rede de computador.
[00042] No ambiente de rede 201 mostrado na figura 2a, cada ferramenta de comunicação em tempo real ("RTC") 210 inclui tanto um codificador 220 quanto um decodificador 270 para comunicação bidirecional. Um dado codificador 220 pode produzir saída em conformidade com uma variação ou extensão do padrão H.265/HEVC, do padrão SMPTE 421M, do padrão ISO-IEC 14496-10 (também conhecido como H.264 ou AVC), outro padrão ou um formato privado, com um decodificador correspondente 270 que recebe dados codificados a partir do codificador 220. A comunicação bidirecional pode ser parte de uma conferência de vídeo, chama telefônica em vídeo ou outro cenário de comunicação entre duas ou múltiplas partes. Embora o ambiente de rede 201 na figura 2a inclua duas ferramentas de comunicação em tempo real 210, ao invés disso, o ambiente de rede 201 pode incluir três ou mais ferramentas de comunicação em tempo real 210 que participam em comunicação entre múltiplas partes.
[00043] Uma ferramenta de comunicação em tempo real 210 gerencia a codificação feita por um codificador 220. A figura 3 mostra um exemplo de sistema de codificação 300 que pode ser incluído na ferramenta de comunicação em tempo real 210. De maneira alternativa, a ferramenta de comunicação em tempo real 210 usa outro sistema de codificação. Uma ferramenta de comunicação em tempo real 210 também gerencia decodificação feita por um decodificador 270.
[00044] No ambiente de rede 202 mostrado na figura 2b, uma ferramenta de decodificação 212 inclui um codificador 220 que codifica um vídeo a ser distribuído para múltiplas ferramentas de playback 214, as quais incluem decodificadores 270. Uma comunicação unidirecional pode ser provida para um sistema de vigilância por vídeo, um sistema de monitoramento por webcam, uma apresentação remota de conferência via desktop ou outro cenário no qual um vídeo é codificado e enviado a partir de um local para um ou mais locais diferentes. Embora o ambiente de rede 202 na figura 2b inclua duas ferramentas de playback 214, o ambiente de rede 202 pode incluir mais ou menos ferramentas de playback 214. Em geral, a ferramenta de playback 214 se comunica com a ferramenta de decodificação 212 para determinar um fluxo de vídeo a ser recebido pela ferramenta de playback 214. A ferramenta de playback 214 recebe o fluxo, armazena temporariamente os dados codificados recebidos por período apropriado e começa a decodificação e o playback.
[00045] A figura 3 mostra um exemplo de sistema de codificação 300 que pode ser incluído na ferramenta de decodificação 212. De maneira alternativa, a ferramenta de decodificação 212 usa outro sistema de codificação. A ferramenta de decodificação 212 também pode incluir uma lógica de controlador da parte do servidor para gerenciar as conexões com uma ou mais ferramentas de playback 214. A ferramenta de playback 214 também pode incluir uma lógica de controlador da parte do cliente para gerenciar as conexões com a ferramenta de decodificação 212.
III. Sistemas Exemplares de Codificação.
[00046] A figura 3 é um diagrama em bloco de um exemplo de sistema de codificação 300, em conjunção com o qual algumas modalidades descritas podem ser implantadas. O sistema de codificação 300 pode ser uma ferramenta de codificação com finalidade genérica capaz de operar em qualquer um dos múltiplos modos de codificação, tal como um modo de codificação com pouca latência para comunicação em tempo real, um modo de transcodificação e um modo de codificação com latência maior para produzir mída para playback a partir de um arquivo ou fluxo, ou ele pode ser uma ferramenta de codificação com finalidade específica adaptada para esse modo de codificação. O sistema de codificação 300 pode ser adaptado para codificar um tipo particular de conteúdo (por exemplo, um conteúdo de captura de tela). O sistema de codificação 300 pode ser implantado como um módulo do sistema operacional, como parte de uma biblioteca de aplicativos ou como um aplicativo independentee. De um modo global, o sistema de codificação 300 recebe uma sequência de fotogramas de vídeo fonte 311 a partir de uma fonte de vídeo 310 e produz dados codificados como saída para um canal 390. Os dados codificados enviados para o canal podem incluir conteúdo codificado que usa decisões por parte do codificador, conforme descrito aqui.
[00047] A fonte de vídeo 310 pode ser uma câmera, cartão sintonizador, mídia de armazenagem, módulo de captura de tela, ou outra fonte digital de vídeo. A fonte de vídeo 310 produz uma sequência de fotogramas de vídeo em uma taxa de fotograma de, por exemplo, 30 fotogramas por segundo. Conforme usado aqui, o termo "fotograma" geralmente se refere a dados de imagem fonte, codificada ou reconstruída. Para o vídeo com varredura progressiva, um fotograma é um fotograma de vídeo com varredura progressiva. Para o vídeo interlaçado, nas modalidades exemplares, um fotograma de vídeo interlaçado poderia ser desinterlaçado antes da codificação. De maneira alternativa, dois campos complementares de vídeo interlaçado são juntos com um único fotograma de vídeo ou codificados como dois campos separadamente codificados. Além de indicar um fotograma de vídeo com varredura progressiva ou fotograma de vídeo com varredura interlaçada, o termo "fotograma" ou "imagem" pode indicar um único campo de vídeo não emparelhado, um par de campos de vídeo complementares, um plano de objeto de vídeo que representa um objeto de vídeo em uma determinada duração ou uma região de interesse em uma imagem maior. O plano do objeto de vídeo ou região pode ser parte de uma imagem maior que inclui múltiplos objetos ou regiões de uma cena.
[00048] Um fotograma de fonte recebido 311 é armazenado em uma área de armazenagem de memória temporária de fotograma de fonte 320 que inclui múltiplas áreas de armazenagem temporária de fotograma 321, 322, ... , 32n. Um armazenamento temporário defotograma 321, 322, etc. mantém um fotograma de fonte na área de armazenagem de fotograma de fonte 320. Depois que um ou mais dos fotogramas de fonte 311 foram armazenados em armazenamento temporário de fotogramas 321, 322, etc., um seletor de fotograma 330 seleciona um fotograma de fonte individual a partir da área de armazenagem de fotograma de fonte 320. A ordem na qual os fotogramas são selecionados pelo seletor de fotograma 330 para registro no codificador 340 pode diferir da ordem na qual os fotogramas são produzidos pela fonte de vídeo 310, por exemplo, a codificação de alguns fotogramas pode ter sua ordem atrasada de modo a permitir que alguns fotogramas posteriores sejam codificados primeiro e para, desse modo, facilitar temporariamente uma predição retrógrada. Antes do codificador 340, o sistema de codificação 300 pode incluir um pré-processador (não mostrado) que executa o pré- processamento (por exemplo, filtragem) do fotograma selecionado 331 antes da codificação. O pré-processamento pode incluir a conversão do espaço de cor em componentes primários (por exemplo, luma) e secundários (por exemplo, diferenças cromáticas em direção ao vermelho e ao azul) e o processamento de reamostragem (por exemplo, para reduzir a resolução espacial de componentes cromáticos) para a codificação. De maneira típica, antes da codificação, o vídeo foi convertido em um espaço de cor, tal como YUV, no qual os valores de amostra de um componente luma (Y) representam valores de brilho ou intensidade e os valores de amostra dos componentes croma (U, V) representam os valores de diferença de cor. As definições precisas dos valores de diferença de cor (e as operações de conversão para/a partir do espaço de cor YUV para outro espaço de cor, tal como RGB) dependem da implantação. Em geral, conforme usado aqui, o termo YUV indica qualquer espaço de cor com um componente luma (ou de luminância) e um ou mais componentes croma (ou de crominância) que inclua Y'UV, YIQ, Y'lQ e YDbDr, bem como variações, tais como YCbCr e YCoCg. Os valores de amostra croma podem ser subamostrados em uma taxa de amostragem cromática mais baixa (por exemplo, no formato YUV 4:2:0), ou os valores de amostra croma podem ter a mesma resolução que os valores de amostra luma (por exemplo, para YUV 4:4:4 formato). Ou, o vídeo pode ser codificado em outro formato (por exemplo, formato RGB 4:4:4, formato GBR 4:4:4 ou formato BGR 4:4:4).
[00049] O codificador 340 codifica o fotograma selecionado 331 para produzir um fotograma codificado 341 e também produz sinais para a operação de controle de gerenciamento de memória ("MMCO") 342 ou informações de definição de imagem de referência ("RPPS"). A RPPS é a série de fotogramas que pode ser usada para referência na compensação de movimento para um fotograma atual ou qualquer fotograma subsequente. Se o atual fotograma não for o primeiro fotograma que foi codificado, durante a execução do seu processo de codificação, o codificador 340 pode usar um ou mais fotogramas previamente codificados/decodificados 369 que foram armazenados em uma área de armazenagem de memória temporária de fotograma decodificado 360. Tais fotogramas decodificados armazenados 369 são usados como fotogramas de referência para a predição de interfotograma do conteúdo do fotograma de fonte atual 331. As informações de MMCO/RPPS 342 indicam para um decodificador quais fotogramas reconstruídos podem ser usados como fotogramas de referência e que, consequentemente, devem ser armazenados em uma área de armazenagem de fotograma. Maneiras exemplares de se tomar decisões sobre quais imagens de referência devem ser retidas em uma RPPS são descritas abaixo.
[00050] Geralmente, o codificador 340 inclui múltiplos módulos de codificação que executam a codificação de tarefas, tal como a divisão em mosaicos, estimativa de intrapredição e predição, estimativa de movimento e compensação, transformação de frequência, codificação de quantificação e entropia. As operações exatas efetuadas pelo codificador 340 podem variar dependendo do formato de compressão. O formato dos dados de saída codificados pode ser uma variação ou extensão do formato H.265/HEVC, formato Janelas Media Video, formato VC-1, formato MPEG-x (por exemplo, MPEG-1, MPEG-2 ou MPEG-4), formato H.26x (por exemplo, H.261, H.262, H.263, H.264) ou outro formato.
[00051] O codificador 340 pode dividir um fotograma em múltiplos mosaicos do mesmo tamanho ou de diferentes tamanhos. Por exemplo, o codificador 340 divide o fotograma em fileiras de mosaico e colunas de mosaico que, com as divisas do fotograma, definem divisas horizontais e verticais para os mosaicos dentro do fotograma, onde cada mosaico é uma região retangular. Os mosaicos são frequentemente usados para prover opções para o processamento paralelo. Um fotograma também pode ser organizado como uma ou mais frações, onde a fração pode ser um fotograma inteiro ou uma região do fotograma. A fração pode ser decodificada independentemente de outras frações de um fotograma, o que aumenta a resiliência ao erro. O conteúdo da fração ou mosaico também é dividido em blocos ou outras séries de valores de amostra para fins de codificação e decodificação.
[00052] Para a sintaxe de acordo com o padrão H.265/HEVC, o codificador divide o conteúdo de um fotograma (ou fração ou mosaico) em unidades de árvore de codificação. A unidade de árvore de codificação ("CUT") inclui valores de amostra luma organizados como um bloco de árvore de codificação luma ("BCT") e valores correspondentes de amostra croma organizados como dois BCTs croma. O tamanho de uma CUT (e de seus BCTs) é selecionado pelo codificador e pode ser, por exemplo, 64x64, 32x32 ou 16x16 valores de amostra. A CUT inclui uma ou mais unidades de codificação. A unidade de codificação ("UC") possui um bloco de codificação luma ("BC") e dois BCs croma correspondentes. Por exemplo, a CUT com um BCT luma 64x64 e dois BCTs croma 64x64 (formato YUV 4:4:4) pode ser dividida em quatro UCs, com cada UC incluindo um BC luma 32x32 e dois BCs croma 32x32, e com cada UC possivelmente sendo dividida novamente em UCs menores. Ou, como outro exemplo, a CUT com um BCT luma 64x64 e dois BCTs croma 32x32 (formato YUV 4:2:0) pode ser dividida em quatro UCs, com cada UC incluindo um BC luma 32x32 e dois BCs croma 16x16, e com cada UC sendo possivelmente dividida novamente em UCs menores. O menor tamanho permitido de UC (por exemplo, 8x8, 16x16) pode ser sinalizado no fluxo de bits.
[00053] Geralmente, a UC possui um modo de predição, tal como inter ou intra. A UC inclui uma ou mais unidades de predição para fins de sinalização das informações de predição (tal como detalhes do modo de predição, os valores de deslocamento, etc.) e/ou processamento de predição. A unidade de predição ("UP") possui um bloco de predição luma ("BP") e dois BPs croma. Para uma UC intrapredita, a UP possui o mesmo tamanho que a UC, a menos que a UC tenha o menor tamanho (por exemplo, 8x8). Nesse caso, a UC pode ser dividida em quatro UPs menores (por exemplo, cada 4x4 se o menor tamanho de UC for 8x8) ou a UP pode ter o menor tamanho de UC, conforme indicado pelo elemento de sintaxe para a UC. A UC também possui uma ou mais unidades de transformação para fins de codificação/decodificação residual, onde uma unidade de transformação ("UT") possui um bloco de transformação ("BT") e dois BTs croma. A UP em uma UC intrapredita pode conter uma única UT (igual em tamanho à UP) ou múltiplas UTs. O codificador decide como dividir o vídeo em CUTs, UCs, UPs, UTs etc.
[00054] Nas implantações de H.265/HEVC, a fração pode incluir um único segmento de fração (segmento de fração independente) ou pode ser dividida em múltiplos segmentos de fração (segmento de fração independente e um ou mais segmentos de fração dependentes). Um segmento de fração é um número inteiro de CUTs ordenadas consecutivamente em uma varredura de mosaico, contidas em uma única unidade de camada de abstração de rede ("NAL"). Para um segmento de fração independente, um cabeçalho de segmento de fração inclui valores de elementos de sintaxe que se aplicam ao segmento de fração independente. Para um segmento de fração dependente, um cabeçalho de segmento de fração truncado inclui alguns valores de elementos de sintaxe que se aplicam a esse segmento de fração dependente e os valores dos outros elementos de sintaxe do segmento de fração dependente são inferidos a partir dos valores até o segmento de fração independente precedente na ordem de decodificação.
[00055] Conforme usado aqui, o termo "bloco" pode indicar um macrobloco, uma unidade de predição, unidade de dados residuais ou um BC, BP ou BT, ou alguma outra série de valores de amostra, dependendo do contexto.
[00056] Voltando para a figura 3, o codificador representa um bloco intracodificado de um fotograma de fonte 331 em termos de predição a partir doutros valores de amostra previamente reconstruídos no fotograma 331. Para a predição de cópia de intrabloco ("BC"), um estimador de intraimagem ou um estimador de movimento estima o deslocamento de um bloco em relação aos outros valores de amostra previamente reconstruídos no mesmo fotograma. Uma região de referência de predição de intrafotograma é uma região de valores de amostra no fotograma, os quais são usados para gerar valores para a predição de BC no bloco. A região de predição de intrafotograma pode ser indicada com um valor do vetor de bloco ("VB"), o qual pode ser representado no fluxo de bits como um valor de vetor de movimento ("VM"). Para a predição intraespacial de um bloco, o estimador de intraimagem estima a extrapolação dos valores de amostra vizinhos que foram reconstruídos dentro do bloco. As informações de predição (tais como valores de VB/VM para a predição de intra BC ou o modo de predição (direção) para a predição intraespacial) podem ser entropia codificadas e enviadas. Um indicador de predição de intrafotograma (ou um compensador de movimento para os valores de VB/ VM) aplica as informações de predição para determinar os valores de intrapredição.
[00057] O codificador 340 representa um bloco estimado e codificado em interfotograma de um fotograma de fonte 331 em termos de predição a partir de um ou mais fotogramas de referência 369. Um estimador de movimento estima o movimento do bloco em relação a um ou mais fotogramas de referência 369. O estimador de movimento pode selecionar uma precisão de VM (por exemplo, uma precisão de VM de amostra em número inteiro, precisão de VM de amostra de 1/2 ou uma precisão de VM de amostra de 1/4), por exemplo, usando-se uma abordagem descrita aqui e, em seguida, utilizando a precisão de VM selecionada durante a estimativa de movimento. Quando múltiplos fotogramas de referência são usados, os múltiplos fotogramas de referência podem se originar de diferentes direções temporais ou da mesma direção temporal. Uma região de referência de predição com movimento compensada é uma região de valores de amostra no(s) fotograma(s) de referência que são usados para gerar valores de predição compensados por movimento para um bloco de valores de amostra de um fotograma atual. O estimador de movimento envia informações de movimento, tais como informações de VM, as quais são codificadas por entropia. Um compensador de movimento aplica VMs aos fotogramas de referência 369 para determinar valores de predição compensados por movimento para a predição de interfotograma.
[00058] O codificador pode determinar as diferenças (se houver) entre os valores de predição de um bloco (intra ou inter) e os valores originais correspondentes. Esses valores de predição residual também são codificados usando uma transformação de frequência, quantificação e codificação por entropia. Por exemplo, o codificador 340 define os valores para o parâmetro de quantificação ("PQ") de uma imagem, mosaico, fração e/ou outra porção de vídeo e quantifica os coeficientes de transformação de maneira adequada. O codificador de entropia do codificador 340 comprime os valores de coeficiente de transformação quantificados, bem como determinados metadados (por exemplo, informações de VM, precisão selecionada de VM, parâmetros de filtragem SAO, informações de atualização de RPPS, os valores de PQ, decisões de modo, outras escolhas de parâmetro). Típicas técnicas de codificação por entropia incluem codificação Exponencial Golomb, codificação Golomb-Rice, codificação aritmética, codificação diferencial, codificação Huffman, codificação de tempo de funcionamento, codificação de comprimento variável a comprimento variável ("V2V"), codificação de comprimento variável a comprimento fixo ("V2F"), codificação Lempel-Ziv ("LZ"), codificação de dicionário, codificação por entropia com divisão de intervalo de probabilidade ("PIPE") e combinações das mesmas. O codificador de entropia pode usar diferentes técnicas de codificação para diferentes tipos de informações, pode aplicar múltiplas técnicas na combinação (por exemplo, a aplicação da codificação Golomb-Rice seguida pela codificação aritmética) e pode escolher a partir de múltiplas tabelas de códigos dentro de uma técnica de codificação particular.
[00059] Um filtro adaptativo Deblocking está incluído no ciclo de compensação de movimento do codificador 340 para as descontinuidades sutis que ocorrem ao longo das fileiras e/ou colunas de divisa do bloco em um fotograma decodificado. Outra filtragem (tal como filtragem "de-ringing", filtragem de circuito adaptativo ("ALF") ou filtragem SAO) pode ser aplicada de maneira alternativa ou adicional como operações de filtragem em ciclos.
[00060] Os dados codificados produzidos pelo codificador 340 incluem elementos de sintaxe para várias camadas de sintaxe de fluxo de bits. Para a sintaxe de acordo com o padrão H.265/HEVC, por exemplo, uma definição de parâmetro de imagem ("PPS") é uma estrutura de sintaxe que contém elementos de sintaxe que podem ser associados com uma imagem. A PPS pode ser usada para uma única imagem ou a PPS pode ser reutilizada para múltiplas imagens em uma sequência. Uma PPS é tipicamente sinalizada de modo separado dos dados codificados de uma imagem (por exemplo, uma unidade de NAL para uma PPS e uma ou mais unidades de NAL diferentes para os dados codificados de uma imagem). Dentro dos dados codificados de uma imagem, um elemento de sintaxe indica qual PPS usar para a imagem. De maneira similar, para a sintaxe de acordo com o padrão H.265/HEVC, uma definição de parâmetro de sequência ("SPS") é a estrutura de sintaxe que contém elementos de sintaxe que podem ser associados com uma sequência de imagens. Um fluxo de bits pode incluir uma única SPS ou múltiplas SPSs. Uma SPS é tipicamente sinalizada separadamente de outros dados da sequência, e um elemento de sintaxe nos outros dados indica qual SPS usar.
[00061] Os fotogramas codificados 341 e as informações de MMCO/RPPS 342 ou informações equivalentes às informações de MMCO/RPPS 342, visto que as dependências e as estruturas de ordenação dos fotogramas já são conhecidas no codificador 340 são processadas por um emulador de processo de decodificação 350. O emulador de processo de decodificação 350 implanta parte da funcionalidade de um decodificador, por exemplo, tarefas de decodificação para reconstruir os fotogramas de referência. De um modo consistente com as informações de MMCO/RPPS 342, o emulator de processos de decodificação 350 determina se um dado fotograma codificado 341 precisa ser reconstruído e armazenado para uso como um fotograma de referência durante a predição de interfotograma de fotogramas subsequentes a serem codificados. Se um fotograma codificado 341 precisar ser armazenado, o emulador de processo de decodificação 350 modela o processo de decodificação que seria conduzido por um decodificador que recebe o fotograma codificado 341 e produz um fotograma decodificado correspondente 351. Desse modo, quando o codificador 340 usa o(s) fotograma(s) decodificado(s) 369 que foi armazenado na área de armazenagem de fotograma decodificado 360, o emulador de processo de decodificação 350 também usa o(s) fotograma(s) decodificado(s) 369 da área de armazenagem 360 como parte do processo de decodificação.
[00062] A área de armazenagem de memória temporária de fotograma decodificado 360 inclui múltiplas áreas de armazenagem temporária de fotograma 361, 362, ..., 36n. De um modo consistente com as informações de MMCO/RPPS 342, o emulador de processo de decodificação 350 gerencia os conteúdos da área de armazenagem 360 de modo a identificar quaisquer armazenamentos temporários de fotograma 361, 362, etc. com fotogramas que não são necessários para codificador 340 usar como fotogramas de referência. Depois da modelagem do processo de decodificação, o emulador de processo de decodificação 350 armazena um fotograma recém-decodificado 351 em um armazenamento temporário de fotograma 361, 362, etc. que foi identificado dessa forma.
[00063] Os fotogramas codificados 341 e as informações de MMCO/RPPS 342 são armazenados em uma área temporária de dados codificados 370. Os dados codificados que estão agregados à área de dados codificados 370 contêm, como parte da sintaxe de um fluxo de bits elementar de vídeo codificado, dados codificados para uma ou mais imagens. Os dados codificados que estão agregados à área de dados codificados 370 também podem incluir metadados de mídia referentes aos dados de vídeo codificado (por exemplo, como um ou mais parâmetros em uma ou mais mensagens com informações de aumento suplementar ("SEI") ou mensagens com informações sobre a usabilidade de vídeo ("VUI")).
[00064] Os dados agregados 371 da área temporária de dados codificados 370 são processados por um codificador de canal 380. O codificador de canal 380 pode organizar em pacote e/ou multiplexar os dados agregados para transmissão ou armazenagem como um fluxo de mídia (por exemplo, de acordo com um fluxo de programa de mídia ou um formato de fluxo de transporte, tal como IUT-T H.222.0 IISO/IEC 13818-1 ou um formato de protocolo de Internet de transporte em tempo real, tal como IETF RFC 3550), em cujo caso o codificador de canal 380 pode adicionar elementos de sintaxe como parte da sintaxe do fluxo de transmissão de mídia.
[00065] Ou o codificador de canal 380 pode organizar os dados agregados para armazenagem como um arquivo (por exemplo, de acordo com um formato receptor de mídia, tal como ISO/IEC 1449612), em cujo caso o codificador de canal 380 pode adicionar elementos de sintaxe como parte da sintaxe do arquivo de armazenagem de mídia. Ou, de maneira mais geral, o codificador de canal 380 pode implantar um ou mais protocolos de multiplexação ou protocolos de transporte de sistema de mídia, em cujo caso o codificador de canal 380 pode adicionar elementos de sintaxe como parte da sintaxe do(s) protocolo(s). O codificador de canal 380 provê saída para um canal 390, o qual representa a armazenagem, uma conexão de comunicações ou outro canal para a saída. O codificador de canal 380 ou canal 390 também pode incluir outros elementos (não mostrados), por exemplo, para a codificação de correção de erro de encaminhamento ("FEC") e a modulação de sinal analógico.
IV. Codificadores de Vídeo Exemplares.
[00066] As figuras 4a e 4b são um diagrama em bloco de um codificador de vídeo geralizado 400, em conjunção com o qual algumas modalidades descritas podem ser implantadas. O codificador 400 recebe uma sequência de imagens de vídeo, que inclui uma imagem atual como um sinal de vídeo de entrada 405 e produz dados codificados em um fluxo de bits de vídeo codificado 495 como saída.
[00067] O codificador 400 é baseado em bloco e usa um formato de bloco que depende da implantação. Os blocos podem ser subdivididos em diferentes estágios, por exemplo, nos estágios de predição, transformação de frequência e/ou codificação por entropia. Por exemplo, uma imagem pode ser dividida em blocos de 64x64, blocos de 32x32 ou blocos de 16x16, os quais podem, por sua vez, ser divididos em blocos menores de valores de amostra para codificação e decodificação. Nas implantações de decodificação do padrão H.265/HEVC, o codificador divide uma imagem em CUTs (BCTs), UCs (BCs), UPs (BPs) e UT (BTs).
[00068] O codificador 400 comprime as imagens usando codificação de intraimagem e/ou codificação de interimagem. Vários dos componentes do codificador 400 são usados tanto para a codificação de intraimagem quanto para codificação de interimagem. As operações exatas efetuadas por esses componentes podem variar dependendo do tipo de informação que está sendo comprimida.
[00069] Um módulo criador de mosaico 410 opcionalmente divide uma imagem em múltiplos mosaicos do mesmo tamanho ou de tamanhos diferentes. Por exemplo, o módulo criador de mosaico 410 dividida imagem ao longo de fileiras de mosaico e colunas de mosaico que, com divisas de imagem, define divisas horizontais e verticais de mosaicos dentro da imagem, onde cada mosaico é uma região retangular. Nas implantações de H.265/HEVC, o codificador 400 divide uma imagem em uma ou mais frações, onde cada fração inclui um ou mais segmentos de fração.
[00070] O controle de codificação geral 420 recebe imagens para o sinal de vídeo de entrada 405, bem como feedback (não mostrado) a partir de vários módulos do codificador 400. De maneira global, o controle de codificação geral 420 provê sinais de controle (não mostrado) para outros módulos (tal como o módulo criador de mosaico 410, transformador/escalador/quantificador 430, escalador/transformador inverso 435, estimador de intraimagem 440, estimador de movimento 450, controle de filtragem 460 e intra/intercomutador) para definir e mudar os parâmetros de codificação durante a decodificação. Por exemplo, durante a decodificação, o controle de codificação geral 420 pode gerenciar as decisões sobre a criação de tabela de hash, a precisão de VM e quais imagens de referência reter em uma RPPS. O controle de codificação geral 420 também pode avaliar resultados intermediários durante a decodificação, por exemplo, efetuar análise de distorção de taxa. O controle de codificação geral 420 produz dados de controle geral 422 que indicam as decisões tomadas durante a decodificação, para que um decodificador correspondente possa tomar decisões consistentes. Os dados de controle geral 422 são providos para o formatador de cabeçalho/codificador de entropia 490.
[00071] Se a imagem atual for estimada usando-se predição de interimagem, um estimador de movimento 450 estimará o movimento de blocos de valores de amostra de uma imagem atual do sinal de vídeo de entrada 405 em relação a uma ou mais imagens de referência. O armazenamento temporário de imagem decodificada ("DBP") 470 armazena uma ou mais imagens reconstruídaspreviamente codificadas para serem usadas como imagens de referência. Quando múltiplas imagens de referência são usadas, múltiplas imagens de referência podem ser selecionadas a partir de diferentes direções temporais ou da mesma direção temporal.
[00072] Ao operar com o controle de codificação geral 420 e um dicionário de hash de bloco 451, o estimador de movimento 450 pode selecionar uma precisão de VM (por exemplo, precisão de VM de amostra em número inteiro, precisão de VM de amostra de 1/2 ou precisão de VM de amostra de 1/4) usando uma abordagem descrita aqui e, em seguida, usando a precisão selecionada de VM durante a estimativa de movimento. Para a combinação de blocos com base em hash durante a estimativa de movimento, o estimador de movimento 450 pode usar o dicionário de hash de bloco 451 para encontrar um valor de VM para um bloco atual. O dicionário de hash de bloco 451 é uma estrutura de dados que organiza os blocos de candidatos para a combinação de blocos com base em hash. O dicionário de hash de bloco 451 é um exemplo de uma tabela de hash. Na figura 4b, o dicionário de hash de bloco 451 é construído com base nos valores de amostra de entrada. De maneira alternativa, um dicionário de hash de bloco pode ser construído com base nos valores de amostra reconstruídos e atualizados durante a codificação para armazenar informações sobre os novos blocos de candidatos, visto que esses blocos de candidatos se tornaram disponíveis para uso na combinação de blocos com base em hash.
[00073] O estimador de movimento 450 produz como metadados, dados de movimento 452, tais como dados de VM, os valores de índice do modo de hash, dados de seleção de imagem de referência e a precisão selecionada de VM. Esses dados são fornecidos ao formatador de cabeçalho/codificador de entropia 490, bem como ao compensador de movimento 455.
[00074] O compensador de movimento 455 aplica VMs à(s) imagem(ns) de referência reconstruída do DBP 470. O compensador de movimento 455 produz predições compensadas por movimento para a imagem atual.
[00075] Em um caminho separado dentro do codificador 400, um estimador de intraimagem 440 determina como executar a predição de intraimagem para os blocos de valores de amostra de uma imagem atual do sinal de vídeo de entrada 405. A imagem atual pode ser totalmente ou parcialmente codificada usando-se a codificação de intraimagem. Ao usar os valores de uma reconstrução 438 da imagem atual para a predição intraespacial, o estimador de intraimagem 440 determina como estimar espacialmente os valores de amostra de um bloco atual da imagem atual localizada nas adjacências e os valores de amostra previamente reconstruídos da imagem atual. O estimador de intraimagem 440 pode determinar a direção de predição espacial para uso em um bloco atual.
[00076] Ou, para a predição de intra BC usando-se os valores de VB/VM, o estimador de intraimagem 440 ou o estimador de movimento 450 estima o deslocamento dos valores de amostra do bloco atual para diferentes regiões de referência de candidato dentro da imagem atual, como uma imagem de referência. Para a combinação de bloco com base em hash, o estimador de intraimagem 440 ou estimador de movimento 450 pode usar um dicionário de hash de bloco (não mostrado) para encontrar um valor de VB/VM para um bloco atual. Ou, para um modo de codificação de dicionário de intraimagem, os pixels de um bloco são codificados usando-se os valores de amostra anteriores armazenados em um dicionário ou em outro local, onde um pixel é uma série de valores de amostra colocalizados (por exemplo, um trio de RGB ou um trio de YUV).
[00077] O estimador de intraimagem 440 produz como metadados, dados de intrapredição 442, tais como informações de modo, direção de modo de predição (para a predição intraespacial), desvios e comprimentos (para o modo do dicionário). Os dados de intrapredição 442 são fornecidos ao formatador de cabeçalho/codificador de entropia 490, bem como o indicador de intraimagem 445.
[00078] De acordo com os dados de intrapredição 442, o indicador de intraimagem 445 estima espacialmente os valores de amostra de um bloco atual da imagem atual localizada nas adjacências e os valores de amostra previamente reconstruídos da imagem atual. Ou, para a predição de intra BC, o indicador de intraimagem 445 ou compensador de movimento 455 estima os valores de amostra do bloco atual usando os valores de amostra previamente reconstruídos de uma região de referência de predição de intraimagem, a qual é indicada por um valor de VB/VM para o bloco atual. Ou, para o modo de dicionário de intraimagem, o indicador de intraimagem 445 reconstrói pixels usando desvios e comprimentos.
[00079] O intra/intercomutador decide se a predição 458 para um dado bloco será uma predição compensada por movimento ou predição de intraimagem.
[00080] A diferença (se houver) entre um bloco da predição 458 e uma parte correspondente da imagem original atual do sinal de vídeo de entrada 405 provê valores do residual 418, para um bloco sem omissão. Durante a reconstrução da imagem atual, para um bloco sem omissão, os valores residuais reconstruídos são combinados com a predição 458 para produzir uma reconstrução aproximada ou exata 438 do conteúdo original a partir do sinal de vídeo 405. (Na compressão com perdas, algumas informações do sinal de vídeo 405 são perdidas).
[00081] No transformador/escalador/quantificador 430, um transformador de frequência converte as informações de vídeo de domínio espacial em dados de domínio de frequência (ou seja, dados espectrais, de transformação). Para a codificação de vídeo com base em bloco, o transformador de frequência aplica uma transformada de cosseno discreta ("DCT"), uma aproximação a um número inteiro da mesma ou outro tipo de transformada de bloco progressiva (por exemplo, uma transformada de seno discreta ou uma aproximação a um número inteiro da mesma) para dados residuais dos blocos de predição (ou dados do valor de amostra se a predição 458 for nula), que produz coeficientes de blocos de transformação de frequência. O transformador/escalador/quantificador 430 pode aplicar uma transformada com tamanhos de bloco variáveis. O codificador 400 também pode omitir a etapa de transformada em alguns casos.
[00082] O escalador/quantificador mede e quantifica os coeficientes de transformação. Por exemplo, o quantificador aplica uma quantificação escalar de zona inoperante aos dados do domínio de frequência com um tamanho de etapa de quantificação que varia de imagem para imagem, de mosaico para mosaico, de fração para fração, de bloco para bloco, com base na frequência específica ou em outro critério. Os dados quantificados do coeficiente de transformação 432 são fornecidos ao formatador de cabeçalho/codificador de entropia 490.
[00083] No escalador/transformador inverso 435, um escalador/quantificador inverso executa a escalagem inversa e a quantificação inversa nos coeficientes de transformação quantificados. Quando o estágio de transformação não foi omitido, um transformador inverso de frequência executa uma transformação de frequência inversa, que produz blocos de valores reconstruídos de predição residual ou valores de amostra. Para um bloco sem omissão, o codificador 400 combina os valores residuais reconstruídos com os valores da predição 458 (por exemplo, os valores de predição compensados por movimento, os valores de predição de intraimagem) para formar a reconstrução 438. Para um bloco de modo de omissão ou um bloco de modo de dicionário, o codificador 400 usa os valores da predição 458 como a reconstrução 438.
[00084] Para a predição espacial de intraimagem, os valores da reconstrução 438 podem ser devolvidos ao estimador de intraimagem 440 e ao indicador de intraimagem 445. Para a predição de intra BC, os valores da reconstrução 438 podem ser devolvidos de maneira similar para prover valores de amostra reconstruídos. Além disso, os valores da reconstrução 438 podem ser usados para a predição compensada por movimento de imagens subsequentes.
[00085] Os valores da reconstrução 438 podem ser filtrados novamente. Um controle de filtragem 460 determina como executar a filtragem deblock nos valores da reconstrução 438, para uma dada imagem do sinal de vídeo 405. O controle de filtragem 460 produz dados de controle de filtragem 462, os quais são fornecidos ao formatador de cabeçalho/codificador de entropia 490 e ao(s) mesclador/filtro(s) 465.
[00086] No(s) mesclador/filtro(s) 465, o codificador 400 mescla o conteúdo de diferentes mosaicos em uma versão reconstruída da imagem. O codificador 400 executa de modo seletivo a filtragem deblock de acordo com os dados de controle de filtragem 462. Outra filtragem (tal como filtragem de-ringing ou ALF) pode ser aplicada de maneira alternativa ou adicional. As divisas do mosaico podem ser seletivamente filtradas ou não filtradas, dependendo das configurações do codificador 400, e o codificador 400 pode prover sintaxe dentro do fluxo de bits codificado para indicar se a filtragem foi ou não aplicada.
[00087] O DBP 470 armazena temporariamente a imagem atual reconstruída para uso em uma predição compensada por movimento subsequente. Em particular, as imagens de referência da RPPS podem ser temporariamente armazenadas no DBP 470. No entanto, o DBP 470 possui espaço de memória limitado. Se a imagem atual reconstruída for retida no DBP 470 para uso como uma imagem de referência, outra imagem pode ser removida do DBP 470 (e retirada da RPPS). O controle de codificação geral 420 decide quais imagens reter na RPPS e armazenar temporariamente no DBP 470. Usando o dicionário de hash de bloco 451, o controle de codificação geral 420 pode tomar decisões sobre quais imagens de referência reter na RPPS, conforme explicado abaixo.
[00088] O formatador de cabeçalho/codificador de entropia 490 formata e/ou codifica por entropia os dados de controle geral 422, os dados quantificados de coeficiente de transformação 432, os dados de intrapredição 442, os dados de movimento 452 e os dados de controle de filtragem 462. Para os dados de movimento 452, o formatador de cabeçalho/codificador de entropia 490 pode selecionar e codificar por entropia os valores de índice do modo de hash ou um indicador padrão de VM pode ser usado. Em alguns casos, o formatador de cabeçalho/codificador de entropia 490 também determina diferenciais de VM para os valores de VM (em relação aos indicadores de VM) e em seguida, codifica por entropia os diferenciais de VM, por exemplo, usando codificação aritmética binária adaptativa de contexto.
[00089] O formatador de cabeçalho/codificador de entropia 490 provê os dados codificados no fluxo de bits de vídeo codificado 495. O formato do fluxo de bits de vídeo codificado 495 pode ser uma variação ou extensão do formato H.265/HEVC, formato de Janelas Media Video, formato VC-1, formato MPEG-x (por exemplo, MPEG-1, MPEG-2, ou MPEG-4), formato H.26x (por exemplo, H.261, H.262, H.263, H.264) ou outro formato.
[00090] Dependendo da implantação e do tipo de compressão desejada, os módulos de um codificador 400 podem ser adicionados, omitidos, divididos em múltiplos módulos, combinados com outros módulos, e/ou substituídos por módulos similares. Em modalidades alternativas, os codificadores com módulos diferentes e/ou outras configurações de módulos executam uma ou mais das técnicas descritas. As modalidades específicas de codificadores usam tipicamente uma variação ou versão suplementada do codificador 400. As relações mostradas entre os módulos dentro do codificador 400 indicam fluxos gerais de informações no codificador; outras relações não são mostradas por questão de simplicidade.
V. Tipos de Vídeo.
[00091] As abordagens descritas aqui para criar tabelas de hash, selecionar precisão de VM e determinar as mudanças de cena podem ser aplicadas durante a decodificação de qualquer tipo de vídeo. Em particular, no entanto, essas abordagens podem melhorar o desempenho durante a decodificação de um determinado conteúdo de vídeo artificialmente criado, tal como um conteúdo de captura de tela.
[00092] Em geral, o conteúdo de captura de tela representa a saída de uma tela de computador ou outra tela. A figura 5 mostra um ambiente de área de trabalho de computador 510 com conteúdo que pode prover entrada para a captura de tela. Por exemplo, vídeo de conteúdo de captura de tela pode representar uma série de imagens de todo o computador do tipo desktop 511. Ou, vídeo de conteúdo de captura de tela pode representar uma série de imagens de uma das janelas do ambiente de área de trabalho do computador, tal como a janela de aplicativos 513, o que inclui o conteúdo de jogos, uma janela de navegador 512 com conteúdo de página da web ou janela 514 com conteúdo processador de palavra.
[00093] Como conteúdo de vídeo gerado em computador e artificialmente criado, o conteúdo de captura de tela tende a ter valores de amostra relativamente pouco discretos, em comparação com o conteúdo de vídeo natural que é capturado usando uma câmera de vídeo. Por exemplo, uma região de conteúdo de captura de tela frequentemente inclui uma única cor uniforme, enquanto uma região no conteúdo de vídeo natural inclui muito provavelmente cores que variam gradualmente. Além disso, o conteúdo de captura de tela tipicamente inclui estruturas distintas (por exemplo, gráficos, caracteres de texto) que são repetidas com exatidão de fotograma para fotograma, mesmo se o conteúdo puder ser espacialmente deslocado (por exemplo, devido ao uso de uma barra de rolagem). O conteúdo de captura de tela é geralmente codificado em um format (por exemplo, YUV 4:4:4 ou RGB 4:4:4) com alta resolução de amostragem cromática, embora ele também possa ser codificado em um formato com menor resolução de amostragem cromática (por exemplo, YUV 4:2:0, YUV 4:2:2).
[00094] A figura 6 mostra um vídeo composto 620 que inclui conteúdo de vídeo natural 621 e conteúdo de vídeo artificialmente criado. O conteúdo de vídeo artificialmente criado inclui um gráfico 622 ao lado do conteúdo de vídeo natural 621 e um símbolo de registro 623 se estendendo abaixo do conteúdo de vídeo natural 621. Como o conteúdo de captura de tela mostrado na figura 5, o conteúdo de vídeo artificialmente criado mostrado na figura 6 tende a ter valores de amostra relativamente pouco discretos. Ele também tende a ter estruturas distintas por exemplo, gráficos, caracteres de texto) que que são repetidas com exatidão de fotograma para fotograma ou gradualmente desviadas de fotograma para fotograma (por exemplo, devido ao uso de uma barra de rolagem).
VI. Exemplos de Combinação de Blocos com base em Hash.
[00095] Em várias inovações descrita aqui, um codificador de vídeo usa os resultados da combinação de blocos com base em hash para tomar decisões sobre parâmetros durante a decodificação. Esta seção descreve exemplos de combinação de blocos com base em hash.
A. Combinação de Blocos com base em Hash.
[00096] Quando um codificador usa a combinação de blocos com base em hash, o codificador determina um valor de hash para cada um dos múltiplos blocos de candidatos de uma ou mais imagens de referência. Uma tabela de hash armazena os valores de hash dos blocos de candidatos. O codificador também determina um valor de hash para um bloco atual por meio da mesma abordagem de hash e em seguida, pesquisa na tabela de hash um valor de hash correspondente. Se dois blocos forem idênticos, os seus valores de hash serão iguais. Usando os valores de hash, um codificador pode identificar de forma rápida e eficiente os blocos de candidatos que possuem o mesmo valor de hash que o bloco atual e descartar os blocos de candidatos que possuem valores de hash diferentes. Dependendo da implantação e das metas da combinação de blocos com base em hash, o codificador pode então avaliar adicionalmente esses blocos de candidatos que possuem o mesmo valor de hash que o bloco atual. (Diferentes blocos podem ter o mesmo valor de hash. Sendo assim, dentre os blocos de candidatos com o mesmo valor de hash, o codificador também pode identificar um bloco de candidatos que corresponde ao bloco atual).
[00097] Em algumas implantações exemplares, os valores de hash para blocos de candidatos são determinados a partir dos valores de amostra de entrada das imagens (imagens de referência) que incluem os blocos de candidatos. Durante a combinação de blocos com base em hash, o codificador determina o valor de hash para um bloco atual usando os valores de amostra de entrada. O codificador compara esse valor (ou então usa o valor de hash) com os valores de hash determinados a partir dos valores de amostra de entrada dos blocos de candidatos. Mesmo assim, os valores de amostra reconstruídos a partir do bloco correspondente são usados para representar o bloco atual. Desse modo, as operações de predição ainda usam valores de amostra reconstruídos.
[00098] De maneira alternativa, os blocos de candidatos considerados na combinação de blocos com base em hash incluem valores de amostra reconstruídos. Ou seja, os blocos de candidatos fazem parte do conteúdo previamente codificado e em seguida reconstruído em uma imagem. Os valores de hash dos blocos de candidatos são determinados a partir dos valores de amostra reconstruídos. Durante a combinação de blocos com base em hash, o codificador determina o valor de hash para um bloco atual usando os valores de amostra de entrada. O codificador compara esse valor (ou então usa o valor de hash) com os valores de hash determinados a partir dos valores de amostra reconstruídos dos blocos de candidatos.
[00099] A figura 7 ilustra os valores de hash 700 dos blocos de candidatos B(x, y) na combinação de blocos com base em hash, onde x e y indicam coordenadas horizontais e verticais, respectivamente, para a posição superior esquerda de um dado bloco de candidatos. Os blocos de candidatos possuem valores de hash que são determinados usando-se uma função de hash h(). Para um bloco de candidatos B(x, y) em uma imagem de referência, o codificador determina um valor de hash h(B) para o bloco de candidatos a partir dos valores de amostra de entrada da imagem de referência. O codificador pode determinar valores de hash para todos os blocos de candidatos na imagem de referência. Ou, o codificador pode excluir alguns blocos de candidatos.
[000100] Em geral, a função de hash h() gera n valores possíveis de hash, designados h0 a hn-1. Para um dado valor de hash, os blocos de candidatos com esse valor de hash são agrupados. Por exemplo, na figura 7, os blocos de candidatos 5(1266, 263), 5(1357, 365), 6(1429, 401), 5(502, 464), ... possuem o valor de hash h0. Os grupos podem incluir diferentes números de blocos de candidatos. Por exemplo, na figura 7, o grupo do valor de hash h4 inclui um único bloco de candidatos, enquanto o grupo do valor de hash h0 inclui mais de quatros blocos de candidatos.
[000101] Desse modo, os possíveis blocos de candidatos são distribuídos dentro de n categorias. Por exemplo, se a função de hash h() produzir valores de hash de 12 bits, os blocos de candidatos são divididos em 212 = 4.096 categorias. O número de blocos de candidatos por valor de hash pode ser reduzido ainda mais eliminando-se blocos redundantes e idênticos a esse valor de hash ou removendo-se os blocos de candidatos que possuem determinados padrões de valores de amostra. Além disso, o codificador pode reduzir iterativamente o número de blocos de candidatos usando diferentes funções de hash.
[000102] A função de hash usada na combinação de blocos com base em hash depende da implantação. Uma função de hash pode produzir valores de hash com 8 bits, 12 bits, 16 bits, 24 bits, 32 bits ou algum outro número de bits. Se um valor de hash tiver menos bits, a estrutura de dados terá menos categorias, mas cada categoria pode incluir mais blocos de candidatos. Por outro lado, usando os valores de hash com mais bits tende a aumentar o tamanho da estrutura de dados que organiza os blocos de candidatos. Se um valor de hash possui mais bits, a estrutura de dados inclui mais categorias, mas cada categoria pode incluir menos blocos de candidatos. A função de hash h() pode ser uma função de hash criptográfica, parte de uma função de hash criptográfica, uma função de verificação de redundância cíclica ("CRC"), parte de uma CRC ou outra função de hash (por exemplo, usando operações de média e XOR para determinar a assinatura de um bloco de candidatos ou bloco atual). Alguns tipos de função de hash (por exemplo, função de CRC) mapeiam os blocos similares quanto a diferentes valores de hash, o que pode ser eficiente durante uma pesquisa de combinação bloco que corresponda exatamente a um bloco atual. Outros tipos de função de hash (por exemplo, uma função de hash sensível à localidade) mapeiam os blocos similares quanto ao mesmo valor de hash.
[000103] Durante a combinação de blocos com base em hash, com a função de hash h(), o codificador determina o valor de hash para o bloco atual Batual. Na figura 7, o valor de hash h(Batual) é h3. Usando o valor de hash de bloco atual, o codificador pode identificar os blocos de candidatos que possuem o mesmo valor de hash (mostrados na caixa destacada da figura 7) e remover os outros blocos de candidatos. Quando uma função de hash mapeia os blocos similares quanto a diferentes valores de hash, os blocos de candidatos identificados (o mesmo valor de hash que o bloco atual) incluem blocos que poderiam ser idênticos ao bloco atual. Quando uma função de hash mapeia os blocos similares quanto ao mesmo valor de hash, os blocos de candidatos identificados (mesmo valor de hash que o bloco atual) incluem blocos que poderiam ser idênticos ao bloco atual ou poderiam ser aproximações do bloco atual. De qualquer maneira, a partir desses blocos de candidatos identificados, o codificador também pode identificar um bloco correspondente para o bloco atual (por exemplo, usando operações de combinação de bloco na direção da amostra, usando uma segunda função de hash).
[000104] De maneira global, visto que as comparações de valor de hash são muito mais simples do que a combinação de bloco na direção da amostra, a combinação de blocos com base em hash pode tornar o processo de avaliação dos blocos de candidatos na(s) imagem(ns) de referência muito mais eficiente. Além disso, os valores de hash dos blocos de candidatos podem ser reutilizados na combinação de blocos com base em hash para diferentes blocos dentro de uma imagem durante a codificação. Nesse caso, o custo da computação dos valores de hash dos blocos de candidatos pode ser atenuado ao longo da combinação de blocos baseada nas operações de hash em toda a imagem, em outras imagens que usam a mesma imagem de referência e em outras decisões por parte do codificador que usam os valores de hash.
B. Estruturas de Dados para Combinação de Blocos com base em Hash.
[000105] Em algumas implantações exemplares, o codificador usa uma estrutura de dados que organiza os blocos de candidatos de acordo com seus valores de hash. A estrutura de dados pode ajudar a tornar a combinação de blocos com base em hash computacionalmente mais eficiente. A estrutura de dados implanta, por exemplo, um dicionário de hash de bloco ou tabela de hash, conforme descrito aqui.
[000106] A figura 8a ilustra um exemplo de estrutura de dados 800 que organiza os blocos de candidatos para combinação de blocos com base em hash. Para a função de hash h(), os n valores possíveis de hash são h0 a hn-1. Os blocos de candidatos com o mesmo valor de hash são classificados na mesma lista de bloco de candidatos. Uma dada lista de bloco de candidatos pode incluir zero ou mais entradas. Por exemplo, a lista de bloco de candidatos para o valor de hash h2 não possui nenhuma entrada, a lista para o valor de hash h6, possui duas entradas e a lista para o valor de hash h1 possui mais que quatro entradas.
[000107] Uma entrada (hi, k) inclui informações para o bloco kth de candidatos com o valor de hash hi. Conforme mostrado na figura 8b, uma entrada em uma lista de bloco de candidatos pode incluir o endereço de um bloco B(x, y) (por exemplo, coordenadas horizontais e verticais para a posição esquerda superior do bloco). Ou, conforme mostrado na figura 8c, uma entrada em uma lista de bloco de candidatos pode incluir o endereço de um bloco B(x, y) e um valor de hash de uma segunda função de hash, a qual pode ser usada para a combinação iterativa de blocos com base em hash.
[000108] Durante a combinação de blocos com base em hash para um bloco atual, o codificador determina o valor de hash de bloco atual h(Batual). O codificador retém a lista de bloco de candidatos com o mesmo valor de hash e descarta as outras listas n-1. Para selecionar o bloco correspondente, o codificador pode comparar o bloco atual com o(s) bloco(s) de candidatos, se houver, na lista retida de bloco de candidatos. Desse modo, com uma simples operação de consulta usando o valor de hash h(Batual), o codificador pode eliminar (n-l)/n dos blocos de candidatos (em média) e focar nos blocos de candidatos 1/n restantes (em média) na lista retida, reduzindo de modo significativo o número de operações de combinação de bloco na direção da amostra.
[000109] Diferentes estruturas de dados podem ser usadas para diferentes imagens de referência. De maneira alternativa, uma entrada em um bloco de candidatos da estrutura de dados armazena informações indicativas da imagem de referência que inclui o bloco de candidatos, as quais podem ser usadas na combinação de blocos com base em hash.
[000110] Além disso, diferentes estruturas de dados podem ser usadas para diferentes tamanhos de blocos. Por exemplo, uma estrutura de dados inclui valores de hash para blocos de candidatos de 8x8, uma segunda estrutura de dados inclui valores de hash para blocos de candidatos 16x16, uma terceira estrutura de dados inclui valores de hash para blocos de candidatos de 32x32 e assim por diante. A estrutura de dados usada durante a combinação de blocos com base em hash depende do tamanho do bloco atual. De maneira alternativa, uma única estrutura unifica de dados pode ser usada para diferentes tamanhos de blocos. Uma função de hash pode produzir um valor de hash de n bits, onde m bits do valor de hash n bits indicam um valor de hash dentre os possíveis blocos de um dado tamanho de bloco de acordo com uma função de hash de m bits, e n-m bits os restantes do valor de hash n bits indicam o determinado tamanho do bloco. Por exemplo, os primeiros dois bits de uma função de hash 14 bits pode indicar um tamanho de bloco, enquanto os restantes 12 bits indicam um valor de hash de acordo com uma função de hash de 12 bits. Ou, uma função de hash pode produzir um valor de hash de m bits independentemente do tamanho do bloco, e uma entrada em um bloco de candidatos da estrutura de dados armazena informações indicativas do tamanho de bloco do bloco de candidatos, as quais podem ser usadas na combinação de blocos com base em hash.
[000111] Para uma imagem de alta resolução, a estrutura de dados pode armazenar informações que representam um número muito grande de blocos de candidatos. Para reduzir a quantidade de memória usada para a estrutura de dados, o codificador pode eliminar valores redundantes. Por exemplo, o codificador pode omitir a adição de blocos idênticos à estrutura de dados. Em geral, reduzir o tamanho da estrutura de dados por meio da eliminação de blocos idênticos pode prejudicar a eficiência da codificação. Desse modo, ao decidir se deve eliminar os blocos idênticos, o codificador pode balancear o tamanho de memória da estrutura de dados e a eficiência da codificação. O codificador também pode eliminar os blocos de candidatos, dependendo do conteúdo dos blocos.
C. Combinação Iterativa de Blocos com base em Hash.
[000112] Quando o codificador usa uma única função de hash com n valores possíveis de hash, o codificador pode excluir n-1 listas de blocos de candidatos com base no valor de hash de um bloco atual, mas o codificador ainda pode precisar executar operações de combinação de bloco na direção da amostra no(s) bloco(s) de candidatos restante(s), se houver, para a lista com o valor de hash correspondente. Além disso, durante a atualização da estrutura de dados que organiza os blocos de candidatos, o codificador pode precisar executar operações de combinação de bloco na direção da amostra para identificar blocos idênticos. De uma maneira coletiva, essas operações de combinação de bloco na direção da amostra podem ser computacionalmente intensivas.
[000113] Portanto, em algumas implantações exemplares, o codificador usa combinação iterativa de blocos com base em hash. A combinação iterativa de blocos com base em hash pode acelerar o processo de combinação de blocos e também acelerar o processo de atualização da estrutura de dados que organiza os blocos de candidatos.
[000114] A combinação iterativa de blocos com base em hash usa múltiplos valores de hash determinados com diferentes funções de hash. Para um bloco B (bloco atual ou bloco de candidatos), em adição ao valor de hash h(B), o codificador determina outro valor de hash h'(B) usando uma função de hash diferente h'(). Com o primeiro valor de hash h(Batual) para um bloco atual, o codificador identifica os blocos de candidatos que possuem o mesmo valor de hash para a primeira função de hash h(). Para excluir alguns desses blocos de candidatos identificados, o codificador usa um segundo valor de hash h'(Batual) para o bloco atual, o qual é determinado usando-se uma função de hash diferente. O codificador compara o segundo valor de hash h'(Batual) com os segundos valores de hash para os blocos de candidatos previamente identificados (os quais possuem o primeiro valor de hash igual), de modo a eliminar mais blocos de candidatos. Uma tabela de hash rastreia os valores de hash para os blocos de candidatos de acordo com as diferentes funções de hash.
[000115] No exemplo da figura 8a, se h(Batual) = h3, o codificador seleciona os blocos de candidatos com a entrada 3, 0, entrada 3, 1, entrada 3, 2, entrada 3, 3, ... para um maior refinamento. Conforme mostrado na figura 8c, para um bloco de candidatos B, uma entrada inclui um endereço de bloco e um segundo valor de hash h'(B) da função de hash h'(). O codificador compara o segundo valor de hash h'(Batual) com o bloco atual com os segundos valores de hash h'(B) para os respectivos blocos de candidatos com a entrada 3, 0, entrada 3, 1, entrada 3, 2, entrada 3, 3, Com base nos resultados das segundas comparações de valor de hash, o codificador pode excluir mais blocos de candidatos, deixando os blocos de candidatos, se houver, que possuem primeiro e segundo valores combinação de hash h(Batual) e h'(Batual), respectivamente. O codificador pode efetuar combinação de bloco na direção da amostra em quaisquer blocos de candidatos remanescentes para selecionar um bloco correspondente.
[000116] As figuras 9a-9c mostram outro exemplo de combinação iterativa de blocos com base em hash que usa uma estrutura de dados diferente. A estrutura de dados 900 na figura 9a organiza os blocos de candidatos como primeiro valor de hash a partir de uma primeira função de hash h(), a qual possui nl valores possíveis de hash. A estrutura de dados 900 inclui listas de valores de hash a partir de h0 ... hn\.\. No exemplo, o codificador determina um primeiro valor de hash h(Batual) = h2 para o bloco atual e seleciona a lista para h2 a partir da estrutura 900.
[000117] Conforme mostrado na figura 9b, a lista 910 para h2 inclui múltiplas listas que também organizam os blocos de candidatos restantes como segundo valor de hash de uma segunda função de hash h'(), a qual possui n2 valores possíveis de hash. A lista 910 inclui listas para os valores de hash a partir de h’()...h’n2-1, cada um incluindo entradas com endereços de blocos (por exemplo, coordenadas horizontais e verticais para as posições esquerda superior dos respectivos blocos de candidatos), conforme mostrado para a entrada 920 na figura 9c. No exemplo, o codificador determina um segundo valor de hash h'(Batual) = h'0 para o bloco atual e seleciona a lista para h'0 a partir da lista 910. Para os blocos de candidatos na lista para h'0, o codificador pode efetuar a combinação de bloco na direção da amostra para selecionar um bloco correspondente. Neste exemplo, as listas para os segundos valores de hash são específicas a uma dada lista para o primeiro valor de hash. De maneira alternativa, existe uma série de listas para os segundos valores de hash e o codificador identifica quaisquer blocos de candidatos que estão 1 na lista correspondente aos primeiros valores de hash e também 2 na lista correspondente aos segundos valores de hash.
[000118] Além da combinação de blocos com base em hash, a segunda função de hash h'( ) pode ser usada para simplificar o processo de atualização da estrutura de dados que organiza os blocos de candidatos. Por exemplo, quando o codificador verifica se um novo bloco de candidatos é idêntico a um bloco de candidatos já representado na estrutura de dados, o codificador pode usar múltiplos valores de hash com diferentes funções de hash para eliminar blocos não idênticos. Para blocos de candidatos remanescentes, o codificador pode efetuar a combinação de bloco na direção da amostra para identificar quaisquer blocos idênticos.
[000119] Nos exemplos anteriores, a combinação iterativa de blocos com base em hash e a atualização usam duas funções de hash diferentes. De maneira alternativa, o codificador usa três, quatro ou mais funções de hash para acelerar ainda mais a combinação de blocos com base em hash ou eliminar blocos não idênticos e desse modo, reduzir o número de operações de combinação de bloco na direção da amostra. Além disso, para um codificador de baixa complexidade ou para processos mais rápidos de tomada de decisão, o codificador pode pular operações de combinação de bloco na direção da amostra quando os valores de hash corresponderem. Para as funções de hash com um grande número de valores possíveis de hash, há uma alta probabilidade de que dois blocos sejam idênticos se os valores de hash para os dois blocos corresponderem. Em particular, em algumas implantações exemplares de decisões por parte do codificador que serão descritas abaixo, o codificador considera, como os resultados da combinação de blocos com base em hash, se os valores de hash se correspondem, mas não efetua quaisquer operações de combinação de bloco na direção da amostra.
VII. Gerenciando o Tamanho da Tabela de Hash
[000120] Esta seção apresenta várias abordagens para gerenciar o tamanho das tabelas de hash usadas na combinação de blocos com base em hash. Em algumas soluções, o tamanho de uma tabela de hash é reduzido eliminando-se (omitindo) os blocos de candidatos que possuem determinados padrões de valores de amostra (por exemplo, eliminando-se os blocos homogêneos). Em uma implantação particular, para cada um dos múltiplos blocos de candidatos (por exemplo, em uma imagem de referência), o codificador avalia se o bloco de candidatos satisfizer um critério de complexidade. Em caso afirmativo, o codificador determina um valor de hash de bloco para o bloco de candidatos e adiciona o valor de hash de bloco a uma tabela de hash. O valor de hash de bloco pode ser computado usando-se valores de amostra original ou valores de amostra reconstruída. Se o bloco de candidatos não satisfizer o critério de complexidade, o codificador não determinar um valor de hash de bloco para o bloco de candidatos. Por exemplo, o critério de complexidade pode ser satisfeito para um dado bloco de candidatos se (a) pelo menos uma fileira do dito bloco de candidatos tiver valores de amostra não uniformes e/ou (b) se pelo menos uma coluna do dito bloco de candidatos tiver valores de amostra não uniformes. Com esse critério, o codificador pode eliminar blocos uniformes (blocos homogêneos), os blocos com fileiras de valores de amostra uniformes (blocos horizontalmente homogêneos) e blocos com colunas de valores de amostra uniformes (blocos verticalmente homogêneos). De maneira mais geral, ao avaliar se um dado bloco de candidatos satisfaz o critério de complexidade, o codificador pode computar uma métrica de complexidade para o bloco de candidatos e comparar essa métrica de complexidade com um limiar.
[000121] As figuras 10a-10c mostram os padrões de blocos de candidatos que um codificador pode eliminar durante a construção da tabela de hash antes de um valor de hash de bloco para um bloco de candidatos ser adicionado a uma tabela de hash. A figura 10a mostra um bloco 1000 com valores de amostra uniformes. A figura 10b mostra um bloco 1010 cujas fileiras possuem valores de amostra uniformes (um bloco homogêneo horizontalmente), embora os valores possam ser diferentes de fileira para fileira. A figura 10c mostra um bloco (1020) cujas colunas possuem valores de amostra uniformes (um bloco verticalmente homogêneo), embora os valores possam ser diferentes de coluna para coluna. Por exemplo, para identificar esses padrões de blocos de candidatos, um codificador pode verificar se cada fileira ou cada coluna de um bloco de candidatos possui valores de amostra uniformes.
[000122] No entanto, excluir os blocos homogêneos (por exemplo, todos os blocos homogêneos) como candidatos na tabela de hash pode impactar negativamente os benefícios da combinação com base em hash em determinadas situações. Por exemplo, alguns algoritmos de codificação operam mais eficientemente quando uma correspondência exata é encontrada (por exemplo, ao término do processo de combinação assim que uma combinação de hash for encontrada). Além disso, excluir blocos homogêneos como candidatos pode reduzir a probabilidade de uma correspondência exata.
[000123] Portanto, aprimoramentos na eficiência de codificação podem ser realizados retendo-se pelo menos alguns blocos homogêneos na tabela de hash.
[000124] Nas abordagens apresentadas nesta seção, o tamanho da tabela de hash é gerenciado para que alguns blocos homogêneos sejam incluídos na tabela de hash (o que pode, por exemplo, aumentar as chances de encontrar uma combinação de hash e/ou uma correspondência exata e, consequentemente, melhorar a eficiência de codificação) enquanto outros blocos homogêneos ainda são excluídos. Por exemplo, a inclusão de apenas alguns blocos homogêneos (por exemplo, apenas uma proporção relativamente pequena de blocos homogêneos em uma dada imagem) ainda pode prover os benefícios de eficiência de codificação aprimorada e ao mesmo tempo proporcionar o benefício de uma tabela de hash menor.
[000125] Em algumas implantações, apenas blocos homogêneos que satisfazem um critério de seleção homogênea são incluídos na tabela de hash. O critério de seleção homogênea pode incluir verificar se as coordenadas de um dado bloco homogêneo estão alinhadas com divisões particulares de uma imagem. Por exemplo, uma imagem de referência pode ser dividida em uma grade com um espaçamento horizontal e vertical particular (por exemplo, uma grade de 16 por 16 pixels, uma grade de 16 por 8 pixels, etc.). Se um bloco homogêneo estiver alinhado com a grade (por exemplo, se uma coordenada inicial de pixel do bloco estiver horizontalmente e/ou verticalmente alinhada), ele poderá ser selecionado como um bloco que corresponde ao critério. Em outras palavras, considerando-se um bloco com dimensões de largura por altura (W x H) que começa a partir das coordenadas (x, y). O critério de seleção homogênea pode ser definido como:x % M == 0 && y % N == 0
[000126] onde M e N são números predefinidos (por exemplo, o mesmo número ou números diferentes). Outra maneira de começar o critério de seleção é:x & (M - 1) == 0 && Y & (N - 1) == 0
[000127] onde M e N são ambos potência de 2. Em algumas implantações, M e N são ambos 16. Por exemplo, se um bloco homogêneo estivesse nas coordenadas 32, 32, então ele seria selecionado quando usasse os valores M = 16 e N = 16 (como seria com os blocos em 0,0 e 32,0 e 64,0 e 0,32 e 0,64 e assim por diante), enquanto um bloco homogêneo nas coordenadas 35, 32 não seria selecionado. Em algumas implantações, M é definido na largura (W) dos blocos e N é definido na altura (H) dos blocos.
[000128] A figura 11a mostra uma técnica 1100 para selecionar blocos homogêneos particulares durante a construção da tabela de hash. Um codificador de imagem ou um codificador de vídeo, tal como aquele descrito com referência à figura 3 ou às figuras 4a-4b, pode executar a técnica 1100.
[000129] O codificador obtém 1110 o próximo bloco de candidatos e avalia 1120 se o bloco de candidatos satisfizer um critério de complexidade. Por exemplo, em algumas implantações exemplares, o critério de complexidade é satisfeito se (a) pelo menos uma fileira do dito bloco de candidatos tiver valores de amostra não uniformes e/ou (b) se pelo menos uma coluna do dito bloco de candidatos tiver valores de amostra não uniformes, e o critério de complexidade não é satisfeito se (a) o bloco tiver fileiras de valores de amostra uniformes (um bloco horizontalmente homogêneo) e/ou (b) se o bloco tiver colunas de valores de amostra uniformes (um bloco verticalmente homogêneo). Ou, de um modo mais geral, o codificador pode computar uma métrica de complexidade para o bloco de candidatos e em seguida comparar a métrica de complexidade com um limiar. Por exemplo, a métrica de complexidade é uma contagem de coeficientes AC diferentes de zero em uma posição horizontal diferente de zero e/ou uma posição vertical diferente de zero para o bloco de candidatos depois de uma transformação de frequência (por exemplo, DCT) e o limiar é zero. O critério de complexidade é satisfeito se houver quaisquer coeficientes AC diferentes de zero fora da fileira superior de coeficientes AC e da coluna esquerda dos coeficientes AC para o bloco de candidatos. De maneira alternativa, o codificador considera outra métrica de complexidade. O critério de complexidade pode ser avaliado, pelo menos em parte, comparando-se os valores de hash de seções (por exemplo, fileiras, colunas, subblocos) do bloco de candidatos.
[000130] Se o bloco de candidatos satisfizer o critério de complexidade, o codificador determinará 1130 um valor de hash de bloco para o bloco de candidatos e adicionará 1140 o valor de hash de bloco à tabela de hash. O valor de hash de bloco pode ser determinado usando-se qualquer abordagem de hash.
[000131] Se o bloco de candidatos não satisfizer o critério de complexidade (por exemplo, o bloco de candidatos é horizontalmente homogêneo e/ou verticalmente homogêneo), o bloco de candidatos será verificado para determinar 1160 se ele satisfaz um critério de seleção homogênea. Se o bloco de candidatos satisfizer o critério de seleção homogênea, o codificador determinará 1130 um valor de hash de bloco para o bloco de candidatos e adicionará 1140 o valor de hash de bloco a uma tabela de hash. O valor de hash de bloco pode ser determinado usando-se qualquer abordagem de hash. Por outro lado, (se o bloco de candidatos não satisfizer o critério de seleção homogênea), nenhum valor de hash de bloco para o bloco de candidatos será adicionado à tabela de hash.
[000132] Em algumas implantações, o bloco de candidatos satisfaz o critério de seleção homogênea quando pelo menos uma coordenada inicial x e y (por exemplo, uma coordenada de pixel esquerda superior) do bloco de candidatos é igualmente divisível por um valor predeterminado. Por exemplo, se o valor predeterminado for 16, então um valor de coordenada x que é 0, 16, 32, 48, etc. satisfaria a condição. O valor predeterminado pode ser diferente para as coordenadas x e y. Em algumas implantações, um valor predeterminado para a coordenada x é definido na largura do bloco de candidatos e um valor predeterminado para a coordenada y é definido na altura do bloco de candidatos.
[000133] O codificador determina 1150 se deve continuar com o próximo bloco de candidatos. Em caso afirmativo, o codificador continua obtendo 1110 o bloco de candidatos seguinte e avaliando 1120 se esse bloco de candidatos satisfaz o critério de complexidade. Desse modo, o codificador pode determinar de maneira seletiva os valores de hash de bloco para múltiplos blocos de candidatos (por exemplo, para os blocos de candidatos de uma imagem, tal como uma imagem de referência), verificando se os respectivos blocos de candidatos satisfazem o critério de complexidade e o critério de seleção homogênea.
VIII. Determinação da Resolução de VM.
[000134] Esta seção apresenta várias abordagens para a determinação adaptativa da resolução do vetor de movimento ("VM") durante a decodificação, dependendo dos resultados da combinação de blocos com base em hash (por exemplo, valores de hash correspondentes). Ao selecionar a precisão apropriada dos valores de VM para a resolução de VM durante a codificação, essas abordagens podem facilitar a compressão que é eficaz em termos de desempenho de distorção de taxa e/ou eficiência computacional da codificação e decodificação. A precisão de VM pode ser determinada para uma imagem, um bloco, uma fração, etc.
A. Diferentes Precisões de VM.
[000135] Durante a codificação do conteúdo de vídeo artificialmente criado, os valores de VM geralmente representam o deslocamento espacial de amostras de número inteiro (precisão de VM de número inteiro) e alguns valores de VM representam o deslocamento espacial de amostras fracionadas (precisão fracional de VM). Isso provê oportunidades para determinar com eficiência a precisão de VM (por exemplo, para uma imagem inteira de cada vez ou para uma porção de uma imagem) e aumentar de maneira global o seu desempenho.
[000136] A figura 12a mostra a compensação de movimento com um VM 1220 que possui um deslocamento espacial de amostra em número inteiro. O VM 1220 indica um deslocamento espacial de quatro amostras para a esquerda e de uma amostra para cima, em relação à posição colocalizada 1210 em uma imagem de referência de um bloco atual. Por exemplo, para um bloco atual de 4x4 na posição 64, 96 em uma imagem atual, o VM 1220 indica uma região de predição de 4x4 1230 cuja posição é 60, 95 na imagem de referência. A região de predição 1230 inclui valores de amostra reconstruídos em posições de amostra em número inteiro na imagem de referência. Um codificador ou decodificador não precisa efetuar a interpolação para determinar os valores da região de predição 1230.
[000137] A figura 12b mostra a compensação de movimento com um VM 1221 que possui um deslocamento espacial de amostra fracionada. O VM 1221 indica um deslocamento espacial de 3,75 amostras para a esquerda e 0,5 amostra para cima, em relação à posição colocalizada 1210 em uma imagem de referência de um bloco atual. Por exemplo, para um bloco atual de 4x4 na posição 64, 96 em uma imagem atual, o VM 1221 indica uma região de predição de 4x4 1231 cuja posição é 60.25, 95.5 na imagem de referência. A região de predição 1231 inclui valores de amostra interpolados em posições de amostra fracionada na imagem de referência. Um codificador oudecodificador executa a interpolação para determinar os valores de amostra da região de predição 1231. Quando os deslocamentos espaciais de amostra fracionada são permitidos, há mais regiões de predição candidato que podem corresponder a um bloco atual e desse modo, a qualidade de predição compensada por movimento geralmente aumenta, pelo menos para alguns tipos de conteúdo de vídeo (por exemplo, conteúdo de vídeo natural).
B. Representação de Valores de VM.
[000138] Os valores de VM são tipicamente representados usando- se valores de números inteiros cujo significado depende da precisão de VM. Para a precisão de VM de amostra em número inteiro, por exemplo, um valor de número inteiro igual a 1 indica um deslocamento espacial de 1 amostra, um valor de número inteiro igual a 2 indica um deslocamento espacial de 2 amostras e assim por diante. Para a precisão de VM de amostra de 1/4, por exemplo, um valor de número inteiro igual a 1 indica um deslocamento espacial de 0,25 amostra. Os valores de números inteiros iguais a 2, 3, 4 e 5 indicam deslocamentos espaciais de 0,5, 0,75, 1,0 e 1,25 amostra, respectivamente. Independentemente da precisão de VM, o valor de número inteiro pode indicar uma magnitude do deslocamento espacial e um valor de sinalização separada pode indicar se o deslocamento é negativo ou positivo. O componente de VM horizontal e o componente de VM vertical de um dado valor de VM podem ser representados usando-se dois valores de número inteiro. Desse modo, o significado de dois valores de número inteiro que representam um valor de VM depende da precisão do VM. Por exemplo, para um valor de VM que possui um deslocamento horizontal de 2 amostras e nenhum deslocamento vertical, se a precisão de VM for uma precisão de VM de amostra de 1/4, o valor de VM será representado como (8, 0). No entanto, se a precisão de VM for uma precisão de VM de amostra em número inteiro, o valor de VM será representado como (2, 0).
[000139] Os valores de VM em um fluxo de bits de dados de vídeo codificado são tipicamente codificados por entropia (por exemplo, com base em um componente de VM). Um valor de VM também pode ser diferencialmente codificado em relação a um valor de VM estimado (por exemplo, com base em um componente de VM). Em vários casos, o valor de VM se iguala ao valor de VM estimado, de modo que o valor diferencial de VM é zero, o qual pode ser codificado de maneira bem eficiente. Um valor diferencial de VM (ou valor de VM, se a predição de VM não for usada) pode ser codificado por entropia usando-se codificação Exponencial Golomb, codificação aritmética, binária e adaptativa ao contexto ou outra forma de codificação por entropia. Embora a relação exata entre o valor de VM (ou valor diferencial de VM) e os bits codificados dependa da forma usada de codificação por entropia, em geral, os valores menores são codificados de maneira mais eficiente (ou seja, usando-se menos bits) porque eles são mais comuns, e os valores maiores são codificados de maneira menos eficiente (ou seja, usando-se mais bits) porque eles são menos comuns.
C. Precisão Adaptativa de VM - Introdução.
[000140] Em suma, as duas seções anteriores demonstram que o uso dos valores de VM com precisão de VM de amostra em número inteiro tende a reduzir a taxa de bit associada com os valores de sinalização de VM e a complexidade computacional de codificação e decodificação (por evitar a interpolação de valores de amostra em posições de amostra fracionada nas imagens de referência), mas também pode reduzir a qualidade de predição compensada por movimento, pelo menos para alguns tipos de conteúdo de vídeo. Por outro lado, o uso dos valores de VM com precisão fracional de VM de amostra tende a aumentar a taxa de bit associada com os valores de sinalização de VM e a aumentar a complexidade computacional da codificação e decodificação (por incluir a interpolação de valores de amostra em posições de amostra fracionada nas imagens de referência), mas também pode melhorar a qualidade da predição compensada por movimento, pelo menos para alguns tipos de conteúdo de vídeo. Em geral, a complexidade computacional, a taxa de bit para os valores de sinalização de VM e a qualidade da predição compensada por movimento aumentam à medida que a precisão de VM aumenta (por exemplo, de amostra em número inteiro para amostra de % ou de amostra de % para amostra de % ) até um ponto em que a redução recomeça.
[000141] Durante a codificação do conteúdo de vídeo artificialmente criado, os custos adicionais de precisão fracional de VM de amostra (em termos de taxa de bit e complexidade computacional) podem ser injustificados. Por exemplo, se a maioria dos valores de VM representarem deslocamentos espaciais de amostra em número inteiro e alguns poucos valores de VM representarem deslocamentos espaciais de amostra fracionada, os custos adicionais da precisão fracional de VM de amostra não serão plausíveis. O codificador pode pular a pesquisa em posições de amostra fracionada (e operações de interpolação para determinar os valores de amostra nessas posições) durante a estimativa de movimento. Para esse conteúdo, a taxa de bit e a complexidade computacional podem ser reduzidas sem que haja uma degradação significativa na qualidade da predição compensada por movimento, por meio do uso dos valores de VM com precisão de VM de amostra em número inteiro.
[000142] Visto que a precisão fracional de VM de amostra ainda pode ser útil para outros tipos de conteúdo de vídeo (por exemplo, vídeo natural capturado por câmera), um codificador e decodificador podem ser adaptados para comutar entre as precisões de VM. Por exemplo, um codificador e decodificador podem usar a precisão de VM de amostra em número inteiro para conteúdo de vídeo artificialmente criado, mas usar a precisão fracional de VM de amostra (tal como precisão de VM de amostra de %) para o conteúdo de vídeo natural. As abordagens que um codificador pode seguir ao selecionar a precisão de VM serão descritas na próxima seção. O codificador pode sinalizar a precisão selecionada de VM para o decodificador usando um ou mais elementos de sintaxe do fluxo de bits.
[000143] Em uma abordagem para sinalizar a precisão de VM, quando a seleção adaptativa de precisão de VM é permitida, o codificador seleciona uma precisão de VM com base na fração. Um valor de sinalização em uma definição de parâmetro de sequência ("SPS"), uma definição de parâmetro de imagem ("PPS") ou em outra estrutura de sintaxe indica se a seleção adaptativa de precisão de VM é permitida. Em caso afirmativo, um ou mais elementos de sintaxe em um cabeçalho de fração para uma dita fração indicam a precisão selecionada de VM para os blocos dessa fração. Por exemplo, um valor de sinalização de 0 indica uma precisão de VM de amostra de % e um valor de sinalização de 1 indica uma precisão de VM de amostra em número inteiro.
[000144] Em outra abordagem para sinalizar a precisão de VM, o codificador seleciona uma precisão de VM com base na imagem ou com base na fração sis. Um elemento de sintaxe em uma PPS indica um dentre três modos de precisão de VM: (0) precisão de VM de amostra de % para os valores de VM de fração(ões) de uma imagem associada com a PPS, (1) precisão de VM de amostra em número inteiro para os valores de VM de fração(ões) de uma imagem associada com a PPS, ou (2) precisão de VM adaptativa à fração que depende de um valor de sinalização indicado pelo cabeçalho de fração, onde o valor de sinalização doe cabeçalho de fração pode indicar precisão de VM de amostra de % ou precisão de VM de amostra em número inteiro para os valores de VM da fração.
[000145] Ainda em outra abordagem para sinalizar a precisão de VM, quando a seleção adaptativa de precisão de VM é permitida, o codificador seleciona uma precisão de VM com base na UC. Um ou mais elementos de sintaxe em uma estrutura para uma dada UC indicam a precisão selecionada de VM para os blocos dessa UC. Por exemplo, um valor de sinalização na estrutura de sintaxe da UC para a UC indica se os valores de VM para todas as UPs associadas com a UC possuem precisão de VM de amostra em número inteiro ou precisão de VM de amostra de %.
[000146] Em qualquer uma dessas abordagens, o codificador e o decodificador podem usar diferentes precisões de VM para componente de VM horizontal e vertical. Isso pode ser útil durante a decodificação do conteúdo de vídeo artificialmente criado que foi escalado horizontalmente ou verticalmente (por exemplo, usando-se a precisão de VM de amostra em número inteiro em uma dimensão não escalada e usando-se a precisão fracional de VM de amostra em uma dimensão em escala). Em algumas implantações exemplares, se o controle de taxa não puder ser obtido exclusivamente através do ajuste dos valores de PQ, um codificador pode redimensionar o vídeo horizontalmente ou verticalmente para reduzir a taxa de bit e em seguida, codificar o vídeo redimensionado. No decodificador, o vídeo é ajustado novamente nas suas dimensões originais depois da decodificação. O codificador pode sinalizar a precisão de VM para os componentes de VM horizontal e também sinalizar a precisão de VM para os componentes de VM vertical para o decodificador.
[000147] De modo mais geral, quando a seleção adaptativa de precisão de VM é permitida, o codificador seleciona uma precisão de VM e sinaliza a precisão selecionada de VM de algum modo. Por exemplo, um valor de sinalização em uma SPS, PPS ou outra estrutura de sintaxe pode indicar se a seleção adaptativa de precisão de VM é permitida. Quando a precisão adaptativa de VM é permitida, um ou mais elementos de sintaxe em sintaxe de camada em sequência, sintaxe de camada de GOP, sintaxe de camada de imagem, sintaxe de camada de fração, sintaxe de camada de mosaico, sintaxe de camada de bloco ou outra estrutura de sintaxe podem indicar a precisão selecionada de VM para componentes de valores de VM horizontal e vertical. Ou, um ou mais elementos de sintaxe em sintaxe de camada em sequência, sintaxe de camada de GOP, sintaxe de camada de imagem, sintaxe de camada de cabeçalho de fração, sintaxe de camada de dados de fração, sintaxe de camada de mosaico, sintaxe de camada de bloco ou outra estrutura de sintaxe podem indicar precisões de VM para diferentes componentes de VM. Quando há duas precisões de VM disponíveis, um valor de sinalização pode indicar a seleção entre as duas precisões de VM. Quando há mais precisões de VM disponíveis, um valor de número inteiro pode escolher entre essas precisões de VM.
[000148] Além das modificações para sinalizar/analisar os elementos de sintaxe que indicam precisão(ões) selecionada(s) de VM, a decodificação pode ser modificada para mudar como os valores de VM sinalizados são interpretados dependendo da precisão selecionada de VM. Os detalhes de como os valores de VM são codificados e reconstruídos podem variar dependendo da precisão de VM. Por exemplo, quando a precisão de VM é precisão de amostra em número inteiro, os valores de VM estimados podem ser arredondados para o número inteiro mais próximo e os valores de VM diferencial podem indicar desvios de amostra em número inteiro. Ou, quando a precisão de VM é a precisão de VM de amostra de %, os valores estimados de VM podem ser arredondados para o desvio de amostra de % mais próximo, e os valores de VM diferencial podem indicar desvios de amostra de %. Ou, os valores de VM podem ser sinalizados de alguma outra forma. Quando os valores de VM possuem uma precisão de VM de amostra em número inteiro e o vídeo usa amostragem de croma 4:2:2 ou 4:2:0, os valores de croma de VM podem ser derivados por escalagem, etc., o que pode resultar em deslocamentos de amostra de % para croma. Ou os valores de croma de VM podem ser arredondados para os valores de número inteiro.
[000149] De maneira alternativa, o codificador não muda como os valores de VM são estimados ou como as diferenças de VM são sinalizadas no fluxo de bits, nem o decodificador muda como os valores de VM são estimados ou como as diferenças de VM são reconstruídas, mas a interpretação dos valores de VM reconstruídos muda dependendo da precisão selecionada de VM. Se a precisão selecionada de VM for a precisão de amostra em número inteiro, um valor de VM reconstruído é escalonado por um fator de 4 antes de ser usado no processo de compensação de movimento (o qual opera na precisão de amostra de um quarto). Se a precisão selecionada de VM for a precisão de amostra de um quarto, o valor de VM reconstruído não é escalonado antes de ser usado no processo de compensação de movimento.
D. Determinação da Resolução de VM usando categorias.
[000150] Quando a resolução de VM pode ser adaptada durante a codificação de vídeo, um codificador seleciona uma precisão de VM para uma unidade de vídeo (por exemplo, a precisão de VM para um ou para os dois componentes de valores de VM da unidade). O codificador pode selecionar a precisão de VM a ser usada com base nos resultados de classificação dos blocos em uma pluralidade de categorias, o que pode incluir a combinação de blocos com base em hash (por exemplo, valores de hash correspondentes) em uma ou mais das operações de classificação. A seleção da precisão de VM também pode depender de outros fatores, tal como a classificação de blocos como blocos uniformes (por exemplo, blocos horizontalmente e/ou verticalmente homogêneos). Essas abordagens podem prover uma maneira computacionalmente eficiente para selecionar precisões de VM apropriadas.
1. Técnicas Exemplares para Selecionar a Precisão de VM.
[000151] A figura 13 mostra uma técnica geralizada 1300 para selecionar a precisão de VM com base nos resultados da classificação de bloco. A técnica 1300 pode ser executada por um codificador, tal como aquele descrito com referência à figura 3 ou às figuras 4a e 4b ou por outro codificador.
[000152] O codificador codifica o vídeo para produzir dados codificados e, em seguida, envia os dados codificados em um fluxo de bits. Como parte da codificação, o codificador divide 1310 uma unidade do vídeo em múltiplos blocos (por exemplo, divide uma imagem, fração ou outra unidade de vídeo). Em seguida, para cada um dos blocos, o codificador classifica 1320 o bloco em uma pluralidade de categorias. As categorias podem compreender uma categoria homogênea que usa um critério de classificação homogênea e/ou uma categoria de combinação de hash que usa um critério de classificação de combinação com base em hash. Com base nas classificações (por exemplo, contagens de blocos em uma ou mais categorias da pluralidade de categorias), o codificador determina 1330 a precisão de VM para a unidade do vídeo. Por exemplo, o codificador pode determinar se deve usar a precisão de VM de número inteiro ou a precisão fracional de VM (por exemplo, precisão de VM de amostra de %).
[000153] A figura 14 mostra a técnica 1400 para efetuar a classificação de bloco usada durante a seleção da precisão de VM. A técnica 1400 pode ser executada por um codificador, tal como aquele descrito com referência à figura 3 ou às figuras 4a e 4b ou por outro codificador. A técnica 1400 pode ser usada para implantar a classificação de bloco 1320 discutida acima em relação à figura 13.
[000154] Para classificar um bloco, a técnica 1400 primeiramente designa o bloco para uma categoria de todos os blocos 1410. A atribuição do bloco na categoria de todos os blocos pode ser efetuada incrementando-se uma contagem de bloco associada com a categoria de todos os blocos em um.
[000155] Em seguida, a técnica 1400 determina se o bloco corresponde a 1420 um bloco colocalizado em uma imagem de referência (por exemplo, se ele corresponde a um bloco em pelo menos uma ou mais imagens de referência usadas pelo bloco) e em caso afirmativo, designa o bloco para uma categoria de combinação colocalizada 1430. A atribuição do bloco na categoria de combinação colocalizada pode ser efetuada incrementando-se uma contagem de bloco associada com a categoria de combinação colocalizada em um.
[000156] Se o bloco não corresponder a um bloco colocalizado em uma imagem de referência, a técnica 1400 avança para verificar 1440 se o bloco é um bloco homogêneo (por exemplo, se o bloco satisfizer um critério de classificação homogênea, o que pode ser satisfeito se o bloco for horizontalmente homogêneo e/ou verticalmente homogêneo), e em caso afirmativo, designa o bloco para a categoria homogênea 1450. A atribuição do bloco na categoria homogênea pode ser efetuada incrementando-se uma contagem de bloco associada com a categoria homogênea em um.
[000157] Se o bloco não for um bloco homogêneo, a técnica 1400 avança para verificar 1460 se o bloco satisfizer um critério de classificação de combinação com base em hash (por exemplo, se um valor de hash do bloco encontra-se em uma tabela de hash gerada a partir dos blocos de candidatos de uma ou mais imagens de referência) e em caso afirmativo, designa o bloco para uma categoria de combinação de hash 1470. A atribuição do bloco na categoria de combinação de hash pode ser efetuada incrementando-se uma contagem de bloco associada com a categoria de combinação de hash em um.
[000158] Assim que o bloco tiver sido classificado, a técnica 1400 continua classificando o próximo bloco 1480 se houver algum (por exemplo, de modo a classificar todos os blocos da unidade do vídeo).
[000159] A técnica 1400 pode ser efetuada para classificar múltiplos blocos de uma unidade de vídeo em uma pluralidade de categorias incrementando-se um contador associado com cada categoria quando um bloco for designado para a categoria.
[000160] Em algumas implantações, os blocos de uma imagem atual são classificados. A imagem atual pode ser dividida em blocos com largura não sobreposta (W) por altura (H). Em uma implantação, W=H=8. O codificador pode efetuar combinação de blocos com base em hash para todos os blocos na imagem atual. A extensão de pesquisa poderia ser uma (ou mais) imagens de referência para a imagem atual. Em uma implantação, a primeira imagem de referência na lista de imagem de referência 0 é usada para executar a combinação de hash.
[000161] Em algumas implantações, os blocos são classificados usando-se as seguintes quatro categorias. A primeira categoria é chamada de "T" (por exemplo, uma categoria de todos os blocos). Todos os blocos são designados para a categoria "T".
[000162] A segunda categoria é chamada de "C" (por exemplo, uma categoria de combinação colocalizada). Um bloco que corresponde a um bloco colocalizado em uma imagem de referência é designado para a categoria "C". Se mais de uma imagem de referência for usada, o bloco é designado apenas se ele corresponder a um bloco colocalizado em pelo menos uma das imagens de referência.
[000163] A terceira categoria é chamada de "S" (por exemplo, uma categoria homogênea ou "uniforme"). Um bloco que não tiver sido designado para a categoria "C" e que é homogêneo (por exemplo, horizontalmente e/ou verticalmente homogêneo) é designado para a categoria "S".
[000164] A quarta categoria é chamada de "M" (por exemplo, categoria de combinação de hash). Um bloco que que não tiver sido designado para categoria "C" ou para a categoria "S", mas que possui um valor de hash que se encontra em uma tabela de hash gerada a partir dos blocos de candidatos de uma ou mais imagens de referência é designado para uma categoria "M".
[000165] Nas implantações que usam as categorias "T," "C," "S" e "M", um CSMRate (por exemplo, um valor de taxa) pode ser calculado, o qual é: CSMRate = (C + S + M) / T
[000166] O CSMRate indica a porcentagem dos blocos "C," "S" e "M" na imagem (ou em outra unidade de vídeo). Um MédiaCSMRate também pode ser calculado, o qual é o valor de média do CSMRate para a imagem atual e o CSMRate de um número de imagens anteriores codificadas "Ncsm". Um MRate também pode ser calculado, o qual é MRate = M/T (a porcentagem dos blocos "M"). MédiaMRate é o valor de média do MRate para a imagem atual e MRate de um número imagens anteriores codificadas "Nm".
[000167] Usando-se as categorias descritas acima e os valores calculados a partir das categorias "T," "C," "S" e "M", uma ou mais das seguintes regras podem ser aplicadas (individualmente ou em combinação) para determinar a precisão de VM (por exemplo, para decidir se deve ou não usar a precisão de VM de número inteiro ou a precisão fracionai de VM, tal como a precisão %-pel).
[000168] Regra 1: Se CSMRate for maior que um limiar, usar a precisão de VM de número inteiro. Caso contrário, usar a precisão %- pel. (Se a taxa de combinação da imagem atual for lenta demais, usar o VM de precisão fracional).
[000169] Regra 2: Se MédiaCSMRate for maior que um limiar, usar a precisão de VM de número inteiro. Caso contrário, usar a precisão %- pel. (Se a taxa de combinação das imagens em uma janela deslizante for lenta demais, usar o VM de precisão fracional).
[000170] Regra 3: Se MRate for maior que um limiar, usar a precisão de VM de número inteiro. Caso contrário, usar a precisão %-pel. (Se a taxa de combinação dos blocos não colocalizados e não uniformes for maior que um limiar, usar VM de precisão em número inteiro).
[000171] Regra 4: Se MédiaMRate for maior que um limiar, usar a precisão de VM de número inteiro. Caso contrário, usar a precisão %- pel. (Se a taxa de combinação média dos blocos não colocalizados e não uniforme das imagens em uma janela deslizante for maior que um limiar, usar VM de precisão em número inteiro).
[000172] Regra 5: Se C==T, usar a precisão de VM de número inteiro. Caso contrário, usar a precisão %-pel. (Se todos os blocos na imagem atual corresponderem aos blocos colocalizados na imagem de referência (duas imagens são idênticas), usar VM de precisão em número inteiro. Em algumas implantações, isso pode não ter impacto significativo na eficiência da codificação, mas pode ajudar a poupar tempo de codificação, visto que o uso de VM de precisão em número inteiro no processo de codificação pode dispensar algumas operações em pixels fracionados, tal como a estimativa de movimento em pixels fracionados).
[000173] Regra 6: Se M > (T-C-S)/proporção1, usar a precisão de VM de número inteiro. Caso contrário, usar a precisão %-pel. (Se a porcentagem dos blocos combinados em todos os blocos não colocalizados e não uniforme for maior que um limiar, usar VM de precisão em número inteiro).
[000174] Regra 7: Se CSMRate > limiar 1 e MRate > limiar2, usar a precisão de VM de número inteiro. Caso contrário, usar a precisão %- pel. (Se a porcentagem dos blocos CSM for maior que um limiar (em algumas implantações, esse limiar está próximo de 1 para garantir que a maioria dos blocos seja adequada para usar VM de precisão em número inteiro) e a porcentagem de M blocos for maior que um limiar (por exemplo, para garantir que alguma correspondência para os blocos não colocalizados e não uniforme também possa ser encontrada), usar VM de precisão em número inteiro).
[000175] Regra 8: Se MédiaCSMRate + MédiaMRate > limiar3 usar a precisão de VM de número inteiro. Caso contrário, usar a precisão %- pel. (Condição similar ao caso acima, porém, levando em consideração imagens em uma janela deslizante).
[000176] Em um exemplo da implantação, as seguintes definições são aplicadas. O tamanho de bloco é 8x8. A combinação de hash é efetuada apenas para a primeira imagem de referência na lista de imagem de referência 0. Ncsm e Nm são ambas definidas em 31 (o que inclui a imagem atual, um total de 32 imagens). Na implantação exemplar, a precisão do vetor de movimento é decidida na seguinte ordem (a primeira condição "se" que é satisfeita define a precisão de VM e se nenhuma das condições "se" for satisfeita, a condição "caso contrário" definirá a precisão %-pel):
[000177] Se CSMRate < 0,8, usar a precisão %-pel.
[000178] Se T == C, usar a precisão de número inteiro.
[000179] Se MédiaCSMRate < 0.95, usar a precisão %-pel.
[000180] Se M > (T-C-S)/3, usar a precisão de número inteiro.
[000181] Se CSMRate > 0,99 && MRate > 0.01, usar a precisão de número inteiro.
[000182] Se MédiaCSMRate + MédiaMRate > 1.01, usar a precisão de número inteiro.
[000183] Caso contrário, usar a precisão %-pel.
[000184] Nas técnicas descritas nesta seção, o codificador pode decidir entre usar a precisão de VM de amostra de % e a precisão de VM de amostra em número inteiro. De modo mais geral, o codificador seleciona entre múltiplas precisões de VM disponíveis, o que pode incluir a precisão de VM de amostra em número inteiro, a precisão de VM de amostra de ^ , a precisão de VM de amostra de % e/ou outra precisão de VM. A precisão selecionada de VM pode se aplicar a componentes horizontais e/ou componentes verticais de valores de VM para a unidade de vídeo.
[000185] Nas técnicas descritas nesta seção, a combinação de blocos com base em hash usa os valores de hash determinados a partir dos valores de amostra de entrada da unidade e (dos blocos de candidatos) os valores de amostra de entrada para uma ou mais imagens de referência. De maneira alternativa, para os blocos de candidatos representados em uma tabela de hash, a combinação de blocos com base em hash pode usar os valores de hash determinados a partir dos valores de amostra reconstruídos.
[000186] Nas técnicas descritas nesta seção, ao determinar a precisão de VM para uma unidade de vídeo, o codificador também pode considerar outros fatores, tal como se os blocos não combinados contêm uma quantidade significativa de conteúdo de vídeo natural (vídeo capturado por câmera), conforme descrito nas próximas seções.
2. Alternativas e Variações
[000187] Quando o codificador usa o mesmo padrão de mosaicos de imagem a imagem, o codificador pode repetir as precisões de VM por mosaico de imagem a imagem. Os mosaicos colocalizados de imagem a imagem podem usar a mesma precisão de VM. De maneira similar, as frações colocalizadas de imagem a imagem podem usar a mesma precisão de VM. Por exemplo, supondo que o vídeo ilustra um computador do tipo desktop e que parte do desktop tem uma janela que exibe um conteúdo de vídeo natural. A precisão fracional de VM de amostra pode ser usada dentro dessa região do desktop de imagem a imagem, se outras áreas que mostram texto ou outro conteúdo disponibilizado forem codificadas usando-se a precisão de VM de amostra em número inteiro.
[000188] O codificador pode ajustar a quantidade de inclinação em direção ou contra a precisão de VM de amostra em número inteiro com base pelo menos em parte em um grau de confiança de que a precisão de VM de amostra em número inteiro é apropriada. O codificador também pode ajustar a quantidade de inclinação em direção ou contra a precisão de VM de amostra em número inteiro com base pelo menos em parte na complexidade computacional desejada para a codificação e/ou decodificação (favorecendo a precisão de VM de amostra em número inteiro para reduzir a complexidade computacional). Por exemplo, o codificador pode ajustar os limiares usados em operações de comparação para tornar mais provável ou menos provável que a precisão de VM de amostra em número inteiro seja selecionada.
[000189] A precisão selecionada de VM pode ser usada para os componentes de VM horizontal e/ou os componentes de VM vertical dos valores de VM de blocos dentro da unidade do vídeo, onde os componentes de VM horizontal e os componentes de VM vertical são permitidos ter diferentes precisões de VM. Ou a precisão selecionada de VM pode ser usada para ambos os componentes de VM horizontal e os componentes de VM vertical dos valores de VM de blocos dentro da unidade do vídeo, onde os componentes de VM horizontal e os componentes de VM vertical possuem a mesma precisão de VM.
[000190] Na maioria dos exemplos precedentes de seleção de precisão de VM, o vídeo codificado no fluxo de bits inclui um ou mais elementos de sintaxe que indicam a precisão selecionada de VM para a unidade. Um decodificador analisa um ou mais elementos de sintaxe que indicam a precisão selecionada de VM e interpretam os valores de VM de acordo com a precisão selecionada de VM. De maneira alternativa, o vídeo codificado no fluxo de bits pode carecer de quaisquer elementos de sintaxe que indicam a precisão selecionada de VM. Por exemplo, mesmo se o fluxo de bits suportar a sinalização de valores de VM com a precisão fracional de VM de amostra, o codificador pode limitar a estimativa de movimento da unidade do vídeo a usar apenas os valores de VM com partes fracionadas de zero, e apenas os valores de VM que indicam desvios de amostra em número inteiro ser usados na compensação de movimento. Um decodificador reconstrói e aplica os valores de VM na precisão fracional de VM de amostra (onde os valores de VM indicam desvios de amostra em número inteiro). Isso pode reduzir a complexidade computacional da decodificação evitando as operações de interpolação.
IX. Detectando Mudanças de Cena Com o Uso de Combinação de Hash.
[000191] Esta seção apresenta várias abordagens para detectar mudanças de cena com base na combinação de hash. As mudanças de cena podem ser detectadas durante a codificação de vídeo. Por exemplo, as imagens que são identificadas como imagens de mudança de cena podem ser usadas para aumentar a eficiência da codificação (por exemplo, as imagens de referência podem ser determinadas com base, pelo menos em parte, na verificação para saber se um dada imagem é uma imagem de mudança de cena).
Detectando uma Imagem de Mudança de Cena.
[000192] A mudança de cena é detectada usando-se, pelo menos em parte, informações que indicam quantos blocos de uma imagem atual possuem combinações de hash em uma tabela de hash (geralmente chamada de uma "taxa de combinação," "razão de combinação," ou "R") em relação às imagens anteriores. Em algumas implantações, a taxa de combinação é calculada como: R = (C + S + M) / T. De maneira alternativa, a taxa de combinação pode ser calculada como: R = (C + M) / T ou as R = M / T. Para uma imagem atual, a taxa de combinação é classificada como "Rcurr". Além disso, uma taxa de combinação média pode ser calculada a partir de imagens anteriores (anteriores à imagem atual). Por exemplo, uma média de todas as imagens anteriores codificadas pode ser mantida ou uma média de um número de imagens anteriores (por exemplo, usando uma janela deslizante). A taxa de combinação média é classificada como "Ravg".
[000193] Em algumas implantações, se Rcurr for menor (por exemplo, significativamente menor) que Ravg, então a imagem atual poderá ser identificada como uma imagem de mudança de cena. Em algumas implantações, se Rcurr < a * Ravg, então a imagem atual será detectada como uma imagem de mudança de cena. O valor de "a" (um valor ponderado) é definido em 0,5 em uma implantação específica.
Seleção de Imagem de Referência de Longa Duração.
[000194] Na codificação de vídeo, a compensação de movimento das imagens de referência é usada para remover redundância temporal. Desse modo, as imagens de referência podem ser muito importantes para a eficiência da codificação. Em alguma implantação, tanto as imagens de referência de curta duração quanto as imagens de referência de longa duração são usadas. As imagens de referência de curta duração são geralmente uma variedade de imagens não muito distantes da imagem atual de codificação. As imagens de referência de longa duração podem ser armazenadas no armazenador temporário de imagem decodificada ("DBP") por um tempo relativamente mais longo. As imagens de referência de longa duração são úteis para melhorar a eficiência da codificação para algum conteúdo da tela, onde cenas duplicadas podem ocorrer ou janelas duplicadas podem ocorrer posteriormente na sequência de vídeo. Em algumas implantações, as imagens antes de uma mudança de cena (por exemplo, imediatamente antes de uma mudança de cena) são retidas como imagens de referência de longa duração, enquanto as imagens durante a mudança de cena não são retidas.
[000195] Para ilustrar vários exemplos de seleção de imagem de referência de longa duração, a seguinte sequência exemplar de imagens é usada:f0(s0), fl(sO), f2(s0), f3(s0), f4(s0), f5(s0), f6(s0), f7(s0->l), f8(s0->l), f9(s0->l), flO(sO->l), fl l(sl) fl2(sl)
[000196] Nesta sequência exemplar, há 13 imagens (classificadas como "fO" até "fl2) e duas cenas (classificadas como "sO" e "si"). A transição entre a primeira cena e a segunda cena é classificada como "s0->l". Conforme ilustrado na sequência exemplar, as imagens de fO a f6 pertencem à primeira cena sO, as imagens de f7 a flO são imagens de transição da primeira cena sO para a segunda cena si, e as imagens fl 1 e fl2 pertencem à segunda cena si. Se a sequência exemplar de imagens contiver conteúdo da tela, então é provável que a taxa de combinação para fO, fl, f2, f3, f4, f5, e f6 seja relativamente alta, que a taxa de combinação para f7, f8, f9, flO, e fl 1 seja relativamente baixa e que a taxa de combinação para fl2 seja relativamente alta.
[000197] Com base nos resultados de várias situações de codificação, reter a última imagem da cena anterior pode ser útil para melhorar a eficiência da codificação. Portanto, com a sequência exemplar acima, f6 seria retida como uma imagem de referência de longa duração. Em algumas implantações, a decisão de reter ou não uma dada imagem como uma imagem de referência de longa duração é tomada durante a codificação da imagem atual. Por exemplo, a decisão de reter ou não fn-1 como uma imagem de referência de longa duração é tomada durante a codificação de fn (a imagem atual). Em uma implantação específica, se as duas condições a seguir forem satisfeitas, então fn-1 será retida como uma imagem de referência de longa duração:
[000198] 1. Taxa de combinação Rn (Rcurr para a imagem atual fn) é menor que um limiar (indicando que fn é detectada como imagem de mudança de cena).
[000199] 2 . As taxas de combinação de todas as imagens anteriores X (Rn-1, Rn-2, .. .Rn-X) são maiores que um limiar (indicando uma cena estável, a qual pode diminuir as imagens durante a mudança de cena, tal como f7, f8, f9).
[000200] Usando-se as duas condições acima, o início de uma mudança de cena pode ser detectado, o qual imediatamente após uma cena estável de X imagens. Usando-se a sequência exemplar acima, se as duas condições forem aplicadas durante a codificação de imagem atual f7, a taxa de combinação de f7 poderá ser menor que um limiar (indicando que f7 é uma imagem de mudança de cena) enquanto as imagens anteriores X (por exemplo, f6, f5, f4, etc.)poderão ser maiores que um limiar. Como um resultado, se as duas condições forem satisfeitas, então f6 poderá ser retida como uma imagem de referência de longa duração.
C. Ajuste de Qualidade da Imagem.
[000201] Na sequência exemplar acima, se houver várias imagens na segunda cena si (com muito pouca mudança entre elas), a codificação de algumas das primeiras imagens em si com melhor qualidade pode ser útil para melhorar a eficiência da codificação. Em alguma implantação, QPI e lambdal são usados para codificar intraimagem e outros valores de PQ e lambda são usados para codificar imagens P e B (por exemplo, geralmente maior que QPI e lambdal e também podem ser diferentes para diferentes imagens P e B).
[000202] Em algumas implantações, uma imagem atual é codificada com melhor qualidade (por exemplo, codificada usando-se QPI e lambdal) se for detectado que a imagem atual está no início (ou perto do início) de uma nova cena por meio da combinação de bloco com base em hash. Por exemplo, codificando-se as imagens durante ou perto do início de uma cena estável com maior qualidade, a eficiência de codificação e/ou a qualidade das imagens subsequentes na mesma cena estável pode ser melhorada.
[000203] Se uma pré-análise for permitida, a verificação para saber se uma imagem atual está no início de uma nova cena estável pode ser uma tarefa simples. Por exemplo, as próximas imagens X depois da imagem atual podem ser verificadas. Se a imagem atual tiver uma taxa de combinação que é relativamente baixa enquanto as próximas imagens X possuem uma taxa de combinação que é relativamente alta, o codificador poderá codificar a imagem atual com uma qualidade relativamente alta. Por exemplo, usando-se a sequência exemplar acima, o codificador pode descobrir que a taxa de combinação de fl 1 é relativamente baixa enquanto as taxas de combinação de fl2, f 13, e fl4 são relativamente altas. Nessa situação, pode ser determinado que f 11 está no início de uma nova cena estável e, portanto, ela pode ser codificada com melhor qualidade. Em uma implantação específica, se as duas condições a seguir forem satisfeitas, a imagem atual fn será codificada com melhor qualidade (por exemplo, codificado com QPI e lambdal):
[000204] 1. A taxa de combinação Rn é menor que um limiar (indicando que fn foi detectada como estando no início de uma nova cena).
[000205] 2. As taxas de combinação de todas as futuras imagens X (Rn+1, rn+2, .. .Rn+X) são maiores que um limiar (indicando uma cena estável).
[000206] Se uma pré-análise não for permitida, talvez o codificador não seja capaz de tomar a decisão no início de uma nova cena estável e pode ter que esperar por algumas imagens antes que uma nova cena estável possa ser confirmada. Por exemplo, o codificador pode esperar por um número de imagens X para confirmar que uma nova cena estável foi atingida e em seguida, codificar a imagem atual com qualidade melhorada. Por exemplo, com referência à sequência exemplar acima, se fl2, fl3, f 14, e f 15 (onde X=4) tiverem uma taxa de combinação relativamente alta (por exemplo, e se fl 1 tiver uma taxa de combinação relativamente baixa), então f 15 poderá ser codificada com qualidade melhorada. Em uma implantação específica, se as duas condições a seguir forem satisfeitas, a imagem atual fn será codificada com melhor qualidade (por exemplo, codificada com QPI e lambdal):
[000207] 1. A taxa de combinação da imagem atual e das imagens anteriores X (Rn, Rn-1, Rn-2, ... Rn-X) é maior que um limiar.
[000208] 2. A taxa de combinação da imagem n-X-1 (Rn-X-1) é menor que um limiar.
D. Implantações Exemplares.
[000209] Vários métodos podem ser providos para detectar mudanças de cena usando-se a combinação de blocos com base em hash. Além disso, os resultados das informações de mudança de cena podem ser usados para outros fins, tal como para a seleção de imagem de referência de longa duração e definições de qualidade de imagem durante a codificação.
[000210] A figura 15 mostra uma técnica generalizada 1500 para detectar uma mudança de cena durante a codificação de vídeo usando, pelo menos em parte, os resultados da combinação de blocos com base em hash. A técnica 1500 pode ser executada por um codificador, tal como aquele descrito com referência à figura 3 ou às figuras 4a e 4b ou por outro codificador.
[000211] O codificador codifica o vídeo para produzir dados codificados, os quais o codificador envia como parte de um fluxo de bits. Durante a codificação, o codificador calcula 1510 uma taxa de combinação para uma imagem atual. A taxa de combinação é calculada usando-se, pelo menos em parte, a combinação de blocos com base em hash para a imagem atual (em relação a uma ou mais imagens de referência). Em algumas implantações, a taxa de combinação é calculada classificando-se os blocos da imagem atual em uma pluralidade de categorias. Em algumas implantações, a taxa de combinação é calculada como R = (C + S + M) / T, como R = (C + M) / T ou como R = M / T.
[000212] O codificador calcula em seguida 1520 uma taxa de combinação média para uma pluralidade de imagens anteriores. A taxa de combinação média pode ser calculada calculando-se uma taxa de combinação individual para cada uma das imagens anteriores e efetuando a média das taxas de combinação individuais. Em algumas implantações, a taxa de combinação é calculada classificando-se os blocos de uma dada imagem anterior em uma pluralidade de categorias. Em algumas implantações, a taxa de combinação é calculada como R = (C + S + M) / T, como R = (C + M) / T ou como R = M / T.
[000213] O codificador em seguida calcula 1530 uma taxa de combinação média ponderada. Por exemplo, o codificador pode multiplicar a taxa de combinação média por um valor ponderado que é menor que 1,0. Em uma implantação específica, um valor ponderado de 0,5 é usado.
[000214] O codificador determina em seguida 1540 se a imagem atual é uma imagem de mudança de cena com base na taxa de combinação para a imagem atual e na taxa de combinação média ponderada. Por exemplo, pode ser determinado que a imagem atual é uma imagem de mudança de cena se a taxa de combinação para a imagem atual for menor que a taxa de combinação média ponderada.
[000215] Várias decisões podem ser tomadas quando for detectado que a imagem atual é uma imagem de mudança de cena. Por exemplo, a imagem logo antes da imagem atual pode ser selecionada como uma imagem de referência de longa duração. Além disso, as informações sobre quando uma imagem (ou imagens) é envolvida em uma mudança de cena podem ser usadas durante a determinação dos parâmetros de qualidade de imagem no decorrer da codificação.
[000216] Em vista das várias modalidades possíveis, às quais os princípios da presente invenção podem ser aplicados, deve ser reconhecido que as modalidades ilustradas são apenas exemplos preferidos da invenção e não devem ser consideradas como limitadoras do escopo da invenção. Preferivelmente, o escopo da invenção é definido pelas reivindicações em anexo. Portanto, é reivindicado como o contexto da invenção tudo que se encontrar no escopo e espírito dessas reivindicações.

Claims (8)

1. Método implementado por computador (1100) para a construção de uma tabela de hash para correspondência de bloco baseada em hash, o método caracterizado pelo fato de que compreende: para cada um dos vários blocos candidatos (1000, 1010, 1020) em uma imagem de dados de vídeo: avaliar (1120) se o bloco candidato (1000, 1010, 1020) satisfaz um critério de complexidade para filtrar blocos homogêneos, um bloco homogêneo sendo um bloco uniforme; se o bloco candidato (1000, 1010, 1020) não satisfizer o critério de complexidade (1120): avaliar (1160) se o bloco candidato (1000, 1010, 1020) satisfaz um critério de seleção homogêneo, o critério de seleção homogêneo compreendendo se a coordenada do bloco candidato está alinhada com uma divisão particular da imagem; se o bloco candidato (1000, 1010, 1020) satisfizer o critério de seleção homogêneo (1160): determinar (1130) um valor de hash de bloco para o bloco candidato (1000, 1010, 1020); e adicionar (1140) o valor de hash do bloco a uma tabela de hash; e se o bloco candidato (1000, 1010, 1020) não satisfizer o critério de seleção homogêneo (1160), omitir o bloco candidato da tabela de hash.
2. Método (1100), de acordo com a reivindicação 1, caracterizado pelo fato de que ainda compreende:se o bloco candidato (1000, 1010, 1020) satisfizer o critério de complexidade (1120): determinar (1130) um valor de hash de bloco para o bloco candidato (1000, 1010, 1020); e adicionando (1140) o valor de hash do bloco à tabela de hash.
3. Método (1100), de acordo com a reivindicação 1, caracterizado pelo fato de que o bloco candidato (1000, 1010, 1020) não satisfaz o critério de complexidade (1120) quando o bloco candidato (1000, 1010, 1020) é um ou mais de horizontalmente homogêneo e verticalmente homogêneo.
4. Método (1100), de acordo com a reivindicação 1, caracterizado pelo fato de que o critério de seleção homogêneo é baseado nas coordenadas iniciais do bloco candidato (1000, 1010, 1020).
5. Método (1100), de acordo com a reivindicação 1, caracterizado pelo fato de que o bloco candidato (1000, 1010, 1020) satisfaz o critério de seleção homogêneo quando pelo menos uma de uma coordenada de início x e ay do bloco candidato (1000, 1010, 1020) é uniformemente divisível por um valor pré-determinado.
6. Método (1100), de acordo com a reivindicação 1, caracterizado pelo fato de que o bloco candidato (1000, 1010, 1020) satisfaz o critério de seleção homogêneo (1160) quando uma coordenada x inicial do bloco candidato (1000, 1010, 1020) é uniformemente divisível por um o primeiro valor pré-determinado e uma coordenada de início y do bloco candidato (1000, 1010, 1020) é igualmente divisível por um segundo valor predeterminado.
7. Dispositivo de computação (100), caracterizado pelo fato de que compreende uma unidade de processamento (110, 115) e memória (120, 125, 140), adaptada para executar o método (1100, 1300, 1500) conforme definido em qualquer uma das reivindicações 16.
8. Meio de armazenamento legível por computador (120, 125, 140) caracterizado pelo fato de que compreende o método conforme definido em qualquer uma das reivindicações 1-6.
BR112017004490-0A 2014-09-30 2014-09-30 Método para a construção de uma tabela de hash para correspondência de bloco baseada em hash, dispositivo de computação e meio de armazenamento legível por computador BR112017004490B1 (pt)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2014/087869 WO2016049834A1 (en) 2014-09-30 2014-09-30 Hash-based encoder decisions for video coding

Publications (2)

Publication Number Publication Date
BR112017004490A2 BR112017004490A2 (pt) 2017-12-05
BR112017004490B1 true BR112017004490B1 (pt) 2023-03-14

Family

ID=55629261

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112017004490-0A BR112017004490B1 (pt) 2014-09-30 2014-09-30 Método para a construção de uma tabela de hash para correspondência de bloco baseada em hash, dispositivo de computação e meio de armazenamento legível por computador

Country Status (11)

Country Link
US (3) US11025923B2 (pt)
EP (3) EP3202142B1 (pt)
JP (1) JP6462119B2 (pt)
KR (2) KR102358276B1 (pt)
CN (3) CN105981382B (pt)
AU (1) AU2014408223B2 (pt)
BR (1) BR112017004490B1 (pt)
CA (2) CA2961089C (pt)
MX (1) MX2017004210A (pt)
RU (1) RU2679981C2 (pt)
WO (1) WO2016049834A1 (pt)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3061233B1 (en) 2013-10-25 2019-12-11 Microsoft Technology Licensing, LLC Representing blocks with hash values in video and image coding and decoding
WO2015131325A1 (en) 2014-03-04 2015-09-11 Microsoft Technology Licensing, Llc Hash table construction and availability checking for hash-based block matching
US10368092B2 (en) 2014-03-04 2019-07-30 Microsoft Technology Licensing, Llc Encoder-side decisions for block flipping and skip mode in intra block copy prediction
CN105706450B (zh) 2014-06-23 2019-07-16 微软技术许可有限责任公司 根据基于散列的块匹配的结果的编码器决定
KR102358276B1 (ko) 2014-09-30 2022-02-04 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 비디오 코딩을 위한 해시 기반 인코더 결정
CN107113443B (zh) * 2014-12-26 2020-04-28 索尼公司 影像处理设备和影像处理方法
US10462479B2 (en) * 2015-07-10 2019-10-29 Nec Corporation Motion picture encoding device, motion picture encoding method, and storage medium storing motion picture encoding program
CN105426413B (zh) * 2015-10-31 2018-05-04 华为技术有限公司 一种编码方法及装置
US10390039B2 (en) 2016-08-31 2019-08-20 Microsoft Technology Licensing, Llc Motion estimation for screen remoting scenarios
US10192295B2 (en) * 2016-11-09 2019-01-29 AI Analysis, Inc. Methods and systems for normalizing images
US11095877B2 (en) 2016-11-30 2021-08-17 Microsoft Technology Licensing, Llc Local hash-based motion estimation for screen remoting scenarios
US10694205B2 (en) * 2017-12-18 2020-06-23 Google Llc Entropy coding of motion vectors using categories of transform blocks
CN108495139A (zh) * 2018-04-18 2018-09-04 北方工业大学 屏幕内容编码的哈希块匹配
CN109168001B (zh) * 2018-09-27 2021-02-12 苏州科达科技股份有限公司 视频场景变化的检测方法、装置及视频采集设备
US11469881B2 (en) * 2018-12-26 2022-10-11 Korea Institute Of Science And Technology Apparatus and method for forgery prevention of digital information
EP3918801A4 (en) * 2019-01-28 2022-06-15 OP Solutions, LLC ONLINE AND OFFLINE CHOICE OF EXTENDED LONG-TERM REFERENCE IMAGE STORAGE
JP7384910B2 (ja) * 2019-02-02 2023-11-21 北京字節跳動網絡技術有限公司 映像符号化におけるイントラブロックコピーのためのバッファ管理
CN113396592B (zh) * 2019-02-02 2023-11-14 北京字节跳动网络技术有限公司 用于视频编解码中的帧内块复制的缓冲区管理
WO2020156547A1 (en) 2019-02-02 2020-08-06 Beijing Bytedance Network Technology Co., Ltd. Buffer resetting for intra block copy in video coding
EP3915265A4 (en) 2019-03-01 2022-06-22 Beijing Bytedance Network Technology Co., Ltd. DIRECTION-BASED PREDICTION FOR INTRA BLOCK COPY IN VIDEO CODING
KR20210125506A (ko) 2019-03-04 2021-10-18 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드 비디오 코딩에서 인트라 블록 복사를 위한 버퍼 관리
CN111567044A (zh) * 2019-03-13 2020-08-21 北京大学 一种视频处理方法、装置、编码设备及解码设备
EP3981151A4 (en) 2019-07-06 2022-08-24 Beijing Bytedance Network Technology Co., Ltd. VIRTUAL PREDICTION BUFFER FOR INTRA-BLOCK COPY IN VIDEO ENCODING
MX2022000110A (es) 2019-07-10 2022-02-10 Beijing Bytedance Network Tech Co Ltd Identificacion de muestras para la copia intra-bloque en codificacion de video.
CN117579816A (zh) 2019-07-11 2024-02-20 北京字节跳动网络技术有限公司 用于视频编解码中的帧内块复制的比特流一致性约束
US11202085B1 (en) 2020-06-12 2021-12-14 Microsoft Technology Licensing, Llc Low-cost hash table construction and hash-based block matching for variable-size blocks
US11956441B2 (en) * 2021-12-23 2024-04-09 Ati Technologies Ulc Identifying long term reference frame using scene detection and perceptual hashing
US11882295B2 (en) 2022-04-15 2024-01-23 Meta Platforms Technologies, Llc Low-power high throughput hardware decoder with random block access
US20230334702A1 (en) * 2022-04-15 2023-10-19 Meta Platforms Technologies, Llc Hardware Encoder for Color Data in a 2D Rendering Pipeline

Family Cites Families (240)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US2239538A (en) 1939-03-30 1941-04-22 Zeiss Carl Fa Photographic teleobjective
US2718173A (en) 1950-09-26 1955-09-20 Cycloptic Anstalt Fur Optik Un High intensity five component photographic objective
US3059528A (en) 1957-07-02 1962-10-23 Allan Ted Panoramic motion picture camera
US3142236A (en) 1961-03-08 1964-07-28 American Optical Corp Cameras and high speed optical system therefor
CH486707A (de) 1968-06-14 1970-02-28 Voigtlaender Ag Lichtstarkes objektiv aus mindestens vier in Luft stehenden Gliedern vom erweiterten Triplet-typus
US5016980A (en) 1985-11-12 1991-05-21 Waldron Robert D Systems for deviating and (optionally) converging radiation
US4918583A (en) 1988-04-25 1990-04-17 Nikon Corporation Illuminating optical device
US5565921A (en) 1993-03-16 1996-10-15 Olympus Optical Co., Ltd. Motion-adaptive image signal processing system
US5610841A (en) 1993-09-30 1997-03-11 Matsushita Electric Industrial Co., Ltd. Video server
US5850312A (en) 1993-10-22 1998-12-15 Olympus Optical Co., Ltd. Three-unit zoom lens
JP3580869B2 (ja) 1994-09-13 2004-10-27 オリンパス株式会社 立体視内視鏡
US5613004A (en) 1995-06-07 1997-03-18 The Dice Company Steganographic method and device
US5774271A (en) 1996-07-29 1998-06-30 Welch Allyn, Inc. Lamp assembly
JP3869895B2 (ja) 1996-12-27 2007-01-17 キヤノン株式会社 防振機能を有した光学系
US7206346B2 (en) 1997-06-25 2007-04-17 Nippon Telegraph And Telephone Corporation Motion vector predictive encoding method, motion vector decoding method, predictive encoding apparatus and decoding apparatus, and storage media storing motion vector predictive encoding and decoding programs
US6904110B2 (en) 1997-07-31 2005-06-07 Francois Trans Channel equalization system and method
US6879266B1 (en) 1997-08-08 2005-04-12 Quickshift, Inc. Memory module including scalable embedded parallel data compression and decompression engines
JPH1166301A (ja) 1997-08-15 1999-03-09 Nippon Telegr & Teleph Corp <Ntt> カラー画像分類方法及び装置及びこの方法を記録した記録媒体
US6895048B2 (en) 1998-03-20 2005-05-17 International Business Machines Corporation Adaptive encoding of a sequence of still frames or partially still frames within motion video
US6332092B1 (en) 1998-07-08 2001-12-18 Lifespex, Incorporated Optical probe having and methods for uniform light irradiation and/or light collection over a volume
US6487440B2 (en) 1998-07-08 2002-11-26 Lifespex, Inc. Optical probe having and methods for difuse and uniform light irradiation
US6400764B1 (en) 1999-04-06 2002-06-04 Koninklijke Philips Electronics N. V. Motion estimation method featuring orthogonal-sum concurrent multi matching
US7216232B1 (en) 1999-04-20 2007-05-08 Nec Corporation Method and device for inserting and authenticating a digital signature in digital data
US6785815B1 (en) 1999-06-08 2004-08-31 Intertrust Technologies Corp. Methods and systems for encoding and protecting data using digital signature and watermarking techniques
US7430670B1 (en) 1999-07-29 2008-09-30 Intertrust Technologies Corp. Software self-defense systems and methods
US6671407B1 (en) 1999-10-19 2003-12-30 Microsoft Corporation System and method for hashing digital images
JP2001228401A (ja) 2000-02-16 2001-08-24 Canon Inc 投影光学系、および該投影光学系による投影露光装置、デバイス製造方法
GB0006153D0 (en) 2000-03-14 2000-05-03 Inpharmatica Ltd Database
CA2304433A1 (en) 2000-04-05 2001-10-05 Cloakware Corporation General purpose access recovery scheme
GB2364459B (en) 2000-06-30 2004-03-31 Nokia Mobile Phones Ltd Video error resilience
US6938128B1 (en) 2000-07-20 2005-08-30 Silicon Graphics, Inc. System and method for reducing memory latency during read requests
US6915387B1 (en) 2000-07-20 2005-07-05 Silicon Graphics, Inc. System and method for handling updates to memory in a distributed shared memory system
US6765963B2 (en) 2001-01-03 2004-07-20 Nokia Corporation Video decoder architecture and method for using same
US6920175B2 (en) 2001-01-03 2005-07-19 Nokia Corporation Video coding architecture and methods for using same
GB2375673A (en) 2001-05-14 2002-11-20 Salgen Systems Ltd Image compression method using a table of hash values corresponding to motion vectors
AU2002346116A1 (en) 2001-07-20 2003-03-03 Gracenote, Inc. Automatic identification of sound recordings
DE10158658A1 (de) 2001-11-30 2003-06-12 Bosch Gmbh Robert Verfahren zur gerichteten Prädiktion eines Bildblockes
US6819322B2 (en) * 2002-01-04 2004-11-16 Hewlett-Packard Development Company, L.P. Method and apparatus for detecting potential lock-up conditions in a video graphics controller
EP1467569A4 (en) 2002-01-18 2007-11-14 Toshiba Kk METHOD AND APPARATUS FOR ENCODING IMAGES IN MOTION, DECODING METHOD AND APPARATUS
US6894289B2 (en) 2002-02-22 2005-05-17 Xenogen Corporation Fluorescence illumination assembly for an imaging apparatus
US6922246B2 (en) 2002-02-22 2005-07-26 Xenogen Corporation Bottom fluorescence illumination assembly for an imaging apparatus
JP3983573B2 (ja) 2002-03-06 2007-09-26 富士重工業株式会社 ステレオ画像特性検査システム
US6983020B2 (en) 2002-03-25 2006-01-03 Citrix Online Llc Method and apparatus for fast block motion detection
JP4151374B2 (ja) 2002-03-29 2008-09-17 セイコーエプソン株式会社 動画像符号化装置および動画像符号化方法
US7386049B2 (en) * 2002-05-29 2008-06-10 Innovation Management Sciences, Llc Predictive interpolation of a video signal
US7400774B2 (en) 2002-09-06 2008-07-15 The Regents Of The University Of California Encoding and decoding of digital data using cues derivable at a decoder
US20040174570A1 (en) 2002-12-02 2004-09-09 Plunkett Richard Thomas Variable size dither matrix usage
US7121639B2 (en) 2002-12-02 2006-10-17 Silverbrook Research Pty Ltd Data rate equalisation to account for relatively different printhead widths
US7792121B2 (en) 2003-01-03 2010-09-07 Microsoft Corporation Frame protocol and scheduling system
JP4499370B2 (ja) 2003-04-04 2010-07-07 オリンパス株式会社 結像光学系及びそれを用いた撮像装置
DE10316428A1 (de) 2003-04-08 2004-10-21 Carl Zeiss Smt Ag Katadioptrisches Reduktionsobjektiv
HUP0301368A3 (en) 2003-05-20 2005-09-28 Amt Advanced Multimedia Techno Method and equipment for compressing motion picture data
US8264489B2 (en) 2003-07-11 2012-09-11 Intel Corporation Interface remoting
US7609763B2 (en) 2003-07-18 2009-10-27 Microsoft Corporation Advanced bi-directional predictive coding of video frames
US20050060643A1 (en) 2003-08-25 2005-03-17 Miavia, Inc. Document similarity detection and classification system
WO2005027491A2 (en) 2003-09-05 2005-03-24 The Regents Of The University Of California Global motion estimation image coding and processing
JP5567246B2 (ja) 2003-10-27 2014-08-06 ザ ジェネラル ホスピタル コーポレイション 周波数ドメイン干渉測定を利用して光学撮像を実行する方法および装置
US20050105621A1 (en) 2003-11-04 2005-05-19 Ju Chi-Cheng Apparatus capable of performing both block-matching motion compensation and global motion compensation and method thereof
DE602004010040T2 (de) 2003-12-11 2008-09-11 Tokendo Messvorrichtung für eine video-endoskopische Sonde
US20040133548A1 (en) 2003-12-15 2004-07-08 Alex Fielding Electronic Files Digital Rights Management.
US7095568B2 (en) 2003-12-19 2006-08-22 Victor Company Of Japan, Limited Image display apparatus
KR100995398B1 (ko) 2004-01-20 2010-11-19 삼성전자주식회사 수직 및 수평 방향의 패턴을 고려한 전역 움직임 보상순차주사화 방법
WO2005116837A1 (en) 2004-05-26 2005-12-08 Intel Corporation Automatic caching generation in network applications
US7672005B1 (en) 2004-06-30 2010-03-02 Teradici Corporation Methods and apparatus for scan block caching
US20060062303A1 (en) 2004-09-17 2006-03-23 Sony Corporation Hybrid global motion estimator for video encoding
US7526607B1 (en) 2004-09-23 2009-04-28 Juniper Networks, Inc. Network acceleration and long-distance pattern detection using improved caching and disk mapping
US7773784B2 (en) 2004-10-15 2010-08-10 University Of Colorado Board Of Regents Revocable biometrics with robust distance metrics
JP2006265087A (ja) 2004-12-13 2006-10-05 Ohara Inc 光学素子用プリフォーム
KR100677548B1 (ko) 2004-12-31 2007-02-02 삼성전자주식회사 복호된 영상의 오류 재은닉 방법 및 그 장치
US20060153295A1 (en) 2005-01-12 2006-07-13 Nokia Corporation Method and system for inter-layer prediction mode coding in scalable video coding
US20060224594A1 (en) 2005-04-04 2006-10-05 Oracle International Corporation Methods and systems for identifying highly contended blocks in a database
CN100484233C (zh) 2005-06-03 2009-04-29 中国科学院研究生院 数字电视信号安全认证装置及带有该装置的电视设备
KR100716999B1 (ko) 2005-06-03 2007-05-10 삼성전자주식회사 영상의 대칭성을 이용한 인트라 예측 방법, 이를 이용한영상의 복호화, 부호화 방법 및 장치
US7822278B1 (en) 2005-09-20 2010-10-26 Teradici Corporation Methods and apparatus for encoding a digital video signal
US8107527B1 (en) 2005-07-28 2012-01-31 Teradici Corporation Progressive block encoding using region analysis
US20070025442A1 (en) * 2005-07-28 2007-02-01 Sanyo Electric Co., Ltd. Coding method for coding moving images
US8787460B1 (en) 2005-07-28 2014-07-22 Teradici Corporation Method and apparatus for motion vector estimation for an image sequence
KR101211665B1 (ko) 2005-08-12 2012-12-12 삼성전자주식회사 영상의 인트라 예측 부호화, 복호화 방법 및 장치
JP4815944B2 (ja) 2005-08-19 2011-11-16 富士ゼロックス株式会社 ホログラム記録方法及び装置
JP2007066191A (ja) * 2005-09-01 2007-03-15 Toshiba Corp 再生装置および再生方法
FR2891685B1 (fr) 2005-10-03 2008-04-18 Envivio France Entpr Uniperson Procede et dispositif d'estimation de mouvement a references multiples, procede et dispositif de codage, produits programme d'ordinateur et moyens de stockage correspondants.
AU2006299819B2 (en) 2005-10-12 2011-02-10 Carbonite Gmbh Method and system for data backup
US7702127B2 (en) 2005-10-21 2010-04-20 Microsoft Corporation Video fingerprinting using complexity-regularized video watermarking by statistics quantization
RU2298226C1 (ru) 2005-10-28 2007-04-27 Самсунг Электроникс Ко., Лтд. Способ улучшения цифровых изображений
GB2431798A (en) 2005-10-31 2007-05-02 Sony Uk Ltd Motion vector selection based on integrity
US7986844B2 (en) 2005-11-22 2011-07-26 Intel Corporation Optimized video compression using hashing function
US20070199011A1 (en) * 2006-02-17 2007-08-23 Sony Corporation System and method for high quality AVC encoding
US20070217702A1 (en) 2006-03-14 2007-09-20 Sung Chih-Ta S Method and apparatus for decoding digital video stream
US7949186B2 (en) 2006-03-15 2011-05-24 Massachusetts Institute Of Technology Pyramid match kernel and related techniques
KR100763917B1 (ko) 2006-06-21 2007-10-05 삼성전자주식회사 고속으로 움직임을 추정하는 방법 및 장치
US7636824B1 (en) 2006-06-28 2009-12-22 Acronis Inc. System and method for efficient backup using hashes
DE102006045565B3 (de) 2006-08-04 2008-06-26 Leica Camera Ag Weitwinkel-Aufstecksucher an Messsucherkameras für fotografische Aufnahmen mit unterschiedlichen Brennweiten
US7747584B1 (en) 2006-08-22 2010-06-29 Netapp, Inc. System and method for enabling de-duplication in a storage system architecture
US8099415B2 (en) 2006-09-08 2012-01-17 Simply Hired, Inc. Method and apparatus for assessing similarity between online job listings
GB0618057D0 (en) 2006-09-14 2006-10-25 Perkinelmer Ltd Improvements in and relating to scanning confocal microscopy
US8443398B2 (en) 2006-11-01 2013-05-14 Skyfire Labs, Inc. Architecture for delivery of video content responsive to remote interaction
BRPI0720806B1 (pt) * 2007-01-18 2023-03-28 Fraunhofer-Gesellschaft Zur Forderung Der Angewandten Forschung E.V. Corrente de dados de vídeo de qualidade escalonável
US8320683B2 (en) 2007-02-13 2012-11-27 Sharp Kabushiki Kaisha Image processing method, image processing apparatus, image reading apparatus, and image forming apparatus
US20080212687A1 (en) 2007-03-02 2008-09-04 Sony Corporation And Sony Electronics Inc. High accurate subspace extension of phase correlation for global motion estimation
US8494234B1 (en) 2007-03-07 2013-07-23 MotionDSP, Inc. Video hashing system and method
JP4755624B2 (ja) 2007-04-23 2011-08-24 ルネサスエレクトロニクス株式会社 動き補償装置
US8817878B2 (en) 2007-11-07 2014-08-26 Broadcom Corporation Method and system for motion estimation around a fixed reference vector using a pivot-pixel approach
KR101365444B1 (ko) 2007-11-19 2014-02-21 삼성전자주식회사 영상의 해상도의 조정을 통하여 동영상을 효율적으로부호화/복호화하는 방법 및 장치
JP5417342B2 (ja) 2007-12-21 2014-02-12 テレフオンアクチーボラゲット エル エム エリクソン(パブル) ビデオ符号化に対する改善された画素予測
US8213515B2 (en) 2008-01-11 2012-07-03 Texas Instruments Incorporated Interpolated skip mode decision in video compression
KR101446771B1 (ko) 2008-01-30 2014-10-06 삼성전자주식회사 영상 부호화장치 및 영상 복호화장치
WO2009102013A1 (ja) * 2008-02-14 2009-08-20 Nec Corporation 移動ベクトル検出装置
JP2009230537A (ja) 2008-03-24 2009-10-08 Olympus Corp 画像処理装置、画像処理プログラム、画像処理方法、および、電子機器
EP2277317B1 (en) 2008-05-19 2021-01-27 Citrix Systems, Inc. Systems and methods for enhanced image encoding
US8527482B2 (en) 2008-06-06 2013-09-03 Chrysalis Storage, Llc Method for reducing redundancy between two or more datasets
GB2460844B (en) * 2008-06-10 2012-06-06 Half Minute Media Ltd Automatic detection of repeating video sequences
WO2010001433A1 (ja) 2008-06-30 2010-01-07 富士通マイクロエレクトロニクス株式会社 メモリ装置及びそれを制御するメモリコントローラ
US8515123B2 (en) 2008-07-03 2013-08-20 Verimatrix, Inc. Efficient watermarking approaches of compressed media
US9235577B2 (en) 2008-09-04 2016-01-12 Vmware, Inc. File transfer using standard blocks and standard-block identifiers
US8213503B2 (en) 2008-09-05 2012-07-03 Microsoft Corporation Skip modes for inter-layer residual video coding and decoding
JP5240530B2 (ja) 2008-10-02 2013-07-17 ソニー株式会社 画像処理装置および方法
EP2351288B1 (en) 2008-10-23 2014-12-10 University Of Ulster An encryption method
US20100119170A1 (en) 2008-11-07 2010-05-13 Yahoo! Inc. Image compression by comparison to large database
US20100166073A1 (en) 2008-12-31 2010-07-01 Advanced Micro Devices, Inc. Multiple-Candidate Motion Estimation With Advanced Spatial Filtering of Differential Motion Vectors
US8599929B2 (en) 2009-01-09 2013-12-03 Sungkyunkwan University Foundation For Corporate Collaboration Distributed video decoder and distributed video decoding method
WO2010086548A1 (fr) 2009-01-28 2010-08-05 France Telecom Procede et dispositif de codage d'une image, procede et dispositif de decodage, et programmes d'ordinateur correspondants
EP2392130A4 (en) 2009-02-02 2013-04-03 Calgary Scient Inc TRANSMISSION OF IMAGE DATA
WO2010090630A1 (en) 2009-02-03 2010-08-12 Thomson Licensing Methods and apparatus for motion compensation with smooth reference frame in bit depth scalability
US7868792B2 (en) 2009-02-05 2011-01-11 Polytechnic Institute Of New York University Generating a boundary hash-based hierarchical data structure associated with a plurality of known arbitrary-length bit strings and using the generated hierarchical data structure for detecting whether an arbitrary-length bit string input matches one of a plurality of known arbitrary-length bit springs
US8838824B2 (en) 2009-03-16 2014-09-16 Onmobile Global Limited Method and apparatus for delivery of adapted media
US9113169B2 (en) 2009-05-07 2015-08-18 Qualcomm Incorporated Video encoding with temporally constrained spatial dependency for localized decoding
US8724707B2 (en) 2009-05-07 2014-05-13 Qualcomm Incorporated Video decoding using temporally constrained spatial dependency
US8355585B2 (en) 2009-05-12 2013-01-15 Red Hat Israel, Ltd. Data compression of images using a shared dictionary
US8694547B2 (en) 2009-07-07 2014-04-08 Palo Alto Research Center Incorporated System and method for dynamic state-space abstractions in external-memory and parallel graph search
JP2011024066A (ja) 2009-07-17 2011-02-03 Sony Corp 画像処理装置および方法
KR101712097B1 (ko) 2009-08-19 2017-03-03 삼성전자 주식회사 유연한 직교 변환에 기초한 영상 부호화, 복호화 방법 및 장치
US8345750B2 (en) * 2009-09-02 2013-01-01 Sony Computer Entertainment Inc. Scene change detection
US8411750B2 (en) 2009-10-30 2013-04-02 Qualcomm Incorporated Global motion parameter estimation using block-based motion vectors
US8633838B2 (en) 2010-01-15 2014-01-21 Neverfail Group Limited Method and apparatus for compression and network transport of data in support of continuous availability of applications
US9274001B2 (en) 2010-01-22 2016-03-01 Duke University Dual window processing schemes for spectroscopic optical coherence tomography (OCT) and fourier domain low coherence interferometry
CN103385002A (zh) 2010-02-17 2013-11-06 韩国电子通信研究院 用于对超高清图像进行编码的装置及其方法、以及解码装置及其方法
US9237355B2 (en) * 2010-02-19 2016-01-12 Qualcomm Incorporated Adaptive motion resolution for video coding
EP2365456B1 (en) 2010-03-11 2016-07-20 CompuGroup Medical SE Data structure, method and system for predicting medical conditions
US8442942B2 (en) 2010-03-25 2013-05-14 Andrew C. Leppard Combining hash-based duplication with sub-block differencing to deduplicate data
US8619857B2 (en) 2010-04-09 2013-12-31 Sharp Laboratories Of America, Inc. Methods and systems for intra prediction
EP2559238B1 (en) 2010-04-13 2015-06-03 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Adaptive image filtering method and apparatus
WO2011127964A2 (en) 2010-04-13 2011-10-20 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Apparatus for intra predicting a block, apparatus for reconstructing a block of a picture, apparatus for reconstructing a block of a picture by intra prediction
KR20110123651A (ko) 2010-05-07 2011-11-15 한국전자통신연구원 생략 부호화를 이용한 영상 부호화 및 복호화 장치 및 그 방법
CN102918441B (zh) 2010-06-01 2016-05-25 Hoya株式会社 内窥镜用物镜及内窥镜
US8417039B2 (en) 2010-06-03 2013-04-09 Microsoft Corporation Motion detection techniques for improved image remoting
CN101866366B (zh) 2010-07-15 2012-01-18 哈尔滨工业大学 一种基于内容的图像格式中文文档检索方法
GB2483294B (en) 2010-09-03 2013-01-02 Canon Kk Method and device for motion estimation of video data coded according to a scalable coding structure
WO2012042792A1 (en) 2010-09-30 2012-04-05 Nec Corporation Storage system
CN103477635B (zh) * 2010-10-08 2017-01-18 Ge视频压缩有限责任公司 编码器和编码方法与解码器和解码方法
EP4270957A3 (en) 2010-11-04 2024-06-19 GE Video Compression, LLC Picture coding supporting block merging and skip mode
EP2647202A1 (en) 2010-12-01 2013-10-09 iMinds Method and device for correlation channel estimation
US20120170653A1 (en) 2010-12-30 2012-07-05 General Instrument Corporation Block based sampling coding systems
CN107360420B (zh) 2011-02-09 2020-11-06 Lg 电子株式会社 一种图像解码装置和图像编码装置
HUE044727T2 (hu) 2011-02-09 2019-11-28 Lg Electronics Inc Eljárás kép adatok kódolására és dekódolására egy ideiglenes mozgás vektor becsléssel és azt alkalmazó készülék
KR20120095610A (ko) 2011-02-21 2012-08-29 삼성전자주식회사 다시점 비디오의 부호화 방법 및 장치, 그 복호화 방법 및 장치
JPWO2012128242A1 (ja) 2011-03-18 2014-07-24 ソニー株式会社 画像処理装置、画像処理方法、及び、プログラム
JP6061150B2 (ja) 2011-03-18 2017-01-18 ソニー株式会社 画像処理装置、画像処理方法、及び、プログラム
US8480743B2 (en) 2011-03-25 2013-07-09 Vicente Vanaclocha Vanaclocha Universal disc prosthesis
WO2012147350A1 (ja) * 2011-04-28 2012-11-01 パナソニック株式会社 高画質化に関わる記録媒体、再生装置、記録装置、符号化方法、復号化方法
US8582886B2 (en) 2011-05-19 2013-11-12 Microsoft Corporation Compression of text contents for display remoting
CN103563374B (zh) 2011-05-27 2017-02-08 索尼公司 图像处理设备及方法
US9167020B2 (en) 2011-06-10 2015-10-20 Microsoft Technology Licensing, Llc Web-browser based desktop and application remoting solution
US8644620B1 (en) 2011-06-21 2014-02-04 Google Inc. Processing of matching regions in a stream of screen images
US11496760B2 (en) 2011-07-22 2022-11-08 Qualcomm Incorporated Slice header prediction for depth maps in three-dimensional video codecs
US9521418B2 (en) 2011-07-22 2016-12-13 Qualcomm Incorporated Slice header three-dimensional video extension for slice header prediction
JP5651560B2 (ja) * 2011-09-07 2015-01-14 日本放送協会 動きベクトル予測装置、符号化装置、復号装置、及びこれらのプログラム
US10031636B2 (en) 2011-09-08 2018-07-24 Microsoft Technology Licensing, Llc Remoting desktop displays using move regions
US9351808B2 (en) 2011-09-27 2016-05-31 Sharon M. E. McCarthy Apparatus for removing dental appliance and dental system
GB2495301B (en) 2011-09-30 2018-01-17 Advanced Risc Mach Ltd Method of and apparatus for encoding data
US9357235B2 (en) 2011-10-13 2016-05-31 Qualcomm Incorporated Sample adaptive offset merged with adaptive loop filter in video coding
US9609217B2 (en) 2011-11-02 2017-03-28 Mediatek Inc. Image-based motion sensor and related multi-purpose camera system
US9332271B2 (en) 2011-11-03 2016-05-03 Cisco Technology, Inc. Utilizing a search scheme for screen content video coding
KR101616010B1 (ko) * 2011-11-04 2016-05-17 구글 테크놀로지 홀딩스 엘엘씨 비균일 움직임 벡터 그리드에 대한 움직임 벡터 스케일링
US10003817B2 (en) * 2011-11-07 2018-06-19 Microsoft Technology Licensing, Llc Signaling of state information for a decoded picture buffer and reference picture lists
GB201119206D0 (en) 2011-11-07 2011-12-21 Canon Kk Method and device for providing compensation offsets for a set of reconstructed samples of an image
EP3739886A1 (en) 2011-11-18 2020-11-18 GE Video Compression, LLC Multi-view coding with efficient residual handling
KR101874100B1 (ko) 2011-12-02 2018-07-04 삼성전자주식회사 영상의 부호화 방법 및 장치, 그 복호화 방법 및 장치
US9262986B2 (en) 2011-12-07 2016-02-16 Cisco Technology, Inc. Reference frame management for screen content video coding using hash or checksum functions
US9223534B1 (en) 2011-12-30 2015-12-29 hopTo Inc. Client side detection of motion vectors for cross-platform display
US20140003494A1 (en) 2012-01-05 2014-01-02 Yaniv Frishman Device, system and method of video encoding
US9235313B2 (en) 2012-01-11 2016-01-12 Google Inc. Efficient motion estimation for remote desktop sharing
US9380320B2 (en) 2012-02-10 2016-06-28 Broadcom Corporation Frequency domain sample adaptive offset (SAO)
US20130258052A1 (en) 2012-03-28 2013-10-03 Qualcomm Incorporated Inter-view residual prediction in 3d video coding
US20130268621A1 (en) 2012-04-08 2013-10-10 Broadcom Corporation Transmission of video utilizing static content information from video source
US9154749B2 (en) 2012-04-08 2015-10-06 Broadcom Corporation Power saving techniques for wireless delivery of video
US9286862B2 (en) 2012-04-09 2016-03-15 Oracle International Corporation System and method for detecting a scrolling event during a client display update
US9123084B2 (en) * 2012-04-12 2015-09-01 Activevideo Networks, Inc. Graphical application integration with MPEG objects
US20130271565A1 (en) 2012-04-16 2013-10-17 Qualcomm Incorporated View synthesis based on asymmetric texture and depth resolutions
AU2012202352A1 (en) 2012-04-20 2013-11-07 Canon Kabushiki Kaisha Method, system and apparatus for determining a hash code representing a portion of an image
US9979959B2 (en) 2012-04-20 2018-05-22 Qualcomm Incorporated Video coding with enhanced support for stream adaptation and splicing
US9549180B2 (en) 2012-04-20 2017-01-17 Qualcomm Incorporated Disparity vector generation for inter-view prediction for video coding
US9479776B2 (en) 2012-07-02 2016-10-25 Qualcomm Incorporated Signaling of long-term reference pictures for video coding
CA2878807C (en) 2012-07-09 2018-06-12 Vid Scale, Inc. Codec architecture for multiple layer video coding
US9264713B2 (en) 2012-07-11 2016-02-16 Qualcomm Incorporated Rotation of prediction residual blocks in video coding with transform skipping
US9277237B2 (en) 2012-07-30 2016-03-01 Vmware, Inc. User interface remoting through video encoding techniques
US9467692B2 (en) 2012-08-31 2016-10-11 Qualcomm Incorporated Intra prediction improvements for scalable video coding
US9565452B2 (en) 2012-09-28 2017-02-07 Qualcomm Incorporated Error resilient decoding unit association
CN103841426B (zh) 2012-10-08 2017-04-26 华为技术有限公司 用于运动矢量预测的运动矢量列表建立的方法、装置
CN103916673B (zh) * 2013-01-06 2017-12-22 华为技术有限公司 基于双向预测的编码方法、解码方法和装置
US9225979B1 (en) 2013-01-30 2015-12-29 Google Inc. Remote access encoding
US9578339B2 (en) * 2013-03-05 2017-02-21 Qualcomm Incorporated Parallel processing for video coding
KR20140110221A (ko) * 2013-03-06 2014-09-17 삼성전자주식회사 비디오 인코더, 장면 전환 검출 방법 및 비디오 인코더의 제어 방법
US9201642B2 (en) 2013-03-15 2015-12-01 International Business Machines Corporation Extending platform trust during program updates
US11317123B2 (en) 2013-04-25 2022-04-26 Vmware, Inc. Systems and methods for using pre-calculated block hashes for image block matching
CN104142939B (zh) 2013-05-07 2019-07-02 杭州智棱科技有限公司 一种基于运动特征信息匹配特征码的方法与设备
CN103281538B (zh) 2013-06-06 2016-01-13 上海交通大学 基于滚动哈希和块级别帧内预测的帧内编码方法
US9210434B2 (en) 2013-06-12 2015-12-08 Microsoft Technology Licensing, Llc Screen map and standards-based progressive codec for screen content coding
US20140369413A1 (en) * 2013-06-18 2014-12-18 Vmware, Inc. Systems and methods for compressing video data using image block matching
US10812694B2 (en) 2013-08-21 2020-10-20 Faro Technologies, Inc. Real-time inspection guidance of triangulation scanner
US20150063451A1 (en) 2013-09-05 2015-03-05 Microsoft Corporation Universal Screen Content Codec
JP6212345B2 (ja) 2013-10-02 2017-10-11 ルネサスエレクトロニクス株式会社 動画像符号化装置およびその動作方法
EP3061233B1 (en) 2013-10-25 2019-12-11 Microsoft Technology Licensing, LLC Representing blocks with hash values in video and image coding and decoding
EP3061253A1 (en) 2013-10-25 2016-08-31 Microsoft Technology Licensing, LLC Hash-based block matching in video and image coding
WO2015131325A1 (en) 2014-03-04 2015-09-11 Microsoft Technology Licensing, Llc Hash table construction and availability checking for hash-based block matching
US10368092B2 (en) 2014-03-04 2019-07-30 Microsoft Technology Licensing, Llc Encoder-side decisions for block flipping and skip mode in intra block copy prediction
CN105359531B (zh) 2014-03-17 2019-08-06 微软技术许可有限责任公司 用于针对屏幕内容编码的编码器侧判定的方法和***
US9715559B2 (en) 2014-03-17 2017-07-25 Qualcomm Incorporated Hash-based encoder search for intra block copy
US10091512B2 (en) 2014-05-23 2018-10-02 Futurewei Technologies, Inc. Advanced screen content coding with improved palette table and index map coding methods
CN105706450B (zh) 2014-06-23 2019-07-16 微软技术许可有限责任公司 根据基于散列的块匹配的结果的编码器决定
EP3175614A4 (en) 2014-07-31 2018-03-28 Hewlett-Packard Development Company, L.P. Virtual changes to a real object
KR102358276B1 (ko) 2014-09-30 2022-02-04 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 비디오 코딩을 위한 해시 기반 인코더 결정
GB2531811B (en) 2014-11-03 2021-02-17 Sony Europe Bv A method, system and apparatus for providing improved audience participation
CN104574440A (zh) 2014-12-30 2015-04-29 安科智慧城市技术(中国)有限公司 一种视频运动目标跟踪方法及装置
US10681326B2 (en) 2016-05-19 2020-06-09 AVAGO TECHNOLOGlES INTERNATIONAL SALES PTE. LIMITED 360 degree video system with coordinate compression
US10390039B2 (en) 2016-08-31 2019-08-20 Microsoft Technology Licensing, Llc Motion estimation for screen remoting scenarios
US11095877B2 (en) 2016-11-30 2021-08-17 Microsoft Technology Licensing, Llc Local hash-based motion estimation for screen remoting scenarios
US20180196609A1 (en) 2017-01-12 2018-07-12 Qualcomm Incorporated Data Deduplication Using Multi-Chunk Predictive Encoding
WO2018164955A1 (en) 2017-03-06 2018-09-13 Rivetz Corp. Device enrollment protocol
US10992939B2 (en) 2017-10-23 2021-04-27 Google Llc Directional intra-prediction coding
US10848782B2 (en) 2018-09-21 2020-11-24 Tencent America LLC Method and apparatus for video coding
US11146800B2 (en) 2018-09-24 2021-10-12 Tencent America LLC Low latency local illumination compensation
US11509919B2 (en) 2018-10-17 2022-11-22 Tencent America Reference sample memory size restrictions for intra block copy
US10917493B2 (en) 2018-10-19 2021-02-09 Bby Solutions, Inc. Dynamic edge cache content management
US10701385B1 (en) 2019-01-13 2020-06-30 Tencent America LLC Method and apparatus for reference sample memory reuse for intra picture block compensation
US10771799B2 (en) 2019-01-15 2020-09-08 Tencent America LLC Method and apparatus for video coding
US10958904B2 (en) 2019-02-01 2021-03-23 Tencent America LLC Method and apparatus for video coding
US11252442B2 (en) 2019-04-08 2022-02-15 Tencent America LLC Method and apparatus for video coding
US11363279B2 (en) 2019-04-15 2022-06-14 Tencent America LLC Method and apparatus in video coding with flexible coding order
US11930159B2 (en) 2019-11-29 2024-03-12 Intel Corporation Method and system of video coding with intra block copying
US11202085B1 (en) 2020-06-12 2021-12-14 Microsoft Technology Licensing, Llc Low-cost hash table construction and hash-based block matching for variable-size blocks

Also Published As

Publication number Publication date
US20170302936A1 (en) 2017-10-19
RU2017110461A3 (pt) 2018-10-04
EP3389276B1 (en) 2021-01-13
CN110582001A (zh) 2019-12-17
RU2017110461A (ru) 2018-10-04
EP3202142A1 (en) 2017-08-09
KR102490706B1 (ko) 2023-01-19
CN105981382A (zh) 2016-09-28
WO2016049834A1 (en) 2016-04-07
AU2014408223A1 (en) 2017-03-16
EP3202142B1 (en) 2020-11-11
RU2679981C2 (ru) 2019-02-14
CA2961089A1 (en) 2016-04-07
EP3202142A4 (en) 2018-02-28
CN105981382B (zh) 2019-05-28
US11025923B2 (en) 2021-06-01
MX2017004210A (es) 2017-11-15
BR112017004490A2 (pt) 2017-12-05
US11736701B2 (en) 2023-08-22
JP2017535148A (ja) 2017-11-24
EP3416386B1 (en) 2021-01-13
EP3416386A1 (en) 2018-12-19
CA2961089C (en) 2023-03-28
JP6462119B2 (ja) 2019-01-30
EP3389276A1 (en) 2018-10-17
CN115665423A (zh) 2023-01-31
US20210218974A1 (en) 2021-07-15
KR20170063895A (ko) 2017-06-08
CN110582001B (zh) 2022-10-14
AU2014408223B2 (en) 2019-12-05
US20230345013A1 (en) 2023-10-26
KR102358276B1 (ko) 2022-02-04
KR20220019297A (ko) 2022-02-16
CA3186389A1 (en) 2016-04-07

Similar Documents

Publication Publication Date Title
US11736701B2 (en) Hash-based encoder decisions for video coding
CN110024398B (zh) 针对屏幕远程处理场景的局部的基于散列的运动估计
US10368092B2 (en) Encoder-side decisions for block flipping and skip mode in intra block copy prediction
US10567754B2 (en) Hash table construction and availability checking for hash-based block matching
US10136140B2 (en) Encoder-side decisions for screen content encoding
US10390039B2 (en) Motion estimation for screen remoting scenarios
RU2683165C1 (ru) Внутреннее предсказание блочного копирования с асимметричными разделами и схемами поиска на стороне кодера, диапазоны поиска и подходы к разделению
EP3158751B1 (en) Encoder decisions based on results of hash-based block matching
BR112017004041B1 (pt) Método implementado por computador, mídia legível por computador e sistema de computação
BR122022001703B1 (pt) Método, sistema de computador, mídia legível por computador

Legal Events

Date Code Title Description
B06U Preliminary requirement: requests with searches performed by other patent offices: procedure suspended [chapter 6.21 patent gazette]
B09A Decision: intention to grant [chapter 9.1 patent gazette]
B16A Patent or certificate of addition of invention granted [chapter 16.1 patent gazette]

Free format text: PRAZO DE VALIDADE: 20 (VINTE) ANOS CONTADOS A PARTIR DE 30/09/2014, OBSERVADAS AS CONDICOES LEGAIS