Y'CbCr色空間
一定の輝度Y′=0.5におけるCbCr平面(RGB色域外の色も近似的に表示されます)
カラー画像とそのY′、C、B、C、R成分。Y′画像は基本的にメイン画像のグレースケールコピーです。YCbCr、Y′CbCr 、またはYC B C R、Y′C B C Rとも表記され、デジタルビデオおよび写真システムにおけるカラー画像パイプラインの一部として使用される色空間ファミリーです。YP B P Rと同様に、 RGB原色に基づいています。両者は概ね同等ですが、YC B C Rはデジタルビデオ用であり、YP B P R はアナログシステム用に設計されています。[ 1 ]
Y′は輝度成分、C BとC Rはそれぞれ青差と赤差の彩度成分です。輝度Y′(プライム記号付き)は輝度Yとは区別され、光の強度がガンマ補正されたRGB原色に基づいて非線形に符号化されることを意味します。
Y′CbCr色空間は、関連するRGB原色と白色点からの数学的な座標変換によって定義されます。基となるRGB色空間が絶対値であれば、Y′CbCr色空間も絶対値となります。逆に、RGB空間が不明確であれば、Y′CbCrも不明確となります。この変換は、 ITU-T H.273の式32、33で定義されています。[ 2 ]
根拠
カラーテレビが登場する前は、白黒テレビが広く使用されていました。既存のテレビやカメラの数が多かったため、新しいカラー放送には何らかの下位互換性が求められていました。フランスの技術者ジョルジュ・ヴァレンシは、1938 年に RGB カラーを輝度と彩度の信号として送信するシステムを開発し、特許を取得しました。これにより、既存の白黒テレビは輝度情報のみを処理し、彩度を無視することができるようになり、実質的にカラー映像の中に白黒映像をパッケージ化することが可能になりました。この下位互換性のため、ヴァレンシのアイデアに基づくシステムは互換カラーと呼ばれました。同様に、白黒放送は追加の処理回路なしでカラーテレビで受信できます。既存の放送周波数割り当てを保護するため、新しい彩度情報には輝度情報よりも低い帯域幅が割り当てられました。これは、人間が白黒情報に対してより敏感であるために可能になりました (右の画像例を参照)。これは彩度サブサンプリングと呼ばれます。
YCbCrとY′CbCrは、色処理と知覚的均一性の実用的な近似値であり、赤、緑、青にほぼ対応する原色が知覚的に意味のある情報に処理されます。これにより、後続の画像/動画処理、伝送、保存において、知覚的に意味のある方法で演算が行われ、エラーが発生する可能性があります。Y′CbCrは、高解像度で保存または高帯域幅で伝送できる輝度信号(Y′)と、帯域幅削減、サブサンプリング、圧縮、またはその他の方法で個別に処理することでシステム効率を向上させることができる2つの彩度成分(C BとC R)を分離するために使用されます。
コンバージョン
YCbCrはYCCと略されることがあります。通常、Y′CbCr、YCbCr、 YPbPr、Y′UVという用語は互換的に使用されるため、混乱を招くことがあります。主な違いは、YPbPrはアナログ画像で使用され、YCbCrはデジタル画像で使用されることです。そのため、YUVとの変換時にU maxとV max(YCbCrではどちらも)のスケーリング値が異なります。Y′CbCrとYCbCrの違いは、ガンマ補正されているかどうかです。 
以下の式は、これらの形式間の共通原則と一般的な違いをよりよく表しています。
RGB変換
R'G'B'からY′PbPrへ
RGBからYCbCrへの変換Y′CbCr 信号 (信号をデジタル形式に配置するためのスケーリングとオフセットが行われる前) はYPbPrと呼ばれ、次のように 3 つの定義済み定数 K R、 K G、および K Bを使用して、対応するガンマ調整されたRGB (赤、緑、青) ソースから作成されます。

ここで、K R、K G、およびK Bは通常、対応するRGB空間の定義から導出され、を満たす必要があります。 
同等の行列操作は、多くの場合「カラー マトリックス」と呼ばれます。

ここで、プライム記号 (′) はガンマ補正が使用されていることを意味します。したがって、R′、G′、B′ の公称範囲は 0 から 1 で、0 は最小強度(例えば、黒の表示)を表し、1 は最大強度(例えば、白の表示)を表します。結果として得られる輝度 (Y) 値の公称範囲は 0 から 1 となり、彩度 (P Bおよび P R ) 値の公称範囲は -0.5 から +0.5 となります。
逆変換プロセスは、上記の式を逆転させることによって導き出すことができます。

Y′PbPrからY′CbCrへ
信号をデジタル形式で表現する場合、結果は通常、スケーリングと丸めが行われ、オフセットが加算されます。例えば、仕様(MPEG-2 [ 3 ]など)に従ってY′成分にスケーリングとオフセットを適用すると、8ビット表現では黒は16、白は235になります。この規格では、C BとC Rの8ビットデジタル化バージョンが16から240の異なる範囲にスケーリングされています。その結果、カラーマトリクス処理やYCbCr空間での処理を行う際に、分数(235-16)/(240-16) = 219/224による再スケーリングが必要になることがあります。その結果、後続の処理がより高いビット深度で行われない場合、量子化歪みが発生します。
入力データの公称範囲を表現するのに望ましいと思われる範囲よりも狭い範囲のデジタル値を使用するスケーリングにより、処理中に「オーバーシュート」と「アンダーシュート」が許容されますが、不要なクリッピングは発生しません。この「ヘッドルーム」と「トゥルーム」(または「フットルーム」)[ 4 ]は、 xvYCCで規定されている公称色域の拡張にも使用できます。
235という値は、最大オーバーシュート(ギブス現象)の理論上の最大オーバーシュート(黒から白への最大ステップの約8.9%)よりもわずかに大きい(255 - 235 / 235 - 16)= 9.1%を許容します。一方、余裕は16 / 219 = 7.3%(ここでは逆方向)しか許容されません。これは、理論上の最大オーバーシュートの8.9%よりも小さい値です。さらに、0と255の値はHDMIで予約されているため、実際には余裕はわずかに小さくなります。
Y′CbCrからxvYCCへ
Y′CbCrを定義する式は、公称RGBカラーキューブ全体を回転させ、(より大きな)YCbCrカラーキューブに収まるように拡大縮小する形で構成されているため、Y′CbCrカラーキューブ内には、対応するRGB領域(少なくとも公称RGB範囲内)では表現できない点が存在します。そのため、一部のY′CbCr信号を正しく解釈して表示する方法の決定が困難になります。これらの範囲外のY′CbCr値は、xvYCCによってBT.709色域外の色をエンコードするために使用されます。
ITU-R BT.601変換
ITU-R BT.601 (旧CCIR 601 ) 規格でデジタル コンポーネント ビデオ用の標準解像度テレビ用に定義された Y′CbCr の形式は、対応する RGB 空間 (ITU-R BT.470-6 System M プライマリ) から次のように派生します。

上記の定数と式から、ITU-R BT.601 については次のことが導き出されます。
アナログ R'G'B' からアナログ YPbPr は次のように導出されます。

デジタル Y′CbCr (サンプルあたり 8 ビット) は、次のようにアナログ R'G'B' から導出されます。

あるいは単に成分ごとに

結果として得られる信号のY′(輝度)値は16から235、CbとCr(色差)値は16から240の範囲になります。0から15の値はフットルーム、236から255の値はヘッドルームと呼ばれます。YとCb、Crで異なる量子化範囲は、BT.2020とBT.709にも適用されます。
あるいは、デジタル Y′CbCr は、次の式に従って、デジタル R'dG'dB'd (サンプルごとに 8 ビット、それぞれが 0 が黒、255 が白を表す全範囲を使用) から導き出すことができます。

以下の式では、スケーリング係数に が掛けられています。これにより、分母に256という値が含まれるようになりますが、これは1回のビットシフトで計算できます。 

R'd G'd B'd デジタル ソースにフットルームとヘッドルームが含まれている場合、まず各信号からフットルーム オフセット 16 を減算し、スケール係数を式に含める必要があります。 
逆変換は次のようになります。

丸めなしの逆変換(ITU-R BT.601 勧告から直接取得した値を使用)は次のようになります。

この形式の Y′CbCr は、古い CRT の蛍光体発光特性に適合する RGB モデルを使用するため、 主に古い標準解像度のテレビシステムに使用されます。
ITU-R BT.709変換
Rec. 709とRec. 2020の比較Y′CbCrの別の形式は、主にHDTV向けにITU-R BT.709規格で規定されています。この新しい形式は、一部のコンピュータディスプレイ向けアプリケーションではsRGBとして使用されています(ただし、YCbCrのsRGB形式であるsYCCに使用されるマトリックスは、依然としてBT.601です)。この場合、KbとKrの値は異なりますが、それらの使用法は同じです。ITU-R BT.709では、定数は次のとおりです。

このY′CbCr形式は、新しいCRTやその他の最新の表示機器の蛍光体発光特性により適合するRGBモデルに基づいています。BT.709の変換マトリックスは次のとおりです。

R'、G'、B' 信号の定義も BT.709 と BT.601 では異なり、BT.601 内でも使用されている TV システムの種類 ( PALやSECAMの 625 ライン、またはNTSCの 525 ライン) によって異なり、他の仕様でもさらに異なります。異なる設計では、R、G、B 色度座標の定義、基準白色点、サポートされる色域範囲、R、G、B から R'、G'、B' を導出するための正確なガンマ事前補正関数、および R'G'B' から Y′CbCr への変換中に適用されるスケーリングとオフセットが異なります。したがって、Y′CbCr をある形式から別の形式に適切に変換することは、一方のマトリックスを反転してもう一方を適用するだけではありません。実際、Y′CbCrが理想的に設計されている場合、KBとKRの値はRGBカラー原色の正確な仕様から導き出され、輝度(Y′)信号はガンマ調整された輝度の測定値(通常はCIE 1931に基づく人間の視覚システムの色刺激に対する反応の測定値に基づく)に可能な限り近くなります。[ 5 ]
ITU-R BT.2020変換
ITU -R BT.2020標準は、BT.709 と同じガンマ関数を使用します。以下を定義します: [ 6 ]
どちらの場合も、原色から導き出された係数は次のようになります。

NCLの場合、定義は古典的です:; ; 。エンコード変換は、通常通り、行列として表すことができます。[ 6 ] BT.2020-NCLのデコード行列は、小数点以下14桁で次のようになります。 



行列内の小さい値は丸められておらず、正確な値です。精度が制限されているシステム(例えば8ビットや10ビット)では、上記の行列の精度を下げ、例えば小数点以下6桁のみを保持することができます。[ 7 ]
CL版YcCbcCrcのコードは次の通りである: [ 6 ]
これは線形 RGB から計算された実際の輝度に適用されるガンマ関数です。
それ以外の場合は、 となります。および は、色域に対応する の理論上の最小値と最大値です。丸められた「実用的な」値は、 、です。導出の全文は勧告に記載されています。[ 6 ]






それ以外の場合は。繰り返しますが、とは理論上の限界です。四捨五入した値は、です。





CL関数は、輝度の保存が最優先される場合(クロマサブサンプリング§ガンマ輝度誤差参照)、または「配信時の符号化効率の向上が期待される」場合に使用できます。仕様では、この点についてITU-R報告書BT.2246を参照しています。[ 6 ] BT.2246では、CLは圧縮効率と輝度の保存性を向上させるとされていますが、HDTV YCbCrでカラーミキシングなどの制作業務を経験したスタッフにとっては、NCLの方が馴染み深いでしょう。[ 8 ]
BT.2020ではPQ 、ひいてはHDRは定義されていません。これらはSMPTE ST 2084とBT.2100でさらに定義されています。BT.2100では、線形RGBから導かれ、色相の直線性に優れた半知覚的色空間であるIC T C Pが導入されます。これは「ほぼ一定の輝度」です。[ 9 ]
SMPTE 240M変換
SMPTE 240M規格 ( MUSEアナログ HD テレビ システムで使用) では、YCC を次の係数で定義しています。

係数は、240M 標準で使用される SMPTE 170M の原色と白色点から導出されます。
JPEG変換
JFIFでのJPEGの使用は、修正されたRec. 601 Y′CbCrをサポートします。ここで、Y′、C B、およびC Rは、[0...255]の完全な8ビット範囲を持ちます。[ 10 ]以下は、6桁の精度で表された変換式です。 (理想的な式については、ITU-T T.871を参照してください。[ 11 ])次の式では、各入力(R、G、B)の範囲も[0...255]の完全な8ビット範囲であることに注意してください。

そして戻る:

上記の変換は、入力が sRGB として与えられた場合の sYCCと同じですが、IEC 61966-2-1:1999/Amd1:2003 では 4 桁の小数しか与えられない点が異なります。
JPEGは、 CMYK入力用にAdobeによる「YCCK」形式も定義しています。この形式では、「K」値はそのまま渡され、CMYは、、、を仮定して上記の行列でYCbCrを導出するために用いられます。その結果、同様のサブサンプリング手法が使用可能になります。[ 12 ]


BT.470-6 システムB、G原色の係数

これらの係数は使用されていないし、使用されたこともなかった。[ 13 ]
色度に基づく輝度システム
H.273は、原色と白色点から厳密に導出される一定および非一定輝度システムも記述しているため、BT.601マトリックス(D65白色点とは異なるBT.470-6システムMから導出される)を使用するJPEGのsRGB/BT.709デフォルト原色のような状況は発生しません(ほとんどの画像の原色はBT.709です)。別の例としては、Netflixが制作でBT.2020-NCLマトリックスと共に使用したP3-D65原色があります。これは、マトリックスが原色から導出されていないことを意味しますが、現在NetflixはBT.2020原色を許可しています(2021年以降)。[ 14 ]しかし、Netflixの一般ユーザーはそのメザニンフォーマットを入手しませんでした。
数値近似
高速SIMD浮動小数点プロセッサが開発される以前は、RGB → Y′UVのデジタル実装のほとんどは整数演算、特に固定小数点近似を用いていました。近似とは、使用される数値(入力データ、出力データ、および定数値)の精度が限られていることを意味し、そのため、このオプションを使用する人は、通常、計算速度の向上とのトレードオフとして、2進数の最後の1桁程度の精度低下を許容していました。
Y′値は、通常、[0, 255](フルスイングまたは「PCレベル」と呼ばれる)の全範囲を使用するのではなく、[16, 235](スタジオスイングまたは「TVレベル」と呼ばれる)の範囲にシフトおよびスケーリングされます。この方法は、フィルタリングによる信号のオーバーシュート(「リンギング」)に対応するためにSMPTE-125Mで標準化されました。[ 15 ] U値とV値は正または負の値を持つ場合がありますが、常に正になるように128を加算し、UとVのスタジオ範囲は16~240になります。(これらの範囲はビデオ編集と制作において重要です。間違った範囲を使用すると、白黒が「クリップ」された画像、またはコントラストの低い画像が生成されます。)
BT.601の近似8ビット行列
これらの行列は、すべての因数を最も近い1/256単位に丸めます。その結果、各要素に対して16ビットの中間値が1つだけ生成され、丸めを伴う単純な右シフトで(x + 128) >> 8除算が行われます。[ 15 ]
スタジオスイングの場合:

フルスイングの場合:

GoogleのSkiaは、上記の8ビットフルレンジマトリックスを使用していました。その結果、AndroidデバイスでエンコードされたJPEG画像にわずかな緑色の効果が見られ、繰り返し保存するとより顕著になりました。この問題は2016年に修正され、より精度の高いバージョンが使用されるようになりました。libjpeg -turboのSIMD最適化により、精度の高いバージョンの方が実際には高速です。[ 16 ]
RGBファイルは通常、1ピクセルあたり8、12、16、または24ビットでエンコードされます。これらの例では、1ピクセルあたり24ビット(RGB888と表記)を想定しています。標準的なバイト形式は単に ですr0, g0, b0, r1, g1, b1, ...。
YCbCrパックピクセル形式は、しばしば「 Y′UV 」と呼ばれます。このようなファイルは、1ピクセルあたり12ビット、16ビット、または24ビットでエンコードできます。サブサンプリングに応じて、形式は主に4:2:0p、4:2:2、4:4:4と表現されます。Yの後のアポストロフィは省略されることが多く、YUV420pの後の「p」(平面を表す)も同様です。実際のファイル形式では、データがより削減されるため、4:2:0が最も一般的であり、ファイル拡張子は通常.です.YUV。データレートとサンプリング(A:B:C)の関係は、YチャンネルとUチャンネルおよびVチャンネルの比率によって定義されます。[ 17 ] [ 18 ]「YUV」の後に3つの数字が続く表記は曖昧です。この3つの数字は、サブサンプリング(「YUV420」のように)を示している可能性もあれば、各チャンネルのビット深度(「YUV565」のように)を示している可能性もあります。これらのフォーマットを明確に示す方法は、FourCCコードを使用することです。[ 19 ]
RGBからYUVへ、あるいはその逆に変換するには、RGB888と4:4:4を使用するのが最も簡単です。4:1:1、4:2:2、4:2:0の場合は、まずバイトを4:4:4に変換する必要があります。
4:4:4
YUV444は、ピクセルごとに3バイト(4ピクセルあたり12バイト)というシンプルな形式で、ピクセルのグループ化は行われません。違いは、各チャンネルに割り当てられるビット数とその配置だけです。基本的な方式では、YUV3ピクセルは次のように順序付けられますy0, u0, v0, y1, u1, v1(Cbには「u」、Crには「v」を使用します。以下のコンテンツについても同様です)。[ 19 ]コンピュータでは、 32ビットのグループの方が扱いやすいため、AYUVアルファチャンネルを追加して という形式が一般的です。 [ 17 ]a0, y0, u0, v0, a1, y1, u1, v1
4:2:2
YUY2形式YUV420は、各概念的な「コンテナ」において、2ピクセルを水平方向にグループ化し、2ピクセルあたり4バイト(4ピクセルあたり8バイト)を使用します。主な配置は2つあります。[ 18 ]
- YUY2: YUYV とも呼ばれ、 形式で実行されます
y0, u, y1, v。 - UYVY: YUY2 のバイトスワップ逆で、 の形式で実行されます
u, y0, v, y1。
4:1:1
YUV411はほとんど使用されず、ピクセルを水平方向に4つずつのグループに配置します(4ピクセルあたり6バイト)。[ 18 ]
4:2:0
YUV420(またはY′UV420p)は非常に広く使用されています。主なフォーマットはIMC2、IMC4、YV12、NV12です。[ 18 ]これら4つのフォーマットは「平面的」であり、Y、U、Vの値が点在するのではなく、グループ化されています。8ビットチャネルを想定すると、いずれも1ピクセルあたり12ビット(4ピクセルあたり6バイト)を占有します。
- IMC2 は、まず完全な画像を Y 方向にレイアウトします。次に、各彩度ラインを V 0 ... V n、 U 0 ... U nの順序で並べます。ここで、nはラインあたりの彩度サンプル数で、Y の幅の半分に等しくなります。
- IMC4 は IMC2 と似ていますが、 U 0 ... U n、 V 0 ... V nで実行されます。
- I420はよりシンプルな設計で、より一般的に使用されています。Y軸の画像全体が書き出され、続いてU軸の画像が書き出され、最後にV軸の画像全体が書き出されます。
I420レイアウト - YV12はI420と同じ基本的な設計に従っていますが、U画像とV画像の順序が反転しているだけです。[ 20 ]
- NV12は、おそらく最も一般的に使用されている8ビット4:2:0形式です。Androidカメラのプレビューではデフォルトです。 [ 21 ] Y軸の画像全体が書き出され、その後にU 0、V 0、U 1、V 1といったインターリーブされた行が続きます。
平面フォーマットには「タイル化」されたバリエーションも存在する。[ 22 ]
参考文献
外部リンク
パックピクセルのソフトウェアリソース: