このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
色補正行列を使用した色補正
この例は、Imatest® エッジ空間周波数応答 (eSFR) テスト チャートの標準的な色集合に合致するようにイメージの色を調整する方法を示します。
テスト チャート イメージからの色補正行列の取得
テスト チャートのイメージを読み取り、線形 RGB 色空間内でイメージのコピーを作成します。
I = imread("eSFRTestImage.jpg");
Ilin = rgb2lin(I);
テスト チャートに関する情報を格納する esfrChart
オブジェクトを作成します。チャートを表示し、16 個のカラー パッチを強調表示します。イメージの色調は青みがかっています。
chart = esfrChart(I);
displayChart(chart,displayEdgeROIs=false, ...
displayGrayROIs=false,displayRegistrationPoints=false)
関数 measureColor
を使用して、16 個のカラー パッチの色精度を測定します。この関数は、色補正の実行に使用される色補正行列も返します。
[colorTable,ccm] = measureColor(chart);
カラー パッチ ダイアグラムの測定色と基準色の比較Delta_E
の値が 1 に近いほど、色差は知覚しにくくなります。
displayColorPatch(colorTable)
テスト チャート イメージの色補正
元のテスト チャート イメージを線形 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")
色補正されたテスト チャートに関する情報を格納する esfrChart
オブジェクトを作成します。sRGB 色空間内の 16 個の色補正されたカラー パッチの色精度を測定します。
chart_corrected = esfrChart(I_corrected); colorTable_corrected = measureColor(chart_corrected);
カラー パッチ ダイアグラムの補正された色と基準色を比較します。測定される色の誤差 delta_E
は、元のイメージより色補正したイメージの方が小さくなっています。したがって、このイメージの色は基準色により近くなっています。しかし、チャートには全体的に黄ばみが生じており、イメージのコントラストが低くなっています。
displayColorPatch(colorTable_corrected)
グレー パッチを使用した色補正の改善
最小二乗近似にグレー パッチとカラー パッチを含めることによって、色補正を改善できます。元のチャートを表示し、20 個のグレー パッチと 16 個のカラー パッチを強調表示します。
displayChart(chart,displayEdgeROIs=false, ...
displayRegistrationPoints=false)
カラー パッチとグレースケール パッチの参照 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")
カラー パッチ ダイアグラムの補正された色と基準色を比較します。測定される色により、誤差が減少している場合と増加している場合があります。
chart_correctedWithGray = esfrChart(I_correctedWithGray); colorTable_correctedWithGray = measureColor(chart_correctedWithGray); displayColorPatch(colorTable_correctedWithGray)
参照
[1] Imatest®. "Esfr". https://www.imatest.com/mathworks/esfr/.
参考
esfrChart
| measureColor
| displayColorPatch
| plotChromaticity