toruのブログ

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

YCbCr変換による画質劣化の可能性について

目的

YCbCr変換されたコンテンツは扱いを誤ると画質劣化が生じることを示す(※1)。

※1 本検証は、不幸な条件が重なった状況を想定したものです。ツールと機材を正しく扱っていれば、このような画質劣化が発生するケースは非常に少ないと考えます。

背景

RGB => YCbCr変換(以後 R2Y と呼ぶ)および YCbCr => RGB変換(以後 Y2R と呼ぶ)の係数は BT.601用、BT.709用、BT.2020用の3種類[1]が存在する。 通常は正しく逆変換できるよう R2Y と Y2R とでペアの係数を使うのだが、ヒューマンエラーや機材の制約によって異なる係数が使われてしまう事がある。

この場合は前回の記事で紹介した量子化誤差とは比較にならないズレが発生し、目視可能な画像劣化として画に表れる。本記事では画質劣化の例を Color Checker で示しつつ、具体的な劣化量や劣化の生じやすい色について考察を行う。

結論

結論1. R2Y と Y2R の係数誤りにより目視可能な画質劣化が発生する

画質劣化の例を以下の表1に示す。表の左端の縦軸が R2Y の係数、上端の横軸が Y2R の係数を意味する。オリジナルの画と R2Y => Y2R 後の画をアニメーションで交互に表示している。なお対角の3画像は正しい係数の組み合わせであるため画質劣化は無い。

表1. R2Y と Y2R の係数組み合わせと画質劣化の関係。
BT.601 BT.709 BT.2020
BT.601
BT.709
BT.2020

結論2. 係数誤りが起こると Green~Cyan, Red~Magenta の色が変わりやすい

誤差が大きくなる色を調べた結果を表2に示す。以下は BT.709 と BT.2020 の係数の組み合わせでの結果である。Green~Cyan, Red~Magenta あたりの色で誤差が大きくなることが分かる。なお、表に記載の誤差量とは⊿E2000のことである(詳細は後述)。

表2. 係数誤りによる誤差量と色の分布の関係。
誤差量 が 1~2 誤差量 が 2~3 誤差量 が 3~4 誤差量 が 4~5

結論3. 係数誤りがある状態でR2Y => Y2R を複数回繰り返すと深刻な画質劣化が生じる

BT.709 と BT.2020 の係数の組み合わせで R2Y => Y2R を5回繰り返した結果を表3に示す。

表3. 係数誤りがある状態でR2Y => Y2R を複数回繰り返した結果
オリジナル 5回繰り返し 0回~5回のアニメーション

原理

ここでは目視可能な画質劣化が生じる原因を数学的に説明する。

まずは R2Y, Y2R のおさらいをする。R2Y, Y2R は 3x3の行列を使った線形変換である。BT.2020 の場合の例を以下に示す。なお、説明の簡略化のために Full Range <=> Narrow Range の変換工程は省いている。

 \displaystyle
  \begin{bmatrix} Y \\ C_b \\  C_r \end{bmatrix} =
     \begin{bmatrix}
       0.26270 & 0.67800 & 0.05930 \\
      -0.13963 & -0.36037 & 0.50000 \\
      0.50000 & -0.45979 & -0.04021
    \end{bmatrix}
    \begin{bmatrix} R \\ G \\ B \end{bmatrix}

 \displaystyle
  \begin{bmatrix} R \\ G \\  B \end{bmatrix} =
     \begin{bmatrix}
      1.00000 & 0.00000 & 1.47460 \\
     1.00000 & -0.16455 & -0.57135 \\
      1.00000 & 1.88140 & 0.00000
    \end{bmatrix}
    \begin{bmatrix} Y \\ C_b \\ C_r \end{bmatrix}

当然のことながら R2Y 後に Y2R すると元のRGB値が復元できるように、Y2R の変換行列は R2Y の逆行列となっている。

 \displaystyle
     \begin{bmatrix}
      1.00000 & 0.00000 & 1.47460 \\
     1.00000 & -0.16455 & -0.57135 \\
      1.00000 & 1.88140 & 0.00000
    \end{bmatrix}    = 
     \begin{bmatrix}
       0.26270 & 0.67800 & 0.05930 \\
      -0.13963 & -0.36037 & 0.50000 \\
      0.50000 & -0.45979 & -0.04021
    \end{bmatrix}^{-1}

続いて画質劣化が生じる原因について説明する。例として R2Y の変換行列に BT.2020 を、 Y2R の変換行列に BT.709 を適用した場合を考える。変換後のRGB値を R', G', B' と置くと、元の R, G, B 値 を R2Y => Y2R 変換する処理は以下の式で表現できる。

 \displaystyle
\begin{aligned}
  \begin{bmatrix} R' \\ G' \\ B' \end{bmatrix} &=
     \begin{bmatrix}
      1.00000 & 0.00000 & 1.57480 \\
     1.00000 & -0.18732 & -0.46812 \\
      1.00000 & 1.85560 & 0.00000
    \end{bmatrix}
    \begin{bmatrix} Y \\ C_b \\ C_r \end{bmatrix} \\
    &=     
     \begin{bmatrix}
      1.00000 & 0.00000 & 1.57480 \\
     1.00000 & -0.18732 & -0.46812 \\
      1.00000 & 1.85560 & 0.00000
    \end{bmatrix}
 \begin{bmatrix}
       0.26270 & 0.67800 & 0.05930 \\
      -0.13963 & -0.36037 & 0.50000 \\
      0.50000 & -0.45979 & -0.04021
    \end{bmatrix}
    \begin{bmatrix} R \\ G \\ B \end{bmatrix} \\
    &=     
 \begin{bmatrix}
       1.00000 & -0.01697 & 0.09631 \\
      0.00000 & 0.99531 & -0.05119 \\
      0.00000 & 0.01151 & 1.00264
    \end{bmatrix}
    \begin{bmatrix} R \\ G \\ B \end{bmatrix}
\end{aligned}

BT.709 の Y2R の変換行列は BT.2020 の R2Y の逆行列ではないため、2つの行列の掛け算は単位行列にならず上式の通り元のRGB値には戻らない。これが R2Y と Y2R で BT.601/BT.709/BT.2020 の係数誤りが生じると誤差が発生する原因である。

考察1. ズレ量に関する考察

BT.601/BT.709/BT.2020 の係数誤りでの画像劣化は結論の表1で示した通りであるが、表1ではたったの24色の変化しか確認していない。 ここでは8bitの全通りの色(約1677万色)に対して画質劣化の調査を行う。

まずは色のズレ量を評価する。評価指標には CIE DE2000[2](以後 ⊿E2000 と呼ぶ) を用いる。1677万通りのRGB値に対して R2Y, Y2R を行い、元々の RGB値とのズレ量を⊿E2000 で評価することとした。BT601/BT.709/BT.2020 の全ての係数の組み合わせに対して ⊿E2000 を計算しヒストグラムを生成した結果を表4に示す。

表4. ⊿E2000 の計算結果のヒストグラム。左端の縦軸が R2Y の係数、上端の横軸が Y2R の係数を意味する。
BT.601 BT.709 BT.2020
BT.601
BT.709
BT.2020

表4より⊿E2000値にはバラツキがあることが分かる。即ち、ズレやすい色ズレにくい色が存在している。これを xy色度図で可視化する。例として BT.709, BT.2020 の係数組み合わせに対して、色差を6つのクラスに分けて xy色度図にプロットした。結果を図1に示す。左上から右方向に行くに連れて⊿E2000値が増加している。図1 より Green~Cyan, Red~Magenta にて色がズレやすいことが分かる。なお、この傾向は他の係数組み合わせでも概ね同じだった(BT.601の係数が入るとYellowもズレる傾向にあったと補足しておく)。

他の係数の組み合わせの結果に関してはココを参照。

図1. ⊿E2000値ごとの色をプロットしたxy色度図

考察2. 係数誤りを複数回行ってしまう可能性に関する考察

冒頭の結論3 にて、係数誤りがある状態で複数回の R2Y, Y2R を行ってしまった例を提示した。このようなケースは非常に稀だが参考までに画を作成した。 表3を見れば分かるように繰り返すことで誤差は累積し画質劣化が進んでいく。現場でこのような不幸が発生しないことを祈る。

参考文献

[1] Wikipedia, "YCbCr", https://en.wikipedia.org/wiki/YCbCr, (2019/03/23 参照)

[2] コニカミノルタ, "新しい色差式(CIE DE2000)について", https://www.konicaminolta.jp/instruments/knowledge/color/section2/06.html, (2019/03/22 参照)