Photo Sphere XMP 메타데이터

여기에 설명된 파노라마 네임스페이스에는 Photo Sphere(파노라마라고도 불림)의 생성 및 렌더링에 관한 정보를 제공하는 속성이 포함됩니다. 이러한 파노라마의 예로는 Android 4.2 카메라의 Photo Sphere 기능을 사용하여 생성된 것이 있습니다. Adobe XMP 표준에 설명된 대로 메타데이터가 직렬화되어 Photo Sphere 내에 포함되어야 합니다 (이 페이지 끝부분의 참조 참조).

네임스페이스 URI는 http://ns.google.com/photos/1.0/panorama/입니다.

메타데이터 속성

아래의 다이어그램과 표는 Photo Sphere 속성을 나타냅니다. 이 메타데이터를 작성하는 개발자는, 반드시 이 문서 뒤의 오일러 각 공식을 따르세요. Photo Sphere를 편집하고 보려는 개발자는, 반드시 이 문서 뒤에 설명된 대로 메타데이터를 확인하고 업데이트하세요.

와 값이 동일할 수 있습니다.
이름 유형 필수 기본 값
(가정된 뷰어)
속성 설명 이미지가 수정된 경우 필요한 작업
GPano:UsePanoramaViewer 부울 아니요 True 이 이미지를 정상적인 평면 이미지가 아니라 Photo Sphere 뷰어에서 표시할지 여부. 사용자 기본 설정에 따라 지정되거나 스티칭 소프트웨어를 사용하여 지정될 수 있습니다. 이미지를 표시하거나 수집하는 애플리케이션은 이 옵션을 무시하도록 선택할 수 있습니다. 배율 조정/자르기:
변경 없음. 시야각이 특정 값 이하로 떨어지는 경우, 애플리케이션이 이 옵션을 False로 전환할 수도 있습니다.
GPano:CaptureSoftware 문자열 아니요 해당 없음 Android 휴대폰 등과 같은 모바일 기기에서 애플리케이션을 사용하여 캡처가 수행된 경우, 사용된 애플리케이션의 이름(예: “Photo Sphere”). 소스 이미지를 수동으로 캡처한 경우(예: 삼각대에서 DSLR 사용), 이 옵션을 비워두어야 합니다. 해당 없음
GPano:StitchingSoftware 문자열 아니요 해당 없음 최종 Photo Sphere를 생성하는 데 사용된 소프트웨어. 가끔 이 옵션은  GPano:CaptureSoftware해당 없음
GPano:ProjectionType 자유로운 텍스트 선택

equirectangular

이미지 파일에 사용되는 프로젝션 유형. 현재 Google 제품은 등장방형 값을 지원합니다. 배율 조정/자르기: 변경 없음.
GPano:PoseHeadingDegrees 실수 아니요. 그러나 Google 지도에 표시하기 위해서는 필요. 해당 없음 이미지 중심에 대한 나침반 방위(도 단위). 값은 >= 0 및 < 360이어야 합니다. 배율 조정/자르기: 변경 없음.
GPano:PosePitchDegrees 실수 아니요 0 이미지 중심에 대한 피치(도 단위). 값은 >= -90 및 < 90이어야 합니다. 배율 조정/자르기: 변경 없음.
GPano:PoseRollDegrees 실수 아니요 0 수평선과의 레벨이 0인 이미지의 롤(도 단위) 값은 > -180 및 <= 180이어야 합니다. 배율 조정/자르기: 변경 없음.
GPano:InitialViewHeadingDegrees 정수 아니요 0 초기 뷰의 방위각(도 단위). 배율 조정/자르기: 변경 없음.
GPano:InitialViewPitchDegrees 정수 아니요 0 초기 뷰의 피치 각도(도 단위). 배율 조정/자르기: 변경 없음.
GPano:InitialViewRollDegrees 정수 아니요 0 초기 뷰의 롤 각도(도 단위). 배율 조정/자르기: 변경 없음.
GPano:InitialHorizontalFOVDegrees 실수 아니요 해당 없음 뷰어에 표시되어야 하는 초기 수평 뷰 필드(도 단위). 이것은 확대/축소 수준과 유사합니다. 해당 없음
GPano:FirstPhotoDate 날짜 아니요 해당 없음 Photo Sphere에서 생성된 최초 이미지의 날짜 및 시간. 배율 조정/자르기: 변경 없음.
GPano:LastPhotoDate 날짜 아니요 해당 없음 Photo Sphere에서 생성된 마지막 이미지의 날짜 및 시간. 배율 조정/자르기: 변경 없음.
GPano:SourcePhotosCount 정수 아니요 해당 없음 Photo Sphere를 생성하는 데 사용된 소스 이미지의 수. 배율 조정/자르기: 변경 없음.
GPano:ExposureLockUsed 부울 아니요 해당 없음 개별 소스 사진을 캡처한 경우, 카메라의 노출 설정이 잠겼는지 여부. 해당 없음
GPano:CroppedAreaImageWidthPixels 정수 해당 없음 이미지의 원본 너비(픽셀 단위) (편집되지 않은 이미지의 실제 이미지 너비와 같음). 배율 조정/자르기: 이미지의 새 크기를 반영하려면 이 속성을 업데이트해야 합니다.
GPano:CroppedAreaImageHeightPixels 정수 해당 없음 이미지의 원본 높이(픽셀 단위) (편집되지 않은 이미지의 실제 이미지 높이와 같음). 배율 조정/자르기: 이미지의 새 크기를 반영하려면 이 속성을 업데이트해야 합니다.
GPano:FullPanoWidthPixels 정수 해당 없음 이미지를 잘라냈던 원본 전체 너비. Photo Sphere의 일부분만 캡처된 경우에는, 전체 Photo Sphere로 계산된 너비가 지정됩니다. 자르기: 변경 없음.
배율 조정: 그에 따라 적절히 배율을 조정해야 합니다.
GPano:FullPanoHeightPixels 정수 해당 없음 이미지를 잘라냈던 원본 전체 높이. Photo Sphere의 일부분만 캡처된 경우에는, 전체 Photo Sphere로 계산된 높이가 지정됩니다. 자르기: 변경 없음.
배율 조정: 그에 따라 적절히 배율을 조정해야 합니다.
GPano:CroppedAreaLeftPixels 정수 해당 없음 전체 크기의 Photo Sphere에서 이미지의 왼쪽 가장자리를 잘라낸 열. 자르기: 이미지의 왼쪽 잘라낸 부분이 변경되면, 이 값을 업데이트해야 합니다.
배율 조정: 그에 따라 적절히 배율을 조정해야 합니다.
GPano:CroppedAreaTopPixels 정수 해당 없음 전체 크기의 Photo Sphere에서 이미지의 위쪽 가장자리를 잘라낸 행. 자르기: 이미지의 위쪽 잘라낸 부분이 변경되면, 이 값을 업데이트해야 합니다.
배율 조정: 그에 따라 적절히 배율을 조정해야 합니다.
GPano:InitialCameraDolly 실수 아니요 0 이 선택적 매개변수는 Photo Sphere의 중심에서 멀어지는 방향으로 시선을 따라 가상 카메라 위치를 이동합니다. 후면 위치는 -1.0으로 나타내고, 전면 위치는 1.0으로 나타냅니다. 일반 뷰의 경우 매개변수는 0으로 설정해야 합니다. 해당 없음

전체 Photo Sphere의 예

프로그래머가 아닌 사람도 아주 조금만 수정하여 아래의 메타데이터 예시를 기존의 전체 Photo Sphere(360도 x 180도)에 추가할 수 있습니다. 이 작업은 Adobe Photoshop과 같은 이미지 편집 제품에서 수행할 수 있습니다.

  1. 4000 및 2000 값이 나타나면 이미지의 해당 너비 및 높이에 맞게 픽셀 단위로 변경합니다
  2. Google 지도가 Photo Sphere를 표시할 수 있도록 하려면 PoseHeadingDegrees를 업데이트합니다. 그렇지 않으면 이 매개변수를 선택적으로 제거할 수도 있습니다
  3. (위에 나열된 대로) 선택적 매개변수를 업데이트하거나 제거합니다
<rdf:Description rdf:about="" xmlns:GPano="http://ns.google.com/photos/1.0/panorama/">
    <GPano:UsePanoramaViewer>True</GPano:UsePanoramaViewer>
    <GPano:CaptureSoftware>Photo Sphere</GPano:CaptureSoftware>
    <GPano:StitchingSoftware>Photo Sphere</GPano:StitchingSoftware>
    <GPano:ProjectionType>equirectangular</GPano:ProjectionType>
    <GPano:PoseHeadingDegrees>350.0</GPano:PoseHeadingDegrees>
    <GPano:InitialViewHeadingDegrees>90.0</GPano:InitialViewHeadingDegrees>
    <GPano:InitialViewPitchDegrees>0.0</GPano:InitialViewPitchDegrees>
    <GPano:InitialViewRollDegrees>0.0</GPano:InitialViewRollDegrees>
    <GPano:InitialHorizontalFOVDegrees>75.0</GPano:InitialHorizontalFOVDegrees>
    <GPano:CroppedAreaLeftPixels>0</GPano:CroppedAreaLeftPixels>
    <GPano:CroppedAreaTopPixels>0</GPano:CroppedAreaTopPixels>
    <GPano:CroppedAreaImageWidthPixels>4000</GPano:CroppedAreaImageWidthPixels>
    <GPano:CroppedAreaImageHeightPixels>2000</GPano:CroppedAreaImageHeightPixels>
    <GPano:FullPanoWidthPixels>4000</GPano:FullPanoWidthPixels>
    <GPano:FullPanoHeightPixels>2000</GPano:FullPanoHeightPixels>
    <GPano:FirstPhotoDate>2012-11-07T21:03:13.465Z</GPano:FirstPhotoDate>
    <GPano:LastPhotoDate>2012-11-07T21:04:10.897Z</GPano:LastPhotoDate>
    <GPano:SourcePhotosCount>50</GPano:SourcePhotosCount>
    <GPano:ExposureLockUsed>False</GPano:ExposureLockUsed>
</rdf:Description>

부분 Photo Sphere의 예

<rdf:Description rdf:about="" xmlns:GPano="http://ns.google.com/photos/1.0/panorama/">
    <GPano:UsePanoramaViewer>True</GPano:UsePanoramaViewer>
    <GPano:CaptureSoftware>Photo Sphere</GPano:CaptureSoftware>
    <GPano:StitchingSoftware>Photo Sphere</GPano:StitchingSoftware>
    <GPano:ProjectionType>equirectangular</GPano:ProjectionType>
    <GPano:PoseHeadingDegrees>350.0</GPano:PoseHeadingDegrees>
    <GPano:InitialViewHeadingDegrees>90.0</GPano:InitialViewHeadingDegrees>
    <GPano:InitialViewPitchDegrees>0.0</GPano:InitialViewPitchDegrees>
    <GPano:InitialViewRollDegrees>0.0</GPano:InitialViewRollDegrees>
    <GPano:InitialHorizontalFOVDegrees>75.0</GPano:InitialHorizontalFOVDegrees>
    <GPano:CroppedAreaLeftPixels>90</GPano:CroppedAreaLeftPixels>
    <GPano:CroppedAreaTopPixels>128</GPano:CroppedAreaTopPixels>
    <GPano:CroppedAreaImageWidthPixels>2300</GPano:CroppedAreaImageWidthPixels>
    <GPano:CroppedAreaImageHeightPixels>1042</GPano:CroppedAreaImageHeightPixels>
    <GPano:FullPanoWidthPixels>4000</GPano:FullPanoWidthPixels>
    <GPano:FullPanoHeightPixels>2000</GPano:FullPanoHeightPixels>
    <GPano:FirstPhotoDate>2012-11-07T21:03:13.465Z</GPano:FirstPhotoDate>
    <GPano:LastPhotoDate>2012-11-07T21:04:10.897Z</GPano:LastPhotoDate>
    <GPano:SourcePhotosCount>50</GPano:SourcePhotosCount>
    <GPano:ExposureLockUsed>False</GPano:ExposureLockUsed>
</rdf:Description>

이미지 편집 성능 개선

성능 개선을 위해, Photo Sphere를 뷰어에 표시하는 프로그램은 메타데이터를 업데이트하지 않고 애플리케이션에 의해 원본 Photo Sphere의 배율이 조정되었는지 여부를 확인해야 합니다. 이 작업은 다음 단계에 따라 수행할 수 있습니다.

  1. CroppedAreaImageWidthPixels 태그가 실제 이미지 너비와 동일한지 확인합니다.
  2. CroppedAreaImageHeightPixels 태그가 실제 이미지 높이와 동일한지 확인합니다.
  3. 1단계나 2단계가 실패하면, 이미지의 가로세로 비율이 유지되었는지 여부를 확인합니다.
  4. 3단계가 실패하면 이미지를 Photo Sphere로 표시하지 마십시오. 호환되지 않는 방식으로 Photo Sphere가 변환되었고 잘못된 왜곡이 발생할 수 있습니다.
  5. 3단계를 통과하면, 가로세로 비율이 동일하고 다음과 같은 모든 관련 태그 값이 새 이미지 크기에 맞게 배율을 조정해야 합니다.
    CroppedAreaImageWidthPixels, CroppedAreaImageHeightPixels, FullPanoWidthPixels, FullPanoHeightPixels, CroppedAreaLeftPixels, CroppedAreaRightPixels.

오일러 각 개요

세계 프레임에서 Photo Sphere의 방향은 오일러 각에 의해 정의됩니다. 오일러 각은 다양한 방식으로 정의될 수 있습니다. 정확성을 위해 프로그램은 여기에 설명된 오일러 각 공식을 엄격하게 준수해야 합니다.

지표면 위의 위치는 고정된 "로컬 프레임" XYZ를 정의하며, 여기서 Z는 지표면의 위쪽 수직 방향, X는 진동, Y는 진북입니다. 방향은 이 고정된 "로컬 프레임"에 상대적으로 정의되고, 오일러 각은 이 고정된 XYZ 축 주변의 회전입니다.  따라서 극지에서는 배치 방향이 정의되지 않습니다. 즉, 각도가 (0, 0, 0)인 Photo Sphere는 중심 픽셀이 정북을 향하고 Photo Sphere의 적도가 지표면과 평행하도록 방향이 지정됩니다.

오일러 각은 (회전하는) "Photo Sphere 프레임"의 지점부터 (고정된) "로컬 프레임"의 지점까지 매핑을 제공합니다.
 
회전 매트릭스는 다음과 같이 오일러 각으로부터 생성됩니다(이 순서를 유지하는 것이 중요합니다).

R = R_Z(-방위) * R_X(피치) * R_Y(롤)

여기에서: R_*(t)는 명명된 축 주변의 오른쪽 방향 회전입니다.

    R_Z(angle) = [ cos(angle), -sin(angle),  0
                   sin(angle),  cos(angle),  0
                   0,       0,  1 ]
 
    R_X(angle) = [ 1,       0,      0,
                   0,  cos(angle), -sin(angle),
                   0,  sin(angle),  cos(angle) ]
 
    R_Y(angle) = [ cos(angle),  0,  sin(angle),
                   0,  1,       0,
                   -sin(angle),  0,  cos(angle) ]

and where: Z = Up, X = East, Y = North.

이 순서를 유지하는 것이 중요합니다.

R = R_Z(-방위) * R_X(피치) * R_Y(롤)

왜냐하면 회전은 교환 법칙이 적용되지 않기 때문입니다.

참고로, 방위각은 표준 나침판 방위와 동일합니다.

참조

Adobe XMP standard: http://www.adobe.com/devnet/xmp.html