YCbCrとクロマサブサンプリング
動画を出力する際、出力形式としてYUV444やYUV422, YUV420 などを選択することがあるが、これらは一体何を意味しているのだろうか。 YUV420を選択することで、データ量は444の場合に比べて小さく抑えられる。 これは、クロマサブサンプリングと呼ばれる技術が関係している。
クロマサブサンプリングは、画像をYCbCr(YUV)に変換後、色差成分を間引くことによって画像のデータ量を削減する技術である。 今回はこの技術について調査したことを以下にまとめる。
はじめに
動画は画像の集まりであり、画像一枚の色を表現する方式として 主にYCbCr方式 が用いられる。 色の表現法として有名なのはRGB方式であるが、これはRed, Green, Blueの3つの原色を混ぜ合わせることで 色を表現する手法である。 対して、YCbCr方式では、輝度成分のYと青から輝度を引いた青色差Cb、赤から輝度を引いた赤色差Crと3種類で色を表現する。
MPEGなどの動画形式ではRGB(RGBA)方式は使わず、YCbCr方式で色情報を記録している。 これは、YCbCrの方がRGBAで表現する場合に比べ、画像のデータ量削減が容易だからである。
RGB方式 | YCbCr方式 |
---|---|
RGB と YCbCr
RGB と YCbCr は 以下の計算式で相互に変換が可能である(以下式は [Wikipedia YUV] より引用)。
Y = 0.299 × R + 0.587 × G + 0.114 × B
Cb = -0.168736 × R - 0.331264 × G + 0.5 × B
Cr = 0.5 × R - 0.418688 × G - 0.081312 × B
輝度Y には G の成分が多く含まれており、B の成分が少ないことがわかる。 人間の目には緑色G は明るく感じ、青色Bは暗く感じることから、このような変換式になっている。
図: RGB 比較 緑は明るく感じ、青は暗く感じる
YCbCr と似た表現に YUV が存在する。YUVも YCbCr 同様に 輝度(Y)と色差(U,V) で色を表現する。 ffmpegでは、YCbCr を YUVXXXp と表現していたりする。
その他、YPbPr などの色表現が存在するが、今回はYCbCr での説明を行う。
クロマサブサンプリング
動画は画像の連続であるが、画像の連続としてそのまま保存しておくと動画の容量が大きくなってしまう。 動画のデータ量を削減するためには、ある程度保持している情報量を落とす必要がある。
mp3などの音声データは、人に聞こえづらい(人間の可聴域を超えるような)領域の音をカットすることによってデータ量の削減を行っている。 画像でも同様に、人には認識が難しい領域をカットすることで同様にデータ量削減が可能と考えられる。 動画の容量を削減するための技術は多く存在するが、今回はその中から単一画像のデータ量を削減するための方法の一つ、クロマサブサンプリングを取り上げる。
人には輝度の変化には敏感だが、色の変化には鈍感であるという性質がある。 これは目の構造によるものだが、この性質を利用すれば人間に認識しづらい領域をカットすることでデータ量を削減できる。 画像をRGBではなくYCbCr形式で表現したのは、この性質を利用するためである。 すなわち、輝度Yの成分は削減できないにしても、色差Cb/Crの成分ならある程度間引いてしまっても、人には同じ画像に見えるのである。
輝度Yはルミナンス、色差Cb/Crはクロマとも呼ばれる。 クロマをサンプリング、すなわち色成分をある程度間引くことによってデータ量の削減を行うことを、クロマサブサンプリングと呼ぶ。
4:4:4 4:2:2 4:2:0 4:1:1
クロマ(色成分)の削減の仕方にはいくつかの方式があり、4:2:2、4:2:0、4:1:1 といったものが存在する。
4:4:4
まずはじめに4:4:4フォーマットについて述べる。 4:4:4 は輝度信号1画素あたりに8ビット割りあて、色差信号それぞれにも8ビットずつ割り当てる (合計で24ビットとなる)。 RGBの場合はR,G,Bそれぞれに8ビットずつデータを割り当てているため、4:4:4 の場合は YUV と RGB ともに同じ表現が可能である。 この状態は無圧縮の状態であり、もっとも高品質な画像といえる。
図: 4:4:4 [RED Chroma] より引用
4:2:2
4:2:2 フォーマットでは、色差信号を水平方向に輝度の半分まで落とす。 間引いた色差成分は、となりの成分と同じ色とする。 これにより、色差のデータ量を半分まで落とすことが可能である。
図: 4:2:2 [RED Chroma] より引用
4:2:0
4:2:0 フォーマットでは、色差信号を水平方向に輝度の半分まで落とした後、 さらに垂直方向にも色差信号を半分まで落とす。 これにより、色差のデータ量は4分の1まで落とすことが可能である。
図: 4:2:0 [RED Chroma] より引用
4:1:1
4:1:1 フォーマットは4:2:0同様、色差のデータ量を4分の1にまで落とす。 ただし、横方向に4つ分間引く点が4:2:0 と異なる。 4:2:0 に比べ横方向の色が多く間引かれているため、色がぼけた見た目となりやすい。
図: 4:1:1 [RED Chroma] より引用
サンプリングによる影響
クロマのサンプリングを行うことで、細かな色の表現は失われてしまう。 4:4:4, 4:2:2, 4:2:0, 4:1:1 の色の変化について、以下画像がわかりやすい。 輝度は同じであるが、色差のサンプリングの仕方が異なる。
図: クロマサブサンプリングによる影響 [Wikipedia Chroma] より引用
図の右側4:4:4 をオリジナル画像として、4:2:2、4:2:0、4:1:1 を見比べると、 元の画像とは色合いが少しずつ変わってしまっていることがわかる。
サンプリング後の画像比較
クロマサブサンプリングによって色差成分を間引いたが、見た目の違和感はないのだろうか。
1 pixel 毎に色が変わるような画像(例えばグラディエーションなど)であれば、サブサンプリングを行うことによって 違和感のある画像ができあがる可能性がある。 しかし、実際の画像は色の変化はそこまで大きくないものが多いため、サブサンプリングを実施しても見た目は変わっていないように見える。
サブサンプリングの比較画像として、[EIZO Technical Review] にある画像がわかりやすい。
4:4:4(Original) | 4:2:2 | 4:1:1 |
---|---|---|
図: サンプリング後の画像比較 [EIZO Technical Review] より引用
拡大して見ると、4:4:4 に比べて 4:2:2 では色の境界がぼやけたような印象となっている。 4:1:1 では服の色と肌の色が混ざってしまい、若干違和感はでてしまっている。 しかし遠目から見る分には、全体的に画像の劣化は少ないように見え、色差成分を間引いても大きな問題はないようにみえる。
逆に輝度成分を間引いたらどのように見えるか。これも [EIZO Technical Review] に紹介されていたので以下に引用する。
4:4:4(Original) | 2:2:2(輝度成分も半分にする) |
---|---|
図: 輝度成分も半分にした場合 [EIZO Technical Review] より引用
輝度を間引くと、全体的にモザイクがかかったような見た目となってしまい違和感が大きい。
クロマサブサンプリングの使い所
クロマサブサンプリングにより、画像や動画のデータ量は大きく削減できる。 一方、サンプリングにより元の動画の鮮やかな表現やディテールは変化してしまうこともわかった。
コンテンツ制作時にはYUV420やYUV411の利用は避けるべきである。 ディテールは変わってしまうのもそうだが、何度も変換をかけていくうちに色合いがどんどん変わっていってしまう可能性がある。 YUV422では大きな劣化は起こらず、かつデータ量も削減できるという利点がある。 ただし、劣化が全くないというわけではない。 コンテンツの品質が気になる場合は(データ量が大きくなるかつ機材が高いという欠点があるものの)YUV444を利用すべきである。
放送用素材は主に4:2:2で制作されている。 テレビ放送時やBD/DVDでは4:2:0で動画が配信されることとなる。
まとめ
- クロマサブサンプリングは、画像のデータ量を手軽に削減できる手法である
- 画像のデータ量が減れば、動画のデータ量も削減できる
- 画像をYCbCrに変換後、ルミナンス(輝度Y)成分はそのままでクロマ(色差CbCr)を間引くことによってデータ量を削減する
- 人間の目は輝度に敏感だが色差には鈍感のため、色差を多少間引いても画像の品質に違いはないようにみえる
- 4:4:4 は 最も高品質で、YUV 4:2:2、4:2:0/4:1:1 という品質の順になる
疑問点
ここまでまとめたが、個人的に以下疑問が残る。詳しく調べられていないので時間があるときに調査しようと思う。
- なぜMPEGではYUVではなくYCbCrを用いるのか
- YUV/YIQ/YCbCr/YPbPr などなど様々な種類がある。これらの違いと利点(そもそも利点があるのか)について
- SD, HD によってもカラー表現を変えているといった記事を見たが、どういうことか
- ITU-R BT.601, BT.709 などについて要調査。何を定義しているのか
- MPEGではRGB <-> YUV 変換は相互に変換可能ではなく、誤差が生まれる。そもそもなぜYの値域を0〜255 ではなく、16〜235 に制限しているのか。0と255は別信号に利用しているとのことだが、そうであれば、1〜254でよいのではないか。
参考文献
- [Wikipedia YUV] Wikipedia YUV, https://ja.wikipedia.org/wiki/YUV, 2017/08/28 アクセス
- [Wikipedia RGB] Wikipedia RGB, https://ja.wikipedia.org/wiki/RGB, 2017/08/28 アクセス
- [RED Chroma] RED, クロマサンプリング技術, http://jp.red.com/news/video-chroma-subsampling-jp, 2017/08/28 アクセス
- [Wikipedia Chroma] Wikipedia Chroma subsampling, https://en.wikipedia.org/wiki/Chroma_subsampling, 2017/08/28 アクセス
- [EIZO Technical Review] EIZO, Technical Overview RGBデータとYUVデータについて, http://www.eizo.co.jp/products/tech/files/2010/WP10-009.pdf, 2017/08/28 アクセス