使用颜色校正矩阵校正颜色
此示例显示如何调整图像的颜色,以更好地匹配控件上的标准化颜色集实践上®边缘空间频率响应(eSFR)测试图。
从测试图表图像中获取颜色校正矩阵
阅读测试图表的图像。
I = imread(“eSFRTestImage.jpg”);
创建一个esfrChart
对象,该对象存储有关测试图表的信息。显示图表,突出显示16个颜色补丁。图像有蓝色的色调。
图表= esfrChart(I);displayChart(图表,“displayEdgeROIs”假的,...“displayGrayROIs”假的,“displayRegistrationPoints”假)
测量16个色块的颜色精度measureColor
函数。该函数还返回用于执行颜色校正的颜色校正矩阵。
[colorTable,ccm] = measureColor(图表);
在色块图上比较测量色和参考色。越接近Delta_E
值为1时,色差越不明显。
displayColorPatch (colorTable)
对测试图表图像进行颜色校正
对原始测试图表图像进行颜色校正并显示结果。
I_cc = imapplymatrix(ccm(1:3,:)',I,ccm(4,:)));imshow (I_cc)标题(“使用色块进行颜色校正的图像”)
创建一个esfrChart
对象,该对象存储有关颜色校正测试图表的信息。测量16个颜色校正色块的颜色精度。
chart_cc = esfrChart(I_cc);colorTable_cc = measureColor(chart_cc);
在色块图上比较校正色和参考色。测量的颜色误差,delta_E
,颜色校正后的图像比原始图像要小。因此,这幅图中的颜色与参考色的一致性更好。然而,图表现在有一个整体黄色色调和图像的对比度下降。
displayColorPatch (colorTable_cc)
使用灰色补丁改进颜色校正
您可以通过包括灰色补丁以及最小二乘匹配的颜色补丁来改进颜色校正。显示原始图表,突出显示20个灰色补丁和16个彩色补丁。
displayChart(图表,“displayEdgeROIs”假的,...“displayRegistrationPoints”假)
获取颜色和灰度补丁的参考L*a*b*值,这些值存储在ReferenceColorLab
而且ReferenceGrayLab
eSFR图表对象的属性。将这些值转换为RGB颜色空间。
referenceLab = [chart.ReferenceColorLab;chart.ReferenceGrayLab];referenceRGB = lab2rgb(referenceLab,“outputtype”,“uint8”);
方法测量20个灰色斑块中的平均灰度值measureNoise
函数。
noiseTable = measureNoise(图表);measuredGrayRGB =[噪声表。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)”,我,ccm_cc (4:) ');imshow (I_cc2)标题(“使用灰色和色块进行颜色校正的图像”)
在色块图上比较校正色和参考色。测量的颜色误差有的减小了,有的增大了。
chart_cc2 = esfrChart(I_cc2);colorTable_cc2 = measureColor(chart_cc2);displayColorPatch (colorTable_cc2)
参考文献
[1]实践上®.“Esfr”。https://www.imatest.com/mathworks/esfr/.
另请参阅
esfrChart
|measureColor
|displayColorPatch
|plotChromaticity