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) | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
変換式 | ||||||||||||||||||
|
||||||||||||||||||
|
||||||||||||||||||
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 |
※ FCCは United States Federal Communications Commission
※ SMPTEは Society 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 |
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 の流れで見ると機能が増えすぎです。
とかく規格というのは膨らむ方向に進んでしまうので困ったものです。
| 固定リンク
「画像フォーマット」カテゴリの記事
- 超解像(2009.05.30)
- アンチエイリアシングとClear Type(2009.05.17)
- アウトラインフォント(2009.05.16)
- エッジ検出・エッジ強調・ぼかし(2009.05.09)
- 画像の拡大-距離計算に関する考察(2009.05.06)
この記事へのコメントは終了しました。
コメント
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分