toruのブログ

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

BT.2446 Method C の Crosstalk matrix の効果を確認した

背景

前回の記事で Report ITU-R BT.2446 Method C の実装例の紹介を行った。

trev16.hatenablog.com

そこで以下の内容を書いた。

※3 Crosstalk matrix, Chroma correction に関しては筆者の理解が浅いため本記事では解説しない。できれば理解を深めた後に別記事で解説したいと思っている。

Crosstalk matrix に関して少しだけ理解が深まったので、この Matrix によって出力結果がどのように変化するか記録を残すことにした。

注意事項

本記事で用いる HDR to SDR 変換 (BT.2446 Method C の Tone mapping) という用語は輝度方向の変換のみを意味する。 BT.2020 to BT.709 などの色域の変換は含まないことに注意して頂きたい。

目的

  • Crosstalk matrix が HDR to SDR変換に与える効果を パラメータ  {\alpha} を変化させながら動画で確認する
  • 目視レベルの簡単な考察を行う

結論

  • Crosstalk matrix のパラメータ  {\alpha} を 0.00~0.25 に変化させた場合の Gamut Boundary の変化を以下の動画に示す
    • 外側の黒色の部分が Crosstalk matrix を適用し HDR to SDR 変換した後の Gamut Boundary である
    • 図の詳しい意味は後述する
  • 動画よりパラメータ  {\alpha} は 0.05 くらいでは色ズレの抑制に効果がありそうだが、0.20 などの大きな値では逆効果となることが分かる

Crosstalk matrix の概要

BT.2446 Method C において Crosstalk matrix および逆変換の Inverse crosstalk matrix は図1に示す通り、Tone mapping の前後の RGB空間で行う。XYZ空間で行う処理ではないことに注意したい。なお、以後の説明では簡略化のため Inverse crosstalk matrix に関しては「適用する・しない」を明記しない。Inverse crosstalk matrix は必要に応じて適切に適用されるものとする。

f:id:takuver4:20200730160158p:plain
図1. BT.2446 Method C のブロック図

Crosstalk matrix の計算式を図2に示す。R, G, B の3色を混合するような処理なので白色点に近づく処理になっていそうである。

f:id:takuver4:20200829091456p:plain
図2. Crosstalk matrix の計算式

実際に ColorChecker の24色パッチに適用して効果を確認してみる。今回は SDR の BT.2020 空間で  {\alpha = 0.10} {\alpha = 0.20} の Crosstalk matrix を適用した。 結果を 図3、図4 に示す。ColorChecker の各色は白色点に近づくように変化していることが分かる。

f:id:takuver4:20200830134108p:plain f:id:takuver4:20200830134126p:plain
図3.  {\alpha = 0.10} の Crosstalk matrix を適用した結果 図4.  {\alpha = 0.20} の Crosstalk matrix を適用した結果

続いて xyY空間にて3次元的な変化量を確認する。ColorChecker の24色パッチに  {\alpha = 0.10} {\alpha = 0.20} の Crosstalk matrix を適用し xyY空間でプロットした結果を以下の動画に示す。

動画から Y値は増加・減少の双方のパターンがあり、その変化量は色によって異なることが分かる。

ここまでの内容をまとめる。

  • Crosstalk matrix を適用後の xy値は 白色点方向に移動する
  • Crosstalk matrix を適用後の Y値は色によって増加したり減少したりする

HDR to SDR 変換への効果

ここまでで Crosstalk matrix の概要を説明した。ここからは Crosstalk matrix を HDR to SDR 変換と組み合わせた場合の効果の確認方法について説明していく。

効果を図で表現したいため 今回は xyY空間で Gamut Boundary がどのように変化するかをプロットしてみる。順を追って説明する。

まず、図5に示す HDR10 の Gamut Boundary を準備する。これは Yの範囲が 0.0~100.0 (※1)、色域が BT.2020 の色空間の Gamut Boundary である。この Gamut Boundary に対して Crosstalk matrix を適用し HDR to SDR 変換を行った結果をプロットし効果を確認する。

※1 今回の検証では Y値は 1.0 が 100cd/m2 に相当するよう正規化しています。従って 100.0 が 10,000 cd/m2 に相当します。

f:id:takuver4:20200830150640p:plain
図5. HDR10 の Gamut Boundary
f:id:takuver4:20200830223625p:plain
図6. Crosstalk matrix 無しで HDR to SDR 変換した後の Gamut Boundary

参考例として Crosstalk matrix 無しの場合の例を図6に示す。BT.2446 Method C の Tone mapping は Y値のみへの適用であり xy値は固定のため 変換後の Gamut Boundary は 三角柱のような見た目になる。

それでは実際に Crosstalk matrix を適用してみる。パラメータ  {\alpha} を 0.00~0.25 に変化させた場合の Gamut Boundary の様子を以下の動画に示す(冒頭の結論に貼り付けたものと同じです)。

黒色が HDR10 の Gamut Boundary の変化後をプロットしたもの、内側の色付きの部分は SDR の BT.2020色域 の Gamut Boundary である。BT.2446 Method C の HDR to SDR 変換では最後に xyY to RGB 変換が行われるため、内側の色付きの部分をはみ出した部分はクリップされてしまう、すなわち色ズレが生じることとなる。

動画を詳しく見ると  {\alpha = 0.05} では Gamut Boundary の形状が青領域で理想形に近づいており色ズレの抑制に効果がありそうである。 一方で  {\alpha = 0.20} では逆に Gamut Boundary が拡大してしまっており、色ズレが発生する箇所が増加していそうである。

では最後の確認として、HDR10 で作成したテストパターン (白は 400cd/m2、BT.2020色域) に対して Crosstalk matrix および HDR to SDR 変換を行った結果を 目視で確認してみよう。結果を図7~10 に示す。 {\alpha = 0.05} では良さそうに変換できているが(主観でスミマセン) {\alpha = 0.20} では彩度の高い箇所で色潰れが発生しており、Gamut Boundary のプロット結果と同じ印象を受ける。

f:id:takuver4:20200830133200p:plain
図7.  {\alpha = 0.00} の場合
f:id:takuver4:20200830133214p:plain
図8.  {\alpha = 0.05} の場合
f:id:takuver4:20200830133228p:plain
図9.  {\alpha = 0.10} の場合
f:id:takuver4:20200830133242p:plain
図10.  {\alpha = 0.20} の場合

考察というか感想

Crosstalk matrix の効果を無理やり図にすることで、なんとなくの雰囲気は理解できた。 本当は数式から理論的な裏付けを行いたかったが自分の頭では無理だったので、プロットした結果から色々と考える方法でお茶を濁した。

こういうプロットはやっていて楽しかったし、他の色処理のデバッグなどにも流用できそうなので(流用できるようにコードを整備したので) なかなか良い勉強になったと考える。