エンコードの深さと信頼度

深度マップは、一連の XMP プロパティとしてシリアル化されます。シリアル化プロセスの一環として、深度マップはまず従来の画像形式に変換されます。エンコード パイプラインには 3 つのステップがあります(図 2 を参照)。

  • 入力形式(float または int32 の値など)から、グレースケールの整数画像形式(バイト(8 ビット)または単語(16 ビット)など)に変換します。
  • JPEG や PNG などの標準的な画像コーデックを使って圧縮します。
  • base64 文字列 XMP プロパティとしてシリアル化します。
図 2.深度マップ エンコード パイプラインの説明

パイプラインは、元のデプスマップのビット数と、その格納に使用されるビット数に応じて、ロスレスまたはロスレスになります(たとえば、JPEG コーデックは 8 ビット、PNG コーデックは 8 ビットまたは 16 ビットです)。

現在、RangeLinearRangeInverse の 2 つの形式がサポートされています。floatInverse は、浮動小数点数が 8 ビットに変換された場合など、エンコード時に深度マップの精度が低下する場合に推奨される形式です。GPU カードでの z-buffer の仕組みと同様に、近距離値により多くのビットを割り当て、遠値にビット数を減らします。

深度マップに信頼度マップが添付されている場合、信頼度マップは、深度に使用されたパイプラインと同様のパイプラインを使用して従来の画像形式に変換されます。信頼度マップは常に RangeLinear 形式を使用してエンコードされます。信頼度は [0, 1] と想定されます。

範囲線形

d は、ピクセルの深度として、考慮される最小値と最大値の最小値と最大値に近づけます。深度値は最初に [0, 1] の範囲に正規化されます。

次に、次のように 8 または 16 ビットに量子化します。

逆に、量子化深度 d8 を与えると、深度 d は次のように復元できます。

範囲反転

d は、ピクセルの深度として、考慮される最小値と最大値の最小値と最大値に近づけます。深度値は最初に [0, 1] の範囲に正規化されます。

次に、次のように 8 または 16 ビットに量子化します。

逆に、正規化された深度 dn が与えられると、次のように深さ d を復元できます。