Siêu dữ liệu XMP của ảnh toàn cảnh 360 độ

Không gian tên ảnh toàn cảnh được mô tả ở đây chứa các thuộc tính cung cấp thông tin về việc tạo và hiển thị ảnh toàn cảnh 360 độ, đôi khi còn được gọi là ảnh toàn cảnh, chẳng hạn như ảnh do tính năng Ảnh toàn cảnh 360 độ tạo ra trong máy ảnh Android 4.2. Siêu dữ liệu phải được chuyển đổi tuần tự và nhúng bên trong ảnh toàn cảnh 360 độ như mô tả trong tiêu chuẩn Adobe XMP (xem references ở cuối trang này).

URI không gian tên là http://ns.google.com/photos/1.0/panorama/

Thuộc tính siêu dữ liệu

Sơ đồ và bảng bên dưới cho thấy các thuộc tính ảnh toàn cảnh 360 độ được đóng gói bằng Tham số GPano. Khi chỉnh sửa và xem ảnh toàn cảnh 360 độ, hãy nhớ xác minh và cập nhật siêu dữ liệu phù hợp như được mô tả ở phần sau của tài liệu này. Khi chỉ định vị trí và các trường tiêu đề ban đầu, hãy đảm bảo tuân theo Quy ước góc Euler được thảo luận ở phần sau của tài liệu này.

Lưu ý rằng các sản phẩm của Google chỉ hỗ trợ phép chiếu hình cầu. Thông tin dự đoán bổ sung hiện chỉ được các bên khác hỗ trợ.

Phép chiếu hình cầu

Phép chiếu hình trụ

Lưu ý rằng nếu phần trên cùng của hình ảnh trụ nằm ở phía trên đường chân trời, thì CroppedAreaTopPixels phải có giá trị âm. Giá trị 0 cho CroppedAreaTopPixels sẽ đặt phần đầu của hình ảnh ở đường chân trời. Một giá trị dương của CroppedAreaTopPixels đặt phần đầu của hình ảnh bên dưới đường chân trời.

Tham chiếu tham số GPano

Tên Loại Bắt buộc Giá trị mặc định
(người xem giả định)
Nội dung mô tả cơ sở lưu trú Việc cần làm nếu hình ảnh được sửa đổi
GPano:UsePanoramaViewer Boolean Không Đúng Liệu có hiển thị hình ảnh này trong trình xem ảnh toàn cảnh 360 độ thay vì dưới dạng hình ảnh phẳng thông thường hay không. Điều này có thể được chỉ định dựa trên lựa chọn ưu tiên của người dùng hoặc bằng phần mềm ghép ảnh. Ứng dụng hiển thị hoặc nhập hình ảnh có thể chọn bỏ qua thông báo này. tỷ lệ/cắt:
Không có thay đổi. Ứng dụng có thể quyết định chuyển chế độ này thành False nếu trường nhìn giảm xuống dưới một giá trị nhất định.
GPano:CaptureSoftware Chuỗi Không không áp dụng Nếu việc chụp được thực hiện bằng ứng dụng trên thiết bị di động, chẳng hạn như điện thoại Android, thì tên của ứng dụng đã được sử dụng (chẳng hạn như “Ảnh toàn cảnh 360 độ”). Tên này sẽ được để trống nếu hình ảnh nguồn được chụp thủ công, chẳng hạn như bằng cách sử dụng DSLR trên giá ba chân. không áp dụng
GPano:StitchingSoftware Chuỗi Không không áp dụng Phần mềm dùng để tạo ảnh toàn cảnh 360 độ cuối cùng. Đôi khi, giá trị này có thể giống với giá trị của GPano:CaptureSoftware. không áp dụng
GPano:ProjectionType Mở lựa chọn văn bản

hình cầu toàn cảnh

Loại phép chiếu được sử dụng trong tệp hình ảnh. Các sản phẩm của Google hiện chỉ hỗ trợ giá trị hình cầu toàn cảnh. tỷ lệ/Cắt: Không thay đổi.
GPano:PoseHeadingDegrees Số thực Không, nhưng là bắt buộc để hiển thị trên Google Maps không áp dụng Hướng la bàn, được đo bằng độ theo chiều kim đồng hồ từ hướng Bắc, cho tâm của hình ảnh. Giá trị phải lớn hơn 0 và nhỏ hơn 360. tỷ lệ/Cắt: Không thay đổi.
GPano:PosePitchDegrees Số thực Không 0 Cao độ, được đo bằng độ so với đường chân trời, cho tâm trong hình ảnh. Giá trị phải lớn hơn -90 và nhỏ hơn 90. tỷ lệ/Cắt: Không thay đổi.
GPano:PoseRollDegrees Số thực Không 0 Hình ảnh cuộn, được đo bằng độ, có cấp độ với đường chân trời là 0. Khi cuộn tăng lên, đường chân trời xoay ngược chiều kim đồng hồ trong hình ảnh. Giá trị phải lớn hơn -180 và nhỏ hơn hoặc bằng 180. tỷ lệ/Cắt: Không thay đổi.
GPano:InitialViewHeadingDegrees Số nguyên Không 0 Góc hướng của chế độ xem ban đầu tính theo độ theo chiều kim đồng hồ so với hướng Bắc của thế giới thực, không so với tâm của ảnh toàn cảnh. tỷ lệ/Cắt: Không thay đổi.
GPano:InitialViewPitchDegrees Số nguyên Không 0 Góc ném bóng của chế độ xem ban đầu tính theo độ so với đường chân trời trong thế giới thực, không so với tâm của ảnh toàn cảnh. tỷ lệ/Cắt: Không thay đổi.
GPano:InitialViewRollDegrees Số nguyên Không 0 Góc cuộn của hình ảnh ban đầu theo độ khi cấp với đường chân trời trong thế giới thực là 0. Khi cuộn tăng lên, đường chân trời sẽ xoay ngược chiều kim đồng hồ trong chế độ xem. tỷ lệ/Cắt: Không thay đổi.
GPano:InitialHorizontalFOVDegrees Số thực Không không áp dụng Trường nhìn ngang ban đầu mà người xem sẽ hiển thị (tính bằng độ). Điều này tương tự như mức thu phóng. không áp dụng
GPano:InitialVerticalFOVDegrees Số thực Không không áp dụng Trường nhìn thẳng đứng ban đầu mà người xem sẽ hiển thị (tính bằng độ). Điều này tương tự như mức thu phóng. Nếu có cả GPano:InitialHorizontalFOVdegrees và GPano:InitialVerticalFOVdegrees, thì GPano:InitialHorizontalFOVdegrees sẽ được ưu tiên. Chỉ sử dụng initialVerticalFOVReader nếu nội dung của bạn được hiển thị ở nhiều tỷ lệ khung hình và bạn muốn trường nhìn dọc giữ nguyên trong khi trường nhìn ngang có thể thay đổi. Các sản phẩm của Google hiện không hỗ trợ trường này. không áp dụng
GPano:FirstPhotoDate Ngày Không không áp dụng Ngày và giờ cho hình ảnh đầu tiên được tạo trong ảnh toàn cảnh 360 độ. tỷ lệ/Cắt: Không thay đổi.
GPano:LastPhotoDate Ngày Không không áp dụng Ngày và giờ cho hình ảnh cuối cùng được tạo trong ảnh toàn cảnh 360 độ. tỷ lệ/Cắt: Không thay đổi.
GPano:SourcePhotosCount Số nguyên Không không áp dụng Số hình ảnh nguồn được sử dụng để tạo ảnh toàn cảnh 360 độ. tỷ lệ/Cắt: Không thay đổi.
GPano:ExposureLockUsed Boolean Không không áp dụng Thời điểm chụp từng ảnh nguồn, cho dù chế độ cài đặt phơi sáng của máy ảnh có bị khoá hay không. không áp dụng
GPano:CroppedAreaImageWidthPixels Số nguyên không áp dụng Chiều rộng ban đầu tính bằng pixel của hình ảnh (bằng với chiều rộng của hình ảnh thực tế cho hình ảnh chưa chỉnh sửa). Xem biểu đồ ở trên. tỷ lệ/Cắt: Thuộc tính này cần được cập nhật để phản ánh kích thước mới của hình ảnh.
GPano:CroppedAreaImageHeightPixels Số nguyên không áp dụng Chiều cao ban đầu tính bằng pixel của hình ảnh (bằng chiều cao của hình ảnh thực tế đối với hình ảnh chưa chỉnh sửa). Xem biểu đồ ở trên. tỷ lệ/Cắt: Thuộc tính này cần được cập nhật để phản ánh kích thước mới của hình ảnh.
GPano:FullPanoWidthPixels Số nguyên không áp dụng Chiều rộng tối đa ban đầu mà hình ảnh bị cắt từ đó. Nếu chỉ chụp một phần ảnh toàn cảnh 360 độ, giá trị này chỉ định chiều rộng của toàn bộ ảnh toàn cảnh 360 độ sẽ có được. Xem biểu đồ ở trên. cắt: Không thay đổi.
tỷ lệ: Cần phải điều chỉnh tỷ lệ đúng cách cho phù hợp.
GPano:FullPanoHeightPixels Số nguyên không áp dụng Chiều cao đầy đủ ban đầu mà hình ảnh đã bị cắt. Nếu chỉ có một phần ảnh toàn cảnh 360 độ được chụp, giá trị này sẽ chỉ định chiều cao của toàn bộ ảnh toàn cảnh 360 độ. Xem biểu đồ ở trên. cắt: Không thay đổi.
tỷ lệ: Cần phải điều chỉnh tỷ lệ đúng cách cho phù hợp.
GPano:CroppedAreaLeftPixels Số nguyên không áp dụng Cột nơi cạnh trái của hình ảnh bị cắt từ ảnh toàn cảnh 360 độ có kích thước đầy đủ. Xem biểu đồ ở trên. cắt: Nếu thay đổi tỷ lệ cắt bên trái của hình ảnh, thì bạn phải cập nhật giá trị này.
tỷ lệ: Cần điều chỉnh tỷ lệ thích hợp cho phù hợp.
GPano:CroppedAreaTopPixels Số nguyên không áp dụng Hàng mà cạnh trên của hình ảnh bị cắt khỏi ảnh toàn cảnh 360 độ có kích thước đầy đủ. Xem biểu đồ ở trên. cắt: Nếu thay đổi phần cắt trên cùng của hình ảnh, thì bạn phải cập nhật giá trị này.
tỷ lệ: Cần điều chỉnh tỷ lệ cho phù hợp.
GPano:InitialCameraDolly Số thực Không 0 Tham số tùy chọn này di chuyển vị trí máy ảnh ảo dọc theo đường ngắm, ra khỏi trung tâm của ảnh toàn cảnh 360 độ. Vị trí của bề mặt phía sau được biểu thị bằng giá trị -1.0, còn vị trí của bề mặt phía trước được biểu thị bằng 1.0. Để xem thông thường, bạn phải đặt tham số này thành 0. không áp dụng

Ví dụ về ảnh toàn cảnh 360 độ đầy đủ

Những người không phải lập trình có thể thêm ví dụ về siêu dữ liệu bên dưới vào các ảnh toàn cảnh 360 độ x 180 độ hiện có chỉ với những sửa đổi nhỏ. Bạn có thể thực hiện việc này trong các sản phẩm chỉnh sửa hình ảnh, chẳng hạn như Adobe Photoshop.

  1. thay đổi bất kỳ số lần xuất hiện nào là 4000 và 2000 để phù hợp với chiều rộng và chiều cao tương ứng của hình ảnh tính bằng pixel
  2. cập nhật PoseSegmentdegrees nếu bạn muốn Google Maps có thể hiển thị ảnh toàn cảnh 360 độ của bạn; nếu không, bạn có thể xoá tham số này (không bắt buộc)
  3. cập nhật hoặc xoá các thông số không bắt buộc (như được liệt kê ở trên)
<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>

Ví dụ về ảnh toàn cảnh 360 độ một phần

<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>

Tính năng chỉnh sửa ảnh ổn định

Để hoạt động hiệu quả, các chương trình hiển thị ảnh toàn cảnh 360 độ trong người xem nên kiểm tra xem ảnh toàn cảnh 360 độ gốc có được ứng dụng điều chỉnh tỷ lệ mà không cập nhật siêu dữ liệu hay không. Bạn có thể làm theo các bước sau:

  1. đảm bảo thẻ CroppedAreaImageWidthPixels bằng với chiều rộng hình ảnh thực tế
  2. đảm bảo thẻ CroppedAreaImageHeightPixels bằng với chiều cao hình ảnh thực tế
  3. nếu bước 1 hoặc 2 không thành công, hãy kiểm tra xem tỷ lệ khung hình của hình ảnh có được giữ nguyên hay không
  4. nếu bước 3 không thành công, đừng hiển thị hình ảnh dưới dạng ảnh toàn cảnh 360 độ vì hình ảnh đã được biến đổi theo cách không tương thích, điều này sẽ gây ra méo hình xấu
  5. nếu bước 3 vượt qua, tỷ lệ khung hình sẽ tương đương và tất cả các giá trị thẻ liên kết sau đây phải được điều chỉnh theo tỷ lệ để vừa với kích thước hình ảnh mới:
    CroppedAreaImageWidthPixels, CroppedAreaImageHeightPixels, FullPanoWidthPixels, FullPanoHeightPixels, CroppedAreaLeftPixels, CroppedAreaRightPixels.

Tổng quan về góc Euler

Hướng của ảnh toàn cảnh 360 độ trong khung thế giới được xác định bằng góc Euler. Góc Euler có thể được xác định theo nhiều cách. Để chính xác, chương trình phải tuân thủ nghiêm ngặt các quy ước góc Euler được mô tả ở đây.

Vị trí phía trên bề mặt trái đất xác định XYZ là một "khung cục bộ" cố định, trong đó Z ở trên và trực giao với bề mặt trái đất, X là đúng hướng đông và Y là phía bắc thực. Hướng được xác định tương ứng với "khung cục bộ" cố định này và các góc Euler là xoay xung quanh các trục XYZ cố định này. Do đó, hướng của tư thế không xác định ở các cực. Điều này có nghĩa là ảnh toàn cảnh 360 độ có góc (0, 0, 0) sẽ được định hướng sao cho pixel ở giữa hướng về phía bắc với xích đạo của ảnh toàn cảnh 360 độ song song với bề mặt trái đất.

Các góc Euler cung cấp ánh xạ từ các điểm trong "khung ảnh toàn cảnh 360 độ" (đã xoay) đến các điểm trong "khung cục bộ" (cố định):
 
Ma trận xoay được tạo từ các góc Euler như sau (điều quan trọng là phải duy trì thứ tự này):

R = R_Z(-tiêu đề) * R_X(độ cao) * R_Y(cuộn)

trong đó: R_*(t) là xoay tay phải xung quanh trục được đặt tên:

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





và trong đó: Z = Lên, X = Đông, Y = Bắc.

Bạn cần duy trì thứ tự sau đây:

R = R_Z(-tiêu đề) * R_X(độ cao) * R_Y(cuộn)

vì phép quay không có tính chất giao hoán.

Lưu ý rằng góc hướng đi giống như hướng la bàn tiêu chuẩn.

Tài liệu tham khảo

Tiêu chuẩn Adobe XMP: http://www.adobe.com/devnet/xmp.html