Profundidade e confiança da codificação

Um mapa de profundidade é serializado como um conjunto de propriedades XMP. Como parte do processo de serialização, o mapa de profundidade é convertido primeiro em um formato de imagem tradicional. O pipeline de codificação tem três etapas (consulte a Figura 2):

  • Converta do formato de entrada (por exemplo, valores de ponto flutuante ou int32) para um formato de imagem em escala de cinza inteiro, por exemplo, bytes (8 bits) ou palavras (16 bits).
  • Compacte usando um codec de imagem padrão, como JPEG ou PNG.
  • Serializa como uma propriedade XMP de string base64.
Figura 2. Descrição do pipeline de codificação do mapa de profundidade.

O pipeline pode ser sem perdas ou com perdas, dependendo do número de bits do mapa de profundidade original e do número de bits usados para armazená-lo, por exemplo, 8 bits para um codec JPEG e 8 ou 16 bits para um codec PNG.

No momento, há dois formatos compatíveis: RangeLinear e RangeInverse. RangeInverse é o formato recomendado se o mapa de profundidade perder precisão ao ser codificado, por exemplo, ao converter de ponto flutuante para 8 bits. Ele aloca mais bits para os valores de profundidade próximos e menos bits para os valores distantes, de maneira semelhante a como o z-buffer funciona em placas de GPU.

Se o mapa de profundidade tiver um mapa de confiança anexado, ele também será convertido em um formato de imagem tradicional usando um pipeline semelhante ao usado para profundidade. O mapa de confiança é sempre codificado usando o formato RangeLinear, com o intervalo de confiança presumido como [0, 1].

RangeLinear

Seja d a profundidade de um pixel, e near e far os valores mínimo e máximo de profundidade considerados. O valor de profundidade é primeiro normalizado para o intervalo [0, 1] como

e quantize para 8 ou 16 bits como

Por outro lado, dada a profundidade quantizada d8bit, é possível recuperar a profundidade d como

RangeInverse

Seja d a profundidade de um pixel, e near e far os valores mínimo e máximo de profundidade considerados. O valor de profundidade é primeiro normalizado para o intervalo [0, 1] como

e quantize para 8 ou 16 bits como

Por outro lado, dada a profundidade normalizada dn, é possível recuperar a profundidade d como