sRGB(標準RGB)は、モニター、プリンター、ワールドワイドウェブで使用されるカラースペースです。 1996年にHPとMicrosoftによって最初に提案され[ 2 ] 、国際電気標準会議(IEC)の公式規格であるIEC 61966-2-1:1999となりました[ 1 ] 。これは現在ウェブの標準カラースペースであり、カラープロファイルが埋め込まれていない画像では通常、想定されるカラースペースです。
sRGB規格は、 HDTV用のITU-R BT.709規格と同じ原色と白色点を使用しますが[ 3 ]、当時のCRTディスプレイと互換性のある異なる伝達関数(またはガンマ)を使用し[ 4 ]、一般的な家庭やオフィスでの視聴環境に近い視聴環境を想定しています。PCビデオカードとCRTディスプレイの動作を一致させることで、sRGBの人気が大幅に高まりました。
1970年代までに、ほとんどのコンピュータは8ビットのデジタルデータをビデオモニターに送られる信号にほぼ線形に変換していました。しかし、ビデオモニターやテレビは入力信号に対して線形ではなく、おおよそ2から3の間の指数を持つべき乗則に従う明るさを生成していました。この指数は一般的に文字で表されていました。そのため、この機能は「ガンマ補正」という通称で呼ばれています。この設計では、デジタル値を黒に近い部分でより近づけ、白に近い部分(明るさの変化が目立ちにくい部分)でより離すため、視覚的なアーティファクトがはるかに少ない画像を表示できるという利点があります。このガンマはCRTメーカーによって異なりましたが、1993年にITU BT.709規格としてHDTVシステムで使用するために標準化されました。[ 5 ] BT.709規格では、ゼロ付近に線形セクションがあり、指数1/0.45 ≈ 2.22...のシフトされたべき乗則に移行するOETFが規定されています。[ 6 ]
sRGBは数年後にヒューレット・パッカードとマイクロソフトによって作成されました。これは当時Windowsオペレーティングシステムで使用されていたほとんどのCRTコンピュータモニターのデコード機能を記述することを目的としており、BT.709で想定されていたものとはまだ異なっていました。 [ 7 ]標準の最初のドラフト[ 2 ]は1996年に公開されました。まだ未完成の第4ドラフトがオンラインで入手可能です。[ 8 ] BT.709と同様に、sRGB OETFはゼロ付近の線形セクションとして定義され、シフトしたべき乗則に移行します。[ 9 ] [ 10 ]標準ではEOTFをベールグレア項付きの2.2純粋ガンマとして指定していますが、グレアはディスプレイの特性であり、デジタル信号に手動で追加すべきではありません。
実際、sRGB規格を使用することが重要になったのは、1990年代後半にコンピュータグラフィックスソフトウェアが線形光レベルで計算を開始し、一般的な8ビット画像規格との間で変換するためにsRGBを使用する必要が生じたためである。

ここに示したような画像は、CRTモニターをsRGBを正しく表示するように調整する際に広く用いられるようになった。
2003年に承認されたIEC 61966-2-1:1999の改正1では、sYCCと呼ばれるYCbCrエンコーディングと、 bg-sRGBと呼ばれる8ビットを超える変換も定義されています。scRGB規格もまた、 sRGBをより多くのビットに拡張しようとしています。

sRGB画像ファイルには、各ピクセルに対応するR′G′B′値が含まれています。0.0は「黒」、 1.0は「白」に必要な原色の強度を表します。これらの浮動小数点値はファイルデータから生成され、一般的な8ビット/チャンネル画像の場合、バイト数は255.0で割られます。
これらの値から強度へのマッピングは非線形伝達関数であり、低輝度値での線形関数と、残りの範囲での変位したべき乗則の組み合わせです。線形強度RGBは、(すべてのチャネルで同じ) を使用して導出されます。[ 11 ]
この関数は。ただし、0.04045 付近の低い値では、その違いは知覚できます。線形部分がない場合、8 ビットの深度では、最も暗い約 20 レベルはすべて、線形光の非常に小さな変化にマッピングされ、丸め後にはディスプレイが区別できない違いになります。[ 4 ] [ 12 ]線形セクションは、純粋な 0.45 乗関数の場合よりも小さな信号を暗くすることで、EOTF のビューイング グレア項も補償します。[ 13 ]
IEC規格で定義されている逆OETFはEOTFには使用されません。[ 11 ]
ファイル形式によっては、1.0より大きい値を使用することもできます(結果も1.0より大きくなります)。また、0.0より小さい値は-f ( -x )のように変換できます。[ 11 ]
これらの関数は BT.709 の関数と似ていますが、値は明らかに異なります。[ 4 ]パラメータの丸めのため、線形部分と非線形部分の間の遷移で 10⁻⁸ 程度の小さな不連続性があり、互いに正確な逆関数ではありません。これらの誤差は、実際の状況では問題にならないほど小さいです。[ 14 ] 実際には、多くのソフトウェアが異なる近い値を使用するか (下記参照)、線形セクションを無視するか、単純な 2.2 ガンマ関数を使用します。画像の変化はほとんど知覚できませんが、異なる変換画像が重なると目立つ継ぎ目ができ、不一致の変換が前後に蓄積されて色ずれが生じます。[ 15 ]多くのオペレーティングシステムとプログラムは、8 ビット sRGB 画像をビデオ メモリに直接送信し、これが正しいレベルを生成すると想定しています。[ 12 ]
(1,1)を通るシフトされたべき乗則曲線は。
点(0,0)を通る直線は線形部分からべき乗則部分への移行は、連続的(急激な変化がない)かつ滑らか(急激な傾きの変化がない)でなければならない。[ 7 ] x = Xのときに連続にするには、
2つの線分が交わる点で勾配が急激に変化しないようにするには、Xにおいても導関数が等しくなければならない。
XとAに関する2つの方程式を解くと、
sRGB規格の最初の草案では、そして計算した[ 2 ]では、近くにこれにより、そしてこれらの値は、示されているように5桁に丸められていますが、一部の出版物では依然として誤って記載されています。[ 16 ]
しかし、sRGBドラフト規格は丸められたに、[ 2 ]曲線に小さな不連続が生じる。
規格の最初の公式バージョンは、1999 年に IEC によって定義され、公開されました。このバージョンでは、丸められた値は保持されたが、ブレークポイント再定義されました曲線をほぼ連続にするため。これらの値では、傾きにまだ不連続性があり、交差点のすぐ下からそのすぐ上に。最終規格では、草案にあったいくつかの小さな丸め誤差も修正された。[ 2 ]
sRGB規格は、赤、緑、青の原色、つまり3つのチャンネルのうち1つがゼロ以外で、残りの2つがゼロである色を定義します。sRGBで表現できる色域は、これらの原色によって定義される色の三角形であり、三角形内の色の範囲が、正常な三色覚を持つ人間が認識できる色の範囲に十分に収まるように設定されています。他のRGBカラースペースと同様に、 R、G、Bの値が負でない場合、この三角形の外側の色を表現することはできません。
原色はHDTV(Rec. 709 )のもので、旧式のカラーテレビシステム( Rec. 601 )のものとは少し異なります。これらの値は、当時の民生用CRT蛍光体の色を近似するために選ばれました。[ 1 ]
sRGB 規格は、2°標準測色観測者を使用して線形値をCIE XYZ知覚色座標に変換する行列を提供することで色を規定します[ 17 ]。[ 2 ] [ 18 ]この行列は BT.709 規格[ 11 ]で規定されているものと同じであり、これらの 4 桁の係数は正確であると考える必要があります。[ 1 ]
CIE XYZから(線形) RGBへの逆変換は、上記の行列を適切な数値精度で反転することによって得られます。1999年の規格では、4桁の小数点以下の精度を持つ行列が提供されています(8ビットサンプルには十分です)。
1999年のIEC規格は2003年に改訂され[ 11 ]、サンプルマトリックスが16ビットサンプルに十分な7桁の10進小数部を持つように更新されました。
これらの式では、D65 (「白」)のYが1.0になるようにX、Y、Zの値をスケーリングする必要があります( X = 0.9505、Y = 1.0000、Z = 1.0890)。これは通常正しいのですが、一部の色空間では100やその他の値を使用します(例えば、 CIELABで指定された白色点を使用する場合など)。

sRGB仕様は、周囲の相関色温度(CCT)が5003Kの薄暗いエンコード(作成)環境を想定しています。
想定される周囲の色温度は、画面の白色点に引き続き使用されるBT.709標準光源(D65 )とは異なります。両方にD50を使用すると、ほとんどの印画紙の白色点が過度に青く見えてしまいます。[ 19 ] [ 20 ]輝度レベルなどの他のパラメータは、一般的なCRTモニターを代表するものです。
最適な結果を得るために、ICCは、より緩やかな通常の視聴環境ではなく、エンコード視聴環境(つまり、暗く拡散した照明)を使用することを推奨しています。[ 21 ]
sRGB値がHDMIなどを介してディスプレイに送信される際、グレアオフセットを追加したり、ソフトウェアで補正したりする必要はありません。ディスプレイと視聴環境によって、この小さなフレアが自然に発生します。
sRGBを使用するほとんどのファイル形式は、8ビット整数を保存します。通常、これらの整数は255.0で割って8ビットから変換され、255を掛けて四捨五入することで8ビットに変換されます。ただし、一部のソフトウェアは256を掛けて切り捨てることで8ビットに変換します。高品質のソフトウェアは、カラーバンディングを隠すために、書き込み時にディザリングを使用することがよくあります。
sRGB規格の2003年改訂版の付属書Gでは、bg-sRGBと呼ばれる代替カラー値エンコーディングについて説明されており、これはチャンネルあたりのビット数が10以上の場合に推奨されます。この場合、0.0は黒点Kに、1.0は白点Wにマッピングされ、その他の値はすべて線形的に解釈されます。10ビットの場合、 K = 384、W = 894が指定され、より大きなビット数Nの場合、次のようになります。
12ビットscRGBフォーマットも同様で、K = 1024、W = 2304です。
1.0より大きい数値を許可すると、高ダイナミックレンジの画像が得られ、負の数値を許可すると、色域三角形の外の色が得られます。[ 11 ]

インターネット、コンピュータ、プリンタにおけるsRGBの標準化により、多くの低価格から中価格帯の民生用デジタルカメラやスキャナは、デフォルト(または唯一利用可能な)作業カラースペースとしてsRGBを使用しています。 [ 22 ]画像の色空間が不明で、各チャンネルに8ビットでエンコードされている場合は、sRGBエンコードであると想定できます。プログラマが「ガンマ」の意味を誤解しているため、ガンマが1.0であると主張する画像ファイルもsRGBであると想定する必要があります。
sRGBの色域は、低価格のインクジェットプリンターの色域とほぼ同等かそれ以上であるため、sRGB画像は家庭用印刷には十分であるとみなされることが多い。しかし、sRGB色空間は、特に青緑色の色域において、CMYK印刷で再現可能なすべての色を網羅するには色域が十分ではないため、ハイエンドの印刷出版専門家によって敬遠されることがある。完全なカラーマネジメントワークフロー(プリプレス出力など)によるプロフェッショナル印刷を目的とした画像では、Adobe RGB(1998)などの別の色空間が使用されることがある。Adobe RGBは、Fogra39のようなCMYK色空間よりも広い色域に対応している。
3Dグラフィックスの主要なプログラミングインターフェースであるOpenGLとDirect3Dは、どちらもsRGBガンマカーブのサポートを組み込んでいます。OpenGLは、sRGBガンマエンコードされたカラーコンポーネントを持つテクスチャ(EXT_texture_sRGB拡張機能で初めて導入され、 OpenGL 2.1でコアに追加されました[ 23 ] )と、sRGBガンマエンコードされたフレームバッファへのレンダリング(EXT_framebuffer_sRGB拡張機能で初めて導入され、OpenGL 3.0でコアに追加されました[ 24 ] )をサポートしています。sRGBガンマテクスチャの正しいミップマッピングと補間は、最新のGPUのテクスチャリングユニットで直接ハードウェアサポートされており(たとえば、nVidia GeForce 8は、8ビットテクスチャから線形値に変換してからそれらの値を補間します)、パフォーマンスの低下はありません。[ 25 ]
ルックアップテーブルを使用すると、sRGB を他の色空間に効率的に変換できます。国際カラーコンソーシアム(ICC) はこの目的のためにカラープロファイルを公開しており、広く使用されています。[ 21 ] [ 18 ]いくつかのバリアントがあり、[ 26 ] ICCmax 、バージョン 4、バージョン 2などがあります。
バージョン4が一般的に推奨されていますが、バージョン2も依然として広く使用されており、ブラウザを含む他のソフトウェアとの互換性が最も高いです。[ 27 ]ただし、これらのICCプロファイルとIEC sRGB規格の間には矛盾が指摘されています。[ 28 ]特に、ICCプロファイル仕様のバージョン2は、IEC sRGB規格で指定されている区分的パラメトリック曲線エンコーディング(「para」)を実装しておらず、[ 29 ] 1次元ルックアップテーブルを使用してsRGB伝達関数を実装する必要があります。[ 26 ]一部の実装では、伝達関数を線形部分のない2.2ガンマとして近似しており、「簡略化されたsRGB」と呼ばれています。[ 30 ]
エンコーディングの実効指数は 0.5 です。