인코딩 깊이 및 신뢰도

깊이 지도는 XMP 속성 집합으로 직렬화됩니다. 직렬화 프로세스의 일환으로 심도 지도가 먼저 기존 이미지 형식으로 변환됩니다. 인코딩 파이프라인에는 세 단계가 있습니다 (그림 2 참고).

  • 입력 형식(예: float 또는 int32 값)에서 정수 그레이 스케일 이미지 형식(예: 바이트(8비트) 또는 단어(16비트))으로 변환합니다.
  • 표준 이미지 코덱(예: JPEG 또는 PNG)을 사용하여 압축합니다.
  • base64 문자열 XMP 속성으로 직렬화합니다.
그림 2. 깊이 지도 인코딩 파이프라인에 대한 설명입니다.

파이프라인은 원래 깊이 지도의 비트 수와 저장하는 데 사용되는 비트 수에 따라 무손실 또는 손실이 있을 수 있습니다(예: JPEG 코덱의 경우 8비트, PNG 코덱의 경우 8비트 또는 16비트).

현재 RangeLinearRangeInverse의 두 가지 형식이 지원됩니다. RangeInverse는 인코딩 시 깊이 지도의 정밀도가 손실되는 경우(예: 부동 소수점에서 8비트로 변환하는 경우) 권장되는 형식입니다. GPU 카드에서 z-buffer가 작동하는 방식과 유사하게 가까운 깊이 값에는 더 많은 비트를 할당하고 먼 값에는 더 적은 비트를 할당합니다.

깊이 맵에 신뢰도 맵이 연결되어 있으면 신뢰도 맵도 깊이에 사용된 것과 유사한 파이프라인을 사용하여 기존 이미지 형식으로 변환됩니다. 신뢰도 맵은 항상 RangeLinear 형식을 사용하여 인코딩되며 신뢰도 범위는 [0, 1]로 가정됩니다.

RangeLinear

d를 픽셀의 깊이, near와 far를 고려되는 최소 및 최대 깊이 값이라고 하겠습니다. 깊이 값은 먼저 다음과 같이 [0, 1] 범위로 정규화됩니다.

그런 다음 다음과 같이 8비트 또는 16비트로 양자화합니다.

반대로 양자화된 깊이 d8bit이 주어지면 다음과 같이 깊이 d를 복구할 수 있습니다.

RangeInverse

d를 픽셀의 깊이, near와 far를 고려되는 최소 및 최대 깊이 값이라고 하겠습니다. 깊이 값은 먼저 다음과 같이 [0, 1] 범위로 정규화됩니다.

그런 다음 다음과 같이 8비트 또는 16비트로 양자화합니다.

반대로 정규화된 깊이 dn이 주어지면 다음과 같이 깊이 d를 복구할 수 있습니다.