toruのブログ

月1くらいで記事書きたい。

Apple/Adobe の Gain Map HDR について調べて軽く実装をしてみた

1. 背景

  • Google の Pixel 8 にて Ultra HDR という静止画 の HDR 用の新フォーマットが導入された [1][2]
  • Pixel 8 を買った職場の同僚が HDR の写真を筆者に見せて自慢してきた
  • 筆者が所有している iPhone 15 Pro も静止画の HDR をサポートしているのだが、恥ずかしいことに動作原理について殆ど理解していなかった
  • このままでは負ける(誰に?)と思っため、iPhone が採用している静止画の HDRのフォーマットについて簡単な調査をすることにした

2. 目的

  • iPhone 15 Pro で使用されている静止画の HDRフォーマットについて調べる
  • 実際に実装して挙動を確認する

3. おことわり

本記事は Gain Map HDR の概要を理解することに注力しています。 そのため Gain Map HDR に関する全ての仕様を網羅的に説明することはしていません。 その点はご了承ください。

4. 結論

4.1. 静止画の HDR規格の種類に関する理解

  • 静止画の HDR フォーマットとして以下の3種類が存在することを理解した
    • Android 14 にてサポート開始となった Ultra HDR [1][2]
    • ISO/TS 22028-5 として国際標準になっている ISO HDR [3][4]
    • Apple/Adobe が ISO 化を進めている Gain Map HDR [5-7]

4.2. Gain Map HDR の仕様に関する理解

  • Gain Map HDR の仕様について以下を理解した
    • ① Gain Map と呼ばれる2次元のデータを用いることで環境光やモニタースペックに応じて動的に HDR画像を生成できる
      • 概要については図1を参照
    • ② Gain Map は SDR Rendition と HDR Rendition の差分を元に生成する *1
      • そのため事前に SDR Rendition と HDR Rendition の双方が完成している必要がある
    • ③ 動的に生成する HDR画像は Gain Map から計算するため SDR Rendition と HDR Rendition の中間画像となる
      • 計算式も決まっているため、画像ビューアによって頓珍漢な変換が行われることはない
      • 制作者は動的に生成される HDR画像の見た目を予想できる
    • ④ 動的な HDR画像の生成に関しては ウェイトパラメータ  W が非常に重要である
      •  W の計算時には HDR Capacity と呼ばれる、SDR White と HDR White の比から求まるパラメータを使用する
      • 制作者は Gain Map 用のメタデータを設定することで  W の挙動を制御できる
    • ⑤ Gain Map HDR は輝度方向の変換は行うが色度方向の変換は行わない
      • つまり Tone mapping には対応するが Gamut mapping には対応しない
    • ⑥ Gain Map HDR後方互換性を維持しつつ、多くの画像フォーマットで利用が可能である
      • JPEG/JPEG XL/HEIF/AVIF/TIFF/DNG に Gain Map の埋め込みが可能 *2
      • 後方互換性として Gain Map に対応していない画像ビューアでは SDR Rendition or HDR Rendition の表示が行われる

図1. Gain Map HDR の概要

  • Gain Map の生成処理および適用処理の全体像を理解した
    • 生成処理の概要を図2 に、適用処理の概要を図3 に示す
    • なお本記事で説明するのは図のオレンジ色の部分のみである。その他の詳細に関しては 仕様書 を参照して頂きたい

図2. Gain Map 生成処理の概要

図3. Gain Map 適用の概要

4.3. 実装の結果

実際の写真およびテストパターン画像に対して Gain Map を使い SDR 画像から HDR画像を生成した結果を以下に示す。


動画1. Gain Map を使い普通の写真を SDR から HDR に変換した様子

動画2. Gain Map を使いテストパターンを SDR から HDR に変換した様子
なお、右上のColorChecker は SDR Rendition と HDR Rendition で同じ輝度となるように Gain Map を作成してある

5. 結論に至るまでの経緯

本記事を書くにあたり筆者が学習した内容を以下に記していく。

最初に静止画用の HDR規格について簡単に述べ、その後に Gain Map HDR の仕様について述べていく。

5.1. 静止画向けの HDRの規格の簡単なまとめ

まず静止画の HDR規格について簡単にまとめておく。

静止画における HDR というと、以前は露出を変えて連続撮影したデータを合成することで「明るい部分と影の細部がきれいに表現された画像」を意味することが多かった[8]。 この画像には確かにハイダイナミックレンジの情報量は含まれるものの、表示は SDRレンジ のままであった。 別の言い方をすると HDRレンジの撮影データにトーンマッピングを適用し SDRレンジに変換したものであった。

その一方で、本記事で扱う静止画の HDR表示が HDRレンジ であるものを示す。 これはザックリと言うと既に動画で利用されている HDR の技術[9] を静止画に適用したものである。

さて、静止画の HDRフォーマットは大きく以下の2種類に分けられる。

  • 表示デバイスの性能や視聴環境に応じた補正を定義していないフォーマット
  • 表示デバイスの性能や視聴環境に応じた補正を定義しているフォーマット

前者に ISO HDR が、後者に Gain Map HDR と Ultra HDR がある。

ISO HDR とは CICP等を使って HDR の色空間を定義する静止画 HDRの 規格であり、ISO/TS 22028-5:2023 にて国際標準となっている。 動画でいうと HDR10 に近い。

Gain Map HDRUltra HDR は更に利便性を向上させ、表示デバイスの性能や視聴環境に応じた補正も可能にしたものである。 動画でいうと Dolby Vision や HDR10+ に近い。

以後、本記事では Gain Map HDR に注目して説明していく(Ultra HDR については残念ながら調査ができていないため言及しない)。

5.2. Gain Map HDR について筆者が理解した内容のまとめ

ここからは本題の Gain Map HDR について述べていく。

5.2.1 筆者の所感

はじめに所感を述べる。

細かい動作を確認していて分かったが、Gain Map HDR は筆者が以前より求めていたものに合致していた。 少し前に書いた JPEG XL の記事で筆者は以下の意見を書いた。

色々と試していて思ったが tone mapping, gamut mapping がやはり鬼門だと思う。HDR/WCG は表示デバイスごとに表示性能の差があまりにも大きくて、 一体全体どう変換するのが最適なのか未だに分からない。 様々な実装が提案されているが国際標準に至るものはなく、輝度や色度が制限されたモニターにおける「正しい HDR表示」をどう定義すれば良いのか本当に分からない。

このうち Tone mapping については Gain Map HDR が一つの解になっていると考えている。ということで筆者が理解した内容を以下にまとめていく。

5.2.2. Gain Map HDR の概要

まず Gain Map HDR について数式ベースで概要を説明する。

Gain Map は SDR Rendition と HDR Rendition の差分(比率)から作成する。Gain Map を  G と置くと以下の式で作成される。


 \displaystyle
\begin{aligned}
G &= \log_2\left( \frac{HDR + k_{hdr}}{SDR + k_{sdr}}\right)
\end{aligned}
\tag{1}


ここで  SDR, HDR はそれぞれ Linearスケールでの SDR Rendition の値、HDR Rendition の値を意味する。 また  k_{sdr}, k_{hdr} \log_2 の結果を安定させるための係数である。

(1)式を変換すると  G SDR HDR の関係は以下となることが分かる。


 \displaystyle
\begin{aligned}
HDR &= (SDR + k_{sdr}) \cdot 2^G - h_{hdr}\\
\end{aligned}
\tag{2}
 \displaystyle
\begin{aligned}
SDR &= (HDR + k_{hdr}) \cdot 2^{-G} - k_{sdr} \\
\end{aligned}
\tag{3}


さて (2)、(3)式を見ると分かるように Gain Map HDR では SDR Rendition から HDR Rendition を生成することも、 その逆に HDR Rendition から SDR Rendition を生成することもできる。 Gain Map HDR では Gain Map をかける元の画像を Base Rendition と呼ぶ。 上記の (2)式は SDR Rendition が、(3)式は HDR Rendition が Base Rendition となっている。

以後は説明の簡略化のため、Base Rendition を SDR Rendition に固定して 説明を行う。 なお、Gain Map HDR の仕様では Base Rendition を HDR Rendition とした運用も可能である。 詳細については 仕様書 を参照して頂きたい。

さて、改めて(2)式に注目する。 この数式では Gain Map を使って SDR Rendition から HDR Rendition を作ることはできるが、 SDR Rendition と HDR Rendition の中間 の Adapted HDR Rendition *3 は作成できない。

Gain Map HDR ではウェイト  W を用いることで Adapted HDR Rendition の作成を可能としている。  Wは以下のように Gain Map  G にかける形で適用する。


 \displaystyle
\begin{aligned}
HDR &= (SDR + k_{sdr}) \cdot 2^{G \cdot W} - h_{hdr}
\end{aligned}
\tag{4}


以上が Gain Map HDR の概要となる。以下で筆者が重要だと感じたウェイト  W について説明を続けていく。

5.2.3. ウェイト  W の詳細

ここでは (4)式で使用するウェイト  W の計算方法について説明する。  Wについて理解するためには、まず Gain Map HDR に登場する HDR Capacity の概念を理解する必要がある。

HDR Capacity とは HDR成分を表示可能なヘッドルームがどの程度あるかを数値で示したものである(ヘッドルームの概念については WWDC 2023 および WWDC 2021 の動画が参考になる[3][10] )。

HDR Capacity  H は以下の数式で計算できる。


 \displaystyle
\begin{aligned}
H &= \log_2 \left(\frac{HDR_{white}}{SDR_{white}}\right) \\
\end{aligned}
\tag{5}

ここで  SDR_{white}, HDR_{white} は画像を表示するデバイスの SDR White (Diffuse White) の輝度、ピーク輝度を意味する。

例としてピーク輝度が 600 nits と 1000 nits の表示デバイス H を何パターンか計算してみる。結果を以下の表に示す。

環境  SDR_{white} [nits]  HDR_{white} [nits]  H (HDR Capacity)
一般的な屋内 203 600 1.56
一般的な屋内 203 1000 2.30
暗い屋内 80 600 2.91
暗い屋内 80 1000 3.64
明るい屋外 400 600 0.58
明るい屋外 400 1000 1.00

このように HDR Capacity  H は表示デバイスのスペックや環境光の強さによって変化するパラメータである。 Gain Map HDR では  H を利用してウェイト  W を計算する。

さて (4)式を見ると分かるが  W は 0 ~ 1 の値が期待されているパラメータである。  W=0 の場合は生成される画像が SDR Rendition となり、 W=1 の場合は HDR Rendition となる。

ということで Gain Map HDR では  H を 0~1 に正規化してウェイト  W として用いる。 W の計算は以下の式で行う。

 \displaystyle
\begin{aligned}
W &= clamp \left(\frac{H - M_{lo}}{M_{hi} - M_{lo}}, 0, 1\right) \\
\end{aligned}
\tag{6}


ここで  M_{lo} M_{hi} はそれぞれ HDR Capacity の下限と上限を意味するパラメータであり、 制作者または制作ツールがメタデータとして Gain Map に付与するデータである。

説明が長くなったが、こうして HDR Capacity  H を正規化することでウェイト  W が得られる。

(6)式を見れば分かるように  M_{lo},  M_{hi} の設定は重要である。例として  M_{hi} の値による Adapted HDR Rendition の違いを動画2 に示す。


動画2. 表示デバイスの輝度を 203 ~ 10000 nits と変化させた際の  M\_{hi} による描画結果の違い
左側は  M\_{hi} = \log_2 (1000/203) = 2.30、右側は  M\_{hi} = \log_2 (10000/203) = 5.62

動画を見ると表示デバイスの輝度設定は同じなのに、左右で明るさが異なっていることが分かる。 これは、左側の画像は表示デバイスの輝度が 1,000 nits で  W=1 となるのに対して右側は 10,000 nits で  W=1 となるからである。

別の言い方をすると  M_{lo},  M_{hi} を適切に設定することにより、画像の制作者は表示デバイスHDR Capacity に応じたウェイト  W の変化を制御可能とも言える。 これは非常に画期的であり、例えば 400 nits のピーク輝度をもつデバイスに表示される Adapted HDR Rendition に対して 「白飛びが生じても良いので輝度優先で表示する」、「輝度は暗くなるが白飛びが生じないように表示する」といった点を制作者側がコントロール可能になる。 そのため、ビューアソフトによって意図しないトーンマップが適用されるのを防ぐことができる。

とはいえ、全ての制作者が適切に  M_{lo},  M_{hi} を設定するのは難しいと考える。実際のところは多くのシーンで制作ツールが自動で適切な値を設定すると考える。 あるいは  M_{lo} = \log_2 \left(\frac{203}{203}\right) = 0.0,  M_{hi} = \log_2 \left(\frac{1000}{203}\right) = 2.30 を決め打ちで指定した場合も大半の場合は適切な表示になると考える。 なぜならば動画ではこの設定が標準となっているからである。*4

5.3. Gain Map HDR に関するその他のポイント

Gain Map HDR の概要説明はこれまで述べた通りである。以下に追加で筆者がポイントだと感じた点を記載する。 なお、以下の文言は殆ど筆者のポエムのようなものなので読み飛ばしてもらって構わない。

5.3.1. Gain Map 生成時の SDR Rendition の輝度に関して

今回の筆者の実装では、Gain Map の計算前に SDR Rendition を 2.03倍する 処理を加えた。 これは ITU-R BT.2305 にて定義されている SDR 用の Reference White (100 nits) を ITU-R BT.2408-7 で定義されている HDR用の Reference White (203 nits) に変換するためである[12][13]。

というのも、筆者は Adapted HDR Rendition について以下のように考えていたからである。

  • Adapted HDR Rendition は HDRモードの表示デバイス *5で表示される
  •  W = 0 となった場合の SDR Rendition も HDRモードの表示デバイスで表示される
  • そのため SDR Rendition は 100 nits 基準ではなく 203 nits 基準として準備した上で Gain Map を作成するのが好ましい

なお、当然のことであるが 2.03倍の処理は Linear空間にて行った。

5.3.2. Gain Map 生成時の SDR Rendition および HDR Rendition の Color Gamut (色域) について

今回の筆者の実装では Gain Map 計算前の SDR Rendition および HDR Rendition の Color Gamut は事前に P3-D65 に変換しておいた。 一般的には SDR は BT.709色域、HDR は P3-D65 or BT.2020色域を使うことが多いが、Gain Map HDR は (4)式から分かるように色域の変換 (Gamut Mapping) を行わない からである。そのため今回は色域方向の変換について考慮せずに済むように P3-D65 色域に事前に変換を行った。

6. おわりに

本記事の内容とは全然関係が無いのですが、私は石川県に住んでおります。 ご存知の方も多いとは思いますが 2024年1月1日に能登半島にて地震が起こり、能登半島では甚大な被害が出ています。

私自身は家屋も身体も無事であり何不自由なく過ごせておりますが、被災地の復興には多くの支援が必要だと考えております。 もしも可能であれば何らかの形で支援をして頂けると助かります。以下に支援用のリンクを記載しました。 内容をよく確認の上、余力のある方がいればご協力をお願いいたします。

7. 参考資料

[1] Android Open Source Project, "Ultra HDR", https://source.android.com/docs/core/camera/ultra-hdr
[2] Android Police, "Hands-on with Ultra HDR in Android 14: The future of photography", https://www.androidpolice.com/android-14-ultra-hdr-hands-on/
[3] Apple Developer, "Support HDR images in your app - WWDC23", https://developer.apple.com/videos/play/wwdc2023/10181
[4] ISO/TS 22028-5:2023, "Photography and graphic technology - Extended colour encodings for digital image storage, manipulation and interchange - Part 5: High dynamic range and wide colour gamut encoding for still images (HDR/WCG)", https://www.iso.org/standard/81863.html
[5] Adobe, "Gain Map Specification (1.0 draft 14, October 2023)", https://helpx.adobe.com/camera-raw/using/gain-map.html https://helpx.adobe.com/content/dam/help/en/camera-raw/using/gain-map/jcr_content/root/content/flex/items/position/position-par/table/row-io13dug-column-4a63daf/download_section/download-1/Gain_Map_1_0d14.pdf
[6] IS&T Electronic Imaging (EI) Symposium, "EI 2023 Plenary 2: Embedded Gain Maps for Adaptive Display of High Dynamic Range Images", https://youtu.be/HBVBLV9KZNI?si=iz7Z1Px1EjQtD6zu
[7] ISO/WD 21496-1, "Digital Photography - Gain map metadata for image conversion - Part 1: Dynamic Range Conversion", https://www.iso.org/standard/86775.html
[8] Apple サポート (日本), "iPhoneHDRカメラ", https://support.apple.com/ja-jp/guide/iphone/iph2cafe2ebc/12.0/ios/12.0
[9] Wikipedia, "High-dynamic-range television", https://en.wikipedia.org/wiki/High-dynamic-range_television
[10] Apple Developer, "Explore EDR on iOS", https://developer.apple.com/videos/play/wwdc2022/10113/?time=364
[11] ITU-R BT.2100-2, "Image parameter values for high dynamic range television for use in production and international programme exchange", https://www.itu.int/dms_pubrec/itu-r/rec/bt/R-REC-BT.2100-2-201807-I!!PDF-E.pdf
[12] ITU-R BT.2408-7, "Guidance for operational practices in HDR television production", https://www.itu.int/dms_pub/itu-r/opb/rep/R-REP-BT.2408-7-2023-PDF-E.pdf
[13] ITU-R BT.2305, "A reference viewing environment for evaluation of HDTV program material or completed programmes", https://www.itu.int/dms_pubrec/itu-r/rec/bt/R-REC-BT.2035-0-201307-I!!PDF-E.pdf

*1:SDR Rendition, HDR Rendition という表現は Gain Map の仕様書に従ったものである。日本語だと SDRマスター、HDRマスターという言い方が合うと筆者は考える

*2:その一方で今後に全てのファイルフォーマットで Gain Map HDR が運用されるかは不透明。現時点では「技術的に可能」くらいの理解が良いかもしれない

*3:Adapted HDR Rendition という表現は Ultra HDR の Specification から拝借した呼び方である。Gain Map HDR の仕様書では固有名称が与えられておらず、本記事で扱いづらかったため名前を与えた

*4:ITU-R BT.2100-2 の Table 3 の Peak luminance of display および ITU-R BT.2408-7 の Table 1 の HDR Reference White を参照 [11][12]

*5:HDRモードとは Reference White が 100 nits ではなく 203 nits となっている状態を意味する