色空間の変換(4)  YCbCr/YPbPr 色空間


YCbCr/YPbPr

テレビ・ビデオや画像のJPEG圧縮に使われる色空間に YCbCr がある。このうち,Y は輝度信号,Cb と Cr は色差信号を表す。YCbCr は,色空間というよりも信号の伝送・記録方式というほうがいいかもしれない。YCbCr と似たものに YPbPr がある。これらの違いについては,
  1. YPbPr はアナログ信号を表し,YCbCr はデジタルデータを表す [海外での解釈?]
  2. YCbCr は標準テレビ (SDTV) の信号を表し,YPbPr はハイビジョン (HDTV) の信号を表す [日本での解釈?]
という解釈があって混乱しているが,ここでは 1. の解釈 (YPbPr はアナログ,YCbCr はデジタル) に従うことにする。

YCbCr/YPbPr は,色を明るさと色差で表現する点で Lab 色空間と似ている。しかし,Lab または XYZ の Y が線型 (ガンマ補正なし) の R, G, B で定義されるのに対して,YCbCr/YPbPr の輝度はガンマ補正済みの R', G', B' で定義される。同じ記号を使うと混乱するので,ここでは YCbCr/YPbPr の輝度には Y' の記号を使うことにしよう。

まず輝度 Y' は,ガンマ補正済みの RGB 値を R', G', B'  (最大値 1) として,Lab または XYZ の Y の式とよく似た次式で定義される。

Y' = Kr R' + Kg G' + Kb B' (1)

ここで,  Kr + Kg + Kb = 1  を満たすとする (したがって  Kg = 1 − KrKb)。 Y' は 0~1 の値をとる。
色差には青色差と赤色差があり,それぞれつぎの式で定義される。

Pb = [(1/2)/(1 − Kb)] (B'Y' ) (2)
Pr = [(1/2)/(1 − Kr)] (R'Y' ) (3)

(B'Y' ),  (R'Y' ) の前の係数は,Pb, Pr の値がそれぞれ -0.5~0.5 の範囲に収まるようにするためのものだ。
これらの式は,つぎのように書き換えることができる。

Pb = (1/2) [ B' − (Kr R' + Kg G')/(Kr + Kg)] (2')
Pr = (1/2) [ R' − (Kg G' + Kb B')/(Kg + Kb)]
(3')

(2') 式を見ると,色が青のとき Pb = 0.5, 黄のとき Pb = −0.5 となって,たしかに Pb が -0.5~0.5 の値をとることがわかる。(3') 式から同様に,色が赤のとき Pr = 0.5, シアンのとき Pr = −0.5 となることがわかる。

画像のデータを,RGB 値のままでなく,わざわざ輝度と色差に変換するのは,データ量が限られた中で,できるだけ画像の劣化を防ぐためだ。 人の視覚にとって輝度に比べて色差の役割は小さく,色差の解像度を下げても画質があまり落ちたように感じないという性質がある (図1参照)。 この性質を利用し,色差のデータを間引く代わりに輝度のデータ量を多くして画質の劣化を抑えようというわけだ。

original Y data
Pb data
Pr data
RGB with low Pb, Pr
元画像
輝度情報 (Y) 青色差情報 (Pb)
赤色差情報 (Pr)
色差をぼかした画像
図1.  画像を輝度と色差(青・赤)に分解したものと,色差の解像度を下げてから合成したもの


(1)(2)(3) の変換は一次変換なので,機械にとって計算は容易だ。参考までに,逆変換 YPbPr→R'G'B はつぎのような一次変換になる。

R' = Y' + 2(1 − Kr) Pr
G' = Y' − [2Kb(1 − Kb)/Kg] Pb − [2Kr(1 − Kr)/Kg] Pr
B' = Y' + 2(1 − Kb) Pb

BT.601

SDTV (標準テレビ) の規格である BT.601 では

Kr = 0.299,  Kb = 0.114

としている。これは,NTSC RGB 色空間の RGB→Y の式  Y = 0.299 R + 0.587 G + 0.114 B  の変換係数を借用したものである (BT.601 では色域として NTSC RGB を想定している)。具体的に係数を求めると,つぎのようになる。また,YPbPr 色空間を図で表すと図2のようになる。図3は PbPr 平面に投影したものだ。

Y' =  0.299 R' + 0.587 G' + 0.114 B'
Pb = − 0.168736 R' − 0.331264 G' + 0.5 B'
Pr = 0.5 R' − 0.418688 G' − 0.081312 B'

デジタル化 (8ビット化) はつぎのようにして行う。8ビットで表現できる 0~255 のうち,全部を使っていないことがわかる (残りは他の目的で使うために空けてある)。デジタル信号は,この値で伝送・記録される。

Y'digital =  16 + 219 Y'        (16 ≤ Y'digital ≤ 235)
Cb = 128 + 224 Pb            (16 ≤ Cb ≤ 240)
Cr = 128 + 224 Pr             (16 ≤ Cr ≤ 240)

YPbPr color space (BT.601) YPbPr plan (BT.601)
図2.  YPbPr 色空間 (SDTV)
図3.  YPbPr 色空間 (SDTV) の平面図

BT.709

HDTV (ハイビジョンテレビ) の規格である BT.709 では

Kr = 0.2126,  Kb = 0.0722

としている。これは,sRGB 色空間の RGB→Y の式  Y = 0.2126 R + 0.7152 G + 0.0722 B  の変換係数を借用したものである (BT.709 では色域として sRGB を想定している)。YPbPr 色空間を図で表すと図4のようになる。また,PbPr 平面に投影すると図5のようになる。

Y' =  0.2126 R' + 0.7152 G' + 0.0722 B'
Pb = − 0.114572 R' − 0.385428 G' + 0.5 B'
Pr = 0.5 R' − 0.454153 G' − 0.045847 B'

デジタル化 (8ビット) はつぎのようにして行う。

Y'digital =  16 + 219 Y'        (16 ≤ Y'digital ≤ 235)
Cb = 128 + 224 Pb            (16 ≤ Cb ≤ 240)
Cr = 128 + 224 Pr             (16 ≤ Cr ≤ 240)

YPbPr color space (BT.709) YPbPr plan (BT.709)
図4.  YPbPr 色空間 (HDTV)
図5.  YPbPr 色空間 (HDTV) の平面図

JPEG 圧縮

RGB 画像を JPEG 圧縮するときにも YCbCr (BT.601) が使われている。R', G', B'  がすでにデジタル化 (8ビット化) されているとして,その範囲を 0~255 とすると,変換式はつぎのように書ける。

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'

テレビ/ビデオの YCbCr と違って,こちらの Y', Cb, Cr は 0-255 の全範囲の値をとる。JPEG では,こうして YCbCr に変換したデータをもとに,圧縮が行われている。逆に,JPEG 画像を解凍し,逆変換を行うと RGB 画像 (ガンマ補正済み) に戻る。



色空間の変換 目次へ戻る   前へ 次へ
T.Fujiwara, 2012/01