Głębokość kodowania i pewność

Mapa głębi jest serializowana jako zbiór właściwości XMP. W ramach procesu serializacji mapa głębi jest najpierw konwertowana na tradycyjny format obrazu. Proces kodowania obejmuje 3 etapy (patrz rysunek 2):

  • Przekształć dane z formatu wejściowego (np. wartości zmiennoprzecinkowe lub int32) na format obrazu w odcieniach szarości, np. bajty (8 bitów) lub słowa (16 bitów).
  • Skompresuj obraz za pomocą standardowego kodeka obrazu, np. JPEG lub PNG.
  • Serializuj jako właściwość XMP w formacie ciągu tekstowego Base64.
Rysunek 2. Opis potoku kodowania mapy głębi.

Potok może być bezstratny lub stratny w zależności od liczby bitów oryginalnej mapy głębi i liczby bitów używanych do jej przechowywania, np. 8 bitów w przypadku kodeka JPEG i 8 lub 16 bitów w przypadku kodeka PNG.

Obecnie obsługiwane są 2 formaty: RangeLinearRangeInverse. RangeInverse to zalecany format, jeśli mapa głębi straci precyzję podczas kodowania, np. podczas konwersji z liczby zmiennoprzecinkowej na 8-bitową. Przydziela więcej bitów do wartości głębi bliskiej, a mniej do wartości głębi dalekiej, podobnie jak bufor Z na kartach graficznych.

Jeśli mapa głębi ma dołączoną mapę ufności, jest ona również konwertowana na tradycyjny format obrazu przy użyciu podobnego procesu jak w przypadku głębi. Mapa ufności jest zawsze kodowana w formacie RangeLinear, a zakres ufności przyjmuje się jako [0, 1].

RangeLinear

Niech d będzie głębią piksela, a near i far minimalną i maksymalną rozważaną wartością głębi. Wartość głębi jest najpierw normalizowana do zakresu [0, 1] jako

następnie kwantyzuj do 8 lub 16 bitów,

Z kolei na podstawie skwantyzowanej głębi d8bit można odzyskać głębię d w ten sposób:

RangeInverse

Niech d będzie głębią piksela, a near i far minimalną i maksymalną rozważaną wartością głębi. Wartość głębi jest najpierw normalizowana do zakresu [0, 1] jako

następnie kwantyzuj do 8 lub 16 bitów,

Z kolei na podstawie znormalizowanej głębokości dn można odzyskać głębokość d w ten sposób: