Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

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

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

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

テスト チャートのイメージを読み取ります。

I = imread('eSFRTestImage.jpg'); 

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

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

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

[colorTable,ccm] = measureColor(chart);

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

displayColorPatch(colorTable)

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

元のテスト チャート イメージを色補正し、結果を表示します。

I_cc = imapplymatrix(ccm(1:3,:)',I,ccm(4,:));
imshow(I_cc)
title('Color-Corrected Image Using Color Patches')

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

chart_cc = esfrChart(I_cc);
colorTable_cc = measureColor(chart_cc);

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

displayColorPatch(colorTable_cc)

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

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

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

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

referenceLab = [chart.ReferenceColorLab; chart.ReferenceGrayLab];
referenceRGB = lab2rgb(referenceLab,'outputtype','uint8');

関数 measureNoise を使用して、20 個の各グレー パッチで平均濃淡値を測定します。

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

カラー パッチとグレースケール パッチの測定されたすべての RGB カラー値を連結します。

measuredColorRGB = [colorTable.Measured_R, ...
    colorTable.Measured_G, ...
    colorTable.Measured_B];
measuredRGB = [measuredColorRGB; measuredGrayRGB];
ccm_cc = double([measuredRGB ones(36,1)]) \ double(referenceRGB);

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

I_cc2 = imapplymatrix(ccm_cc(1:3,:)',I,ccm_cc(4,:)');
imshow(I_cc2)
title('Color-Corrected Image Using Gray and Color Patches')

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

chart_cc2 = esfrChart(I_cc2);
colorTable_cc2 = measureColor(chart_cc2);
displayColorPatch(colorTable_cc2)

参照

参考

| | |

関連するトピック