פורמט תמונה 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) במספר שלם לא חתום של 8 ביט, מ-0.0 עד 1.0. יש לאחסן את מפת הרווח המקודדת בפריט תמונה משני כקובץ JPEG. ההטמעה בוחרת את מידת הדחיסה לשימוש במהלך קידוד ה-JPEG.

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

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

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

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

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

פרופיל צבע

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

מאפייני XMP

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

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

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

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

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

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

מטא-נתונים של מפת HDR Gain

קבלת המטא-נתונים של המפה מקודדים מידע לגבי האופן שבו צריך לפרש ולהחיל את מפת הצבירה כדי ליצור ייצוג 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, הוא עשוי להכיל פריט אחד שרלוונטי לכל הערוצים, או שלושה פריטים עבור הערוצים האדום, הירוק והכחול, בהתאמה. הערך חייב להיות קטן מ-hdrgm:GainMapMax או שווה לו. אופציונלי. ערך ברירת המחדל הוא 0.0.
hdrgm:GainMapMax מערך של מספרים ממשיים (Real) או מערך סדור של מספרים ממשיים מאחסן את הערכים של map_max_log2. זהו log2 מהגדלת התוכן המקסימלית, שהוא היחס המקסימלי המותר של רמת ההארה הלינארית במסגרת עיבוד ה-HDR של היעד, ביחס לזו של תמונת ה-SDR, בפיקסל נתון. יכול להיות מספר ממשי יחיד או מערך ממוין של מספרים ממשיים. כשמערך סדור של פריטי Reals, הוא יכול להכיל פריט אחד שחל על כל הערוצים, או שלושה פריטים בערוצים אדומים, ירוק וכחול, בהתאמה. חייב להיות גדול מ-hdrgm:GainMapMin או שווה לו. חובה.
hdrgm:Gamma מערך של מספרים ריאליים או סדורים של Reals מאחסן את הערכים של map_gamma. זוהי ערך ה-gamma שיחול על ערכי המפה השמורים. יכול להיות מספר ממשי יחיד או מערך מסודר של מספרים ממשיים. כאשר מדובר במערך מסודר של ערכים מסוג Real, הוא עשוי להכיל פריט אחד שרלוונטי לכל הערוצים, או שלושה פריטים עבור הערוצים האדום, הירוק והכחול, בהתאמה. חייב להיות גדול מ-0.0. אופציונלי. ערך ברירת המחדל הוא 1.0.
hdrgm:OffsetSDR מערך של מספרים ריאליים או סדורים של Reals מאחסן את הערכים של 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 מותאם

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

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 לתוסף XMP של GContainer הוא 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 שמציין את האורך הנוסף של הפסקת האודיו בין סוף פריט המדיה לבין תחילת פריט המדיה הבא. כשהערך Item:Padding מופיע בפריט המדיה האחרון ב-Container:Directory, הוא מציין את הפס ההשלמה בין סוף הפריט לסוף הקובץ.

כל פריט מדיה חייב להכיל את הסוג 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 היחסי של נתוני המדיה בתוך משאב פריט המדיה. ברירת המחדל היא משאב התמונה הראשי. אופציונלי לסוגי MIME של פורמט קובץ מדיה בסיסי ISO‏ ISO/IEC 14496-12. אסור להשתמש בהם למטרות אחרות.

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

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

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

XMP לדוגמה של GContainer

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

<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. אין שינויים בפורמט הקובץ בפועל.

גרסה 1.0

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