Codierung von Tiefe und Konfidenz

Eine Tiefenkarte wird als eine Reihe von XMP-Properties serialisiert. Im Rahmen des Serialisierungsprozesses wird die Tiefenkarte zuerst in ein herkömmliches Bildformat konvertiert. Die Codierungspipeline umfasst drei Schritte (siehe Abbildung 2):

  • Wandeln Sie vom Eingabeformat (z.B. Gleitkommazahl oder int32-Werte) in ein Ganzzahl-Graustufenbildformat um, z.B. Byte (8 Bit) oder Wörter (16 Bit).
  • Komprimieren Sie die Datei mit einem Standard-Bild-Codec, z.B. JPEG oder PNG.
  • Serialisieren Sie das Attribut als Base64-String-XMP-Property.
Abbildung 2. Beschreibung der Tiefencodierungs-Pipeline.

Die Pipeline kann verlustbehaftet oder verlustbehaftet sein, je nach Anzahl der Bits der ursprünglichen Tiefenkarte und der Anzahl der Bits, die zum Speichern verwendet werden, z.B. 8 Bit für einen JPEG-Codec und 8 oder 16 Bit für einen PNG-Codec.

Derzeit werden zwei verschiedene Formate unterstützt: RangeLinear und RangeInverse. RangeInverse ist das empfohlene Format, wenn die Tiefenkarte bei der Codierung verloren geht, z.B. bei der Konvertierung von Gleitkommazahl in 8-Bit. Dabei werden den Bits in der Nähe mehr Tiefen Bits und den Fernwerten weniger Bits zugewiesen, ähnlich wie beim Z-Zwischenspeicher in GPU-Karten.

Wenn der Kontrastkarte eine Konfidenzkarte zugeordnet ist, wird sie auch in ein herkömmliches Bildformat konvertiert. Dabei wird eine ähnliche Pipeline wie für die Tiefe verwendet. Die Konfidenzkarte wird immer im Format RangeLinear codiert, wobei von Konfidenzbereich [0, 1] ausgegangen wird.

BereichsLinear

Dabei ist d die Tiefe eines Pixels und die Werte für die minimale und maximale Tiefe, die berücksichtigt werden sollen. Der Tiefenwert wird zuerst auf den Bereich [0, 1] normalisiert.

Quantisieren Sie dann 8 oder 16 Bit als

Umgekehrt kann angesichts der quantisierten Tiefe d8 Bit die Tiefe d wie folgt ermittelt werden:

BereichsInverse

Dabei ist d die Tiefe eines Pixels und die Werte für die minimale und maximale Tiefe, die berücksichtigt werden sollen. Der Tiefenwert wird zuerst auf den Bereich [0, 1] normalisiert.

Quantisieren Sie dann 8 oder 16 Bit als

Bei der normalisierten Tiefe dn kann dagegen die Tiefe d