這裡所述的全景命名空間包含會提供有關建立和轉譯球形影像(有時也稱為全景,例如由 Android 4.2 相機中的 Photo Sphere 功能建立的那些相片)資訊的屬性。
中繼資料應該序列化和內嵌於球形影像內,如 Adobe XMP
標準所述 (請參閱此頁面結尾的參考資料)。
命名空間 URI 是 http://ns.google.com/photos/1.0/panorama/
中繼資料屬性
下圖與下表顯示球形影像屬性。 開發人員務必依照本文件稍後將說明的尤拉角慣例來撰寫此中繼資料。
編輯和檢視球形影像的開發人員務必根據本文件稍後的說明,驗證和更新中繼資料。
名稱 | 類型 | 必要 | 預設值 (檢視器假設) |
屬性描述 | 修改影像時的必要動作 |
---|---|---|---|---|---|
GPano:UsePanoramaViewer | 布林值 | 否 | True | 是否要以球形影像檢視器顯示此影像,而不顯示為標準的扁平影像。 這會根據使用者的偏好設定或由拼接軟體指定。 顯示或內嵌影像的應用程式可選擇忽略此屬性。 | scale/crop: 無變更。 如果視野低於特定值,應用程式會決定將此屬性切換為 False。 |
GPano:CaptureSoftware | 字串 | 否 | 不適用 | 如果使用行動裝置(例如 Android 手機)上的應用程式完成拍攝,就會是使用的應用程式名稱(例如 “Photo Sphere”)。 如果是手動拍攝來源影像(例如使用三腳架上的 DSLR),這應會留白。 | 不適用 |
GPano:StitchingSoftware | 字串 | 否 | 不適用 | 用來建立最終球形影像的軟體。 這個值有時會和 GPano:CaptureSoftware 的值相同。 | 不適用 |
GPano:ProjectionType | 自由選擇文字 | 是 |
equirectangular |
影像檔案中使用的投影類型。 Google 產品目前支援的值為 equirectangular。 | scale/crop:無變更。 |
GPano:PoseHeadingDegrees | 實數 | 否,但在「Google 地圖」上顯示時為必要 | 不適用 | 測量影像中央的指南針所指方向的度數。 值必須 >= 0 且 < 360。 | scale/crop:無變更。 |
GPano:PosePitchDegrees | 實數 | 否 | 0 | 測量影像中央的傾斜度數。 值必須 >= -90 且 <= 90。 | scale/crop:無變更。 |
GPano:PoseRollDegrees | 實數 | 否 | 0 | 與地平線的水平層級為 0 時影像的轉動角(單位為度)。其值必須為 > -180 和 <= 180。 | scale/crop:無變更。 |
GPano:InitialViewHeadingDegrees | 整數 | 否 | 0 | 初始檢視位置的指針角度(度數)。 | scale/crop:無變更。 |
GPano:InitialViewPitchDegrees | 整數 | 否 | 0 | 初始檢視位置的傾斜角度(度數)。 | scale/crop:無變更。 |
GPano:InitialViewRollDegrees | 整數 | 否 | 0 | 初始檢視位置的轉動角度(度數)。 | scale/crop:無變更。 |
GPano:InitialHorizontalFOVDegrees | 實數 | 否 | 不適用 | 檢視器應該顯示的初始水平視野(度數)。 這類似於縮放層級。 | 不適用 |
GPano:FirstPhotoDate | 日期 | 否 | 不適用 | 以球形影像建立之第一個影像的日期與時間。 | scale/crop:無變更。 |
GPano:LastPhotoDate | 日期 | 否 | 不適用 | 以球形影像建立之最後一個影像的日期與時間。 | scale/crop:無變更。 |
GPano:SourcePhotosCount | 整數 | 否 | 不適用 | 用來建立球形影像的來源影像數目。 | scale/crop:無變更。 |
GPano:ExposureLockUsed | 布林值 | 否 | 不適用 | 拍攝個別的來源相片時,相機的曝光設定是否處於鎖定狀態。 | 不適用 |
GPano:CroppedAreaImageWidthPixels | 整數 | 是 | 不適用 | 影像的原始寬度(像素)(等於未經編輯影像的實際影像寬度) | scale/crop:需要更新此屬性以反映新的影像大小。 |
GPano:CroppedAreaImageHeightPixels | 整數 | 是 | 不適用 | 影像的原始高度(像素)(等於未經編輯影像的實際影像高度) | scale/crop:需要更新此屬性以反映新的影像大小。 |
GPano:FullPanoWidthPixels | 整數 | 是 | 不適用 | 所裁剪影像的原始完整寬度。 如果只拍攝部分球形影像,這會指定完整球形影像的實際寬度。 | crop:無變更。 scale:這需要根據情況適度縮放。 |
GPano:FullPanoHeightPixels | 整數 | 是 | 不適用 | 所裁剪影像的原始完整高度。 如果只拍攝部分球形影像,這會指定完整球形影像的實際高度。 | crop:無變更。 scale:這需要根據情況適度縮放。 |
GPano:CroppedAreaLeftPixels | 整數 | 是 | 不適用 | 從實際球形影像尺寸剪下影像左側的直行。 | crop:如果影像左側剪下的部分已變更,就必須更新這個值。 scale:這需要根據情況適度縮放。 |
GPano:CroppedAreaTopPixels | 整數 | 是 | 不適用 | 從實際球形影像尺寸剪下影像上方的橫列。 | crop:如果影像上方剪下的部分已變更,就必須更新這個值。 scale:這需要根據情況適度縮放。 |
GPano:InitialCameraDolly | 實數 | 否 | 0 | 此選擇性參數會順著視線將虛擬相機位置從球形影像中心移開。 -1.0 的值代表背面位置,而 1.0 的值代表正面位置。對於一般檢視,此參數應該設定為 0。 | 不適用 |
完整球形影像範例
非程式設計師只要稍微修改下列中繼資料範例,就可以新增至現有的完整球形影像(360 度 x 180 度)。
在影像編輯產品(例如 Adobe Photoshop)中,就能完成此動作。
- 將所出現的任何 4000 與 2000 變更為符合對應的影像寬度與高度(像素)
- 如果要讓「Google 地圖」顯示您的球形影像,請更新 PoseHeadingDegrees;否則,您可以選擇性移除此參數
- 更新或移除選擇性參數(如上面所列)
<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>
部分球形影像範例
<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>
影像編輯功能強大
為使功能強大,會在檢視器中顯示球形影像的程式,應該檢查是否不需要更新中繼資料,就能由應用程式縮放原始球形影像。
依照下列步驟執行以完成此動作:
- 確定 CroppedAreaImageWidthPixels 標籤等於實際影像寬度
- 確定 CroppedAreaImageHeightPixels 標籤等於實際影像高度
- 如果步驟 1 或 2 失敗,請檢查影像外觀比例是否維持不變
- 如果步驟 3 失敗,請不要將影像顯示為球形影像,因為該影像是以不相容方法轉換且會產生嚴重變形。
- 如果步驟 3 通過,外觀比例相等並應該根據新的影像大小縮放下列的相關標籤值:
CroppedAreaImageWidthPixels, CroppedAreaImageHeightPixels, FullPanoWidthPixels, FullPanoHeightPixels, CroppedAreaLeftPixels, CroppedAreaRightPixels.
尤拉角總覽
世界座標系統的球形影像方向是透過尤拉角來定義。 尤拉角能以許多方式定義。 為能正確無誤,程式必須嚴格遵循此處所述的尤拉角慣例。
地球表面上方的位置定義為固定的「當地座標」XYZ,其中 Z 朝上且與地球表面呈直角,X 為正東方,而 Y 為正北方。 定義的方向是指相對於此固定「當地座標」的方向,且尤拉角是繞著這些固定的 XYZ 軸旋轉。 因此未定義南北極的構成方向。 這表示角度為 (0, 0, 0) 的球形影像中心像素會朝向正北,而球形影像的赤道會與地球表面平行。
尤拉角提供的對應點是從(旋轉的)球形影像座標對應到(固定的)「當地座標」:
從尤拉角建構的旋轉矩陣如下(請務必維持這個順序):
R = R_Z(-heading) * R_X(pitch) * R_Y(roll)
其中: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 = 上方,X = 東方,Y = 北方。
請務必維持這個順序:
R = R_Z(-heading) * R_X(pitch) * R_Y(roll)
因為不能交換旋轉方向。
請注意,指針角度會和標準指南針所指方向相同。
參考資料
Adobe XMP standard: http://www.adobe.com/devnet/xmp.html