Profondeur et fiabilité de l'encodage

Une carte de profondeur est sérialisée en tant qu'ensemble de propriétés XMP. Dans le cadre du processus de sérialisation, la carte de profondeur est d'abord convertie dans un format d'image traditionnel. Le pipeline d'encodage comprend trois étapes (voir Figure 2):

  • Convertissez le format d'entrée (par exemple, des valeurs flottantes ou int32) en un format d'image en nuances de gris, par exemple des octets (8 bits) ou des mots (16 bits).
  • Compresser à l'aide d'un codec d'image standard (JPEG ou PNG, par exemple)
  • Sérialiser en tant que propriété XY de chaîne en base64.
Figure 2 : Description du pipeline d'encodage Depthmap.

Le pipeline peut être sans perte ou en perte, en fonction du nombre de bits de la carte de profondeur d'origine et du nombre de bits utilisés pour le stocker, par exemple 8 bits pour un codec JPEG et 8 ou 16 bits pour un codec PNG.

Deux formats différents sont actuellement acceptés: RangeLinear et RangeInverse. Le format RangeInverse est recommandé si la profondeur de la carte en profondeur diminue en cas d'encodage, par exemple lors d'une conversion de type float à 8 bits. Il alloue plus de bits aux valeurs de profondeur proche et moins de bits aux valeurs éloignées, de la même manière que le z-buffer fonctionne dans les cartes GPU.

Si la carte de profondeur est associée à une carte de confiance, elle est également convertie dans un format d'image traditionnel à l'aide d'un pipeline semblable à celui utilisé pour la mesure de profondeur. La carte de confiance est toujours encodée au format RangeLinear, la plage de confiance étant par défaut [0, 1].

Linéaire

d correspond à la profondeur d'un pixel, et à proximité des valeurs de profondeur minimale et maximale envisagées. La valeur de profondeur est d'abord normalisée sur une plage de [0, 1] comme

puis quantitons 8 ou 16 bits sous la forme

À l'inverse, étant donné la profondeur quantifiée de 8 bits, il est possible de récupérer la profondeur d comme

Inverser la plage

d correspond à la profondeur d'un pixel, et à proximité des valeurs de profondeur minimale et maximale envisagées. La valeur de profondeur est d'abord normalisée sur une plage de [0, 1] comme

puis quantitons 8 ou 16 bits sous la forme

Inversement, étant donné la profondeur normalisée d, il est possible de récupérer la profondeur d en tant que