Main Content

lin2rgb

線形 RGB 値へのガンマ補正の適用

説明

B = lin2rgb(A) はイメージ A の線形 RGB 値にガンマ補正を適用し、B が表示に適した sRGB 色空間に含まれるようにします。

B = lin2rgb(A,Name,Value) は追加オプションを制御するために名前と値の引数を使用してガンマ補正を適用します。

すべて折りたたむ

線形値の範囲を定義します。このベクトルは、0 と 1 との間に 257 個の等間隔の点を定義します。

lin = linspace(0,1,257);

sRGB 規格に基づいて線形値にガンマ補正を適用します。その後、Adobe RGB (1998) 規格に基づいて線形値にガンマ補正を適用します。

sRGB = lin2rgb(lin);
adobeRGB = lin2rgb(lin,'ColorSpace','adobe-rgb-1998');

ガンマ補正曲線をプロットします。

figure
plot(lin,sRGB,'b',lin,adobeRGB,'r')
title('Gamma-Corrected vs. Linear Values')
legend('sRGB','Adobe RGB (1998)','Location','southeast')

他の可視化の方法としては、各色空間を表すカラー バーをプロットします。

cb_lin = ones(30,257) .* lin;
cb_sRGB = ones(30,257) .* sRGB;
cb_adobeRGB = ones(30,257) .* adobeRGB;

figure
subplot(3,1,1); imshow(cb_lin); title('Linear RGB')
subplot(3,1,2); imshow(cb_sRGB); title('sRGB');
subplot(3,1,3); imshow(cb_adobeRGB); title('Adobe RGB (1998)');

ガンマ補正された色空間は、予想どおり、線形色空間よりも迅速に明るくなります。

最小限に処理された線形 RGB 強度を含むイメージ ファイルを開きます。

A = imread('foosballraw.tiff');

イメージ データは、黒のレベルを補正し、ピクセルごとに 16 ビットにスケーリングした後の生のセンサー データです。関数demosaicを使用して、強度を内挿して色を再構成します。カラー フィルターの配列パターンは RGGB です。

A_demosaiced = demosaic(A,'rggb');

イメージを表示します。画面上に全体が表示されるようにイメージを縮小するには、オプションの初期倍率を 100 未満の値に設定します。

figure
imshow(A_demosaiced,'InitialMagnification',25)
title('Sensor Data Without sRGB Gamma Correction')

線形 RGB 色空間にあるため、イメージが暗く表示されます。sRGB 規格に従ってイメージにガンマ補正を適用し、値を倍精度で保存します。

A_sRGB = lin2rgb(A_demosaiced,'OutputType','double');

オプションの倍率を設定して、ガンマ補正後のイメージを表示します。

figure
imshow(A_sRGB,'InitialMagnification',25)
title('Sensor Data With sRGB Gamma Correction');

ガンマ補正されたイメージは、予想どおり、線形イメージよりも明るく見えます。

入力引数

すべて折りたたむ

線形 RGB カラー値。次のいずれかの形式の数値配列として指定します。

  • c 行 3 列のカラーマップ。各行が 1 つの RGB の色の値を指定します。

  • m x n x 3 のイメージ

  • m × n × 3 × p のイメージのスタック

データ型: single | double | uint8 | uint16

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

例: B = lin2rgb(I,ColorSpace="adobe-rgb-1998") は、Adobe RGB (1998) 規格に基づいてイメージ I にガンマ補正を適用します。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: B = lin2rgb(I,"ColorSpace","adobe-rgb-1998") は、Adobe RGB (1998) 規格に基づいてイメージ I にガンマ補正を適用します。

出力イメージの色空間。"srgb""adobe-rgb-1998"、または "prophoto-rgb" を指定します。

データ型: string | char

出力 RGB 値のデータ型。"double""single""uint8"、または "uint16" を指定します。既定では、出力データ型は A のデータ型と同じです。

データ型: string | char

出力引数

すべて折りたたむ

ガンマ補正された RGB イメージ。入力 A と同じサイズの数値配列として返されます。

アルゴリズム

すべて折りたたむ

sRGB 規格を使用したガンマ補正

線形 RGB 三刺激値を sRGB 三刺激値に変換するためのガンマ補正は、以下のパラメトリック曲線によって定義されます。

f(u) = -f(-u), u < 0

f(u) = c ⋅ u, 0 ≤ u < d

f(u) = a ⋅ uɣ + b, u ≥ d,

ここで u は以下のパラメーターを持つカラー値を表します。

a = 1.055

b = –0.055

c = 12.92

d = 0.0031308

ɣ = 1/2.4

Adobe RGB (1998) 規格を使用したガンマ補正

線形 RGB 三刺激値を Adobe RGB (1998) 三刺激値に変換するためのガンマ補正は、以下の単純なべき乗関数を使用します[2]

v = uɣ, u ≥ 0

v = -(-u)ɣ, u < 0,

ここで

ɣ = 1/2.19921875

ProPhoto (ROMM RGB) 規格を使用したガンマ補正

線形 RGB 三刺激値を ProPhoto 三刺激値に変換するためのガンマ補正は、以下のパラメトリック曲線によって定義されます[3]

f(u) = 0, u < 0

f(u) = u/16, 0 ≤ u < 16*Et

f(u) = u1/1.8 + b, 16*Et < u < 1,

f(u) = 1, u ≥ 1

ここで

Et = 1/512

参照

[1] Ebner, Marc. "Gamma Correction." Color Constancy. Chichester, West Sussex: John Wiley & Sons, 2007.

[2] Adobe Systems Incorporated. "Inverting the color component transfer function." Adobe RGB (1998) Color Image Encoding. Section 4.3.5.2, May 2005, p.12.

[3] ISO 22028-2:2013 Photography and graphic technology — Extended colour encodings for digital image storage, manipulation and interchange — Part 2: Reference output medium metric RGB colour image encoding (ROMM RGB). https://www.iso.org/standard/56591.html

バージョン履歴

R2017b で導入

すべて展開する

参考