« RGB⇔YCbCr変換 | トップページ | 設備投資 »

RGB⇔YCbCr変換 その2


リンク
画像の変換(目次ページ)
YCbCr関連
Video 信号の「RGB⇔YCbCr変換」
今度は画像フォーマットにおける YCbCr の方を

JPEG
JPEG の規格書(ISO/IEC 10918)には規定が無かったような気がします。
「気がします。」と書いたのは、私にとっては遠く昔の事なので、
10918がどこかに行っちゃいましたし、記憶の範囲で語る事しかできないから。


JPEGに関しては IJG (Independent JPEG Group)という団体がフリーのソースコードを書いてばらまき、 今ではソフト、ハードのほとんどがそれを元にしていると考えてよいでしょう。

この JIG のソースコードによって JPEG の RGB⇔YCbCr 変換が 世の中の JPEG の事実上の標準(デファクト)になったのだと思います。

JPEG (by IJG)
変換式
Y=0.29900R+ 0.58700G+ 0.11400B
Cb=-0.16874R- 0.33126G+ 0.50000B+ 128
Cr=0.50000R- 0.41869G- 0.08131B+ 128
R=Y+ 1.40200(Cr-128)
G=Y- 0.34414(Cb-128)- 0.71414(Cr-128)
B=Y+ 1.77200(Cb-128)
 
Range
Y,R,G,B の Range = 0~255
Cb,Cr の Range = 0~255 (Center=128)
という変換式が使われています。
ソースコードのコメントによると
「TIFF 6.0 section 21 でこの変換式だったからそれを使った」
と書かれています。
※ TIFF というのは JPEG とは別の静止画像フォーマットです。

MPEG2
MPEG2 は規格書 ISO/IEC 13818-2 の中で規定されています。
sequence_display_extension ( ) の中に matrix_coefficients というコードがあり、その値で判別するとの事。
MPEG2 (ISO/IEC 13818-2)
matrix_coefficients=0
(使用禁止)
matrix_coefficients=1
BT.709
EY = 0.7154EG + 0.0721EB + 0.2125ER
EPB = -0.386EG + 0.500EB - 0.115ER
EPR = -0.454EG - 0.046EB + 0.500ER
matrix_coefficients=2
(未使用)
matrix_coefficients=3
(予約)
matrix_coefficients=4
FCC
EY = 0.59EG + 0.11EB + 0.30ER
EPB = -0.331EG + 0.500EB - 0.169ER
EPR = -0.421EG - 0.079EB + 0.500ER
matrix_coefficients=5
BT.470-2 System B,G
EY = 0.587EG + 0.114EB + 0.299ER
EPB = -0.331EG + 0.500EB - 0.169ER
EPR = -0.419EG - 0.081EB + 0.500ER
matrix_coefficients=6
SMPTE 170M
EY = 0.587EG + 0.114EB + 0.299ER
EPB = -0.331EG + 0.500EB - 0.169ER
EPR = -0.419EG - 0.081EB + 0.500ER
matrix_coefficients=7
SMPTE 240M(1987)
EY = 0.701EG + 0.087EB + 0.212ER
EPB = -0.384EG + 0.500EB - 0.116ER
EPR = -0.445EG - 0.055EB + 0.500ER
matrix_coefficients=8~255
(予約)
 
Range とアナログ→デジタル変換
EY,EG,EB,ER の Range = 0 ~ 1 (アナログ値)
EPB,EPR の Range = -0.5 ~ 0.5 (アナログ値)
Y = (219×EY) + 16
Cb = (224×EPB) + 128
Cr = (224×EPR) + 128
BT.709は正確には ITU-T Recommendation BT.709
FCCUnited States Federal Communications Commission
SMPTESociety of Motion Picture and Television Engineers

なお、ISO/IEC 13818-2 には「matrix_coefficients が無い時」の事を次のように書いています。
『sequence_display_extension ( ) が無いなど、matrix_coefficients が存在しない時は、アプリケーションで実装を決める』

たとえば DVB (ヨーロッパなどで使われるデジタルテレビ規格)では
『matrix_coefficients が存在しない時は、SDTV は 5、HDTV は 1 とみなす』
と書かれています。(DVB BlueBook A001,ETSI TS 101 154)
ARIB (日本のデジタルテレビ規格)では
『matrix_coefficients が存在しない時は、SDTV、HDTV ともに 1 とみなす』
と書かれています。(ARIB STD-B21,STD-B24他)

しっかし、なぜこんなに沢山の色空間をサポートしなければならないのだろう。


MPEG4
MPEG4 は規格書 ISO/IEC 14496-2 の中で規定されています。
video_plane_with_short_header ( ) の中に matrix_coefficients というコードがあり、その値で判別するとの事。
MPEG4 (ISO/IEC 14496-2)
matrix_coefficients=0
(使用禁止)
matrix_coefficients=1
BT.709
EY = 0.7154EG + 0.0721EB + 0.2125ER
EPB = -0.386EG + 0.500EB - 0.115ER
EPR = -0.454EG - 0.046EB + 0.500ER
matrix_coefficients=2
(未使用)
matrix_coefficients=3
(予約)
matrix_coefficients=4
FCC
EY = 0.59EG + 0.11EB + 0.30ER
EPB = -0.331EG + 0.500EB - 0.169ER
EPR = -0.421EG - 0.079EB + 0.500ER
matrix_coefficients=5
BT.470-2 System B,G
EY = 0.587EG + 0.114EB + 0.299ER
EPB = -0.331EG + 0.500EB - 0.169ER
EPR = -0.419EG - 0.081EB + 0.500ER
matrix_coefficients=6
SMPTE 170M
EY = 0.587EG + 0.114EB + 0.299ER
EPB = -0.331EG + 0.500EB - 0.169ER
EPR = -0.419EG - 0.081EB + 0.500ER
matrix_coefficients=7
SMPTE 240M(1987)
EY = 0.701EG + 0.087EB + 0.212ER
EPB = -0.384EG + 0.500EB - 0.116ER
EPR = -0.445EG - 0.055EB + 0.500ER
matrix_coefficients=8~255
(予約)
 
Range とアナログ→デジタル変換
EY,EG,EB,ER の Range = 0 ~ 1 (アナログ値)
EPB,EPR の Range = -0.5 ~ 0.5 (アナログ値)
video_range = 0 のとき
Y = (219×EY) + 16
Cb = (224×EPB) + 128
Cr = (224×EPR) + 128
video_range = 1 のとき
Y = 255×EY
Cb = (255×EPB) + 128
Cr = (255×EPR) + 128
video_range = 0 のとき
Y の Range = 16 ~ 235
Cb,Cr の Range = 16 ~ 240
video_range = 1 のとき
Y,Cb,Cr の Range = 0 ~ 255
matrix_coefficients の表は MPEG2 と MPEG4 で全く一緒なのですが、
video_range というコードが MPEG4 で新たに追加されています。


H.264
下記の表で
KR, KB というのは、
EY = KG×EG + KB×EB + KR×ER
の係数部分の事です。KG は次の式で求められます。
KG = 1.0 - KB - KR
つまり、 KR = 0.2126; KB = 0.0722 なら
EY = 0.7152×EG + 0.0722×EB + 0.2126×ER
という事になります。
ITU-T Rec. H.264
matrix_coefficients=0
GBR
matrix_coefficients=1
BT.709-5
SMPTE RP177(1993)
KR = 0.2126; KB = 0.0722
matrix_coefficients=2
(未使用)
matrix_coefficients=3
(予約)
matrix_coefficients=4
FCC Title 47 Code of Federal Regulations (2003) 73.682 (a) (20)
KR = 0.30; KB = 0.11
matrix_coefficients=5
BT.470-6 System B,G
KR = 0.299; KB = 0.114
matrix_coefficients=6
SMPTE 170M(1999)
KR = 0.299; KB = 0.114
matrix_coefficients=7
SMPTE 240M(1999)
KR = 0.212; KB = 0.087
matrix_coefficients=8
YCgCo
matrix_coefficients=9~255
(予約)
 
Range とアナログ→デジタル変換
EY,EG,EB,ER の Range = 0 ~ 1 (アナログ値)
EPB,EPR の Range = -0.5 ~ 0.5 (アナログ値)
video_full_range_flag = 0 で YCbCr のとき
Y = (219×EY) + 16
Cb = (224×EPB) + 128
Cr = (224×EPR) + 128
video_full_range_flag = 1 で YCbCr のとき
Y = 255×EY
Cb = (255×EPB) + 128
Cr = (255×EPR) + 128
video_full_range_flag = 0 で GBR,YCgCo のとき
R = (219×ER) + 16
G = (224×EG) + 16
B = (224×EB) + 16
video_full_range_flag = 1 で GBR,YCgCo のとき
R = 255×ER
G = 255×EG
B = 255×EB
GBR のとき
Y = Round(G)
Cb = Round(B)
Cr = Round(R)
YCgCo のとき
Y = Round(0.5G + 0.25(R+B))
Cb = Round(0.5G - 0.25(R+B))
Cr = Round(0.5(R-B))

おや、BT.709 に関する係数値が MPEG2,MPEG4 と H.264 では異なります。
規格書が数値を間違えたのでしょうか。
それとも故意に数値を変えたのでしょうか。
どうやら BT.709 の古い規格では係数値が異なるようです。(←未確認)
こんな所からも混乱が始まるのかもしれません。

それにしても、MPEG2,MPEG4,H.264 の流れで見ると機能が増えすぎです。
とかく規格というのは膨らむ方向に進んでしまうので困ったものです。

|

« RGB⇔YCbCr変換 | トップページ | 設備投資 »

画像フォーマット」カテゴリの記事

コメント

Various people in the world receive the http://goodfinance-blog.com/topics/mortgage-loans">mortgage loans from various banks, because that's easy.

投稿: Saundra23Bush | 2012年6月11日 (月) 17時47分

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: RGB⇔YCbCr変換 その2:

« RGB⇔YCbCr変換 | トップページ | 設備投資 »