ความลึกและความน่าเชื่อถือของการเข้ารหัส

ระบบจะทำให้ Depthmap เป็นอนุกรมเป็นชุดพร็อพเพอร์ตี้ XMP ในกระบวนการแปลงเป็นอนุกรม ระบบจะแปลงแผนที่ความลึกเป็นรูปแบบรูปภาพแบบเดิมก่อน ไปป์ไลน์การเข้ารหัสมี 3 ขั้นตอน (ดูรูปที่ 2) ดังนี้

  • แปลงจากรูปแบบอินพุต (เช่น ค่า float หรือ int32) เป็นรูปแบบรูปภาพระดับสีเทาแบบจำนวนเต็ม เช่น ไบต์ (8 บิต) หรือเวิร์ด (16 บิต)
  • บีบอัดโดยใช้ตัวแปลงรหัสรูปภาพมาตรฐาน เช่น JPEG หรือ PNG
  • จัดรูปแบบเป็นพร็อพเพอร์ตี้ XMP สตริง Base64
รูปที่ 2 คำอธิบายไปป์ไลน์การเข้ารหัส Depthmap

ไปป์ไลน์อาจเป็นแบบไม่สูญเสียหรือไม่สูญเสียก็ได้ ขึ้นอยู่กับจำนวนบิตของแผนที่ความลึกต้นฉบับและจำนวนบิตที่ใช้จัดเก็บ เช่น 8 บิตสำหรับตัวแปลงรหัส JPEG และ 8 หรือ 16 บิตสำหรับตัวแปลงรหัส PNG

ปัจจุบันรองรับ 2 รูปแบบ ได้แก่ RangeLinear และ RangeInverse RangeInverse เป็นรูปแบบที่แนะนำหากแผนที่ความลึกจะสูญเสียความแม่นยำเมื่อเข้ารหัส เช่น เมื่อแปลงจาก Float เป็น 8 บิต โดยจะจัดสรรบิตให้กับค่าความลึกที่ใกล้มากขึ้น และจัดสรรบิตให้กับค่าที่ไกลน้อยลง ในลักษณะเดียวกับที่ z-buffer ทำงานใน GPU

หาก Depth Map มี Confidence Map แนบอยู่ ระบบจะแปลง Confidence Map เป็นรูปแบบรูปภาพแบบดั้งเดิมด้วย โดยใช้ไปป์ไลน์ที่คล้ายกับไปป์ไลน์ที่ใช้สำหรับความลึก ระบบจะเข้ารหัสแผนที่ความเชื่อมั่นโดยใช้รูปแบบ RangeLinear เสมอ โดยจะถือว่าช่วงความเชื่อมั่นคือ [0, 1]

RangeLinear

ให้ d เป็นความลึกของพิกเซล และให้ near และ far เป็นค่าความลึกต่ำสุดและสูงสุดที่พิจารณา ระบบจะทําให้ค่าความลึกอยู่ในช่วง [0, 1] ก่อนดังนี้

จากนั้นควอนไทซ์เป็น 8 หรือ 16 บิต

ในทางกลับกัน เมื่อกำหนดความลึกที่เล็กลง d8bit คุณจะกู้คืนความลึก d ได้ดังนี้

RangeInverse

ให้ d เป็นความลึกของพิกเซล และให้ near และ far เป็นค่าความลึกต่ำสุดและสูงสุดที่พิจารณา ระบบจะทําให้ค่าความลึกอยู่ในช่วง [0, 1] ก่อนดังนี้

จากนั้นควอนไทซ์เป็น 8 หรือ 16 บิต

ในทางกลับกัน เมื่อทราบความลึกที่ปรับให้เป็นมาตรฐาน dn ก็จะกู้คืนความลึก d ได้ดังนี้