פורמט תמונה Ultra HDR v1.1

מבוא

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

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

  1. קידוד

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


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

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

מוטיבציה

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

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

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

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

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

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

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

יחסי תלות

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

הגדרות

  • צג SDR

    • מסך רגיל שלא מיועד להצגת תוכן HDR. בדרך כלל, בהירות השיא של המסכים האלה היא כ-400cd/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 content boost או שווה לו.
  • שיפור מקסימלי של הביצועים ברשת המדיה (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)

    • חזקה; bx.
  • XMP

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

    • Multi-Picture Format הוא טכניקה שפותחה על ידי Camera and Imaging Products Association‏ (CIPA) לאחסון מספר תמונות בקידוד JPEG בקובץ JPEG יחיד.
    • אפשר לקרוא מידע נוסף על התלות הרלוונטית, White Paper of CIPA-DC-x 007-2009 Multi-Picture Format.
  • GContainer

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

קידוד

בקטע הזה מוסבר איך לקודד קובץ JPEG תואם. מידע נוסף על פורמט JPEG זמין במאמר T.81 (09/92) Digital compression and coding of continuous-tone still images בקטע Dependencies (יחסי תלות).

יצירת מפה

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

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

הפונקציות הבאות מתארות את התמונה ב-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 או שווה לו. הערך המינימלי של שיפור הביצועים של התוכן חייב להיות בטווח [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 ביט על ידי עיגול המספרים לפי הסימון.

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

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

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

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

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

קבלת מאגר מפות

פרופיל צבע

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

מאפייני XMP

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

בקטעים הבאים מפורטים פרטים ספציפיים לפורמט הזה. מידע נוסף על תאימות כללית ל-GContainer מפורט בקטע פרטי GContainer.

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

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

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

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

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

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

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

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

שם סוג תיאור
hdrgm:Version טקסט הגרסה של פורמט מפת הרווח שבשימוש. הגרסה הזו היא '1.0'. Required.
hdrgm:BaseRenditionIsHDR בוליאני מציין את הטווח הדינמי של התמונה הראשית. הערך 'False' מציין שהתמונה הראשית היא SDR, ואפשר לשלב איתה את מפת הרווח כדי ליצור עיבוד HDR. הערך 'True' מציין שהתמונה הראשית היא HDR ואפשר לשלב איתה את מפת הרווח כדי ליצור את הגרסה ב-SDR. הערך חייב להיות 'False'. אופציונלי; ערך ברירת המחדל הוא 'False'.
hdrgm:GainMapMin מערך של מספרים ממשיים (Real) או מערך סדור של מספרים ממשיים מאחסן את הערכים של map_min_log2. זהו הערך של log2 בהגדרת שיפור התוכן המינימלי, שהוא היחס המינימלי המותרת של הלוחיות הליניאריות של עיבוד התמונה ל-HDR בהשוואה לזו של התמונה ב-SDR, בפיקסל נתון. יכול להיות ערך Real אחד או מערך סדור של Reals. כאשר מדובר במערך מסודר של ערכים מסוג Real, הוא עשוי להכיל פריט אחד שרלוונטי לכל הערוצים, או שלושה פריטים עבור הערוצים האדום, הירוק והכחול, בהתאמה. חייב להיות קטן מ-hdrgm:GainMapMax או שווה לו. אופציונלי. ערך ברירת המחדל הוא 0.0.
hdrgm:GainMapMax מערך של מספרים ממשיים (Real) או מערך סדור של מספרים ממשיים מאחסן את הערכים של map_max_log2. זהו הערך של log2 בהגברת התוכן המקסימלית, שהוא היחס המרבי המותר של הלוחין הליניארי של התצוגה של HDR היעד ביחס (חילוק) לזה של התמונה ב-SDR, בפיקסל נתון. יכול להיות מספר ממשי יחיד או מערך ממוין של מספרים ממשיים. כאשר מדובר במערך מסודר של ערכים מסוג Real, הוא עשוי להכיל פריט אחד שרלוונטי לכל הערוצים, או שלושה פריטים עבור הערוצים האדום, הירוק והכחול, בהתאמה. הערך חייב להיות גדול מ-hdrgm:GainMapMin או שווה לו. חובה.
hdrgm:Gamma מערך של מספרים ממשיים (Real) או מערך סדור של מספרים ממשיים מאחסן את הערכים של map_gamma. זהו הגמא שצריך להחיל על ערכי המפה המאוחסנים. יכול להיות מספר ממשי יחיד או מערך מסודר של מספרים ממשיים. כשמערך סדור של פריטי Reals, הוא יכול להכיל פריט אחד שחל על כל הערוצים, או שלושה פריטים בערוצים אדומים, ירוק וכחול בהתאמה. הערך חייב להיות גדול מ-0.0. אופציונלי, ערך ברירת המחדל הוא 1.0.
hdrgm:OffsetSDR מערך של מספרים ממשיים (Real) או מערך סדור של מספרים ממשיים מאחסן את הערכים של offset_sdr. זהו ההיסט שצריך להחיל על ערכי הפיקסלים של ה-SDR במהלך היצירה וההחלה של מפת הרווח. יכול להיות מספר ממשי יחיד או מערך מסודר של מספרים ממשיים. כשמדובר במערך מסודר של ערכים מסוג Real, הוא עשוי להכיל פריט אחד שחלה על כל הערוצים, או שלושה פריטים עבור הערוצים האדום, הירוק והכחול, בהתאמה. הערך חייב להיות 0.0 ומעלה. אופציונלי. ערך ברירת המחדל הוא 0.015625 (1/64).
hdrgm:OffsetHDR מערך של מספרים ממשיים (Real) או מערך סדור של מספרים ממשיים מאחסן את הערכים של offset_hdr. זהו ההיסט שצריך להחיל על ערכי הפיקסלים של HDR במהלך היצירה וההחלה של מפת הרווח. יכול להיות ערך Real אחד או מערך סדור של Reals. כשמדובר במערך מסודר של ערכים מסוג Real, הוא עשוי להכיל פריט אחד שחלה על כל הערוצים, או שלושה פריטים עבור הערוצים האדום, הירוק והכחול, בהתאמה. חייב להיות 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, כפי שמפורט בקטע יחסי תלות.

פענוח

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

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

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

איך מוצאים את התמונה של מפת הרווח

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

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

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

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

מסך

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

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

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

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

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

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

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

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

בקטע הזה מפורטות דרישות נוספות כדי שהפורמט הזה יעמוד בדרישות של המטא-נתונים של GContainer בפורמט XML. המטא-נתונים עוברים סריאליזציה בהתאם ל-ISO 166841:2011(E) XMP Specification Part 1 ומוטמעים בקובץ התמונה הראשי כפי שמתואר ב-Adobe XMP Specification Part 3 Storage in 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:Directory מערך מובנה של מבנים מערך מסודר של מבני נתונים מכיל כל מבנה 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.

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

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

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

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

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

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

דוגמה ל-XMP של GContainer

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

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

תאימות ל-ISO 21496-1

ISO 21496-1 מספק מנגנון אנקפסולציה חלופי לקידוד המטא-נתונים של מפת הרווח בקובץ תמונה. אפשר לקודד גם את המטא-נתונים של Ultra HDR וגם את המטא-נתונים של ISO 21496-1 בקובץ JPEG אחד באמצעות תמונת GAinmap אחת בקובץ.

המטא-נתונים של ISO 21496-1 מופיעים מיד אחרי מקטע ה-XMP של APP1 בשתי התמונות בפורמט JPEG

איור 2. דוגמה לפריסת קובץ עם מטא-נתונים של Ultra HDR ו-ISO 21496-1.

כדי להבטיח תאימות מקסימלית בפלטפורמות השונות, אפליקציות ואפליקציות ל-Android שמטמיעות קידוד או פענוח משלהן של קובצי JPEG עם מפות משופרות צריכים לתמוך בקידוד ובפענוח של המטא-נתונים של Ultra HDR v1 וגם של המטא-נתונים לפי ISO 21496-1. במהלך פעולת קידוד, ההטמעה או האפליקציה צריכות לקודד את שני הפורמטים של המטא-נתונים. אם שני סוגי המטא-נתונים נמצאים במהלך פעולת פענוח, ההטמעה או האפליקציה צריכים להעדיף את השימוש במטא-נתונים של ISO 21496-1.

שנה רישום

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

v1.1

כל השינויים בגרסה הזו של מפרט Ultra HDR הם למטרות מידע וקשורים לתאימות ל-ISO 21496-1. אין שינויים בפורמט הקובץ בפועל.

v1.0

הפרסום הראשוני של מפרט Ultra HDR.