色空間の変換(LabからsRGB)

色空間の変換(RGBからLab)をまだご覧になっていないかたは、先にそちらをご覧ください。

Labの値をRGB(厳密にはSRGB)に変換するプログラムです。

Lab空間の光源としてD50を、SRGB空間の光源としてD65を想定しています。

それ以外の光源の場合には値を変更する必要がありますのでご注意ください。

サンプルデータをページの末尾からダウンロードできます。各行がLabのデータに相当します。

dataFileName = 'LabData.csv'; % Labのカンマ区切りのデータ(各行に、Lstar, astar, bstarと並んでいる)
colData = csvread(dataFileName); % CSVファイルから読み取り
illuminant = transpose([0.96422 1.00000 0.82521]); % D50(Labの標準の光源)
XYZdata = LabToXYZ(transpose(colData), illuminant);
bradfordData = [ % D50 -> D65(SRGBの光源)
    0.9555766 -0.0230393  0.0631636
    -0.0282895  1.0099416  0.0210077
    0.0122982 -0.0204830  1.3299098];
XYZdata = bradfordData * XYZdata;
origSRGB = XYZToSRGBPrimary(XYZdata); % XYZ空間からSRGBに変換
sRGB = SRGBGammaCorrect(origSRGB, 0); % ガンマ補正(SCALEを0にしました。2017.10.5)
[pathstr, fileName, exqt] = fileparts(dataFileName); % 拡張子を取り除いたファイル名を取得。
csvwrite([fileName '-SRGB.csv'], transpose(sRGB));