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; Czytniki obsługujące ten format łączą obraz główny z mapą wzmocnienia i renderują obraz o wysokim zakresie dynamicznym 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 rzecz biorąc, cykl życia obrazu zgodnego z tym formatem to:
Kodowanie
- Generowanie mapy z użyciem Gain
- Kompresja map
- Generowanie kontenera mapy
Dekodowanie
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:
- być zgodny wstecznie, aby na naiwnych odbiorcach wyświetlać konwencjonalny obraz SDR;
- Nie zajmują zbyt dużo miejsca.
Dodatkowo technika wyświetlania musi:
- Dekodowanie nie wymaga intensywnego przetwarzania.
- Umożliwiać dostosowanie się do dowolnego współczynnika między punktami białymi HDR i SDR wyświetlacza, które mogą się znacznie różnić między urządzeniami, a nawet czasowo na jednym urządzeniu.
I wreszcie technika musi umożliwiać wykonywanie wszystkich powyższych działań bez:
- Klipy z najciekawszymi momentami.
- Kruszenie 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:
- Adobe XMP Specyfikacja, część 3. Przechowywanie plików w plikach
- ISO 16684-1:2019 XMP Specification Part 1
- Format pliku multimedialnego ISO/IEC 14496-12
- T.81 (09/92) Kompresja cyfrowa i kodowanie zdjęć w nieruchomych tonach
- Dokument na temat formatu wieloobrazowego CIPA DC-x 007-2009
Definicje
Wyświetlacz SDR
- konwencjonalny wyświetlacz, który nie jest przeznaczony do wyświetlania treści HDR; Takie wyświetlacze mają zwykle nominalną maksymalną 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 plików elementów multimediów w kontenerze plików.
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 liniowa luminancja treści HDR na wyświetlaczu w danym momencie. Ta wartość jest zwykle wyższa niż punkt bieli 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.
- Ta wartość jest stała dla danego obrazu. 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.
- Zawsze większa lub równa minimalnemu wzmocnieniu treści.
Minimalne wzmocnienie treści (
min_content_boost
w równaniach)- Ta wartość pozwala twórcy treści ograniczyć, o ile obraz może być ciemniejszy, gdy jest wyświetlany na wyświetlaczu HDR w porównaniu z wersją SDR. Ta wartość jest stałą wartością dla danego obrazu.
- 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.
Maksymalne wzmocnienie wyświetlacza (
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 czasie w zależności od ustawień urządzenia i innych czynników, takich jak oświetlenie 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ść jest zawsze >= 1,0, ponieważ wyświetlacz może zawsze wyświetlać biały kolor HDR o jasności co najmniej takiej jak biały kolor SDR.
Wzmocnienie reklamy displayowej
- Równa się mniejszej wartości z maksymalnego wzmocnienia treści i maksymalnego wzmocnienia wyświetlania. Ta wartość zawsze wynosi >= 1,0.
- Jeśli np. maksymalny współczynnik wzmocnienia treści wynosi 4,0, a maksymalny współczynnik wzmocnienia wyświetlania 3,0, współczynnik wzmocnienia wyświetlania będzie wynosił 3,0. Piksel jest wyświetlany nawet 3 razy jaśniej niż w przypadku SDR, ponieważ możliwości wyświetlacza są czynnikiem ograniczającym.
- Jeśli np. maksymalny współczynnik wzmocnienia treści wynosi 4,0, a maksymalny współczynnik wzmocnienia wyświetlania – 5,0, współczynnik wzmocnienia wyświetlania będzie 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
- Idealne odwzorowanie HDR według twórcy treści.
Adaptacja HDR
- Końcowa wersja HDR wyświetlana na ekranie po dostosowaniu docelowej wersji HDR do bieżącego wzmocnienia wyświetlacza.
Mapa wzmocnienia (wartość
recovery(x, y)
w równaniach)- Mapa wskazująca, o ile należy 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)
- Ogranicz wartość x do zakresu [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,
- Rozszerzalna platforma metadanych. Standard określający metodę kodowania metadanych w kontenerze obrazu; zdefiniowany przez ISO 16684-1:2011(E) XMP Specification Part 1.
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).
kontener
- GContainer to metoda przechowywania wielu obrazów w jednym kontenerze obrazów, w którym jeden obraz jest uznawany za obraz 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 mapy z użyciem Gain
Potoki obrazów z kamery zwykle przeprowadzają operację kompresji zakresu, aby kompresować dane o wyższym zakresie luminancji do niższego zakresu konwencjonalnych wyświetlaczy SDR. Mapa wzmocnienia to mechanizm przechowywania danych wystarczających do odzyskania pierwotnych danych o wyższej luminancji.
W tej sekcji podajemy obliczenia oparte na arytmetyce zmiennoprzecinkowej.
Obraz SDR jest opisywany przez te funkcje:
SDR'(x, y)
to trzykanałowy, nieliniowy (zazwyczaj z kodowaniem gamma) obraz główny.SDR(x, y)
to wersja liniowa trójkolorowego obrazu głównego, uzyskana przez przekształcenie do liniowej wersji przestrzeni barw obrazu głównego. 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)
jest zdefiniowana w zakresie od 0,0 do 1,0 i jest luminancją liniową obrazu w standardowym zakresie dynamiki:
Ysdr(x, y) = primary_color_profile_to_luminance(SDR(x, y))
Podobne definicje dotyczą obrazu HDR.
HDR'(x, y)
to obraz nieliniowy z 3 kanałami, czyli obraz zakodowany w formacie PQ lub HLG.HDR(x, y)
to trójpasmowy obraz HDR w formacie liniowym.
Yhdr(x, y)
to luminancja w danym punkcie obrazu HDR:
Yhdr(x, y) = primary_color_profile_to_luminance(HDR(x, y))
Yhdr(x, y)
jest zdefiniowany w zakresie od 0,0 do maksymalnego wzmocnienia 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 zdjęcie główne SDR ma profil kolorów Display-P3, obraz HDR jest zdefiniowany względem kolorów podstawowych tego profilu. Oznacza to, że obraz HDR zawiera też podstawowe kolory 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 funkcji Yhdr(x, y)
do funkcji Ysdr(x, y)
:
pixel_gain(x, y) = (Yhdr(x, y) + offset_hdr) / (Ysdr(x, y) + offset_sdr)
Zachowanie funkcji pixel_gain(x, y)
, gdy Ysdr(x, y)
i offset_sdr
są równe 0, jest określone przez implementację.
Na przykład implementacje mogą obsługiwać przypadek, gdy Ysdr(x, y)
i offset_sdr
są równe zeru, 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_sdr
i offset_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)
Zachowanie funkcji recovery(x, y)
, gdy pixel_gain(x, y)
= 0, jest zdefiniowane przez implementację, ponieważ log2(0)
jest nieokreślona.
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 nie może być mniejsze niż 1,0. Minimalny wzmocnienie treści musi mieścić się w zakresie [0,0, 1,0].
Wartości w polu recovery(x, y)
mogą się mieścić w zakresie [0,0, 1,0].
Mapa wzmocnienia jest zapisywana w pliku JPEG obrazu dodatkowego, dlatego musi być zakodowana za pomocą 8-bitowych wartości bez znaku, czyli 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.
W wyniku tego kodowania wartości recovery(x, y)
są reprezentowane jako 8-bitowe liczby całkowite bez znaku w zakresie 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 pomocniczym jest ona dołączana do obrazu głównego za pomocą metadanych MPF i GContainer XMP. Główny katalog GContainer musi zawierać element dotyczący 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 dostępny, 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
Główny obraz zawiera metadane XMP, które definiują co najmniej 2 obrazy z dodatkowymi informacjami semantycznymi dla mapy wzmocnienia HDR.
W poniższych podrozdziałach znajdziesz szczegółowe informacje dotyczące tego formatu. Dodatkowe informacje o ogólnej zgodności z kontenerem GContainer znajdziesz w sekcji Szczegóły kontenera 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 znaczenie każdego elementu multimedialnego w katalogu kontenera w zależności od aplikacji.
Wartość | Opis |
---|---|
Główny | Wskazuje, że element multimedialny jest obrazem głównym, gotowym do wyświetlenia w kontenerze. Katalog musi zawierać jeden element „Primary” (Główny). |
Mapa zysku | 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 zysku 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). Opcjonalne; wartość domyślna to „False” (fałsz). |
hdrgm:GainMapMin | tablica rzeczywista lub uporządkowana rzeczywistych | Zapisuje wartości zmiennej map_min_log2 . Jest to log2 minimalnego wzmocnienia treści, czyli minimalny dopuszczalny współczynnik proporcji linearnej luminancji docelowego odwzorowania HDR w stosunku do obrazu SDR (podzielonego przez) w danym pikselu. 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 . Opcjonalny; wartość domyślna to 0,0. |
hdrgm:GainMapMax | tablica rzeczywista lub uporządkowana rzeczywistych | Zapisuje wartości elementu 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 liczba rzeczywista lub uporządkowana tablica liczb 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 stosowana do wartości mapy przechowywanej. Może to być pojedyncza liczba rzeczywista lub uporządkowana tablica liczb rzeczywistych. Gdy jest to uporządkowana tablica wartości rzeczywistych, może zawierać 1 element, który ma zastosowanie do wszystkich kanałów, lub 3 elementy dla kanałów czerwonego, zielonego i niebieskiego. Wartość musi być większa niż 0,0. Opcjonalny; wartość domyślna to 1,0. |
hdrgm:OffsetSDR | tablica rzeczywista lub uporządkowana 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 liczba rzeczywista lub uporządkowana tablica liczb 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 | Rzeczywista lub uporządkowana tablica wartości 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 | Real | Przechowuje wartość hdr_capacity_min . Jest to log2 wartości minimalnego wyświetlania wzmocnienia, dla którego ma zastosowanie mapa. Ta wartość wpływa też na to, jak bardzo ma być stosowana mapa wzmocnienia na podstawie zwiększenia wyświetlalności. Wartość musi być równa 0,0 lub większa. Opcjonalne; wartość domyślna to 0,0. |
hdrgm:HDRCapacityMax | Real | 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. Wartość musi być większa niż hdrgm:HDRCapacityMin . Wymagany. |
Przykładowy plik XMP mapy wzmocnienia
Ten przykład prawidłowego pakietu XMP mapy wzmocnienia zawiera metadane z pliku przykładowego przedstawionego w sekcji 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 CIPA DC-x 007-2009 Multi-Picture Format, o którym mowa w sekcji Zależności.
Dekodowanie
Z tej sekcji dowiesz się, jak odkodować mapę wzmocnienia z pliku JPEG zgodnego ze standardem.
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.
Można też użyć IFD indeksu MPF i XMP obrazów skanowania do określenia lokalizacji mapy wzmocnienia.
Obsługa nieprawidłowych metadanych
Metadane są uznawane za nieprawidłowe, jeśli brakuje wymaganego pola lub jeśli jakiekolwiek pole zawiera nieprawidłową wartość. Wartość może być nieprawidłowa, ponieważ nie da się jej przeanalizować w sposób zgodny z wybranym typem lub wykracza poza oczekiwany zakres.
Jeśli napotkasz nieprawidłowe metadane, mapa wzmocnienia powinna zostać zignorowana, a obraz SDR powinien zostać wyświetlony.
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, encoded_recovery(x, y)
jest zamiast tego określana przez filtrowane próbkowanie obrazu mapy wzmocnienia w przypadku x i y w zakresie odpowiednio 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 wyświetlacza to wartość skalarna zmiennoprzecinkowa zdefiniowana jako stosunek bieżącego punktu białego HDR do bieżącego punktu białego 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 wartość hdrgm:BaseRenditionIsHDR
to „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)
Gdy hdrgm:BaseRenditionIsHDR
ma wartość „True” (prawda), 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ć transformację do HDR(x, y)
, aby umieścić dane w przestrzeni oczekiwanej przez wyświetlacz. Wszelkie takie przekształcenia muszą być
poprawne pod względem kolorystycznym.
Szczegóły GContainer
W tej sekcji określono dodatkowe wymagania, które mają na celu zapewnienie zgodności tego formatu z metadanymi GContainer XML. 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. Plik głównego obrazu zawiera te 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 odpowiadający mu element multimedialny w Container:Directory
. Obiekt multimediów opisuje lokalizację w kontenerze pliku oraz podstawowe właściwości każdego złączonego pliku.
Element kontenera jest zakodowany w metadanych XMP obrazu podstawowego 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ć ściśle zapakowane.
Katalog może zawierać tylko jeden element obrazu „Główny” i musi być to pierwszy element w katalogu.
Nazwa elementu | Typ | Opis |
---|---|---|
Kontener:katalog | Uporządkowany zbiór struktur | Uporządkowana tablica elementów typu struct, z których każdy zawiera element typu Container:Item definiujący układ i zawartość kontenera. |
Element elementu
Elementy pozycji opisują sposób użycia poszczególnych pozycji multimedialnych przez aplikację.
Identyfikator URI przestrzeni nazw XMP rozszerzenia XMP produktu 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 zawierać atrybuty Item:Semantic
= "Primary"
i Item:Mime
wymienione w sekcji Wartości typu MIME elementu.
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
określający dodatkowe dopełnienie między końcem elementu multimedialnego a początkiem następnego. Gdy znajduje się przy ostatnim elemencie multimedialnym w tagu Container:Directory
, Item:Padding
wskazuje dopełnienie między końcem elementu a końcem pliku.
Każdy element multimediów musi zawierać atrybut typu Item:Mime
i atrybut Item:Semantic
.
Elementy multimediów z dodatkowym obrazem 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 elementów multimedialnych w kontenerze jest określana przez zsumowanie długości kodowania obrazu podstawowego, wartości Item:Length
poprzednich zasobów elementów multimedialnych wtórnych oraz 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:Mime | Tekst | Prosty ciąg tekstowy wskazujący typ MIME elementu multimedialnego w kontenerze. Definicję znajdziesz w sekcji Wartości typu MIME elementu. Required. |
Element:semantyka | Tekst | Prosty ciąg znaków wskazujący znaczenie elementu multimedialnego w danej aplikacji. Definicję znajdziesz w sekcji Wartości semantyczne produktu. 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 z poprzednim elementem multimedialnym. Wymagany w przypadku dodatkowych elementów multimedialnych. Opcjonalny w przypadku głównego elementu multimedialnego z obrazem. |
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 nie ma tej wartości, przyjmuje się wartość 0.
Opcjonalne. |
Element: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
określa typ MIME danych poszczególnych elementów multimedialnych.
Wartość | Opis |
---|---|
image/jpeg | Obraz JPEG. |
Przykładowy XMP GContainer
Ten przykład prawidłowego pakietu XMP GContainer zawiera metadane z przykładowego pliku przedstawionego w sekcji 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.
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 kodować oba formaty metadanych. Jeśli podczas operacji dekodowania występują oba typy metadanych, implementacja lub aplikacja powinna preferować metadane 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. Nie ma żadnych zmian w samym formacie pliku.
- Dodaj sekcję Zgodność z normą ISO 21496-1.
1.0
Pierwsza publikacja specyfikacji Ultra HDR.