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')

Figure contains an axes object. The axes object with title Gamma-Corrected vs. Linear Values contains 2 objects of type line. These objects represent sRGB, Adobe RGB (1998).

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

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)');

Figure contains 3 axes objects. Axes object 1 with title Linear RGB contains an object of type image. Axes object 2 with title sRGB contains an object of type image. Axes object 3 with title Adobe RGB (1998) contains an object of type image.

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

最小限に処理された線形 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')

Figure contains an axes object. The axes object with title Sensor Data Without sRGB Gamma Correction contains an object of type image.

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

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

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

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

Figure contains an axes object. The axes object with title Sensor Data With sRGB Gamma Correction contains an object of type image.

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

入力引数

すべて折りたたむ

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

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

  • m x n x 3 のイメージ

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

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

名前と値の引数

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

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

出力イメージの色空間。'ColorSpace' および 'srgb'、または 'adobe-rgb-1998' から構成されるコンマ区切りのペアとして指定します。

データ型: char | string

出力 RGB タイプのデータ型。'OutputType' と、'double''single''uint8'、または 'uint16' のいずれかで構成されるコンマ区切りのペアとして指定します。既定では、出力データ型は A のデータ型と同じです。

データ型: char | string

出力引数

すべて折りたたむ

ガンマ補正された 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) 三刺激値に変換するためのガンマ補正は、以下の単純なべき乗関数を使用します。

v = uɣ, u ≥ 0

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

ここで

ɣ = 1/2.19921875

参照

[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.

バージョン履歴

R2017b で導入

参考