Правильные цвета Используя матрицу коррекции цвета

Этот пример показывает, как настроить цвета изображения, чтобы лучше совпадать со стандартизированным набором цветов на тестовом графике ребра пространственной частотной характеристики (eSFR) Imatest®.

Получите матрицу коррекции цвета из тестового изображения графика

Считайте изображение тестового графика.

I = imread('eSFRTestImage.jpg'); 

Создайте объект esfrChart, который хранит информацию о тестовом графике. Отобразите график, подсветив эти 16 цветовых полей. Изображение имеет синий оттенок.

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

Измерьте точность цветопередачи этих 16 цветовых полей при помощи функции measureColor. Функция также возвращает матрицу коррекции цвета, которая используется, чтобы выполнить коррекцию цвета.

[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* значения цветных и полутоновых закрашенных фигур, которые хранятся в свойствах ReferenceColorLab и ReferenceGrayLab eSFR объекта диаграммы. Преобразуйте эти значения в цветовое пространство RGB.

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

Измерьте средний уровень яркости в каждой из 20 серых закрашенных фигур при помощи функции measureNoise.

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)

Смотрите также

| | |

Похожие темы