Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

色補正行列を使用した色補正

この例は、Imatest® エッジ空間周波数応答 (eSFR) テスト チャートの標準的な色集合に合致するようにイメージの色を調整する方法を示します。

テスト チャート イメージからの色補正行列の取得

テスト チャートのイメージを読み取り、線形 RGB 色空間内でイメージのコピーを作成します。

I = imread("eSFRTestImage.jpg");
Ilin = rgb2lin(I);

テスト チャートに関する情報を格納する esfrChart オブジェクトを作成します。チャートを表示し、16 個のカラー パッチを強調表示します。イメージの色調は青みがかっています。

chart = esfrChart(I);
displayChart(chart,displayEdgeROIs=false, ...
    displayGrayROIs=false,displayRegistrationPoints=false)

Figure eSFR test chart contains an axes object. The axes object contains 17 objects of type image, text.

関数 measureColor を使用して、16 個のカラー パッチの色精度を測定します。この関数は、色補正の実行に使用される色補正行列も返します。

[colorTable,ccm] = measureColor(chart);

カラー パッチ ダイアグラムの測定色と基準色の比較Delta_E の値が 1 に近いほど、色差は知覚しにくくなります。

displayColorPatch(colorTable)

Figure Visual Color Comparison contains an axes object. The axes object contains 17 objects of type image, text.

テスト チャート イメージの色補正

元のテスト チャート イメージを線形 RGB 色空間内で色補正します。

Ilin_corrected = imapplymatrix(ccm(1:3,:)',Ilin,ccm(4,:));

色補正されたイメージを sRGB 色空間に変換し、結果を表示します。

I_corrected = lin2rgb(Ilin_corrected);
imshow(I_corrected)
title("Color-Corrected Image Using Color Patches")

Figure Visual Color Comparison contains an axes object. The axes object with title Color-Corrected Image Using Color Patches contains an object of type image.

色補正されたテスト チャートに関する情報を格納する esfrChart オブジェクトを作成します。sRGB 色空間内の 16 個の色補正されたカラー パッチの色精度を測定します。

chart_corrected = esfrChart(I_corrected);
colorTable_corrected = measureColor(chart_corrected);

カラー パッチ ダイアグラムの補正された色と基準色を比較します。測定される色の誤差 delta_E は、元のイメージより色補正したイメージの方が小さくなっています。したがって、このイメージの色は基準色により近くなっています。しかし、チャートには全体的に黄ばみが生じており、イメージのコントラストが低くなっています。

displayColorPatch(colorTable_corrected)

Figure Visual Color Comparison contains an axes object. The axes object contains 17 objects of type image, text.

グレー パッチを使用した色補正の改善

最小二乗近似にグレー パッチとカラー パッチを含めることによって、色補正を改善できます。元のチャートを表示し、20 個のグレー パッチと 16 個のカラー パッチを強調表示します。

displayChart(chart,displayEdgeROIs=false, ...
    displayRegistrationPoints=false)

Figure eSFR test chart contains an axes object. The axes object contains 37 objects of type image, text.

カラー パッチとグレースケール パッチの参照 L*a*b* 値を取得します。これらの値は eSFR チャート オブジェクトの ReferenceColorLab および ReferenceGrayLab プロパティに格納されます。これらの値を sRGB 色空間から線形 RGB 色空間に変換します。

referenceLab = [chart.ReferenceColorLab; chart.ReferenceGrayLab];
referenceRGB = lab2rgb(referenceLab,outputtype="uint8",ColorSpace="linear-rgb");

関数measureNoiseを使用して、sRGB 色空間内の 20 個のグレー パッチそれぞれについて平均濃淡値を測定します。

noiseTable = measureNoise(chart);
measuredGrayRGB = [noiseTable.MeanIntensity_R, ...
    noiseTable.MeanIntensity_G, ...
    noiseTable.MeanIntensity_B];

カラー パッチとグレースケール パッチの測定されたすべての sRGB カラー値を連結し、カラー値を線形 RGB 色空間に変換します。

measuredColorRGB = [colorTable.Measured_R, ...
    colorTable.Measured_G, ...
    colorTable.Measured_B];
measuredRGB = [measuredColorRGB; measuredGrayRGB];
measuredRGB = rgb2lin(measuredRGB);

色補正行列を計算します。

ccmWithGray = double([measuredRGB ones(36,1)]) \ double(referenceRGB);

色補正を実行して結果を表示します。チャートには黄ばみがなくなり、チャートの全体的な外観が改善されています。

Ilin_correctedWithGray = imapplymatrix(ccmWithGray(1:3,:)',Ilin,ccmWithGray(4,:)');
I_correctedWithGray = lin2rgb(Ilin_correctedWithGray);
imshow(I_correctedWithGray)
title("Color-Corrected Image Using Gray and Color Patches")

Figure eSFR test chart contains an axes object. The axes object with title Color-Corrected Image Using Gray and Color Patches contains an object of type image.

カラー パッチ ダイアグラムの補正された色と基準色を比較します。測定される色により、誤差が減少している場合と増加している場合があります。

chart_correctedWithGray = esfrChart(I_correctedWithGray);
colorTable_correctedWithGray = measureColor(chart_correctedWithGray);
displayColorPatch(colorTable_correctedWithGray)

Figure Visual Color Comparison contains an axes object. The axes object contains 17 objects of type image, text.

参照

参考

| | |

関連するトピック