מטא-נתונים של XMP של תמונה פנורמית ב-360°

מרחב השמות הפנורמי שמתואר כאן מכיל מאפיינים שמספקים מידע על יצירה ורינדור של תמונות פוטוספריות, שנקראות לפעמים גם תמונות פנורמיות, כמו אלה שנוצרות על ידי תכונת פנורמית ב-360° במצלמת Android 4.2. המטא-נתונים צריכים להיות סדרתיים ומוטמעים בתוך התמונה הפוטוספרית, כפי שמתואר בתקן Adobe XMP (תוכלו לעיין בקובצי עזר בסוף הדף הזה).

ה-URI של מרחב השמות הוא http://ns.google.com/photos/1.0/panorama/

מאפייני מטא-נתונים

התרשימים בטבלה והמאפיינים של תמונות פנורמיות ב-360° כוללים את הפרמטרים של GPano. בעת העריכה וההצגה של תמונות פוטוספריות, הקפידו לאמת ולעדכן את המטא-נתונים לפי השלבים המפורטים בהמשך המסמך. כשאתם מציינים את השדות עבור הכותרת והכותרת הראשונית, הקפידו לפעול בהתאם למוסכמות הזווית של אוילר המתוארות בהמשך המסמך הזה.

לתשומת ליבך, מוצרי Google תומכים בתחזיות כדוריות בלבד. תחזיות נוספות נתמכות בשלב זה רק על ידי גורמים אחרים.

תחזיות כדוריות

הקרנות גליליות

הערה: אם החלק העליון של תמונה גלילית נמצא מעל האופק, CroppedAreaTopPixels חייב להיות שלילי. ערך 0 של CroppedareaTopPixels ימקם את החלק העליון של התמונה באופק. ערך חיובי של CroppedareaTopPixels מציב את החלק העליון של התמונה מתחת לאופק.

הפניה לפרמטר GPano

שם סוג חובה ערך ברירת המחדל
(ההנחה היא שהצופים)
תיאור הנכס נדרשת פעולה אם התמונה שונתה
GPano:UsePanoramaViewer בוליאני לא True האם להציג את התמונה הזו ב- למכירה פנורמית של תמונה פוטוספרית, ולא כתמונה רגילה. אפשר לציין זאת בהתאם להעדפות המשתמש או לפי תוכנת החיבור. המערכת יכולה להתעלם מהאפליקציה שמציגה או מטמיעה את התמונה. קנה מידה/חיתוך:
ללא שינוי. אפליקציה יכולה להחליט להעביר את הערך הזה ל-False אם שדה התצוגה נמוך מערך מסוים.
GPano:Capturesoftware מחרוזת לא לא רלוונטי אם הצילום בוצע באמצעות אפליקציה במכשיר נייד, כמו טלפון Android, שם האפליקציה שבה נעשה שימוש (למשל, "תמונה פנורמית ב-360°") צריך להשאיר ריק אם תמונות המקור צולמו באופן ידני, למשל על ידי שימוש ב-DSLR בחצובה. לא רלוונטי
GPano:תפר תוכנה מחרוזת לא לא רלוונטי התוכנה שבה השתמשו כדי ליצור את התמונה הפוטוספרית הסופית. לפעמים הערך הזה יכול להיות זהה לערך של GPano:Capturesoftware. לא רלוונטי
GPano:ProjectionType פתיחת בחירת הטקסט כן

מלבנית

סוג ההקרנה המשמש בקובץ התמונה. בשלב זה, מוצרי Google תומכים בערך המלבני בלבד. קנה מידה/חיתוך: אין שינוי.
GPano:PoseHeaderDegrees אמיתי לא, אבל חובה להציג את המידע במפות Google לא רלוונטי כותרת המצפן, הנמדדת במעלות בכיוון השעון מצפון, למרכז התמונה. הערך צריך להיות >= 0 ו-< 360. קנה מידה/חיתוך: אין שינוי.
GPano:PosePitchDegrees אמיתי לא 0 גובה צליל, נמדד במעלות מעל האופק, במרכז התמונה. הערך חייב להיות >= -90 ו-<= 90. קנה מידה/חיתוך: אין שינוי.
GPano:PoseRollDegrees אמיתי לא 0 גליל, הנמדד במעלות, של התמונה כאשר הרמה עם האופק היא 0. כאשר הגליל גדל, האופק מסתובב נגד כיוון השעון בתמונה. הערך חייב להיות > -180 ו-<= 180. קנה מידה/חיתוך: אין שינוי.
GPano:FirstViewHeaderDegrees מספר שלם לא 0 זווית הכותרת של התצוגה הראשונית במעלות בכיוון השעון מצפון אמיתי, לא ביחס למרכז הפאנו. קנה מידה/חיתוך: אין שינוי.
GPano:FirstViewPitchDegrees מספר שלם לא 0 זווית הזווית של התצוגה הראשונית במעלות מעל אופק בעולם האמיתי, לא באופן יחסי למרכז הפאנו. קנה מידה/חיתוך: אין שינוי.
GPano:FirstViewRollDegrees מספר שלם לא 0 זווית הגליל של התצוגה הראשונית במעלות, כאשר הרמה עם האופק האמיתי היא 0. כאשר הגליל גדל, האופק מסתובב נגד כיוון השעון בתצוגה. קנה מידה/חיתוך: אין שינוי.
GPano:FirstHorizontalFOVDegrees אמיתי לא לא רלוונטי שדה התצוגה האופקי הראשוני של הצופה (במעלות). הגדרה זו דומה לרמת הזום. לא רלוונטי
GPano:FirstVerticalFOVDegrees אמיתי לא לא רלוונטי השדה האנכי הראשון של התצוגה שצריך להציג (במעלות). הגדרה זו דומה לרמת הזום. אם נמצאים GPano:InitialHorizontalFOVDegrees ו-GPano:InitialVerticalFOVDegrees, תינתן עדיפות ל-GPano:InitialHorizontalFOVDegrees. השתמשו רק ב-InitialVerticalFOVDegrees אם אתם רוצים שתוכן המסך יוצג בכמה יחסי גובה-רוחב, ואתם מעדיפים שהשדה האנכי של התצוגה יישאר קבוע, ואילו שדה התצוגה האופקית עשוי להשתנות. בשלב זה, מוצרי Google לא תומכים בשדה הזה. לא רלוונטי
GPano:FirstPhotoDate תאריך לא לא רלוונטי התאריך והשעה של התמונה הראשונה שנוצרה ב-360°. קנה מידה/חיתוך: אין שינוי.
GPano:LastPhotoDate תאריך לא לא רלוונטי התאריך והשעה של התמונה האחרונה שנוצרה ב-360°. קנה מידה/חיתוך: אין שינוי.
GPano:SourcePhotosCount מספר שלם לא לא רלוונטי מספר תמונות המקור המשמשות ליצירת התמונה הכדורית. קנה מידה/חיתוך: אין שינוי.
GPano:ExposureLockUsed בוליאני לא לא רלוונטי כאשר צולמו תמונות מקור שונות, גם אם הגדרת החשיפה של המצלמה נעולה וגם אם לא. לא רלוונטי
GPano:CroppedAreaImageWidthPixels מספר שלם כן לא רלוונטי הרוחב המקורי בפיקסלים של התמונה (שווה לרוחב התמונה בפועל בתמונות שלא נערכו). עיינו בתרשים למעלה. קנה מידה/חיתוך: יש לעדכן את הנכס הזה כך שישקף את הגודל החדש של התמונה.
GPano:CroppedAreaImageHeightPixels מספר שלם כן לא רלוונטי הגובה המקורי בפיקסלים של התמונה (שווה לגובה התמונה בפועל בתמונות שלא נערכו). עיינו בתרשים למעלה. קנה מידה/חיתוך: יש לעדכן את הנכס הזה כך שישקף את הגודל החדש של התמונה.
GPano:FullPanoWidthPixels מספר שלם כן לא רלוונטי הרוחב המלא המקורי שממנו הגיעה התמונה. אם תועדה רק תמונה פנורמית ב-360°, התמונה מציינת את הרוחב של התמונה הפוטוספרית המלאה. עיינו בתרשים למעלה. חיתוך: אין שינוי.
קנה מידה: יש להתאים את קנה המידה בהתאם.
GPano:FullPanoHeightPixels מספר שלם כן לא רלוונטי הגובה המלא שממנו התמונה נחתכה. אם תועדה רק תמונה פנורמית ב-360°, הערך הזה מציין את הגובה של תמונה מלאה. עיינו בתרשים למעלה. חיתוך: אין שינוי.
קנה מידה: יש להתאים את קנה המידה בהתאם.
GPano:CroppedArealeftPixels מספר שלם כן לא רלוונטי עמודה שבה הקצה השמאלי של התמונה נחתך מצילום התמונה בגודל מלא. עיינו בתרשים למעלה. חיתוך: אם החיתוך השמאלי של התמונה השתנה, יש לעדכן את הערך הזה.
קנה מידה: יש לשנות את קנה המידה בהתאם.
GPano:CroppedAreaTopPixels מספר שלם כן לא רלוונטי השורה שבה הקצה העליון של התמונה נחתך מצילום התמונה בגודל מלא. עיינו בתרשים למעלה. חיתוך: אם החיתוך העליון של התמונה השתנה, יש לעדכן את הערך הזה.
קנה מידה: יש לשנות את קנה המידה בהתאם.
GPano:המצלמה הראשונה{0/} אמיתי לא 0 הפרמטר האופציונלי הזה מזיז את מיקום המצלמה הווירטואלית לאורך קו הראייה, הרחק ממרכז התמונה הכדורית. מיקום של משטח אחורי מיוצג על ידי הערך -1.0, בעוד שמיקום של משטח קדמי מיוצג על ידי 1.0. להצגה רגילה, יש להגדיר את הפרמטר הזה ל-0. לא רלוונטי

דוגמה לצילום פנורמי מלא

משתמשים שאינם מתכננים יכולים להוסיף את המטא-נתונים לדוגמה שלמטה לתמונות הפוטוספריות הקיימות שלהם (360 מעלות x 180 מעלות) עם שינויים קטנים בלבד. ניתן לעשות זאת במוצרים לעריכת תמונות, כמו Adobe Photoshop.

  1. שנו את המופעים של 4000 ו-2000 בהתאם לרוחב ולגובה המתאימים של התמונה בפיקסלים
  2. עדכן את PoseHeaderDegrees אם ברצונך שמפות Google יוכלו להציג את התמונה הכדורית. אחרת, תוכל להסיר את הפרמטר הזה
  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>

דוגמה לצילום פנורמי

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

אמינות עריכה של תמונות

כדי להיות יעילים, תוכנות שמציגות תמונות פנורמיות בצופה צריכות לבדוק אם התמונה הפוטוספרית המקורית הוגדלה על ידי אפליקציה, בלי לעדכן את המטא-נתונים. ניתן לעשות זאת בשלבים הבאים:

  1. מוודאים שהתג CroppedareaImageWidthPixels שווה לרוחב התמונה בפועל
  2. יש לוודא שהתג CroppedareaImageHeightPixels שווה לגובה התמונה בפועל
  3. אם שלב 1 או 2 נכשל, יש לבדוק אם יחס הגובה-רוחב של התמונה נשמר
  4. אם שלב 3 נכשל, אל תציגו את התמונה כתמונה פוטוספרית מפני שהיא שונתה באופן לא תואם, ובעקבות זאת ניתן לראות עיוותים שגויים
  5. אם שלב 3 עובר, יחס הגובה-רוחב זהה וכל ערכי התג המשויכים הבאים צריכים להתאים לגדלים החדשים של התמונות:
    CroppedAreaImageWidthPixels, CroppedAreaImageHeightPixels, FullPanoWidthPixels, FullPanoHeightPixels, CroppedArealeftPixels, CroppedarearightPixels

סקירה של זוויות אוילר

הכיוון של התמונה הפוטוספרית במסגרת העולם מוגדר על-ידי זוויות אוילר. אפשר להגדיר את הזוויות של אוילר בדרכים רבות. כדי להיות מדויקים, התוכנית צריכה לעמוד במוסכמה של אולר כפי שמתואר כאן.

המיקום מעל לפני הקרקע של כדור הארץ מגדיר "local frame" XYZ, כאשר Z נמצא למעלה ואורתוגונלי למשטח של כדור הארץ, X הוא מזרח אמיתי, ו-Y הוא צפון אמיתי. הכיוון מוגדר באופן יחסי לזווית המתוקנת הזו. כתוצאה מכך, הכיוון של תשתיות אינו מוגדר במוטות. המשמעות היא שתמונה פנורמית ב-360 מעלות עם זווית (0, 0, 0) תכוון כך שהפיקסל האמצעי פונה לכיוון צפון, מקו המשווה של התמונה הפוטוספרית מקבילה לפני השטח של כדור הארץ.

הזוויות של אוילר מספקות מיפוי של נקודות ב (&סיבוב; מסגרת הצילום וה&תמונה; לנקודות ב) (קבוע) "מסגרת מקומית":

מטריצת הסיבוב בנויה מזוויות אוילר באופן הבא (חשוב לשמור על הסדר הזה):

R = R_Z(-headline) * 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) ]

ואיפה: Z = Up, X = המזרחי, Y = צפון.

חשוב לשמור על הסדר הזה:

R = R_Z(-headline) * R_X(pitch) * R_Y(roll)

כיוון שסיבובים הם לא תנועה.

לתשומת ליבכם, זווית הכותרת זהה לכותרת המצפן הרגילה.

קובצי עזר

תקן XX של Adobe: http://www.adobe.com/devnet/xmp.html