Format obrazu Ultra HDR v1.1

Wprowadzenie

Ten dokument opisuje sposób działania nowego formatu pliku, który koduje obraz mapy z wzmocnieniem logarytmicznym w pliku JPEG. starsze czytniki, które nie obsługują nowego formatu, odczytują i wyświetlają konwencjonalny obraz o niskim zakresie dynamiki z pliku obrazu;Czytelnicy, którzy obsługują ten format, łączą obraz główny z mapą wzmocnienia i renderują obraz o wysokim zakresie dynamiki na zgodnych wyświetlaczach.

W pozostałej części tego dokumentu opisujemy metody procesów, które trzeba wykonać, aby korzystać z tego formatu. Ogólnie cykl życia obrazu zgodnego z tym formatem:

  1. Kodowanie

    1. Generowanie mapy z użyciem Gain
    2. Kompresja map
    3. Generowanie kontenera mapy
  2. Dekodowanie


Przykład
Układ pliku obrazu Ultra HDR z powiązanymi metadanymi i informacjami o przesunięciu

Rysunek 1. Przykładowy układ pliku i odpowiednie metadane

Motywacja

Celem tego formatu pliku jest zakodowanie dodatkowych informacji w plikach obrazów SDR, które można wykorzystać w połączeniu z techniką wyświetlania, aby wygenerować optymalne wersje HDR w jednym pliku.

Aby było to możliwe, format pliku musi:

  • muszą być wstecznie zgodne, dzięki czemu osoby nudne mogą zobaczyć standardowy obraz SDR;
  • Nie zajmują za dużo dodatkowego miejsca.

Dodatkowo technika wyświetlania musi:

  • Dekodowanie nie wymaga dużego przetwarzania.
  • być w stanie dostosować się do dowolnego współczynnika bieli wyświetlacza HDR i SDR, który może się znacznie różnić w zależności od urządzenia, a nawet w czasie na jednym urządzeniu.

Technika musi mieć możliwość wykonywania wszystkich poprzednich działań bez:

  • Klipy z najciekawszymi momentami.
  • Niszczenie cieni.
  • Zmienianie lub kompresowanie lokalnego kontrastu.
  • zmienianie względnych relacji tonalnych (między obiektami na scenie).

Zależności

W przypadku tej specyfikacji obowiązują następujące dokumenty:

Definicje

  • Wyświetlacz SDR

    • Standardowy wyświetlacz nieprzeznaczony do wyświetlania treści HDR. Wyświetlacze te dają zwykle nominalną szczytową jasność około 400 cd/m2 lub mniej.
  • Wyświetlacz HDR

    • Wyświetlacz przeznaczony do wyświetlania treści HDR. Takie wyświetlacze mają zazwyczaj wyższą nominalną maksymalną jasność niż wyświetlacze SDR (zazwyczaj 800 cd/m2 lub więcej) i zazwyczaj lepszy współczynnik kontrastu niż wyświetlacze SDR.
  • Obraz główny

    • Pierwszy przypadek obrazu w pliku GContainer z dołączonymi dodatkowymi plikami multimedialnymi. Obraz główny zawiera metadane XMP GContainer, które określają kolejność i właściwości kolejnych dodatkowych plików elementów multimedialnych w kontenerze pliku.
  • Drugi obraz

    • Kolejne pliki elementów multimedialnych, które są dołączane do głównego obrazu w pliku GContainer.
  • Kompresja zakresu

    • W przypadku fotografii rzeczywiste sceny często mają większy zakres dynamiki niż wyświetlacz SDR. Aby zmniejszyć zakres dynamiki obrazu, konieczne są operacje takie jak kompresja zakresu, zwane również lokalnym mapowaniem tonów. Przycinanie powinno być stosowane w taki sposób, aby uniknąć przycięcia podświetlenia lub ściśnięcia cieni, zachowując przy tym jak największy kontrast lokalny.Próbujesz zmniejszyć rozmiar dużych krawędzi luminancji na zdjęciu, które zwiększają globalny kontrast, zachowując jednocześnie rozmiar małych krawędzi luminancji, czyli szczegółów. Istnieje wiele różnych implementacji, ale obecnie takie operacje są standardem w przypadku większości nowoczesnych cyfrowych aparatów fotograficznych.
  • Punkt bieli SDR

    • Maksymalna luminancja liniowa treści SDR na wyświetlaczu w określonym momencie.
  • Punkt bieli HDR

    • Maksymalna luminacja liniowa treści HDR na wyświetlaczu w określonym momencie. Ta wartość jest zwykle wyższa niż punkt biały SDR.
  • Wzmocnienie

    • Punkt bieli HDR podzielony przez punkt bieli SDR.
  • Maksymalny wzrost skuteczności treści (wartość max_content_boost w równaniach)

    • Ta wartość pozwala twórcy treści ograniczyć jasność obrazu wyświetlanego na ekranie HDR w stosunku do jakości SDR.
    • Jest to stała wartość dotycząca konkretnego zdjęcia. Jeśli na przykład wartość wynosi 4, to w przypadku każdego piksela luminancja liniowa w wyświetlanym odtworzeniu HDR musi być maksymalnie 4-krotnie większa niż luminancja liniowa obrazu SDR. W praktyce oznacza to, że jaśniejsze części sceny mogą być wyświetlane nawet 4 razy jaśniej.
    • W praktyce ta wartość jest zwykle większa niż 1, 0.
    • Wartość ta musi być zawsze większa niż lub równa wartości Minimalne wzmocnienie treści.
  • Minimalne wzmocnienie treści (min_content_boost w równaniach)

    • Ta wartość pozwala twórcy treści ograniczyć jasny odcień obrazu wyświetlanego na wyświetlaczu HDR w porównaniu do rozdzielczości SDR.Jest to stała wartość konkretnego zdjęcia.
    • Jeśli na przykład wartość wynosi 0,5, to w przypadku dowolnego piksela liniowa luminancja wyświetlanej wersji HDR musi być (co najmniej) 0,5 raza większa od liniowej luminacji wersji SDR.
    • W praktyce ta wartość jest zwykle równa 1, 0 lub mniejsza.
    • Wartość ta jest zawsze mniejsza lub równa wartości Maksymalne wzmocnienie treści.
  • Maksymalny współczynnik wyświetlania (wartość max_display_boost w równaniach)

    • Największe dostępne wzmocnienie obsługiwane przez wyświetlacz w danym momencie. Ta wartość może się zmieniać w zależności od ustawień urządzenia i innych czynników, takich jak warunki otoczenia czy liczba jasnych pikseli na ekranie.
    • Jeśli na przykład ta wartość wynosi 4,0, wyświetlacz może wyświetlać piksele, które są maksymalnie 4 razy jaśniejsze niż punkt biały w standardzie SDR. Ta wartość wynosi zawsze >= 1,0, ponieważ wyświetlacz zawsze może wyświetlać biel HDR co najmniej tak jasną jak biel SDR.
  • Wzmocnienie wyświetlacza

    • Równa się mniejszej wartości z maksymalnego wzmocnienia treści i maksymalnego wzmocnienia wyświetlania. Ta wartość zawsze wynosi >= 1,0.
    • Jeśli na przykład maksymalne wzmocnienie treści to 4,0, a wzmocnienie wyświetlacza – 3,0, to wzmocnienie wyświetlacza wynosi 3,0. Piksele są wyświetlane trzykrotnie jaśniejsze niż SDR, ponieważ od nich przeważają możliwości wyświetlacza.
    • Jeśli na przykład maksymalne wzmocnienie treści to 4,0, a wzmocnione wyświetlanie to 5,0, to wzmocnienie wyświetlacza wynosi 4,0. Piksel jest wyświetlany nawet 4 razy jaśniejszy niż w SDR, ponieważ to cel treści jest czynnikiem ograniczającym.
  • Docelowa wersja HDR

    • Zdaniem twórcy idealnego efektu HDR.
  • Dostosowana jakość HDR

    • Ostateczne ujęcie HDR widoczne na wyświetlaczu, po dostosowaniu docelowego odwzorowania HDR do bieżącego wzmocnienia jakości obrazu.
  • Mapa wzmocnienia (recovery(x, y) w równaniach)

    • Mapa wskazująca, o ile rozjaśnić każdy piksel w wersji SDR, aby uzyskać docelową wersję HDR. Ta mapa może być jedno- lub wielokanałowa. Na mapie wielokanałowej widać osobny przyrost dla każdego kanału koloru, np. czerwonego, zielonego i niebieskiego. Ten dokument ilustruje przypadek mapy jednokanałowej.
  • clamp(x, a, b)

    • Umieść wartość x w zakresie [a, b].
  • exp2(x)

    • Potęgowanie do potęgi 2; 2x.
  • floor(x)

    • Zwraca najbliższą liczbę całkowitą równą lub mniejszą od x.
  • log2(x)

    • Logarytm o podstawie 2; log2(x)
  • pow(b, x)

    • Potęgowanie; bx.
  • XMP,

  • Format z wieloma obrazami

    • Multi-Picture Format to technika opracowana przez organizację Camera and Imaging Products Association (CIPA) do przechowywania wielu obrazów zakodowanych w formacie JPEG w jednym pliku JPEG.
    • Więcej informacji znajdziesz w powiązanym dokumencie White Paper of CIPA DC-x 007-2009 Multi-Picture Format (w języku angielskim).
  • GContainer

    • GContainer to metoda przechowywania wielu obrazów w jednym kontenerze obrazów, w którym jeden obraz jest uważany za główny. Wszelkie dodatkowe obrazy są uważane za wersje alternatywne lub pomocnicze. Metadane XMP służą do przekazywania informacji o obecności i znaczeniu dodatkowych obrazów. Więcej informacji znajdziesz w sekcji Szczegóły GContainer.

Kodowanie

W tej sekcji opisano sposób kodowania zgodnego pliku JPEG. Więcej informacji o formacie JPEG znajdziesz w dokumencie T.81 (09/92) Digital compression and coding of continuous-tone still images w sekcji Zależności.

Generowanie map

Systemy przetwarzania obrazu w aparacie często wykonują kompresję zakresu, aby skompresować dane o luminancji o większym zakresie dynamiki do niższego zakresu wyświetlaczy konwencjonalnych SDR. Mapa wzmocnienia to mechanizm przechowywania danych wystarczających do odzyskania pierwotnych danych o wyższej luminancji.

W poniższych obliczeniach w tej sekcji przyjęto arytmetykę zmiennoprzecinkową.

Obraz SDR jest opisywany przez te funkcje:

  • SDR'(x, y) to 3-kanałowy, nieliniowy (zwykle zakodowany gamma) obraz główny.
  • SDR(x, y) to liniowa wersja 3-kanałowego obrazu głównego, uzyskiwana po przekształceniu podstawowej przestrzeni kolorów obrazu w linearną wersję. Na przykład z przestrzeni kolorów z funkcją przenoszenia sRGB do przestrzeni kolorów liniowych, która zachowuje podstawowe kolory sRGB.

Funkcja Ysdr(x, y) przyjmuje wartości z zakresu od 0,0 do 1,0 i jest standardową luminancją liniową obrazu podstawowego o standardowym zakresie dynamicznym:

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

Podobne definicje istnieją dla obrazu HDR.

  • HDR'(x, y) to 3-kanałowy nielinearny obraz, czyli obraz zakodowany w formacie PQ lub HLG.
  • HDR(x, y) to trzykanałowy liniowy obraz HDR.

Yhdr(x, y) to luminancja w danym punkcie obrazu HDR:

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

Pole Yhdr(x, y) jest zdefiniowane w zakresie od 0,0 do maksymalnego zwiększenia ilości treści.

Obrazy SDR i HDR muszą mieć tę samą rozdzielczość. Profil kolorów obrazu SDR określa przestrzeń kolorów obrazu HDR.

Jeśli na przykład obraz podstawowy SDR ma profil kolorów Display-P3, obraz HDR jest definiowany w stosunku do podstawowych kolorów tego profilu. Oznacza to, że na zdjęciu HDR są też kolory podstawowe Display-P3.

Mapę wzmocnienia oblicza się na podstawie 2 obrazów liniowych zawierających oczekiwaną luminancję obrazu HDR (Yhdr(x, y)) oraz obraz o standardowym zakresie luminancji (Ysdr(x, y)).

Funkcja pixel_gain(x, y) jest zdefiniowana jako stosunek między funkcją Yhdr(x, y) a funkcją Ysdr(x, y):

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

Działanie funkcji pixel_gain(x, y), w którym zarówno Ysdr(x, y), jak i offset_sdr mają wartość 0, jest definiowane przez implementację.

Na przykład implementacje obsługują przypadek, w którym zarówno Ysdr(x, y), jak i offset_sdr mają wartość 0, definiując pixel_gain(x, y) jako 1.0. Inną możliwością jest uniknięcie tego scenariusza przez użycie niezerowej wartości offset_sdr.

Implementacja może wybrać wartości offset_sdroffset_hdr.

Mapa wzmocnienia to funkcja skalarna, która koduje pixel_gain(x, y) w przestrzeni logarytmicznej w stosunku do maksymalnego i minimalnego wzmocnienia treści:

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)

Działanie funkcji recovery(x, y), w którym pixel_gain(x, y) ma wartość 0, jest zdefiniowanym wdrożeniem, ponieważ parametr log2(0) jest niezdefiniowany.

map_gamma to liczba zmiennoprzecinkowa, która musi być większa od 0,0 i jest wybierana przez implementację.

Wartości maksymalnego i minimalnego wzmocnienia treści są zdefiniowane przez implementację i mogą być dowolnie ustalane przez twórcę treści. Maksymalne wzmocnienie treści musi być równe lub większe niż 1,0. Minimalne wzmocnienie treści musi mieścić się w zakresie (0,0, 1,0].

Wartości w polu recovery(x, y) są ograniczone do zakresu [0,0, 1,0].

Mapa wzmocnienia jest przechowywana w obrazie dodatkowym JPEG i dlatego musi być zakodowana z użyciem 8-bitowych wartości całkowitych bez znaku, więc mieści się w zakresie [0–255]. Każda wartość reprezentuje wartość recovery(x, y) i jest przechowywana w 1 pikselu obrazu dodatkowego.

W przypadku 8-bitowej pamięci bez znaku liczba zakodowana jest zdefiniowana w ten sposób:

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

Obliczenia funkcji kodowania są wykonywane w postaci zmiennoprzecinkowej, a na końcu są konwertowane na 8-bitową liczbę bez znaku za pomocą zaokrąglenia w sposób wskazany w opisie.

Kodowanie powoduje wygenerowanie 8-bitowej liczby całkowitej reprezentującej wartości recovery(x, y) bez znaku i z zakresu od 0,0 do 1,0. Zakodowana mapa wzmocnienia musi być przechowywana w elemencie obrazu dodatkowego w formacie JPEG. Implementacja wybiera stopień kompresji do użycia podczas kodowania JPEG.

Po zapisaniu mapy wzmocnienia w obrazie dodatkowym jest ona dołączana do obrazu podstawowego z metadanymi MPF i GContainer XMP. Katalog obrazu głównego GContainer musi zawierać element obrazu mapy wzmocnienia.

Rozdzielczość mapy wzmocnienia jest zdefiniowana przez implementację i może różnić się od rozdzielczości obrazu podstawowego. Jeśli mapa wzmocnienia jest skalowana do innej rozdzielczości niż obraz główny na potrzeby przechowywania, metoda próbkowania musi być dwuliniowa lub lepsza i zdefiniowana przez implementację.

Orientacja mapy wzmocnienia musi być zgodna z orientacją zdjęcia głównego. Jeśli są obecne, metadane orientacji w zapisanym obrazie mapy wzmocnienia, takie jak EXIF, nie są używane.

Jeśli jest obecny, profil kolorów mapy wzmocnienia nie jest używany.

Uzyskiwanie dostępu do kontenera map

Profil kolorów

Profil kolorów zdjęcia głównego musi być wskazany za pomocą profilu ICC zdjęcia głównego.

Atrybuty XMP

Obraz główny zawiera metadane XMP, które pozwalają zdefiniować co najmniej 2 obrazy z dodatkowymi informacjami semantycznymi na potrzeby formatu mapy wzmocnienia HDR.

Szczegółowe informacje o tym formacie znajdziesz w podsekcjach poniżej. Dodatkowe informacje o ogólnej zgodności z GContainer znajdziesz w sekcji Szczegóły GContainer.

Wartości atrybutów opisane w tabelach poniżej są przechowywane jako proste wartości XMP określonych typów wartości podstawowych XMP.

Wartości semantyczne produktu

Właściwość Item:Semantic określa specyficzne dla aplikacji znaczenie każdego elementu multimedialnego w katalogu kontenera.

Wartość Opis
Główny Wskazuje, że element multimedialny jest obrazem głównym, gotowym do wyświetlenia w kontenerze. Katalog musi zawierać 1 element „Główny”.
GainMap Wskazuje, że element multimediów to mapa wzmocnienia. Katalog może zawierać maksymalnie 1 element „GainMap”.

Metadane mapy z wzmocnieniem HDR

Metadane mapy wzmocnienia kodują informacje o tym, jak interpretować i stosować mapę wzmocnienia, aby wygenerować reprezentację HDR obrazu podstawowego.

Identyfikator URI przestrzeni nazw XMP dla rozszerzenia XMP metadanych mapy wzmocnienia to http://ns.adobe.com/hdr-gain-map/1.0/. Domyślny prefiks przestrzeni nazw to hdrgm.

Te metadane są przechowywane w pakiecie XMP obrazu mapy wzmocnienia, a w rdf:Description obrazu mapy wzmocnienia muszą się pojawiać te właściwości:

Nazwa Typ Opis
hdrgm:Version Tekst Wersja używanego formatu mapy wzmocnienia. Ta wersja to „1.0”. Required.
hdrgm:BaseRenditionIsHDR Wartość logiczna Wskazuje zakres dynamiczny głównego obrazu. Wartość „False” wskazuje, że obraz główny jest w formacie SDR, a mapę wzmocnienia można z nim połączyć, aby uzyskać wersję HDR. „Prawda” oznacza, że obraz podstawowy jest HDR i może zostać połączony z mapą wzmocnienia w celu wygenerowania wersji SDR. Musi mieć wartość „False” (fałsz). Opcjonalny. Wartość domyślna to „False”.
hdrgm:GainMapMin tablica rzeczywista lub uporządkowana rzeczywistych Zapisuje wartości zmiennej map_min_log2. To log2 minimalnego zwiększenia ilości treści, czyli minimalny dozwolony współczynnik luminancji liniowej docelowego odwzorowania HDR w stosunku do obrazu SDR dla danego piksela (dzielonego przez). Może to być pojedyncza liczba rzeczywista lub uporządkowana tablica liczb rzeczywistych. Uporządkowana tablica wartości rzeczywistych może zawierać 1 element odnoszący się do wszystkich kanałów lub 3 elementy odpowiednio do kanału czerwonego, zielonego i niebieskiego. Musi być mniejsza lub równa hdrgm:GainMapMax. Opcjonalnie; wartość domyślna to 0,0.
hdrgm:GainMapMax Rzeczywista lub uporządkowana tablica wartości rzeczywistych Zapisuje wartości zmiennej map_max_log2. Jest to log2 maksymalnego wzmocnienia treści, czyli maksymalny dozwolony współczynnik luminancji liniowej w docelowym odbiorze HDR w odniesieniu do (dzielonego przez) obrazu SDR w przypadku danego piksela. Może to być pojedyncza tablica wartości rzeczywistych lub uporządkowana tablica wartości rzeczywistych. Gdy jest to uporządkowana tablica wartości rzeczywistych, może zawierać jeden element, który ma zastosowanie do wszystkich kanałów, lub 3 elementy dla kanałów czerwonego, zielonego i niebieskiego. Wartość nie może być mniejsza niż hdrgm:GainMapMin. Wymagany.
hdrgm:gamma tablica rzeczywista lub uporządkowana rzeczywistych Zapisuje wartości elementu map_gamma. Jest to wartość gamma, która ma zostać zastosowana do przechowywanych wartości mapy. Może to być pojedyncza tablica wartości rzeczywistych lub uporządkowana tablica wartości rzeczywistych. Uporządkowana tablica wartości rzeczywistych może zawierać 1 element, który odnosi się do wszystkich kanałów lub 3 elementy odpowiednio czerwonego, zielonego i niebieskiego. Wartość musi być większa niż 0,0. Opcjonalny; wartość domyślna to 1,0.
hdrgm:OffsetSDR Rzeczywista lub uporządkowana tablica wartości rzeczywistych Zapisuje wartości elementu offset_sdr. Jest to przesunięcie, które należy zastosować do wartości pikseli SDR podczas generowania i stosowania mapy wzmocnienia. Może to być pojedyncza tablica wartości rzeczywistych lub uporządkowana tablica wartości rzeczywistych. Gdy jest to uporządkowany tablica Reals, może ona zawierać jeden element, który ma zastosowanie do wszystkich kanałów, lub trzy elementy dla kanałów czerwonego, zielonego i niebieskiego. Wartość musi być równa 0,0 lub większa. Opcjonalne. Wartość domyślna to 0,015625 (1/64).
hdrgm:OffsetHDR tablica rzeczywista lub uporządkowana rzeczywistych Zapisuje wartości zmiennej offset_hdr. Jest to przesunięcie, które należy zastosować do wartości pikseli HDR podczas generowania i stosowania mapy wzmocnienia. Może to być pojedyncza liczba rzeczywista lub uporządkowana tablica liczb rzeczywistych. Uporządkowana tablica wartości rzeczywistych może zawierać 1 element odnoszący się do wszystkich kanałów lub 3 elementy odpowiednio do kanału czerwonego, zielonego i niebieskiego. Wartość musi być równa 0,0 lub większa. Opcjonalne. Wartość domyślna to 0,015625 (1/64).
hdrgm:HDRCapacityMin Prawdziwe przechowuje wartość hdr_capacity_min. To log2 minimalnej wartości wzmocnienia wyświetlania, do której w ogóle zostanie zastosowana mapa. Ta wartość określa też stopień zastosowania mapy wzmocnienia na podstawie wzmocnienia wyświetlania. Wartość musi być równa 0,0 lub większa. Opcjonalne; wartość domyślna to 0,0.
hdrgm:HDRCapacityMax Prawdziwe Przechowuje wartość hdr_capacity_max. Jest to log2 maksymalnej wartości wyświetlania, dla której mapowanie jest stosowane w pełni. Ta wartość wpływa też na to, jak bardzo ma być stosowana mapa wzmocnienia na podstawie zwiększenia wyświetlalności. Wymagana jest wartość większa od hdrgm:HDRCapacityMin. Wymagany.

Przykładowa mapa zysku XMP

Poniższy przykład prawidłowego pakietu XMP z mapą wzmocnienia zawiera metadane pobrane z przykładowego pliku pokazanego w sekcji Introduction (Wprowadzenie).

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

Pamięć MPF mapy wzmocnienia

Obraz mapy wzmocnienia musi być przechowywany jako dodatkowy obraz zgodnie z definicją w dokumencie CIPA DC-x 007-2009 Multi-Picture Format, o czym wspomniano w sekcji Dependencies.

Dekodowanie

W tej sekcji opisano sposób zdekodowania mapy wzmocnienia z zgodnego pliku JPEG.

Sygnał formatu

Plik JPEG zgodny z tym formatem można rozpoznać po obecności hdrgm:Version="1.0" w pakiecie XMP obrazu głównego, gdzie hdrgm to identyfikator URI przestrzeni nazw http://ns.adobe.com/hdr-gain-map/1.0/.

Zlokalizuj obraz mapy wzmocnienia

Szczegółowe informacje o analizowaniu i dekodowaniu obrazu znajdziesz w sekcji Szczegóły GContainer. Element semantyczny „GainMap” w XMP rdf:Directory służy do sygnalizowania lokalizacji obrazu mapy wzmocnienia. Do określania lokalizacji mapy wzmocnienia jest też używany parametr IFD indeksu MPF i XMP skanowania obrazów.

Obsługa nieprawidłowych metadanych

Metadane są uznawane za nieprawidłowe, jeśli brakuje wymaganego pola lub którekolwiek pole zawiera nieprawidłową wartość. Wartość może być nieprawidłowa, ponieważ nie można jej przeanalizować do określonego typu lub jest poza spodziewanym zakresem.

W przypadku wykrycia nieprawidłowych metadanych należy zignorować mapę wzmocnienia i wyświetlić obraz SDR.

Wyświetlacz

Pliki zakodowane w formacie mapy wzmocnienia HDR mogą być renderowane na konwencjonalnych wyświetlaczach SDR lub na wyświetlaczach HDR obsługujących wyższą luminancję.

Użyj mapy wzmocnienia, aby utworzyć dostosowaną wersję HDR.

W tej sekcji podajemy obliczenia z użyciem arytmetyki zmiennoprzecinkowej.

encoded_recovery(x, y) to jednokanałowa, ośmiobitowa, bezznakowa wartość całkowita z obrazu mapy wzmocnienia.

Jeśli mapa wzmocnienia ma inną rozdzielczość niż obraz główny, wtedy encoded_recovery(x, y) jest określany na podstawie filtrowanego próbkowania obrazu mapy wzmocnienia dla x i y w zakresie szerokości i wysokości obrazu głównego. Metoda filtrowania musi być dwuliniowa lub lepsza i jest zdefiniowana przez implementację.

Wartość map_gamma jest określana przez pole metadanych hdrgm:Gamma.

log_recovery(x, y) to znormalizowany przyrost piksela w przestrzeni logarytmicznej:

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

Maksymalne wzmocnienie obrazu to skalarna wartość zmiennoprzecinkowa zdefiniowana jako stosunek między bieżącym punktem bieli HDR a bieżącym punktem bieli SDR. Ta wartość jest dostarczana przez system wyświetlania i może się zmieniać z czasem.

Wartość hdr_capacity_max jest określana przez pole metadanych hdrgm:HDRCapacityMax. Wartość hdr_capacity_min jest określana przez pole metadanych hdrgm:HDRCapacityMin.

Wartość weight_factor jest określana w ten sposób, gdy hdrgm:BaseRenditionIsHDR ma wartość „Fałsz”:

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)

Gdy hdrgm:BaseRenditionIsHDR ma wartość „Prawda”, zamiast tego drugie równanie ma postać:

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

Wartość gain_map_max jest określana przez pole metadanych hdrgm:GainMapMax. Wartość gain_map_min jest określana przez pole metadanych hdrgm:GainMapMin. Wartość offset_sdr jest określana przez pole metadanych hdrgm:OffsetSDR. Wartość offset_hdr jest określana przez pole metadanych hdrgm:OffsetHDR.

Zaadaptowane liniowo przekształcenie HDR można obliczyć w ten sposób:

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

W razie potrzeby implementacja może zastosować przekształcenie do obiektu HDR(x, y), aby umieścić dane w przestrzeni oczekiwanej przez wyświetlacz. Wszelkie takie przekształcenia muszą być kolorymetrycznie poprawne.

Szczegóły GContainer

W tej sekcji podano dodatkowe wymagania, takie jak zgodność tego formatu z metadanymi XML kontenera GContainer. Metadane są zserializowane zgodnie z normą ISO 166841:2011(E) XMP Specification Part 1 i umieszczone wewnątrz głównego pliku obrazu zgodnie z opisem w sekcji 3: Adobe XMP Specification Part 3 Storage in Files. Główny plik obrazu zawiera następujące elementy w formacie RDF/XML.

Wymagania dotyczące pakietów XMP

Pakiet XMP musi zawierać rozszerzenie XMP metadanych mapy wzmocnienia za pomocą identyfikatora URI przestrzeni nazw http://ns.adobe.com/hdr-gain-map/1.0/. Domyślny prefiks przestrzeni nazw to hdrgm.

Pakiet XMP powinien zdefiniować element hdrgm:Version="1.0".

Element kontenera

Przestrzeń nazw XMP dla rozszerzenia XMP GContainer to http://ns.google.com/photos/1.0/container/. Domyślny prefiks przestrzeni nazw to Container.

Główny obraz zawiera element Container:Directory w metadanych XMP, który określa kolejność i właściwości kolejnych plików multimedialnych w kontenerze. Każdy plik w kontenerze ma w elemencie Container:Directory odpowiadający mu element multimedialny. Element multimedialny opisuje lokalizację w kontenerze plików i podstawowe właściwości każdego dołączonego pliku.

Element kontenera jest kodowany w metadanych XMP obrazu głównego i definiuje katalog elementów multimedialnych w kontenerze. Elementy multimedialne muszą znajdować się w pliku kontenera w tej samej kolejności co elementy multimedialne w katalogu i muszą być ciasno zapakowane.

Katalog może zawierać tylko 1 element obrazu „Główny” i musi to być pierwszy element w katalogu.

Nazwa elementu Typ Opis
Kontener:katalog Uporządkowana tablica struktur Uporządkowana tablica elementów struct, z których każda zawiera strukturę Container:Item definiującą układ i zawartość kontenera.

Element produktu

Elementy elementu opisują sposób, w jaki każdy element multimedialny jest używany przez aplikację.

Identyfikator URI przestrzeni nazw XMP dla rozszerzenia XMP elementu GContainer to http://ns.google.com/photos/1.0/container/item/. Domyślny prefiks przestrzeni nazw to Item.

Pierwszy element multimedialny musi być obrazem głównym. Musi on zawierać Item:Semantic = "Primary" i Item:Mime wymienione w wartościach typu MIME.

Długość elementu głównego obrazu jest określana przez analizę głównego obrazu na podstawie jego typu MIME, zaczynając od początku kontenera pliku.

Elementy multimedialne mogą zawierać atrybut Item:Padding, który określa dodatkowy odstęp między końcem elementu multimedialnego a początkiem następnego elementu multimedialnego. Jeśli występuje w ostatnim elemencie multimedialnym w Container:Directory, Item:Padding wskazuje wypełnienie między końcem elementu a końcem pliku.

Każdy element multimedialny musi zawierać typ Item:Mime i atrybuty Item:Semantic. Elementy multimedialne z obrazami dodatkowymi muszą zawierać atrybuty Item:Length.

Sekwencyjne elementy multimedialne mogą udostępniać dane zasobów w kontenerze pliku. Pierwszy element multimediów określa lokalizację zasobu w kontenerze pliku, a kolejne udostępnione elementy multimediów mają wartość Item:Length równą 0. Jeśli dane zasobu same w sobie są kontenerem, do określenia lokalizacji danych elementów multimedialnych w zasobie można użyć parametru Item:URI.

Lokalizacja zasobów elementu multimedialnego w kontenerze jest określana przez zsumowanie długości kodowania obrazu głównego, wartości Item:Length poprzednich dodatkowych zasobów elementu multimedialnego i wszystkich poprzednich wartości Item:Padding. W przypadku zasobów z elementami multimedialnymi, które nie określają wartości atrybutu Item:Padding, przyjmuje się, że jego wartość wynosi 0.

Nazwa atrybutu Typ Opis
Element:Mim Tekst Prosty ciąg znaków wskazujący typ MIME elementu multimedialnego w kontenerze. Definicję znajdziesz w sekcji Wartości typu MIME elementu. Required.
Element:semantyczny Tekst Prosty ciąg znaków wskazujący znaczenie elementu multimedialnego specyficzne dla aplikacji. Definicję znajdziesz w sekcji Wartości semantyczne elementów. Required.
Element:Długość Liczba całkowita Prosty ciąg znaków zawierający dodatnią liczbę całkowitą długości elementu w bajtach. Długość 0 oznacza, że zasób elementu multimedialnego jest udostępniany poprzedniemu elementowi multimedialnemu. Wymagany w przypadku dodatkowych elementów multimedialnych. Opcjonalne w przypadku głównego elementu multimedialnego obrazu.
Element:Etykieta Tekst Ciąg znaków zdefiniowany przez implementację służący do rozróżnienia wielu elementów produktu za pomocą tego samego identyfikatora Item:Semantic. Opcjonalny.
Element: wypełnienie Liczba całkowita Ciąg zawierający dodatnią liczbę całkowitą w bajtach dodatkowego wypełniania między końcem elementu multimedialnego a początkiem następnego elementu multimedialnego lub koniec pliku, gdy jest używany w ostatnim elemencie multimedialnym w Container:Directory. Jeśli wartość nie jest podana, przyjmuje się wartość 0. Opcjonalne.
Element: identyfikator URI Tekst Ciąg znaków URI zgodny z normą ISO/IEC 14496-12 (sekcja 8.11.9), zawierający względny identyfikator URI danych multimedialnych w zasobie z elementem multimedialnym. Domyślnie jest to główny zasób obrazu. Opcjonalny dla typów MIME podstawowy format pliku multimedialnego ISO/IEC 14496-12. Nie można ich używać w innym celu.

Wartości typu MIME elementu

Atrybut Item:Mime definiuje typ MIME każdego elementu danych multimediów.

Wartość Opis
image/jpeg obraz JPEG.

Przykład XMP kontenera G

Poniższy przykład prawidłowego pakietu XMP GContainer zawiera metadane pobrane z przykładowego pliku pokazanego w sekcji Introduction (Wprowadzenie).

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

Zgodność z normą ISO 21496-1

ISO 21496-1 udostępnia alternatywny mechanizm tworzenia zasobów do kodowania metadanych mapy wzmocnienia w pliku obrazu. Zarówno metadane ultra HDR, jak i ISO 21496-1 możesz zakodować w jednym pliku JPEG, korzystając z jednego obrazu GAinmap w pliku.

Metadane ISO 21496-1 pojawiają się bezpośrednio po segmencie XMP APP1 w obu obrazach JPEG.

Rysunek 2. Przykładowy układ pliku z metadanymi Ultra HDR i ISO 21496-1.

Aby zapewnić maksymalną zgodność między platformami, implementacje i aplikacje na Androida, które implementują własne kodowanie lub dekodowanie plików JPEG z mapami wzmocnienia, powinny obsługiwać kodowanie i dekoodowanie zarówno metadanych Ultra HDR w wersji 1, jak i ISO 21496-1. Podczas kodowania implementacja lub aplikacja powinna zakodować oba formaty metadanych. Jeśli podczas dekodowania występują oba rodzaje metadanych, implementacja lub aplikacja powinna korzystać z metadanych ISO 21496-1.

Historia zmian

Ta sekcja zawiera informacje o zmianach między wersjami tej specyfikacji.

1.1

Wszystkie zmiany w tej wersji specyfikacji Ultra HDR mają charakter informacyjny i dotyczą zgodności z normą ISO 21496-1. Rzeczywisty format pliku się nie zmienia.

1.0

Pierwsza publikacja specyfikacji ultra HDR.