Ultra HDR Image Format v1.0

מבוא

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

בהמשך המסמך מתוארות השיטות הנדרשות כדי להשתמש בפורמט הזה. ברמה גבוהה, מחזור החיים של תמונה תואמת לפורמט הזה:

  1. קידוד

    1. קבלת גישה ליצירת מפות
    2. דחיסת נתונים במפה
    3. קבלת גישה ליצירת מאגר תגים של מפה
  2. פענוח הקוד


דוגמה
פריסת קובץ בפורמט תמונה Ultra HDR, עם מטא-נתונים והיסט משויכים
מידע

איור 1. דוגמה לפריסת קובץ ומטא-נתונים רלוונטיים.

מוטיבציה

המטרה של פורמט הקובץ הזה היא לקודד מידע נוסף בתמונת SDR קבצים שאפשר להשתמש בהם בשילוב עם טכניקת התצוגה כדי להפיק עיבודי ה-HDR האופטימליים שלהם בקובץ יחיד.

כדי לעשות זאת, פורמט הקובץ חייב:

  • בתאימות לאחור, כך שאצל צופים תמימים, תמונת ה-SDR הקונבנציונלית מוצגת.
  • לא לתפוס יותר מדי מקום.

בנוסף, שיטת התצוגה חייבת:

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

לבסוף, השיטה חייבת להיות מסוגלת לבצע את כל הפעולות שקדמו לה ללא:

  • קליפים של רגעי שיא.
  • צללים מוחצים.
  • שינוי או דחיסה של הניגודיות המקומית.
  • שינוי יחסים טונליים יחסיים (בין אובייקטים בסצנה).

יחסי תלות

הנה כמה הפניות נורמליות למפרט הזה:

הגדרות

  • מסך SDR

    • מסך רגיל, שלא מיועד להצגת תוכן HDR. האלה בדרך כלל מניבים בהירות שיא סמלית של כ-400 cd/m2 או פחות.
  • מסך HDR

    • מסך שמיועד לתוכן HDR. בדרך כלל המסכים האלה מייצרים בהירות שיא נומרית גבוהה מזו של צג SDR, בדרך כלל 800 cd/m2 או יותר ולרוב יש בהם גם ניגודיות טובה יותר יחסי גובה-רוחב לעומת מסכי SDR.
  • תמונה ראשית

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

    • הקבצים הבאים של פריטי המדיה שצורפו לתמונה הראשית בקובץ קובץ GContainer.
  • דחיסת טווח

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

    • רמת ההארה הלינארית המקסימלית של תוכן SDR במסך במידה מסוימת בזמן.
  • נקודה לבנה של HDR

    • רמת ההארה הלינארית המקסימלית של תוכן HDR במסך בזמן. בדרך כלל, הערך הזה גבוה יותר מהנקודה הלבנה של SDR.
  • הגברה

    • הנקודה הלבנה של HDR חלקי הנקודה הלבנה של SDR.
  • הגדלת התוכן המקסימלית (max_content_boost במשוואות)

    • הערך הזה מאפשר ליוצר התוכן להגביל את הבהירות של התמונה יכול להיות מוצג במסך HDR, ביחס לרינדור ה-SDR.
    • הערך הזה הוא קבוע עבור תמונה מסוימת. לדוגמה, אם הוא ארבע, ואז לכל פיקסל נתון, רמת ההארה הלינארית עיבוד ה-HDR שמוצג צריך להיות, לכל היותר, פי 4 מרמת ההארה הלינארית של עיבוד ה-SDR. בפועל, פירוש הדבר הוא שהאזורים הבהירים יותר ניתן להציג את הסצנה עד פי 4 בהירות יותר.
    • בפועל, הערך הזה בדרך כלל גדול מ-1.0.
    • תמיד גדול מהערך או שווה לערך הגדלת התוכן המינימלי.
  • הגדלת התוכן המינימלית (min_content_boost במשוואות)

    • הערך הזה מאפשר ליוצר התוכן להגביל עד כמה התמונה יכולה לקבל, כשהיא מוצגת במסך HDR, ביחס ל-SDR לעיבוד טקסט.הערך הזה הוא קבוע עבור תמונה מסוימת.
    • לדוגמה, אם הערך הוא 0.5, אז לכל פיקסל נתון, הערך הלינארי רמת ההארה של עיבוד ה-HDR המוצג חייבת להיות פי 0.5 לפחות רמת ההארה הלינארית של רינדור ה-SDR.
    • בפועל, הערך הזה בדרך כלל שווה ל-1.0 או קטן ממנו.
    • תמיד נמוך מ- או שווה לערך מקסימום תוכן.
  • הגברה מקסימלית של התצוגה (max_display_boost במשוואות)

    • ההגדלה המקסימלית הזמינה הנתמכת על ידי מסך, בנקודת זמן נתונה בזמן האימון. הערך הזה יכול להשתנות עם הזמן בהתאם להגדרות המכשיר ולגורמים נוספים גורמים כמו תנאי התאורה בסביבה או מספר הפיקסלים הבהירים שמופיע במסך.
    • לדוגמה, אם הערך הוא 4.0, התצוגה יכולה לכלול שמציג פיקסל שבהיר פי ארבעה יותר מה-SDR לנקודה לבנה. הערך הזה הוא תמיד >= 1.0, כי התצוגה תמיד יכולה להציג HDR בצבע לבן בהיר לפחות כמו ב-SDR לבן.
  • שיפור התצוגה

    • הערך צריך להיות שווה לערך הנמוך מבין האפשרויות 'הגדלת התוכן המקסימלית' ו'הגברת התצוגה המקסימלית'. הזה הוא תמיד >= 1.0.
    • לדוגמה, אם סוג ההגדלה המקסימלי של התוכן הוא 4.0, והגדלת התצוגה המקסימלית היא 3.0, שיפור התצוגה הוא 3.0. הפיקסלים מוצגים עד פי 3 בהירות מ-SDR, כי יכולות התצוגה הן הגורם המגביל.
    • דוגמה נוספת, אם הגדלת התוכן המקסימלית היא 4.0 והגדלת התצוגה המקסימלית הוא 5.0, והגברת התצוגה היא 4.0. פיקסלים מוצגים עד פי 4 בהיר יותר מ-SDR, כי הכוונה של התוכן היא הגורם המגביל.
  • עיבוד יעד ל-HDR

    • עיבוד ה-HDR האידיאלי, לפי יוצר התוכן.
  • עיבוד HDR מותאם

    • עיבוד ה-HDR הסופי שמוצג במסך, לאחר התאמת עיבוד היעד של HDR להגברת התצוגה הנוכחית.
  • קבלת מפה (recovery(x, y) במשוואות)

    • מפה שמציינת באיזו מידה צריך להבהיר כל פיקסל, ברינדור SDR, כדי ליצור את עיבוד היעד של HDR. המפה הזו יכולה להיות ערוץ יחיד או מרובה-ערוצים. מפה מרובת ערוצים מציינת רווח נפרד לכל ערוץ ערוץ צבעים, כגון אדום, ירוק וכחול. במסמך הזה מוסבר איך במקרה של מפה בערוץ יחיד.
  • clamp(x, a, b)

    • מצמידים את הערך x לטווח [a, b].
  • exp2(x)

    • חזקה של בסיס 2; 2x.
  • floor(x)

    • הפונקציה מחזירה את המספר השלם הקרוב ביותר ששווה ל-x או קטן ממנו.
  • log2(x)

    • לוגריתם על בסיס 2; יומן2(x)
  • pow(b, x)

    • הערכה; בX.
  • XMP

    • פלטפורמת מטא-נתונים ניתנת להרחבה. תקן שמגדיר שיטה עבור לקידוד מטא-נתונים בקונטיינר של תמונה; מוגדר על ידי ISO מפרט XMP 16684-1:2011(E) חלק 1.
  • פורמט מרובה תמונות

    • פורמט מרובה תמונות היא טכניקה שפותחה על ידי המצלמה וההדמיה איגוד מוצרים (CIPA) לאחסון תמונות מרובות בקידוד JPEG בקובץ JPEG אחד.
    • לקבלת מידע נוסף אפשר לעיין במאמר על התלות הקשורה ל-CIPA, DC-x 007-2009 Multi-Picture Format.
  • GContainer

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

קידוד

הקטע הזה מתאר איך לקודד קובץ JPEG תואם. אפשר לעיין בT.81 (09/92) דחיסה דיגיטלית וקידוד של סטילס עם גוון רציף תמונות, בקטע 'תלות', לקבלת מידע נוסף על פורמט JPEG.

קבלת גישה ליצירת מפות

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

החישובים הבאים בקטע הזה מבוססים על אריתמטיקה של נקודה צפה (floating-point).

הפונקציות הבאות מתארות את תמונת ה-SDR:

  • SDR'(x, y) הוא מודל תלת-ערוצי, לא לינארי (בדרך כלל מקודד בגמא) תמונה ראשית.
  • SDR(x, y) הוא הגרסה הלינארית של התמונה הראשית בשלושת הערוצים, שמתקבל באמצעות טרנספורמציה לגרסה ליניארית של צבע התמונה הראשי המרחב המשותף. לדוגמה, ממרחב צבעים עם פונקציית העברת sRGB מרחב צבעים לינארי ששומר צבעי יסוד של sRGB.

הפונקציה Ysdr(x, y) מוגדרת בטווח של 0.0 עד 1.0, רמת הארה לינארית של התמונה הראשית בטווח דינמי סטנדרטי:

Ysdr(x, y) = primary_color_profile_to_luminance(SDR(x, y))

קיימות הגדרות דומות לתמונות באיכות HDR.

  • HDR'(x, y) הוא מודל תלת-ערוצי לא לינארי, כלומר PQ או HLG תמונה.
  • HDR(x, y) היא תמונת ה-HDR הלינארית בשלושה ערוצים.

Yhdr(x, y) הוא רמת ההארה בנקודה נתונה של תמונת ה-HDR:

Yhdr(x, y) = primary_color_profile_to_luminance(HDR(x, y))

Yhdr(x, y) מוגדר בטווח של 0.0 עד מקסימום תוכן.

התמונות באיכות SDR ו-HDR צריכות להיות באותה רזולוציה. פרופיל הצבעים של ה-SDR מגדיר את מרחב הצבעים של תמונת HDR.

לדוגמה, אם לתמונה הראשית של SDR יש פרופיל צבעי Display-P3, תמונת ה-HDR מוגדרת ביחס לצבעים העיקריים של אותו פרופיל. הזה המשמעות היא שתמונת ה-HDR כוללת גם צבעי יסוד ב-Display-P3.

מפת העלייה מחושבת משתי תמונות ליניאריות שמכילות את תמונת ה-HDR הרצויה רמת הארה"ב, Yhdr(x, y), ותמונת הבהירות בטווח הסטנדרטי, Ysdr(x, y).

הפונקציה pixel_gain(x, y) מוגדרת כיחס בין Yhdr(x, y) הפונקציה Ysdr(x, y):

pixel_gain(x, y) = (Yhdr(x, y) + offset_hdr) / (Ysdr(x, y) + offset_sdr)

ההתנהגות של הפונקציה pixel_gain(x, y) שבה Ysdr(x, y) ו-offset_sdr ששניהם אפסים מוגדרים על ידי ההטמעה.

לדוגמה, הטמעות יכולות לטפל במקרים שבהם Ysdr(x, y) וגם offset_sdr הן אפסים על ידי הגדרת pixel_gain(x, y) כ-1.0. לחלופין, וגם להימנע מהתרחיש הזה, באמצעות שימוש ב-offset_sdr שהוא לא אפס.

ההטמעה עשויה לבחור את הערכים של offset_sdr ושל offset_hdr.

מפת הצבירה היא פונקציה סקלרית שמקודדת את pixel_gain(x, y) שטח לוגריתמי, ביחס להגדלה מקסימלית של תוכן ולהגדלת התוכן המינימלי:

map_min_log2 = log2(min_content_boost)
map_max_log2 = log2(max_content_boost)

log_recovery(x, y) = (log2(pixel_gain(x, y)) - map_min_log2)
                   / (map_max_log2 - map_min_log2)
clamped_recovery(x, y) = clamp(log_recovery(x, y), 0.0, 1.0)
recovery(x, y) = pow(clamped_recovery(x, y), map_gamma)

ההתנהגות של הפונקציה recovery(x, y) שבה pixel_gain(x, y) הוא אפס מוגדר, כי log2(0) לא מוגדר.

map_gamma הוא מספר נקודה צפה (floating-point) שחייב להיות גדול מ-0.0 שנבחר על ידי ההטמעה.

הערכים של 'מקסימום תוכן' ו'הגדלת התוכן המינימלי' הם מוגדר על פי המדיניות שלנו, וניתן להחליט באופן שרירותי על ידי יוצר התוכן. ההגדלה של כמות התוכן המקסימלית חייבת להיות גדולה מ-1.0 או שווה ל-1.0. חובה להגדיל את כמות התוכן המינימלית להיות בטווח (0.0, 1.0].

הערכים בפונקציה recovery(x, y) מוגבלים לטווח [0.0, 1.0].

מפת הצבירה מאוחסנת בתמונה משנית JPEG, ולכן חייבת להיות מקודדת באמצעות ערכי מספרים שלמים לא חתומים של 8 ביטים, כלומר בטווח [0, 255]. כל ערך מייצג ערך recovery(x, y) ומאוחסן בפיקסל אחד תמונה.

לאחסון של מספרים שלמים לא חתומים של 8 ביט, הערך המקודד מוגדר הבאים:

encoded_recovery(x, y) = floor(recovery(x, y) * 255.0 + 0.5)

החישוב של פונקציית הקידוד מתבצע בנקודה צפה (floating-point) ומומר את הסוף לתוצאה של מספר שלם לא חתום של 8 ביט על ידי עיגול כפי שצוין.

הקידוד הזה יוצר ייצוג של מספר שלם לא חתום של 8 סיביות recovery(x, y) ערכים, מ-0.0 עד 1.0. מפת הקליטת נתונים המקודדת צריכה להיות מאוחסנת ב- פריט תמונה משני כ-JPEG. ההטמעה בוחרת את כמות דחיסה לשימוש במהלך קידוד JPEG.

אחרי שמפת הצבירה מאוחסנת בתמונה משנית, היא מצורפת לתמונה ראשית תמונה עם מטא-נתונים מסוג MPF ו-GContainer XMP. התמונה הראשית ב-GContainer הספרייה חייבת להכיל פריט עבור התמונה של מפת הצבירה.

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

הכיוון של מפת הצירוף חייב להתאים לזה של התמונה הראשית. אם המיקום קיימים, את כל המטא-נתונים של הכיוונים בתמונת המפה המאוחסנת של האחסון, כמו ב-EXIF, לא בשימוש.

אם פרופיל הצבעים של מפת מקבלים לא קיים, לא נעשה בו שימוש.

קבלת מאגר תגים של מפות

פרופיל צבעים

יש לציין את פרופיל הצבע של התמונה באמצעות פרופיל ICC עבור תמונה ראשית.

מאפייני XMP

התמונה הראשית מכילה מטא-נתונים של XMP כדי להגדיר לפחות שתי תמונות עם תוספת המידע הסמנטי של פורמט המפה שנצברו ב-HDR.

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

ערכי המאפיינים שמתוארים בטבלאות הבאות מאוחסנים בפורמט פשוט של XMP של סוגי הערכים הבסיסיים של ה-XMP שצוינו.

ערכים סמנטיים של הפריטים

המאפיין Item:Semantic מגדיר את המשמעות הספציפית לאפליקציה של כל פריט מדיה בספריית הקונטיינר.

ערך תיאור
ראשי מציין שפריט המדיה הוא התמונה הראשית, מוכנה להצגה במאגר. הספרייה חייבת להכיל ערך 'ראשי' שימושי.
השגת מפה מציין שפריט המדיה הוא מפת קלט. הספרייה עשויה להכיל קובץ 'תקבל מפה' אחד לכל היותר שימושי.

מטא-נתונים של המפה בהשגת HDR

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

ה-URI של מרחב השמות של XMP לתוסף ה-XMP של מטא-נתונים של המפה הוא http://ns.adobe.com/hdr-gain-map/1.0/ קידומת ברירת המחדל של מרחב השמות היא hdrgm

המטא-נתונים האלה מאוחסנים בחבילת ה-XMP של קובץ האימג' של מפת הצבירה, וגם המאפיינים חייבים להופיע ברכיב ה-XMP של תמונת מפת הצבירה rdf:Description:

שם סוג תיאור
hdrgm:Version טקסט גרסת הפורמט של מפת הצבירה שבה נעשה שימוש. הגרסה הזו היא '1.0'. Required.
hdrgm:BaseRenditionIsHDR ערך בוליאני מציינת את הטווח הדינמי של התמונה הראשית. "לא נכון" מציין את התמונה הראשית היא SDR, ואפשר לשלב איתה את מפת הצבירה כדי ליצור עיבוד HDR. "נכון" מציין שהתמונה הראשית היא HDR ומפת הצבירה שישולב בו כדי ליצור את עיבוד ה-SDR. הערך חייב להיות False. אופציונלי; ערך ברירת המחדל הוא 'False'.
hdrgm:ChangeMapMin מערך של מספרים ריאליים או סדורים של Reals מאחסן את הערכים של map_min_log2. הדבר log2 של הגדלת התוכן המינימלית, זה היחס המינימלי המותר של רמת ההארה הלינארית במסגרת עיבוד ה-HDR המטורגט ביחס ל-(מחולק) של תמונת ה-SDR, בפיקסל נתון. הוא יכול להיות Real בודד, של מערך סדור של Reals. כשמערך סדור של Reals, הוא יכול להכיל שחל על כל הערוצים או על שלושת הפריטים עבור הצבעים 'אדום', 'ירוק' ו' ערוצים כחולים, בהתאמה. חייב להיות קטן מ- או שווה ל- hdrgm:GainMapMax אופציונלי; ערך ברירת המחדל הוא 0.0.
hdrgm:שני הקמעונאים מערך של מספרים ריאליים או סדורים של Reals מאחסן את הערכים של map_max_log2. הדבר log2 מהגדלת התוכן המקסימלי, שהוא היחס המקסימלי המותר של רמת הבהירות הלינארית של עיבוד היעד HDR של תמונת ה-SDR בפיקסל נתון. הוא יכול להיות Real בודד, של מערך סדור של Reals. כשמערך סדור של Reals, הוא יכול להכיל שחל על כל הערוצים או על שלושת הפריטים עבור הצבעים 'אדום', 'ירוק' ו' ערוצים כחולים, בהתאמה. חייב להיות גדול מ- או שווה ל- hdrgm:GainMapMin חובה.
hdrgm:גאמה מערך של מספרים ריאליים או סדורים של Reals מאחסן את הערכים של map_gamma. זה הגמא של יחולו על ערכי המפה השמורים. יכול להיות ערך Real אחד או מערך סדור של מציאות. כשמערך סדור של ערכי Reals, הוא עשוי להכיל פריט אחד לכל הערוצים או לשלושה פריטים בערוצים 'אדום', 'ירוק' ו'כחול' בהתאמה. חייב להיות גדול מ-0.0. אופציונלי; ערך ברירת המחדל הוא 1.0.
hdrgm:OffsetSDR מערך של מספרים ריאליים או סדורים של Reals מאחסן את הערכים של offset_sdr. זהו ההיסט של יחולו על ערכי הפיקסלים של SDR במהלך יצירת מפות רווח והאפליקציה. יכול להיות ערך Real אחד או מערך סדור של Reals. כשמערך סדור של בפועל, יכול להיות שהוא מכיל פריט אחד שחל על כל הערוצים או על שלושה פריטים בערוצים 'אדום', 'ירוק' ו'כחול', בהתאמה. חייב להיות 0.0 ומעלה. אופציונלי; ערך ברירת המחדל הוא 0.015625 (1/64).
hdrgm:OffsetHDR מערך של מספרים ריאליים או סדורים של Reals מאחסן את הערכים של offset_hdr. זהו ההיסט של להחיל את הערכים של הפיקסלים מסוג HDR במהלך יצירת מפה ויישום שלה. יכול להיות ערך Real אחד או מערך סדור של Reals. כשמערך סדור של בפועל, יכול להיות שהוא מכיל פריט אחד שחל על כל הערוצים או על שלושה פריטים בערוצים 'אדום', 'ירוק' ו'כחול', בהתאמה. חייב להיות 0.0 ומעלה. אופציונלי; ערך ברירת המחדל הוא 0.015625 (1/64).
hdrgm:HDRCapacityMin ריאל מאחסן את הערך של hdr_capacity_min. הדבר log2 מהערך המינימלי של השיפור בתצוגה עבורו המפה מוחלט בכלל. הערך הזה משפיע גם על מידת היישום של מפת הצבירה בהגברת התצוגה. חייב להיות 0.0 ומעלה. אופציונלי; ברירת מחדל הוא 0.0.
hdrgm:HDRCapacityMax ריאל מאחסן את הערך של hdr_capacity_max. הדבר log2 מהערך המקסימלי של השיפור בתצוגה עבורו המפה הוחלו באופן מלא. הערך הזה משפיע גם על מידת היישום של מפת הצבירה על סמך ההגדלה של התצוגה. חייב להיות גדול מ- hdrgm:HDRCapacityMin חובה.

דוגמה ל-XMP של מפת לקבל

הדוגמה הבאה של חבילת XMP חוקית של מפת קלט מכילה מטא-נתונים שנלקחו מהקובץ לדוגמה שמיוצג בקטע מבוא.

<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.5.0">
  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <rdf:Description rdf:about=""
     xmlns:hdrgm="http://ns.adobe.com/hdr-gain-map/1.0/"
     hdrgm:Version="1.0"
     hdrgm:GainMapMin="-0.57609993"
     hdrgm:GainMapMax="4.7090998"
     hdrgm:Gamma="1"
     hdrgm:OffsetSDR="0.015625"
     hdrgm:OffsetHDR="0.015625"
     hdrgm:HDRCapacityMin="0"
     hdrgm:HDRCapacityMax="4.7090998"
     hdrgm:BaseRenditionIsHDR="False"/>
  </rdf:RDF>
</x:xmpmeta>

אחסון MPF של מפת הצבירה

יש לאחסן את תמונת המפה המוטמעת כתמונה נוספת כפי שמוגדר ב-CIPA DC-x 007-2009 Multi-Picture Format, כמו שמוסבר בקטע תלות.

פענוח הקוד

הקטע הזה מתאר איך לפענח את מפת הצבירה מקובץ JPEG תואם.

האות של הפורמט

ניתן לזהות קובץ JPEG שמתאים לפורמט הזה על ידי נוכחות של hdrgm:Version="1.0" בחבילת ה-XMP של התמונה הראשית, כאשר hdrgm הוא URI של מרחב השמות http://ns.adobe.com/hdr-gain-map/1.0/.

איתור קובץ האימג' של מפת הצבירה

פרטים על ניתוח ופענוח של התמונה זמינים ב-GContainer: פרטים נוספים. רווח הפריט הסמנטי ב-XMP rdf:Directory משמש לסימון המיקום של תמונת מפה שהוקלטה. לחלופין, ה-IFD של אינדקס MPF וסריקת תמונות XMP משמש כדי לקבוע המיקום של מפת הצבירה.

טיפול במטא-נתונים לא חוקיים

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

אם אותרו מטא-נתונים לא חוקיים, יש להתעלם ממפת הצבירה ומ-SDR מוצגת התמונה.

מסך

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

שימוש במפת הצבירה כדי ליצור עיבוד HDR מותאם

החישובים הבאים בקטע הזה מבוססים על אריתמטיקה של נקודה צפה (floating-point).

encoded_recovery(x, y) הוא ערך המספר השלם הלא-חתום של ערוץ יחיד, באורך 8 ביט מקובץ האימג' של מפת הצבירה.

אם הרזולוציה של מפת הצבירה שונה מזו של התמונה הראשית, במקום זאת, המדד encoded_recovery(x, y) נקבע על ידי דגימה מסוננת של לקבל תמונת מפה עבור x ו-y מעל הטווח של רוחב וגובה התמונה הראשית, בהתאמה. שיטת הסינון חייבת להיות דו-לינארית או טובה יותר, והיא מוגדר.

הערך map_gamma נקבע באמצעות שדה המטא-נתונים hdrgm:Gamma.

log_recovery(x, y) הוא רווח הפיקסלים המנורמלים בנקודה צפה (floating-point) המרחב לוגריתמי:

recovery(x, y) = encoded_recovery(x, y) / 255.0
log_recovery(x, y) = pow(recovery(x, y), 1.0 / map_gamma)

הגברת התצוגה המקסימלית היא ערך סקלרי של נקודה צפה (floating-point) המוגדר כיחס בין את הנקודה הלבנה של HDR ומחלקים את הנקודה הלבנה של ה-SDR. הזה מערכת התצוגה מספקת את הערך הזה, והוא עשוי להשתנות עם הזמן.

הערך hdr_capacity_max נקבע באמצעות שדה המטא-נתונים hdrgm:HDRCapacityMax. הערך hdr_capacity_min נקבע באמצעות שדה המטא-נתונים hdrgm:HDRCapacityMin.

weight_factor נקבע באופן הבא כאשר hdrgm:BaseRenditionIsHDR "False":

unclamped_weight_factor = (log2(max_display_boost) - hdr_capacity_min)
                        / (hdr_capacity_max - hdr_capacity_min)
weight_factor = clamp(unclamped_weight_factor, 0.0, 1.0)

אם הערך של hdrgm:BaseRenditionIsHDR הוא True, המשוואה השנייה היא:

weight_factor = 1.0 - clamp(unclamped_weight_factor, 0.0, 1.0)

הערך gain_map_max נקבע באמצעות שדה המטא-נתונים hdrgm:GainMapMax. הערך gain_map_min נקבע באמצעות שדה המטא-נתונים hdrgm:GainMapMin. הערך offset_sdr נקבע באמצעות שדה המטא-נתונים hdrgm:OffsetSDR. offset_hdr נקבע לפי שדה המטא-נתונים hdrgm:OffsetHDR.

אפשר לחשב את העיבוד הלינארי של HDR מותאם באופן הבא:

log_boost(x, y) = gain_map_min * (1.0f - log_recovery(x, y))
                + gain_map_max * log_recovery(x, y)
HDR(x, y) = (SDR(x, y) + offset_sdr) * exp2(log_boost(x, y) * weight_factor)
          - offset_hdr

במקרה הצורך, היישום עשוי להחיל טרנספורמציה על HDR(x, y), כדי להציב את במרחב המשותף שמצופה מהמסך. כל טרנספורמציה כזו חייבת להיות נכונה מבחינה צבעים.

פרטי GContainer

בקטע הזה מפורטות דרישות נוספות, כדי שהפורמט הזה יציית עם מטא-נתונים בפורמט XML של GContainer. המטא-נתונים עוברים סריאליזציה לפי ISO מפרט XMP 166841:2011(E) חלק 1 ומוטמע בתוך קובץ התמונה הראשי, כפי שמתואר במפרט Adobe XMP חלק 3 אחסון ב-Files. קובץ התמונה הראשי מכיל את את הפריטים הבאים, בפורמט RDF/XML.

דרישות לגבי חבילות XMP

חבילת ה-XMP תכלול את תוסף ה-XMP של המטא-נתונים של מפת הצבירה דרך URI של מרחב שמות http://ns.adobe.com/hdr-gain-map/1.0/. מרחב השמות שמוגדר כברירת מחדל הקידומת היא hdrgm.

חבילת ה-XMP תגדיר את hdrgm:Version="1.0".

רכיב קונטיינר

מרחב השמות של XMP לתוסף GContainer XMP הוא http://ns.google.com/photos/1.0/container/ קידומת ברירת המחדל של מרחב השמות היא Container

התמונה הראשית מכילה רכיב Container:Directory במטא-נתונים של XMP הגדרת הסדר והמאפיינים של קובץ המדיה הבא בקובץ מאגר תגים. לכל קובץ במאגר יש פריט מדיה תואם Container:Directory פריט המדיה מתאר את המיקום של הקובץ מאגר תגים והתכונות הבסיסיות של כל קובץ משורשר.

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

הספרייה יכולה להכיל רק 'ראשי' אחד והוא חייב להיות הראשון של הפריט בספרייה.

שם הרכיב סוג תיאור
מאגר:ספרייה מערך מבנים מסודר מערך מסודר של מבנים שכל אחד מהם מכיל Container:Item שמגדיר את הפריסה והתוכן של הקונטיינר.

רכיב פריט

רכיבי הפריט מתארים את האופן שבו האפליקציה משתמשת בכל פריט מדיה.

ה-URI של מרחב השמות של XMP עבור תוסף ה-XMP של פריט GContainer הוא http://ns.google.com/photos/1.0/container/item/ קידומת ברירת המחדל של מרחב השמות Item.

פריט המדיה הראשון חייב להיות התמונה הראשית.חובה לציין את Item:Semantic = "Primary" ואת Item:Mime שרשומים ב- ערכים של סוג MIME של הפריט.

האורך של פריט התמונה הראשי נקבע על ידי ניתוח התמונה הראשית על סמך סוג ה-MIME שלו, החל מתחילת מאגר הקובץ.

פריטי מדיה יכולים להכיל מאפיין מסוג Item:Padding שמציין עוד מרווח פנימי בין סוף פריט המדיה לבין תחילת פריט המדיה הבא שימושי. כשהוא קיים בפריט המדיה האחרון בContainer:Directory, המאפיין Item:Padding מציין מרווח פנימי בין סוף הפריט לבין סוף הפריט חדש.

כל פריט מדיה צריך לכלול מאפיינים מסוג Item:Mime ו-Item:Semantic. פריטי המדיה המשניים של התמונה חייבים להכיל מאפיינים מסוג Item:Length.

פריטי מדיה עוקבים יכולים לשתף נתוני משאבים בתוך מאגר הקובץ. פריט המדיה הראשון קובע את מיקום המשאב במאגר הקבצים, ובפריטי המדיה הבאים ששותפו, Item:Length מוגדר ל-0. במקרה שבו נתוני המשאב הם עצמם קונטיינר, אפשר להשתמש ב-Item:URI כדי לקבוע את המיקום של נתוני פריט המדיה במשאב.

המיקום של משאבי פריטי מדיה בקונטיינר נקבע באמצעות סיכום אורך קידוד התמונה הראשי, ערכי Item:Length של משאבי המדיה המשניים הקודמים, וכל Item:Padding לפניהם ערכים. הערך Item:Padding נחשב כ-0 במשאבי פריטים שלא ולציין את הערך שלו.

שם מאפיין סוג תיאור
פריט:MIME טקסט מחרוזת פשוטה שמציינת את סוג ה-MIME של פריט המדיה מאגר תגים. למידע על ההגדרה, אפשר לעיין בקטע 'ערכים של סוג MIME של הפריט'. Required.
פריט:סמנטי טקסט מחרוזת פשוטה שמציינת את המשמעות הספציפית לאפליקציה של המדיה שימושי. אפשר לקרוא הסבר על הגדרה כזו בקטע 'ערכים סמנטיים של פריטים'. Required.
פריט:אורך מספר שלם מחרוזת פשוטה שמכילה אורך של מספר שלם חיובי בבייטים של הפריט. האורך 0 מציין שמשאב פריט המדיה משותף עם הקודם קובץ מדיה. חובה לפריטי מדיה משניים. אופציונלי לחשבון הראשי קובץ מדיה של תמונה.
פריט:תווית טקסט מחרוזת מוגדרת בהטמעה שמשמשת להבחנה בין כמה פריטים רכיבים עם אותו Item:Semantic. אופציונלי.
פריט:ריפוד מספר שלם מחרוזת שמכילה אורך של מספר שלם חיובי בבייטים של תוספת מרווח פנימי בין סוף פריט המדיה לבין תחילת הפריט הבא פריט מדיה, או סוף הקובץ בשימוש בפריט המדיה האחרון ב Container:Directory המערכת מניחה שהערך 0 הוא 0 אם הוא לא קיים. אופציונלי.
פריט:URI טקסט מחרוזת URI שתואמת לסעיף 8.11.9 של ISO/IEC 14496-12, ה-URI היחסי של נתוני המדיה בתוך משאב פריט המדיה. ברירת המחדל היא מקור התמונה הראשית. אופציונלי עבור פורמט קובץ מדיה בסיסי לפי ISO ISO/IEC 14496-12 בסוגי MIME. לא ניתן להשתמש בו אחרת.

ערכים מסוג MIME של הפריט

המאפיין Item:Mime מגדיר את סוג ה-MIME של כל פריט מדיה .

ערך תיאור
תמונה/jpeg תמונה בפורמט JPEG.

XMP לדוגמה של GContainer

הדוגמה הבאה של חבילת GContainer XMP חוקית כוללת מטא-נתונים נלקחים מ- הקובץ לדוגמה המתואר בקטע מבוא.

<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.1.2">
  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <rdf:Description
     xmlns:Container="http://ns.google.com/photos/1.0/container/"
     xmlns:Item="http://ns.google.com/photos/1.0/container/item/"
     xmlns:hdrgm="http://ns.adobe.com/hdr-gain-map/1.0/"
     hdrgm:Version="1.0">
      <Container:Directory>
        <rdf:Seq>
          <rdf:li rdf:parseType="Resource">
            <Container:Item
             Item:Semantic="Primary"
             Item:Mime="image/jpeg"/>
          </rdf:li>
          <rdf:li rdf:parseType="Resource">
            <Container:Item
             Item:Semantic="GainMap"
             Item:Mime="image/jpeg"
             Item:Length="66171"/>
          </rdf:li>
        </rdf:Seq>
      </Container:Directory>
    </rdf:Description>
  </rdf:RDF>
</x:xmpmeta>