Diretor Substituto de Patentes, Programas de Computador e Topografias de Circuitos Integrados “MODIFICAÇÃO DE UM FLUXO DE BITS CODIFICADO”
Referência remissiva a pedidos relacionados
Esse pedido reivindica o benefício tanto de (1) pedido provisional US número de série 60/919.702, intitulado “Modifying a coded bitstream”, e depositado em 23 de março de 5 2007 (número de referência do advogado PU070063), como (2) pedido provisional US número de série 60/934.634, intitulado “Modifying a coded bitstream”, e depositado em 14 de junho de 2007 (número de referência do advogado PU070137). Esses dois pedidos de prioridade são pelo presente incorporados a título de referência na íntegra.
ANTECEDENTES
Campo técnico
A presente revelação provê implementações referentes, por exemplo, à codificação.
Descrição da técnica anterior
Impressão com marca d'água envolve, tipicamente modificar uma porção de dados de tal modo que a marca d’água possa ser detectada posteriormente. Vários tipos diferentes 15 de dados podem ser impressos com marca d'água, incluindo dados codificados. Entretanto, . esquemas de codificação estão avançando e mecanismos existentes para modificar dados codificados podem não fornecer capacidades desejadas de impressão com marca d'água > para tais esquemas de codificação avançados.
Sumário
De acordo com um aspecto geral, dados codificados são acessados que incluem pelo menos uma primeira porção e uma segunda porção. A segunda porção é decodificável para produzir um resultado que se baseia na primeira porção bem como na segunda porção. Uma primeira porção modificada é determinada de tal modo que a segunda porção seja decodificável para produzir o resultado com base na segunda porção e primeira porção modifi25 cada.
De acordo com outro aspecto geral, informações identificam um valor de substituição para uma primeira porção de um conjunto de dados codificado. O conjunto de dados codificado também inclui uma segunda porção, e a decodificação da segunda porção se baseia na segunda porção e na primeira porção. O valor de substituição tem uma proprieda30 de tal que: (1) a decodificação da segunda porção produz um resultado decodificado específico se a decodificação for executada no conjunto de dados codificado incluindo a primeira porção, e (2) a decodificação da segunda porção produz o resultado decodificado específico se a decodificação for realizada no conjunto de dados codificado incluindo o valor de substituição em vez da primeira porção.
De acordo com outro aspecto geral, um fluxo de bits codificado é acessado que inclui pelo menos uma primeira porção e uma segunda porção, a segunda porção sendo decodificável para produzir um resultado que se baseia na primeira porção bem como na segunda porção. A primeira porção é substituída com um valor de substituição para produzir um fluxo de bits codificado modificado para o qual uma decodificação da segunda porção ainda produzirá o resultado.
De acordo com outro aspecto geral, dados codificados incluem uma primeira porção modificada e uma segunda porção, a primeira porção modificada sendo uma substituição de uma primeira porção. A segunda porção é decodificável para produzir um resultado que se baseia na primeira porção modificada bem como na segunda porção. O resultado é igual como se a decodificação da segunda porção fosse realizada com base na segunda porção e a primeira porção em vez da segunda porção e primeira porção modificada.
De acordo com outro aspecto geral, um conjunto de dados modificado é acessado incluindo uma primeira porção modificada e uma segunda porção. A primeira porção modificada resulta de uma modificação de uma primeira porção. A segunda porção é decodificável para produzir um resultado, e o resultado se baseia na primeira porção modificada bem como na segunda porção. A segunda porção é decodificada para produzir o resultado, onde o resultado é igual como se decodificação da segunda porção fosse realizada com base na segunda porção e primeira porção em vez da segunda porção e primeira porção modificada. A primeira porção modificada é decodificada.
Os detalhes de uma ou mais implementações são expostos nos desenhos em anexo e descrição abaixo. Mesmo se descrito em uma modalidade específica, deve ser evidente que implementações podem ser configuradas ou incorporadas em vários modos. Por exemplo, uma implementação pode ser realizada como um método.ou incorporada como um aparelho configurado para executar um conjunto de operações, ou incorporada como um aparelho para armazenar instruções para executar um conjunto de operações, ou incorporada em um sinal. Outros aspectos e características tornar-se-ão evidentes a partir da seguinte descrição detalhada considerada em combinação com os desenhos em anexo e reivindicações.
Breve descrição dos desenhos
A figura 1 é um diagrama de blocos de uma implementação de impressão de marca d’água de fluxo codificado por entropia.
A figura 2a é um diagrama de blocos que mostra uma ordenação de operações utilizadas na modificação de um fluxo de bits codificado.
A figura 2b é um diagrama de blocos que mostra outra ordenação de operações utilizada na modificação de um fluxo de bits codificado.
A figura 2c é um diagrama de blocos de um método para modificar um fluxo de bits codificado.
A figura 2d é um diagrama de blocos de outro método para modificar um fluxo de bits codificado.
A figura 3 é um diagrama de fluxo de um método para modificar um elemento de sintaxe alvo.
A figura 4 é um diagrama de fluxo de um método para modificar um elemento de sintaxe alvo que é codificado como modo de derivação.
A figura 5 é um diagrama de fluxo de outro método para modificar um elemento de sintaxe alvo.
A figura 6 é um diagrama de fluxo de um método para substituir um bloco de bits codificado.
A figura 7 é um diagrama de fluxo de um método para decodificar um fluxo de bits modificado.
A figura 8 é um diagrama de fluxo de um método para detectar informações de marca d’água.
A figura 9 é um diagrama de fluxo de outro método para detectar informações de marca d’água.
Descrição detalhada
Pelo menos uma implementação modifica um fluxo de bits codificado por entropia diretamente sem exigir etapas de decodificar e recodificar por entropia. Além disso, implementações são fornecidas nas quais o código de entropia é um código aritmético e, mais especificamente, em que o esquema de codificação aritmético conhecido como Codificação aritmética binária adaptável com base em contexto (CABAC) é utilizado. CABAC pode ser caracterizado como um esquema de codificação com “memória” em que sequências codificadas subsequentes dependem de sequências codificadas anteriores. Desse modo, uma sequência codificada dada é modificada, na implementação, de tal modo que sequências codificadas subsequentes podem ainda ser corretamente decodificadas. Adicionalmente, implementações são fornecidas que aplicam uma marca d’água a um fluxo de bits codificado por entropia diretamente sem exigir etapas de decodificar e recodificar por entropia. Pelo menos uma implementação de impressão com marca d’água modifica o fluxo de bits codificado por CABAC. CABAC é amplamente utilizado no padrão H.264/AVC.
Em muitas aplicações há uma necessidade crescente no mercado para impressão com marca d’água de um fluxo de vídeo comprimido. Abordagens anteriores descomprimiram o fluxo, aplicaram a impressão de marca d’água no domínio de pixel e então recomprimiram. Um avanço anterior foi utilizar informações a partir do fluxo comprimido original para simplificar a recompressão. Isso foi aperfeiçoado com técnicas que descomprimem parcialmente o fluxo por aplicar decodificação por entropia e análise do fluxo de bits codificado. Após decodificação por entropia, os algoritmos de impressão de marca d’água trabalharam diretamente em elementos de sintaxe como coeficientes e vetores de movimento. Após o fluxo ser modificado para representar os dados de marca d’água, a codificação por entropia seria aplicada. Os requerentes propuseram as implementações nessa revelação que aplicam a impressão com marca d’água em um fluxo de bits codificado por entropia diretamente sem as etapas de decodificar e recodificar por entropia.
A impressão com marca d’água de um fluxo CABAC envolve alterar um elemento de sintaxe codificado no fluxo CABAC. Entretanto, como mencionado acima, é desejável aplicar-se uma marca d’água por modificar um elemento de sintaxe codificado de um fluxo de bits CABAC sem alterar a codificação de quaisquer outros elementos de sintaxe. Isso é difícil porque o valor de cada elemento em um fluxo CABAC afeta a interpretação dos valores que seguem. Em geral, a alteração de um elemento de sintaxe codificado fará com que todos os elementos codificados futuros sejam interpretados erroneamente ou não decodificáveis pelo decodificador.
Algumas aplicações têm uma limitação adicional de que as alterações feitas em um fluxo de bits codificado não podem alterar o comprimento do fluxo de bits. No extremo, é necessário que um elemento codificado seja substituído com um valor alternativo somente se o comprimento de bits do valor alternativo for igual àquele do valor original.
Inicialmente, os requerentes discutem o cenário no qual uma cadeia de bits em um fluxo H.264/AVC codificado por CABAC pode ser substituída com uma cadeia de bits diferente de tal modo que as modificações afetem somente um elemento de sintaxe alvo e não interfiram na interpretação correta de quaisquer outros elementos de sintaxe codificados. Em um tal cenário, não é necessário que a cadeia de bits de substituição seja do mesmo comprimento que a cadeia de bits original. Nem todos os elementos de sintaxe em um fluxo de bits H.264/AVC são codificados por CABAC e pode ser possível modificar esses elementos não CABAC. Entretanto, pelo menos uma implementação descrita aqui concentra especificamente naqueles elementos de sintaxe que são codificados com CABAC.
Em segundo lugar, os requerentes descrevem e mostram uma abordagem eficiente que pode ser utilizada quando não exigem que a cadeia de bits de substituição seja do mesmo comprimento que a cadeia de bits original.
Em terceiro lugar, os requerentes descrevem e mostram como modificar elementos de sintaxe em um fluxo de bits codificado por CABAC, como descrito acima, para incorporar informações no fluxo de bits. Além disso, essas informações podem ser posteriormente recuperadas por analisar o fluxo de bits modificado ou por decodificar o fluxo de bits em uma sequência de imagens de domínio de pixel e analisar essas imagens.
Finalmente, os requerentes descrevem e mostram como o modo de derivação pode ser explorado para aperfeiçoar a eficiência do processo de incorporação de marca d’água para o fluxo de bits codificado.
Uma breve discussão de CABAC, Modo de derivação e Impressão com marca d’água é fornecida para auxiliar a compreender as várias implementações. Essas discussões são frequentemente específicas. Entretanto, essas discussões não pretendem ser completas e além disso, cada detalhe nessas discussões pode não necessariamente se aplicar a todas as implementações descritas nesse pedido. Adicionalmente, essas discussões incluem muito material que é conhecido por aqueles versados na técnica. Entretanto, essas discussões incluirão invariavelmente material, ou a organização de material, que é novo, embora tais instâncias possam não ser indicados especificamente. Essas discussões não pretendem limitar a amplitude do pedido. Em vez disso, essas discussões fornecem um ou mais contextos específicos, de muitos contextos possíveis, para auxiliar o leitor a compreender as implementações.
Discussão sobre CABAC
A etapa final em muitos métodos de compressão de vídeo é a codificação por entropia sem perda dos dados comprimidos. Em H.264/AVC, CABAC é comumente utilizado para codificação por entropia. CABAC é um esquema de codificação aritmética que obtém desempenho de compressão aperfeiçoado por manter contextos individuais para cada tipo de elemento de sintaxe e por adaptar esses contextos com cada elemento codificado. Isso representa um número de extensões de esquemas de codificação aritmética típicos. Em primeiro lugar, CABAC é projetado para codificar aritmeticamente dados binários. Em outras palavras, cada símbolo é um 0 ou um 1. Valores de elemento de sintaxe que não são inerentemente binários são primeiramente binarizados antes da codificação aritmética. Isso significa que há somente a probabilidade de um 0 e a probabilidade de um 1. O método de binarização específico pretende otimizar a eficácia da codificação aritmética subsequente. Cada elemento de sintaxe binarizado é denominado uma cadeia bin. Uma segunda extensão é que a codificação é adaptável. À medida que cada bit de cadeia de bin é processado, as variáveis de decodificação que controlam a codificação são deixadas mudar. Finalmente, essa adaptação é permitida ser baseada em contexto. Associado a cada bit está um contexto composto de um número de variáveis. Algumas das variáveis de contexto são compartilhadas entre um número de contextos e algumas são dedicadas a um contexto único. A codificação de um elemento de sintaxe causa a adaptação do contexto associado. H.264/AVC define 460 contextos separados que são mantidos durante codificação e decodificação.
O termo “Variáveis de decodificação” utilizado acima, se refere a dois conjuntos de variáveis. O primeiro conjunto é denominado “Variáveis de contexto” que contém duas variáveis que representam a probabilidade de um 0 ou um 1 (representado pela identificação de qual desses símbolos é menos provável, LPS, e um índice de estado de probabilidade, I, em uma tabela de probabilidades indicando a probabilidade desse LPS aparecer a seguir no fluxo de bits). Cada contexto é associado a um índice de contexto que mantém um conjunto de variáveis de contexto. O segundo conjunto é denominado “Variáveis de estado” que é composto de duas variáveis para definir o valor de faixa de CABAC interno (representado pela parte inferior d faixa, L, e a largura da faixa, R). As variáveis L e R são compartilhadas entre todos os elementos de sintaxe que separam LPS e valores I são mantidos para cada contexto. Os termos “variáveis de estado”, “valor(es) de estado” e “valores de variável de estado” são utilizados de forma intercambiável aqui.
Após binarização, as variáveis de decodificação apropriadas são recuperadas e utilizadas para codificar aritmeticamente a cadeia de bin. Após codificação (ou decodificação) de cada bit, o contexto correspondente será atualizado com base no bit codificado (ou decodificado) e os valores de contexto anteriores.
Para um elemento de sintaxe específico, espera-se que o símbolo seguinte a ser codificado seja o MPS (o símbolo mais provável é o símbolo binário que não é o LPS). Se isso ocorrer, fará com que o índice, I, mude para refletir uma diminuição adicional na expectativa ou probabilidade do LPS que aparece a seguir. Se o LPS aparecer, o índice mudará para refletir um aumento na probabilidade do LPS. A probabilidade do LPS não pode exceder 50% pois isso significaria que o símbolo não mais é o menos provável. Nesse caso, o LPS mudará para o outro símbolo e o índice novamente representará uma probabilidade menor do que 50%.
Os valores L e R são atualizados do mesmo modo que todos os processos de codificação aritmética. Dependendo de qual símbolo é codificado, o L será o limite inferior do intervalo atual e o R será a largura do intervalo atual.
Em geral, há duas cadeias de bin que resultam nas mesmas alterações nas variáveis de estado (especificamente L e R) e isso indicaria que não é possível modificar um fluxo de bits aritmeticamente codificado sem fazer com que o decodificador interprete erroneamente todos os elementos codificados subsequentes. Entretanto, CAB requer que L e R sejam representados com números binários de comprimento fixo. Isso é realizado através de um processo conhecimento como renormalização. Detalhes específicos da renormalização do L e R podem ser encontrados, por exemplo, no padrão H.264.
Um resultado desse processo de renormalização é que se torna possível para um número de diferentes cadeias de bin induzir as mesmas alterações no L e R. Pelo menos uma implementação explora esse fato para identificar valores de elemento de sintaxe que podem ser substituídos com valores diferentes enquanto mantém os valores originais de variável de estado L e R no decodificador de CABAC.
Discussão de modo de derivação
No caso especial de elementos de sintaxe para os quais os dois símbolos têm probabilidade igual, o LPS e índice de estado seriam atualizados constantemente sem introduzir nenhum ganho em termos de eficiência de codificação. A probabilidade representada pelo índice seria essencialmente 50% significando que a faixa, R, experimentaria a mesma alteração previsível de um bit para o seguinte.
Para acelerar o processo de codificação/decodificação sem comprometer eficiência de codificação, elementos de sintaxe para os quais se espera que os símbolos tenham probabilidade igual são identificados e tratados em um modo especial denominado modo de derivação. Aqui, nenhum contexto é utilizado e a probabilidade dos dois símbolos é fixa para ser 0,5. O resultado é que a faixa, R, será metade do valor após cada bin decodificado independente de seu valor. A renormalização dobraria a R de modo que a representação final de comprimento fixo de R permanecerá inalterada na decodificação do modo de derivação. Somente a parte inferior da faixa, L, se adapta à medida que novos símbolos são codificados. Pelo menos uma implementação explora modo de derivação para simplificar a busca por valores de elemento de sintaxe que podem ser substituídos com valores diferentes enquanto mantém os valores originais de variável de estado no decodificador de CABAC.
O padrão H.264 especifica três elementos de sintaxe que devem ser codificados com CABAC modo de derivação. São o sinal de coeficientes, o sufixo de diferença de vetor de movimento, e o sufixo de dados de coeficiente.
Discussão sobre impressão com marca d’água
Os requerentes apresentam agora uma discussão curta sobre o campo geral de impressão com marca d’água e a área mais específica nesse campo na qual uma ou mais implementações descritas se aplicam. Aqueles com conhecimentos comuns na técnica de impressão com marca d’água estarão familiarizados com grande parte das informações apresentadas aqui.
A frase “impressão com marca d’água digital”, como utilizado aqui, se refere tipicamente a métodos que modificam uma obra de arte (tipicamente, uma imagem, sequência de imagem em movimento, ou clipe de áudio), de acordo com alguns dados de carga útil, de tal modo que as seguintes condições sejam atendidas:
1. a versão modificada da obra é indistinguível de forma perceptual em relação à versão original da obra, e
2. os dados de carga útil podem ser recuperados da versão modificada da obra em um momento posterior.
Uma subclasse de métodos de impressão com marca d’água digital, mencionados como “impressão com marca d’água digital robusta” introduz uma terceira condição:
3. os dados de carga útil podem ser recuperados a partir de uma versão distorcida da versão modificada da obra,onde a distorção pode ter sido introduzida pelo processamento de sinal comum e tratamento de sinal aos quais a obra modificada pode ter sido submetida (por exemplo, compressão, filtração de redução de ruído, intensificações de cor, etc.) ou a distorção pode ter sido introduzida intencionalmente por um adversário que tenta tornar os dados de carga útil irrecuperáveis.
Há muitas aplicações de impressão com marca d’água digital robusta incluindo, porém não limitado a, o que se segue:
1. identificação do proprietário: a carga útil de marca d’água identifica o proprietário de uma obra;
2. controle de cópia: a carga útil de marca d’água indica um direito autoral associado a uma obra. Dispositivos para visualização, duplicação, gravação, impressão, distribuição ou qualquer outra ação podem recuperar os dados de carga útil e limitar a ação para aqueles permitidos pelo direito autoral.
3. rastreamento de transação: a carga útil de marca d’água identifica o receptor a quem a cópia de uma obra foi legitimamente distribuída. Isso pode ser útil quando os receptores legítimos não recebem os direitos para distribuir adicionalmente a obra. Se uma obra não autorizada for descoberta, o proprietário do conteúdo original pode recuperar a carga útil a partir da cópia não autorizada e identificar o receptor responsável pelo uso não autorizado.
Aqueles com conhecimentos comuns na técnica reconhecerão que há muitas outras aplicações de impressão com marca d’água digital robusta.
A impressão com marca d’água pode ser executada na “banda base” ou em obras comprimidas. Sequências de imagem em movimento ou imageamento de banda base são, por exemplo, representações de domínio de pixel. Obras de áudio de banda base são, por exemplo, amostras de áudio. Algumas aplicações exigem impressão com marca d’água de uma obra comprimida. Nesse caso, o resultado também é uma obra comprimida. A última etapa de compressão é tipicamente codificação por entropia e a primeira etapa de descompressão é tipicamente decodificação por entropia. O processo de codificação / decodificação por entropia é tipicamente sem perda. Uma abordagem para impressão com marca d’água de uma obra comprimida é primeiramente aplicar a decodificação por entropia, a seguir aplica a descompressão para obter uma representação de banda base. A representação de banda base é impressa com marca d’água e a obra impressa com marca d’água resultante é comprimida e codifica por entropia. Essa abordagem pode ser demorada e pode resultar em degradação de qualidade perceptual devido a recompressão.
Para melhorar a qualidade perceptual e reduzir a computação necessária, informações a partir da obra comprimida original, como vetores de movimento, decisões de modo, fatores de qualidade e outras informações podem ser poupados durante descompressão e utilizadas durante recompressão. Isso significa que a recompressão não necessita executar nenhuma estimação de movimento (desse modo poupando computação e/ou tempo) e uso dos fatores de quantização originais e decisões de modo pode resultar em qualidade perceptual aperfeiçoada.
Uma classe de algoritmos de impressão com marca d’água denominada “impressão com marca d’água de domínio comprimido” surgiu. Esses métodos podem ser descritos como executando uma “decodificação parcial” antes de impressão com marca d’água em vez de “decodificação total” anteriormente descrito. Aqui a obra comprimida é primeiramente decodificada por entropia para expor os elementos de sintaxe da obra comprimida. Esses podem incluir coeficientes (DCT de bloco ou coeficientes de onda pequena, por exemplo), vetores de movimento, tipos de imagem, modos de previsão, e muitos outros elementos de sintaxe. O algoritmo de impressão com marca d’água modifica então diretamente alguns daqueles elementos de sintaxe. Finalmente, os elementos de sintaxe modificados são codificados por entropia para obter a obra comprimida modificada.
Pelo menos uma implementação descrita nesse pedido está compreendida em uma nova classe de algoritmos de impressão com marca d’água que poderia ser denominada “impressão com marca d’água de fluxo codificado por entropia”. Esses métodos modificam diretamente um fluxo codificado por entropia, como ilustrado na figura 1.
Com referência à figura 1, o fluxo comprimido original é diretamente modificado pela modificação de fluxo 102, de acordo com a Carga útil, e o resultado é o fluxo comprimido marcado resultante 103. A carga útil pode ser, por exemplo, o número de série do tocador, o modelo do tocador, ou essencialmente qualquer outra informação que se deseja ser utilizada para identificação posterior. O processo de modificação de fluxo é informado com relação ao local de todas as alterações a serem feitas e as alterações efetivas a serem feitas por metadados que podem ser geradas durante um estágio de pré-processamento 104. Os metadados 105 são gerados por decodificação 106 do fluxo comprimido original, e geração de uma marca d’água 108. Os metadados identificam os locais no fluxo onde alterações devem ser feitas (isto é, para geração de marca d’água) e indicam como o fluxo deve mudar em resposta a diferentes símbolos de carga útil. A figura 1 mostra um caso especial no qual os metadados são gerados por uma análise dos elementos de sintaxe decodificados da obra comprimida. Um aspecto de desafio de um método de impressão com marca d’água como esse é a geração dos metadados. O que se segue explica como isso pode ser feito para uma ou mais implementações.
O parágrafo anterior e a figura 1 sugerem que pode haver um estágio de préprocessamento 104. É útil indicar a situação na qual há três momentos importantes. O primeiro momento é onde/quando o fluxo de bits comprimido é analisado para gerar alguns metadados. O segundo momento é onde/quando alguns ou todos os metadados gerados no primeiro momento são utilizados, juntamente com uma sequência específica de símbolos, conhecido como a carga útil, para modificar o fluxo de bits. O terceiro momento é onde/quando alguns ou todos ou nenhum dos metadados gerados no primeiro momento são utilizados para analisar um fluxo de bits modificado ou uma sequência de imagem de movimento obtida por descompressão do fluxo de bits modificado ou uma versão distorcida da sequência de imagem de movimento obtida por descompressão do fluxo de bits modificado. A finalidade dessa análise, no terceiro momento, é recuperar a carga útil.
Para entender o contexto, considere que o primeiro momento ocorre antes da distribuição de uma obra, o segundo momento ocorre durante duplicação onde a carga útil utilizada para cada cópia identifica exclusivamente aquela cópia, e o terceiro momento ocorre após uma cópia não autorizada da obra ter sido encontrada em cujo momento a carga útil é recuperada para revelar qual das cópias distribuídas foi a fonte da cópia não autorizada. Esse exemplo é somente uma ilustração, e não pretende sugerir quaisquer limites para a aplicação desses conceitos. Além disso, embora possa haver exigências específicas de aplicação, não há exigência técnica de que o primeiro momento (o pré-processamento) e o segundo momento (a incorporação) sejam diferentes.
Como exemplos adicionais, os requerentes se referem novamente à figura 1. O estágio de pré-processamento pode ser realizado durante a criação de um filme para entrega, por exemplo. Em um cenário, um processo é realizado para identificar locais de elementos codificados para os quais substituições aceitáveis foram determinadas. Os resultados desse processo (por exemplo, os locais de tais elementos codificados e os valores de substituição aceitáveis) são armazenados em metadados que são incluídos com o filme codificado.
A modificação de fluxo pode ser realizada durante reprodução do filme, na qual, por exemplo, o número serial do tocador (por exemplo, um tocador de software, um tocador de set top box, ou um tocador de DVD) é utilizado como a carga útil. A carga útil é utilizada, por exemplo, para determinar se deve substituir os elementos codificados identificados. Por exemplo, se uma alternativa aceitável única for fornecida nos metadados, então um “0” na sequência de carga útil pode indicar “sem substituição” para a sequência codificada associada, e um “1” pode indicar “substituição”. Como outro exemplo, todos os locais identificados podem ser substituídos, e a carga útil pode indicar qual de dois valores de substituição fornecidos (para cada sequência codificada que é identificada pelo local) deve ser utilizado. Por exemplo, um “0” pode indicar o uso da primeira substituição, e um “1” pode indicar o uso da segunda substituição.
A recuperação da carga útil pode ser realizada em um local que não é relacionado aos locais nos quais a modificação de fluxo ocorreu. A chave é ter acesso a um documento que contém dados baseados em fluxo modificado. Por exemplo, um fluxo modificado pode ser copiado eletronicamente e colocado em um DVD gravável, ou um fluxo modificado pode ser apresentado e então gravado novamente e codificado, e então colocado em um DVD gravável. Se esse DVD gravável for adquirido, então esse DVD gravável pode ser analisado para recuperar a carga útil.
Incorporação de Dados baseados em CABAC em fluxos de bits codificados por AVC
Um modo para imprimir com marca d’água um fluxo comprimido é alterar os valores de um ou mais elementos de sintaxe de acordo com as seguintes exigências/condições:
R1. o fluxo comprimido modificado ainda é um fluxo válido (permanece em conformidade com o padrão de compressão específico).
R2. a sequência de imagem em movimento obtida por descompressão do fluxo comprimido modificado é indistinguível de forma perceptual a partir da sequência de imagem em movimento obtida por descompressão do fluxo comprimido original.
R3. A modificação no fluxo resulta em uma alteração mensurável na sequência de imagem em movimento obtida por descompressão do fluxo comprimido modificado.
A exigência R1 é particularmente um desafio quando a técnica de compressão utiliza uma técnica de codificação por entropia de código aritmético. Esse é o caso para H.264/AVC com CABAC.
Os requerentes consideram primeiramente a exigência R1 e discutem como uma cadeia de bits em um fluxo H.264/AVC codificado por CABAC pode ser substituída com uma cadeia de bits diferente de tal modo que fluxo comprimido modificado ainda é um fluxo válido. Isso requer que as modificações afetem somente um elemento de sintaxe alvo e não interfiram na interpretação correta de quaisquer outros elementos de sintaxe codificados. Nessa implementação, não é necessário que a cadeia de bits de substituição tenha o mesmo comprimento que a cadeia de bits original (essa limitação é discutida posteriormente). Para fins de explicação, a seguinte descrição trata da modificação de um elemento de sintaxe único, mencionado como o “elemento alvo”. Entretanto, aqueles com conhecimentos comuns na técnica reconhecerão que o mesmo conceito pode ser aplicado a um conjunto de elementos alvo que inclui mais de um elemento alvo.
O elemento alvo tem um “valor original” que é binarizado em uma “cadeia bin original”. A cadeia bin original é codificada por CABAC, juntamente com outros elementos de sintaxe para fornecer o “Bloco codificado original” de bits. No processo de codificação por CABAC, a cadeia de bit original modifica as variáveis de estado e os contextos que são associados ao sintaxe a partir de seus valores originais para seus valores modificados.
Em várias implementações descritas, há duas etapas para modificar um fluxo de bits codificado por CABAC para estar de acordo com a exigência R1, porém as etapas podem ser realizadas em qualquer ordem. Ao discutir essas etapas, faz-se referência a “Etapa 1” e “Etapa 2”, porém esses números de etapa não pretendem indicar ou exigir qualquer ordem específica ou particular de desempenho das mesmas. As figuras 2a e 2b são diagramas de blocos que mostram as etapas para cumprir a exigência R1.
Dado um fluxo de bits H.264/AVC codificado por CABAC, a etapa 1 é construir um mapeamento (202) a partir do elemento alvo para o bloco codificado original. Em uma implementação prática, isso é feito por decodificar o fluxo de bits e rastrear quais bits de fluxo de bits produzem quais elementos de sintaxe (e valores variáveis de estado correspondentes). Em uma segunda implementação prática, um decodificador CABAC é aplicado ao fluxo de bits comprimido para expor os elementos de sintaxe. Esses elementos de sintaxe são então processados por um codificador de CABAC com instrumento para recuperar o fluxo de bits comprimido original. O fluxo de bits recuperado não é de interesse aqui, porém em vez disso é a instrumentação do codificador de CABAC que é útil. O codificador de CABAC com instrumento pode ser utilizado para rastrear a correspondência entre elementos de sintaxe e suas posições finais no fluxo de bits comprimido.
A etapa 2 é para buscar um ou mais valores alternativos aceitáveis para o elemento alvo (204). Um modo para buscar valores alternativos aceitáveis é examinar todos os valores alternativos possíveis e determinar quais, se algum, são aceitáveis. Cada valor de sintaxe alternativo possível será binarizado por uma cadeia de bin alternativa. A cadeia de bin alternativa é codificada por CABAC, juntamente com outros elementos de sintaxe para fornecer o Bloco Codificado de bits alternativo. No processo de codificação por CABAC, a cadeia de bin alternativa modifica as variáveis de estado e os contextos afetados a partir de seus valores originais para seus valores alternativos. Se todos os valores de variável de estado alternativos e os contextos afetados forem idênticos a todos os valores de variável de estado modificados e os contextos afetados, o valor de sintaxe alternativo possível é denominado um “valor alternativo aceitável.” Em outras palavras, a alteração seria aceitável se as variáveis de estado e os contextos afetados tiverem os mesmos valores que teriam tido se a alteração não tivesse sido feita.
Duas ordenações diferentes essas duas etapas 202, 204 são representadas nas figuras 2a e 2b, e os detalhes da etapa 204 são ilustrados na figura 3. Observe que o mapeamento e atribuição na etapa 1 (202) são somente necessários para elementos alvo para os quais pelo menos um valor de sintaxe alternativo foi encontrado na etapa 2 (204). Na segunda ordenação das etapas na figura 2b, o mapeamento da etapa 2 (202) necessita somente ser executado para aqueles elementos alvo identificados.
A figura 2c mostra um diagrama de blocos de um método 250 para modificar o fluxo de bits codificado. Inicialmente o fluxo de bits codificado tendo uma primeira porção e segunda porção é acessado (252). O valor de substituição é determinado para a primeira porção (254) e a primeira porção é então substituída com o valor de substituição determinado (256). Após o valor de substituição ter substituído a primeira porção, o fluxo de bits codificado modificado é enviado (258). O “envio” pode ser, por exemplo, transmissão eletrônica ou envio em um disco ou formulário mestre.
A segunda porção mencionada aqui pode ser o elemento de sintaxe adjacente seguinte (e valor variável de estado correspondente), ou pode ser a porção restante do fluxo de bits que poderia ser composto de dois ou mais elementos de sintaxe e valores de variável de estado correspondentes. Desse modo, ao determinar o valor de substituição para a primeira porção, pode-se considerar todos os elementos de sintaxe subsequentes e seus respectivos valores de variável de estado. Quando o valor de substituição alternativo ou determinado para a primeira porção não mudar ou alterar o valor variável de estado para os outros elementos de sintaxe na segunda porção, então o primeiro valor de substituição fornecerá a decodificação resultante desejada da segunda porção.
A operação 254 que determina um valor de substituição, também pode ser caracterizada como determinando uma primeira porção modificada. Na implementação sendo discutida, antes da modificação da primeira porção, a segunda porção é originalmente decodificável (a decodificação depende em parte da primeira porção não modificada) para produzir um resultado específico. Além disso, após a modificação da primeira porção, a segunda porção é decodificável (a decodificação depende em parte da primeira porção modificada) para produzir o mesmo resultado específico.
Outra implementação similar ao método 250, envolve duas operações. A primeira operação é acessar dados codificados incluindo pelo menos uma primeira porção e uma segunda porção. A segunda porção é decodificável para produzir um resultado que se baseia na primeira porção bem como na segunda porção. A segunda operação é determinar uma primeira porção modificada de tal modo que a segunda porção seja decodificável para produzir o resultado com base na segunda porção e primeira porção modificada.
Todos ou parte dos dados que identificam locais de elementos codificados e possíveis valores de substituição podem ser armazenados em um dispositivo de armazenagem, ou enviados eletronicamente. Uma implementação é um aparelho como um DVD, um disco rígido ou outro dispositivo de armazenagem. O aparelho inclui um meio legível por processador tendo informações armazenadas no mesmo. As informações armazenadas identificam um valor de substituição para uma primeira porção de um conjunto codificado de dados. O conjunto codificado de dados também inclui uma segunda porção, e a decodificação da segunda porção se baseia na segunda porção e na primeira porção. O valor de substituição tem uma propriedade de tal modo que (1) decodificação da segunda porção produz um resultado decodificado específico se a decodificação for executada no conjunto codificado de dados incluindo a primeira porção, e (2) decodificação da segunda porção produz o resultado decodificado específico se a decodificação for executada no conjunto codificado de dados incluindo o valor de substituição em vez da primeira porção. Outra implementação provê um sinal formatado para incluir as informações que são armazenadas no meio legível por processador desse aparelho.
A figura 2d mostra um diagrama de blocos de outra implementação de um método 260 para modificar o fluxo de bits codificado. Inicialmente, o fluxo de bits codificado tendo uma primeira porção e uma segunda porção é acessado (262). Metadados são então acessados (264) fornecendo informações com relação ao local da primeira porção no fluxo de bits codificado. Um valor de substituição para a primeira porção é então acessado (266) e a primeira porção é substituída (268) com o valor de substituição acessado. Após o valor de substituição ter substituído a primeira porção, o fluxo de bits codificado modificado é enviado (270). O “envio” pode ser, por exemplo, transmissão eletrônica ou envio em um disco ou formulário mestre.
Outra implementação, similar ao método 260, envolve duas operações. A primeira operação é acessar um fluxo de bits codificado que inclui pelo menos duas porções. A segunda porção é decodificável para produzir um resultado que se baseia na primeira porção bem como na segunda porção. A segunda operação está substituindo a primeira porção com um valor de substituição para produzir um fluxo de bits codificado modificado para o qual uma decodificação da segunda porção ainda produzirá o resultado.
Implementações adicionais são dirigidas ao resultado de métodos como o método 260. Por exemplo, uma implementação é um aparelho como um DVD, um disco rígido, ou outro dispositivo de armazenagem que inclui dados codificados modificados, e outra implementação é um sinal formatado para incluir tais dados codificados modificados. Mais especificamente, uma implementação é um aparelho que inclui um meio legível por processador, o meio legível por processador tendo armazenado no mesmo dados codificados que incluem uma primeira porção modificada e uma segunda porção. A primeira porção modificada é uma substituição de primeira porção, onde (1) a segunda porção é decodificável para produzir um resultado que se baseia na primeira porção modificada bem como na segunda porção, e (2) o resultado é igual como se decodificação da segunda porção fosse realizada com base na segunda porção e a primeira porção em vez da segunda porção e primeira porção modificada. Outra implementação é um sinal formatado para incluir os dados codificados que são armazenados no meio legível por processador desse aparelho.
A figura 3 mostra um diagrama de fluxo 300 que representa uma implementação para a etapa de encontrar todos os valores alternativos aceitáveis do elemento alvo. Inicialmente, uma lista de todos os valores alternativos (substituição) em potencial do elemento alvo é fornecida (302). Uma determinação é feita 304 com relação a se há quaisquer valores alternativos (substituição) deixados na lista. Em caso negativo, o processo termina 316. Quando há um valor alternativo (substituição) na lista, o próximo valor alternativo (substituição) possível é obtido e o valor de sintaxe é codificado (306). Uma determinação é feita então com relação a se os valores de variáveis de decodificação alternativos (substituição), incluindo valores de variável de estado e contextos, são iguais aos valores de variáveis de decodificação modificados (308). Quando são, o valor alternativo (substituição) é salvo na lista de valores alternativos aceitáveis (312) e o valor testado é então removido da lista (314). O processo inicia então novamente na etapa 304 até que a lista de valores alternativos (substituição) em potencial seja esgotada.
Os requerentes consideram agora a segunda exigência R2. Para um elemento alvo dado, os requerentes necessitam avaliar ou prever o impacto perceptual de substituir seu valor original com cada um dos valores alternativos que atendem a exigência R1. Lembre que essa avaliação ou previsão tem acesso total a todos os elementos de sintaxe do fluxo comprimido e pode utilizar esses para prever o efeito de máscara do imageamento subjacente e a sensibilidade do sistema visual ou auditivo humano (no caso de vídeo, os requerentes estão preocupados com o sistema visual humano) às modificações. Os detalhes de uma tal previsão são bem conhecidos para aqueles versados na técnica de modelagem perceptual. Modelos perceptuais são amplamente citados tanto na literatura de compressão como na literatura de impressão de marca d’água.
Além do uso de previsões computacionais de domínio comprimido de capacidade de percepção, os requerentes tem o luxo de serem capazes de descomprimir totalmente o fluxo em uma sequência de imagem de movimento. Esse pode ser o caso, por exemplo, se a análise estiver sendo realizada como um pré-processo. Nesse caso, as previsões computacionais podem examinar os dados de pixel efetivos. Isso pode levar a previsões mais precisas de capacidade de percepção. Adicionalmente, os requerentes podem ser capazes de avaliar a capacidade de percepção de substituir um valor de elemento de sintaxe original com um valor alternativo por descomprimir o fluxo original para obter uma sequência de imagem de movimento de referência e então substituir o valor de elemento de sintaxe com a alternativa e descomprimir o fluxo resultante para obter uma segunda sequência de imagem de movimento. Muitas técnicas bem conhecidas podem ser utilizadas para avaliar a capacidade de percepção da diferença entre as duas sequências de imagem de movimento.
Finalmente, os requerentes têm o luxo de recorrer à avaliação subjetiva. Um telespectador humano pode avaliar a capacidade de percepção da diferença entre a sequência de imagem de movimento de referência e a sequência de imagem de movimento modificada. Se o sujeito não puder perceber a diferença, então a modificação atende a exigência R2.
Esses são apenas alguns dos métodos que podem ser utilizados para determinar quais, de todas as alterações que atendem a exigência R1, também atendem a exigência R2.
Os requerentes consideram agora a terceira exigência R3. O uso do valor de sintaxe alternativo para o elemento de sintaxe alvo deve induzir alguma alteração mensurável quando o fluxo modificado é posteriormente descomprimido em uma sequência de imagem de movimento. Há dois tipos de alterações mensuráveis que podem ser induzidas, “direta” e “indireta”.
Com “alterações diretas” o elemento de sintaxe corresponde diretamente a um artefato mensurável da sequência de imagem de movimento. Por exemplo, a modificação de um coeficiente DC de bloco de luminância resultará diretamente em uma alteração mensurável em luminância média do bloco descomprimido correspondente. Com “alterações indiretas”, por outro lado, o artefato medido na sequência de imagem é somente indiretamente relacionado à modificação no fluxo. Por exemplo, a modificação de um vetor de movimento resultará no bloco errado sendo utilizado como uma previsão e portanto levará a dados de pixel incorretos no bloco descomprimido correspondente. Pode ser difícil determinar qual vetor de movimento foi utilizado, porém o uso de um vetor de movimento diferente pode impactar outros artefatos mensuráveis. O vetor de movimento pode ser utilizado para fornecer um bloco reconstruído com luminância média mais elevada ou mais baixa.
A alteração mensurável de exigência R3 auxiliará a identificar os locais e a ver quaisquer alterações foram feitas para recuperar a carga útil. Isso é particularmente útil quando uma cópia pirata é obtida. Por “ver” as alterações que foram feitas, a fonte da cópia pirata pode ser obtida.
Em uma implementação, é determinado quais elementos de sintaxe de vetor de movimento têm pelo menos dois valores de sintaxe alternativos que atendem as Exigências R1 e R2, de tal modo que o uso de um dos valores de sintaxe alternativos fornecerá um bloco reconstruído com luminância média mais elevada e uso de um valor de sintaxe alternativo diferente fornecerá um bloco reconstruído com luminância média mais baixa. Os blocos codificados de bits correspondendo à codificação de CABAC de cada um desses dois valores alternativos, juntamente com o local de bit no fluxo de CABAC, são enviados, como metadados, para o meio de incorporação. Com base no valor do bit de carga útil correspondente, o meio de incorporação substituirá o bloco de bits original com o bloco de bits correspondendo a um ou o outro bloco alternativo de bits. Por exemplo, o meio de incorporação escolhe ou seleciona o bloco de bits associado ao valor de sintaxe que diminui a luminância média no bloco correspondente se o bit de carga útil for um Ό’ e escolhe o bloco de bits associado ao valor de sintaxe que aumenta a luminância média no bloco correspondente se o bit de carga útil for um Ί’. Evidentemente, os requerentes necessitam pelo menos um elemento alvo que atenda a todas as exigências R1, R2 e R3 para cada bit de carga útil a ser incorporado.
Os metadados devem conter também o número de quadro e o número de bloco na sequência de imagem de movimento descomprimida onde a alteração em luminância será induzida. Para robustez adicional, o estágio de pré-processamento também pode armazenar a luminância média original daquele bloco nos metadados. Essa informação é utilizada no tempo de recuperação (por exemplo, decodificação) para identificar o bloco modificado e comparar sua luminância média com o valor original armazenado nos metadados. No exemplo dado, uma luminância média que é mais elevada do que o valor original indicará que o bit de carga útil correspondente é um T e uma luminância média que é mais baixa do que o valor original indicará que o bit de carga útil correspondente é um Ό’.
Limitação de comprimento de bit
Quando há uma limitação adicionada de que o Bloco codificado de bits, alternativo, tem o mesmo comprimento que o Bloco Codificado de bits, original os requerentes podem simplesmente adicionar essa limitação à Exigência R1. Em outras palavras, a alteração seria aceitável se todas as variáveis de estado e os contextos afetados permanecem iguais como teriam sido e se o bloco codificado resultante for do mesmo comprimento que o original. Por exemplo, com referência novamente à figura 3, o bloco de decisão 308 podería ser modificado para determinar não somente se os valores de variáveis de decodificação permanecem iguais, como também para determinar se o bloco codificado resultante tem o mesmo comprimento que o original. Como outro exemplo, com referência novamente à figura 3, o bloco 302 poderia ser modificado para fornecer uma lista de todos os valores alternativos em potencial do Elemento alvo que resulta em um bloco codificado de bits tendo o mesmo comprimento que o original.
A abordagem anteriormente descrita para adicionar a limitação de comprimento de bit é uma abordagem possível. Entretanto, em algumas aplicações uma abordagem alternativa pode ser apropriada. Os requerentes apresentam agora uma abordagem diferente destinada a limitar a busca por valores alternativos aceitáveis. Nessa implementação, descrita na figura 5, a primeira etapa é construir um mapeamento a partir de todos os elementos de sintaxe para seus bits codificados correspondentes no fluxo de bits (502). Na segunda etapa, um elemento alvo a partir da lista é identificado e o bloco codificado de bits no fluxo de bits representando aquele elemento é identificado (504).
Uma vez que CABAC pode atribuir frações de bits para representar elementos de sintaxe, há a possibilidade de que os blocos de bits que representam elementos de sintaxe diferentes podem sobrepor. A terceira etapa é a identificação de quaisquer outros elementos de sintaxe cuja representação no fluxo de bits codificado sobrepõe àquela do elemento a ser modificado (506). Esses são mencionados aqui como Elementos de sintaxe de sobreposição. A lista para todas as combinações de bit alternativas possíveis que têm o mesmo comprimento de bit é determinada (508), e as etapas restantes subsequentes para determinar qual das combinações de bits alternativas possíveis identificadas que têm o mesmo comprimento de bit serão utilizadas (isto é, etapas 510 - 522) são substancialmente idênticas às etapas 304-316, respectivamente, descritas para determinar qual dos valores alternativos em potencial do elemento alvo serão utilizados. Uma diferença é que o bloco 514 inclui determinar se a combinação de bits alternativa atende a condição de que os valores decodificados de quaisquer Elementos de sintaxe de sobreposição permanecem inalterados, bem como determinar se os valores de variáveis de decodificação permanecem inalterados.
Se o bloco de bits codificado tiver comprimento n, haverá 2n de valores possíveis diferentes que pode representar. Os requerentes buscam qualquer valor que atenda aos dois critérios a seguir:
1. os valores decodificados dos Elementos de sintaxe de sobreposição permanecem inalterados; e
2. todas as variáveis de estado e variáveis de contexto alteradas pelo bloco de bits codificados são deixadas com os mesmos valores como estavam com o bloco não modificado de bits codificados.
Aqui os requerentes limitaram a busca somente àqueles valores alternativos que resultam em um bloco codificado de bits alternativo do mesmo tamanho que o bloco codificado de bits, original.
Implementações não necessitam tratar tanto de elementos de sintaxe de sobreposição como de limitações de comprimento de bit. Em vez disso, certas implementações podem tratar somente de elementos de sintaxe de sobreposição, ou somente uma limitação de comprimento de bit, sem tratar da outra consideração.
Além disso, várias implementações podem trabalhar em múltiplos elementos de sintaxe juntos (por exemplo, elementos de sintaxe que são contíguos no fluxo de dados). Por exemplo, uma implementação trata de múltiplos elementos de sintaxe contíguos (sobreposição ou não sobreposição) como um grupo único e determina uma substituição para o grupo, de tal modo que os valores de variáveis de decodificação no final do grupo (porém não necessariamente entre elementos de sintaxe no grupo) permanecem inalterados. Uma tal implementação considera dois elementos de sintaxe contíguos como um elemento alvo, com o segundo elemento de sintaxe sendo um elemento de sintaxe de sobreposição, e permite que os dois elementos de sintaxe sejam modificados.
Incorporação de informações
A discussão acima descreve um método para analisar um elemento de sintaxe alvo e identificar todos, se algum, valores alternativos aceitáveis que poderíam ser substituídos por substituir um bloco de bits no fluxo de bits codificado com um bloco de bits alternativo. Por examinar todos os elementos de sintaxe na sequência codificada H.264/AVC, os requerentes podem construir uma lista daqueles para os quais existe pelo menos um valor alternativo aceitável. Essa é a lista de “elementos de sintaxe alteráveis”. Para cada elemento de sintaxe que pode ser alterado, os requerentes podem construir uma lista de valores alternativos aceitáveis.
Um exemplo de como isso pode ser utilizado para incorporar informações no fluxo de bits foi apresentado. O objetivo de incorporação de informações é modificar um subconjunto dos elementos de sintaxe na lista de todos os elementos de sintaxe alteráveis, alterando seus valores a partir de seus valores originais para um dos valores alternativos aceitáveis listados, de acordo com a carga útil. Em uma implementação prática, isso é realizado em três etapas como mostrado na figura 6.
Com referência à figura 6, há um processo 600. Na primeira etapa do processo 600, um subconjunto dos elementos de sintaxe alteráveis é selecionado (602). Essa seleção de subconjunto pode ser baseada em uma estimativa do impacto perceptual que a alteração teria sobre imageamento decodificado. A seleção de subconjunto pode ser baseada em uma estimativa da dificuldade de detectar a alteração no imageamento decodificado após o imageamento ter sido modificado por processamento de sinal ou por violação intencional. A seleção de subconjunto pode ser influenciada por exigências de implementação que, por exemplo, limitam o número de bits consecutivos em um bloco alterado ou limitam o número mínimo de bits inalterados que devem estar entre quaisquer dois blocos alterados. Na implementação preferida, essa primeira etapa é executada durante pré-processamento.
Na segunda etapa, os metadados são salvos (604) para uso posterior. Esses metadados consistem em “dados de incorporação” e “dados de detecção.” Dados de incorporação são os locais no fluxo de bits comprimido onde o bloco codificado original de bits pode ser encontrado e dois blocos de bits, um a ser utilizado como um bloco de substituição se o bit de carga útil correspondente for um Ό’ e o outro a ser utilizado como um bloco de substituição se o bit de carga útil correspondente for um Ί’. Em uma implementação, um desses blocos é ele próprio o bloco original de bits e o outro é um bloco alternativo de bits. Nesse caso, a lista de elementos de sintaxe alteráveis pode incluir aqueles para os quais há somente um valor alternativo aceitável. Em outras implementações, os dois blocos são ambos blocos alternativos de bits que correspondem a valore de sintaxe diferentes. Nesse caso, a lista de elementos de sintaxe alteráveis pode incluir somente aqueles para os quais há pelo menos duas alternativas aceitáveis.
Dados de detecção incluem o conjunto de elementos alteráveis que serão utilizados para incorporação e os valores originais daqueles elementos. Inclui também o local na sequência de imagem de movimento descomprimida onde a modificação de fluxo de bits será detectável. Isso pode ser especificado como um número de quadro e um número de bloco ou número de macrobloco ou posição de pixel ou qualquer outro localizador exigido para recuperação. Dados de detecção também podem incluir o valor da medida de detecção que teria sido medida se nenhuma alteração tivesse sido feita. Em outras palavras, isso pode incluir o valor original da medida de detecção. No exemplo anterior, a medida de detecção é a luminância média de um bloco específico e os dados de detecção podem incluir a luminância média original daquele bloco. Em uma implementação, essa segunda etapa é executada durante pré-processamento.
Para aumentar a robustez da técnica de impressão com marca d 1 água para alterações globais ou locais em brilho ou contraste, dados de detecção podem ser também salvos para blocos que não se espera serem modificados pelo processo de impressão com marca d’água. Por exemplo, os dados de detecção podem incluir a luminância média original de blocos não alterados pela marca d’água. O detector pode então utilizar esses como uma referência para determinar se a imagem inteira, ou pelo menos a parte da imagem na região da referência, experimentou uma alteração em luminância. Se a luminância medida nos blocos de referência não casa com aquela registrada nos dados de detecção, uma compensação pode ser feita antes da recuperação da carga útil.
Na terceira etapa, o bloco codificado original de bits correspondendo ao elemento alterável é substituído com um bloco diferente de bits utilizando os dados de incorporação e a carga útil (606). Os requerentes consideram dois casos. No primeiro caso, o bloco de substituição de bits é o bloco de bits codificados que corresponde a um dos valores alternativos aceitáveis se o bit de carga útil a ser representado tiver um valor de símbolo, por exemplo um Ί’. O bloco de substituição de bits codificados é o bloco original de bits codificados se o bit de carga útil a ser representado tiver outro valor de símbolo, por exemplo um Ό’. No segundo caso, a seleção de subconjunto é limitada a elementos para os quais há pelo menos dois valores alternativos aceitáveis. Nesse caso, o bloco de substituição de bits codificados é o bloco de bits codificados que corresponde a um dos valores alternativos aceitáveis se o bit a ser representado for um Ό’ e é o bloco de bits codificados que corresponde a um valor alternativo aceitável diferente se o bit a ser representado for um ‘1’. Os dois valores alternativos são armazenados nos dados de detecção juntamente com os rótulos Ό’ ou Ί’, que representam. Na modalidade preferida, essa terceira etapa é executada durante incorporação.
A carga útil pode ser recuperada a partir do fluxo de bits H.264/AVC com o auxílio dos dados de detecção. Os dados de detecção indicam os elementos de sintaxe específicos que representam as informações de carga útil oculta e os valores originais daqueles elementos. Se o processo de incorporação utilizou os valores originais para representar um Ό’ e o valor alternativo para representar um T, o detector pode comparar o valor no fluxo de bits com o valor original armazenado nos dados de detecção. Se casarem, o detector reporta um bit ‘0’. Se não casarem, o detector reporta um bit ‘1’. Se o processo de incorporação substituiu o valor original com um de dois valores alternativos, aqueles dois valores alternativos e seus rótulos correspondentes são recuperados a partir dos dados de detecção. O detector então compara o valor no fluxo de bits com cada uma das duas alternativas e relata o rótulo correspondente.
Os dados ocultos podem ser também recuperados a partir do imageamento de domínio de pixel decodificado. Esse processo é específico para a medida específica utilizada no processo de seleção de subconjunto. Em uma implementação prática, a medida é a luminância média de um bloco de pixels. A luminância média original de cada bloco modificado é recuperada dos dados de detecção. O detector calcula a luminância média do bloco especificado de pixels na sequência de imagem decodificada e compara aquele valor com o valor original armazenado nos dados de detecção. Se o valor calculado for mais elevado do que o valor original, o detector relata um bit T. Se o valor calculado for mais baixo do que o original, o detector relata um bit Ό’.
Esse método de recuperação poderia ter problemas se imageamento decodificado for modificado por alteração uniforme em luminância após decodificação, porém antes da detecção. Para tratar isso, a luminância média de um número de blocos de referência pode ser armazenada nos dados de detecção. Esses são blocos que não são alterados pelo processo de incorporação. O detector pode calcular a luminância média dos blocos de referência pouco antes da recuperação e descobrem quaisquer alterações de luminância que não são relacionadas com os dados ocultos. Essas alterações de luminância podem ser compensadas pelo ajuste dos valores originais de acordo.
Deve ser evidente que incorporação de informações pode incluir uma variedade de aplicações. Uma tal aplicação é impressão com marca d’água na qual uma carga útil é incorporada em um fluxo de dados. Outras aplicações incluem incorporar virtualmente qualquer informação que se deseja ser comunicada. Adicionalmente, algumas informações que incorporam aplicações podem utilizar diferentes exigências. Por exemplo, pode ser desejável fazer uma alteração no fluxo de dados que resulte em uma alteração que é percebível por um usuário.
Exploração de modo de derivação
H.264/AVC especifica três elementos de sintaxe que são codificados no modo byass. Por esses, somente uma variável é modificada durante codificação. Somente o valor L, representando a parte inferior da faixa, muda à medida que os bits são codificados. Desse modo, a probabilidade de encontrar valores de sintaxe alternativos que fornecem os mesmos valores de variáveis de decodificação que o original é mais elevada com elementos de sintaxe de modo de derivação. Em uma implementação prática, somente o sufixo de elementos de sintaxe de diferença de vetor de movimento é considerado. Para cada um desses, os requerentes buscam valores alternativos que 1) resultam no mesmo número de bits no bloco codificado de bits, 2) não afetam os valores de quaisquer outros elementos de sintaxe, e 3) fornecem o mesmo valor L no codificador de CABAC após processamento de sua cadeia de bin correspondente. A partir desses, os requerentes selecionam um subconjunto a ser utilizado para incorporação como descrito acima (vide, por exemplo, a figura 6). As etapas para modo de derivação, substituição de comprimento fixo são mostradas por um método 400 representado na figura 4. Aqui, os processos nas etapas 402-416 são idênticos àqueles anteriormente descritos nas etapas 302-316, respectivamente mostrados no método da figura 3, com a exceção de que a etapa 408 é uma determinação de que a alternativa L é igual ao L modificado para codificação de CABAC, ao contrário de uma determinação de valores de variáveis de decodificação alternativos vs. valores de variáveis de decodificação modificados (isto é, etapa 308).
Como deve ser evidente, um fluxo de bits não modificado pode ser decodificado para produzir os valores de sintaxe originais, incluindo valores para um elemento de sintaxe alvo e um ou mais elementos de sintaxe que seguem o elemento de sintaxe alvo. Como descrito anteriormente, a codificação de um ou mais elementos de sintaxe que seguem o elemento de sintaxe alvo depende, pelo menos em parte, no valor do elemento de sintaxe alvo. Após o valor do elemento de sintaxe alvo ser modificado, um fluxo de bits modificado resultante é produzido que corresponde ao valor de sintaxe modificado e os valores de um ou mais elementos de sintaxe que seguem o elemento de sintaxe alvo agora modificado. Esse fluxo de bits modificado pode ser também decodificado.
Com referência à figura 7, é mostrado um processo 700 que pode ser executado, por exemplo, por um decodificador, um tocador de DVD, ou outro dispositivo que acessa e decodifica um fluxo de bits modificado. A decodificação do fluxo de bits modificado produz o valor modificado do elemento de sintaxe alvo e também produz os valores originais de um ou mais elementos de sintaxe que seguiram o elemento de sintaxe alvo.
Mais especificamente, com referência ao processo 700, um conjunto modificado de dados é acessado (710). O conjunto modificado de dados inclui uma porção modificada e outra porção que é, nessa implementação, não modificada. Como indicado acima, a porção não modificada é decodificável para produzir um resultado que se baseia na porção não modificada bem como na porção modificada.
O processo 700 inclui decodificação da porção modificada (720) e porção não modificada (730). A decodificação da porção não modificada produz o mesmo resultado como se a porção modificada não tivesse sido modificada.
Com referência à figura 8, um processo 800 é mostrado para recuperar informações de carga útil, ou mais genericamente, para detectar uma marca d’água. O processo 800 inclui determinar um local para checar uma possível marca d’água (810). Observe que uma marca d’água, que se refere genericamente a dados modificados ou inseridos para permitir detecção subsequente, não precisa necessariamente ter sido inserida. O processo 800 inclui acessar (820) e analisar (830) dados a partir do local determinado. O processo 800 inclui ainda identificar as informações de marca d’água, se existir alguma marca d’água, com base na análise (840). As informações de marca d’água identificadas podem ser, por exemplo, um bit ou outra unidade de informação. O processo 800 pode ser repetido para um ou mais outros locais para identificar um ou mais bits adicionais que compõem uma carga útil. Desse modo, uma carga útil inteira pode ser recuperada utilizando o processo 800.
As implementações do processo 800 incluem analisar um fluxo de bits modificado bem como analisar dados de domínio de pixel. Por exemplo, um fluxo de bits pode ser modificado por modificar bits associados a um elemento alvo, de acordo com uma das implementações anteriormente descritas. Uma marca d’água pode ser detectada em um tal fluxo de bits por acessar os locais de bit apropriados e testar em relação à marca d’água (modificação) naqueles locais. Os locais de bit e valores modificados (ou possivelmente valores modificados) como encontrados nos metadados, também podem ser incluídos nos dados de detecção.
Altemativamente, ou além disso, um tal fluxo de bits modificado pode ser decodificado e possivelmente sujeito a outro processamento, incluindo recodificação. No caso de recodificação, não se esperará que um tal fluxo de bits recodificado inclua o elemento alvo modificado, no mesmo local, como no fluxo de bits modificado original. Entretanto, o fluxo de bits recodificado pode ser decodificado para produzir uma representação digital domínio de pixel na qual um efeito da modificação original está ainda tipicamente presente. Desse modo, dados de detecção serão úteis que identificam o quadro e número de bloco nos quais a modificação original teve seu impacto. Por exemplo, o elemento alvo pode ter sido originalmente um vetor de movimento para um bloco específico, e o impacto de modificar o vetor de movimento pode ter sido um aumento na luminância média daquele bloco específico. Esse aumento em luminância média será tipicamente preservado apesar do processamento do fluxo de bits modificado original. Entretanto, o vetor de movimento, e a alteração original ao vetor de movimento não serão tipicamente exatamente iguais.
Com referência à figura 9, um processo 900 descreve uma implementação na qual informações de marca d’água é detectada a parti de dados de domínio de pixel. O processo 900 inclui determinar um identificador de quadro e um identificador de bloco para uma possível marca d’água (910), e acessar (920) dados de domínio de pixel correspondendo ao identificador de quadro determinado e identificador de bloco. O processo 900 inclui determinar um valor de uma característica para os dados acessados (930), e comparar o valor determinado com um marco de referência (940). O processo 900 então inclui identificar as informações de marca d’água, se houver alguma, com base na comparação (950).
Várias implementações de um processo 800 ou processo 900 utilizam dados de detecção armazenados que incluem um ou mais de uma variedade de pedaços de dados. Por exemplo, os dados de detecção podem incluir informações de local que identificam os locais para verificar uma possível marca d’água. As informações de local podem incluir, por exemplo, um identificador de quadro e/ou um identificador de bloco.
Dados de detecção podem incluir, por exemplo, um valor de marco de referência para uma característica. O marco de referência pode ser, por exemplo, o valor da característica antes da modificação do local. O marco de referência pode ser, por exemplo, comparado com o valor efetivo (o novo marco de referência) da característica para o local acessado (820) para fornecer uma indicação da alteração. Por exemplo, a comparação pode indicar se o valor (o novo marco de referência) aumentou ou diminuiu como resultado da modificação.
Dados de detecção podem incluir,por exemplo, um valor base para uma caracterís24 tica a partir de um local diferente (não impresso com marca d’água). Um tal valor de base pode ser, por exemplo, a luminância média de um local não impresso com marca d’água. O valor de base pode ser utilizado, como explicado anteriormente, para determinar se houve alteração nos dados que afetou mais do que o local impresso com marca d’água. Em certas circunstâncias, pode ter havido uma alteração global (por exemplo, uma alteração em um quadro inteiro). Por exemplo, a luminância média de um quadro inteiro pode ter sido alterada. O valor de base pode ser então comparado com o valor novo da característica no local não impresso com marca d’água (um valor de base novo). Se a diferença for maior do que um limite, então pode ser determinado que uma alteração global ocorreu. Alternativamente, a diferença pode ser simplesmente tomada como sendo uma diferença global, e a diferença pode ser adicionada ao valor (o novo marco de referência) determinado para o local impresso com marca d’água (possível)( para responder pela alteração global. Observe que nessa alternativa, a diferença pode (alternativamente) ser adicionada ao marco de referência em vez do valor (o novo marco de referência). Além disso, em certas implementações uma razão pode ser determinada entre o valor de base e o novo valor de base, e o marco de referência ou o novo marco de referência pode ser multiplicado pela razão.
Evidentemente, o processo 800 pode ser executado por uma variedade de dispositivos, incluindo dispositivos de processamento. Tais dispositivos também podem incluir um dispositivo de armazenagem para armazenar dados, como, por exemplo, os dados acessados, o valor de marco de referência, o valor de base, e o(s) local(is) de possíveis informações de marca d’água. Além disso, o processo 800 pode ser incorporado em um conjunto de instruções também.
Como deve ser evidente, um elemento de sintaxe pode representar um ou mais de vários tipos de informações diferentes. Por exemplo, um elemento de sintaxe pode ser um vetor de movimento, um coeficiente DCT (transformada de co-seno discreta) de resíduo, um tipo de macrobloco, um parâmetro de quantização, ou um indicador. Por conseguinte, elementos de sintaxe não necessitam todos ter o mesmo comprimento porém podem ter vários comprimentos diferentes. Várias implementações reveladas nesse pedido podem funcionar em qualquer tipo de elemento de sintaxe, independente de qual tipo de informação é representado pelo elemento de sintaxe e independente do tamanho/comprimento do elemento de sintaxe.
Adicionalmente, como anteriormente indicado, várias implementações podem funcionar em múltiplos elementos de sintaxe juntos (por exemplo, elementos de sintaxe que são contíguos no fluxo de dados). Por exemplo, uma implementação trata múltiplos elementos de sintaxe contíguos (sobreposição ou não sobreposição) como um grupo único e determina uma substituição para o grupo, de tal modo que os valores de variáveis de decodificação no final do grupo (porém não necessariamente entre elementos de sintaxe no grupo) permanecem inalterados.
As implementações descritas aqui podem ser implementadas, por exemplo, em um método ou processo, um aparelho ou um programa de software. Mesmo se somente discutido no contexto de uma forma única de implementação (por exemplo, discutido somente como um método), a implementação de características discutidas também pode ser implementada em outras formas (por exemplo, um aparelho ou programa). Um aparelho pode ser implementado, por exemplo, em hardware, software e firmware apropriado. Os métodos podem ser implementados, por exemplo, em um aparelho como, por exemplo, um processador, que se refere a dispositivos de processamento em geral, incluindo, por exemplo, um computador, um microprocessador, um circuito integrado, ou um dispositivo de lógica programável. Dispositivos de processamento também incluem dispositivos de comunicação, como, por exemplo, computadores, telefones celulares, assistentes pessoais digitais/portáteis (“PDAs”), e outros dispositivos que facilitam a comunicação de informações entre usuários finais.
A implementação dos vários processos e características descritos aqui pode ser incorporada em uma variedade de equipamentos ou aplicações diferentes, particularmente, por exemplo, equipamento ou aplicações associados à codificação e decodificação de dados. Os exemplos de equipamentos incluem codificadores de vídeo, decodificadores de vídeo, codecs de vídeo, servidores de rede, set-top boxes, laptops, computadores pessoais, telefones celulares, PDAs, e outros dispositivos de comunicação. Como deve ser evidente, o equipamento pode ser móvel e mesmo instalado em um veículo móvel.
Adicionalmente, os métodos podem ser implementados por instruções sendo executadas por um processador, e tais instruções podem ser armazenadas em um meio legível por processador como, por exemplo, um circuito integrado, uma portadora de software ou outro dispositivo de armazenagem como, por exemplo, um disco rígido, um disquete compacto, uma memória de acesso aleatório (“RAM”), ou uma memória somente de leitura (“ROM”). As instruções podem formar um programa de aplicação incorporado de forma tangível em um meio legível por processador. As instruções podem ser, por exemplo, em hardware, firmware, software ou uma combinação. As instruções podem ser encontradas, por exemplo, em um sistema operacional, uma aplicação separada ou uma combinação dos dois. Um processador pode ser caracterizado, portanto, como por exemplo, tanto um dispositivo configurado para realizar um processo como um dispositivo que inclui um meio legível por computador tendo instruções para realizar um processo.
Como deve ser evidente para uma pessoa versada na técnica, as implementações também podem produzir um sinal formatado para realizar informações que podem ser, por exemplo, armazenadas ou transmitidas. As informações podem incluir, por exemplo, instruções para executar um método, ou dados produzidos por uma das implementações descri26 tas. Um tal sinal pode ser formatado, por exemplo, como uma onda eletromagnética (por exemplo, utilizando uma porção de radiofrequência de espectro) ou um sinal de banda base. A formatação pode incluir, por exemplo, codificar um fluxo de dados e modular uma portadora com o fluxo de dados codificado. As informações que o sinal contém podem ser, por e5 xemplo, informações analógicas ou digitais. O sinal pode ser transmitido através de uma variedade de ligações cabeadas ou sem fio, como sabido.
Diversas implementações foram descritas. Não obstante, será entendido que várias modificações podem ser feitas. Por exemplo, elementos de implementações diferentes podem ser combinados, suplementados, modificados ou removidos para produzir outras im10 plementações. Adicionalmente, uma pessoa com conhecimentos comuns entenderá que outras estruturas e processos podem ser substituídos por aqueles revelados e as implementações resultantes executarão pelo menos substancialmente a(s) mesma(s) função(ões), pelo menos substancialmente do(s) mesmo(s) modo(s), para obter pelo menos substancialmente o(s) mesmo(s) resultado(s) que as implementações reveladas. Por conseguinte, es15 sas e outras implementações são consideradas por esse pedido e estão compreendidas no escopo das reivindicações que se seguem.