編碼深度和信賴度

深度地圖會序列化為一組 XMP 屬性。在序列化過程中,深度圖會先轉換為傳統圖像格式。編碼管道包含三個步驟 (見圖 2):

  • 從輸入格式 (例如浮點或 int32 值) 轉換為整數灰階圖片格式,例如位元組 (8 位元) 或字詞 (16 位元)。
  • 使用標準圖片轉碼器壓縮,例如 JPEG 或 PNG。
  • 序列化為 Base64 字串 XMP 屬性。
圖 2. 深度對映編碼管道的說明。

管道可以是無損或有損,具體取決於原始深度圖的位元數和用於儲存的位元數,例如 JPEG 編碼器為 8 位元,PNG 編碼器為 8 或 16 位元。

目前支援兩種不同格式:RangeLinearRangeInverse。如果深度對應在編碼時會失去精確度 (例如從浮點數轉換為 8 位元時),建議使用 RangeInverse 格式。這會將更多位元分配給近距離深度值,並將較少位元分配給遠距離值,與 GPU 卡中的 Z 緩衝區運作方式類似。

如果深度圖附有信心度地圖,信心度地圖也會使用類似於深度圖的管道,轉換為傳統圖片格式。信賴度地圖一律採用 RangeLinear 格式編碼,信賴度範圍假設為 [0, 1]。

RangeLinear

假設 d 是像素的深度,而 near 和 far 是考慮的最小和最大深度值。深度值會先正規化為 [0, 1] 範圍,如下所示:

然後量化為 8 或 16 位元,如

反之,如果知道量化深度 d8bit,就能還原深度 d,公式如下:

RangeInverse

假設 d 是像素的深度,而 near 和 far 是考慮的最小和最大深度值。深度值會先正規化為 [0, 1] 範圍,如下所示:

然後量化為 8 或 16 位元,如

反之,如果已知正規化深度 dn,則可透過以下公式還原深度 d: