, примените CCM, а затем повторно примените гамма-коррекцию с

я есть 24-цветная цветовая карта, и я пытаюсь оценить матрицу цветовой коррекции для снятых изображений с помощью указанной цветовой карты. Я вручную оценилCCM с помощьюleast squares метод, и он не дает желаемых результатов. Некоторые изображения приобретают странный оттенок после нанесенияCCM.
Я дважды проверил свой код, но не смог найти никаких глюков. Я ищу любые opencv / matlab или любые реализации с открытым исходным кодом, где я могу предоставить захваченные значения цвета и фактические значения цвета, и он может рассчитать и применить CCM для меня, чтобы убедиться, что у моей реализации есть проблемы или меньше всего Метод квадратов не очень эффективен.

Примечание: я не применяю линеаризацию к изображению перед применением CCM. Пожалуйста, предложите любые ресурсы, где это можно быстро проверить.

PS: Ниже приведен код MATLAB, который я использую для оценки и применения матрицы коррекции цвета (CCM).

% calc 3x3 correction matrix
ccm = MactAll * MrawAll' * inv(MrawAll * MrawAll') % MactAll is the 3x24 matirx of actual color card values and MrawAll is the 3x24 matrix of captured color card values

вот как я применяю СКК к изображению

[my, mx, mc] = size(imageRGB);  % rows, columns, colors (3) % 
imageRGB = reshape(imageRGB,my*mx,mc); 
correctedRGB = imageRGB*ccm;  
correctedRGB = min(correctedRGB,1);  correctedRGB = max(correctedRGB,0);  % Place limits on output.

correctedRGB = reshape(correctedRGB, my, mx, mc); 
correctedRGB = uint8(correctedRGB*255);

Вот мои результаты:

Исходное изображение

Исправленное изображение

 Ahmed04 окт. 2017 г., 12:53
@Zindarod, пожалуйста, проверьте отредактированный вопрос
 zindarod03 окт. 2017 г., 19:06
Разместите свое изображение и желаемый результат.

Ответы на вопрос(2)

https://www.informatik.hu-berlin.de/de/forschung/gebiete/viscom/thesis/final/Studienarbeit_Behringer_201308.pdf

Это также можно сделать в c ++ opencv. Вы должны определить уравнение:

 [p1' p2' ... pn' ] = M * [ p1 p2 ... pn]
         P'         = M *        P

Где p1 ', ... pn' - желаемые значения (лучше, если в цветовом пространстве XYZ), p1, ... pn - обнаруженные реальные значения, а M - матрица преобразования 3x3.

Вы можете решить эту систему следующим образом:

M = P * P'.inv(CV_SVD)

используемые при оптимизации, должны быть линейными. Сначала отмените гамма-коррекцию, позвонивrgb2lin на изображении.

Вам также нужно будет применить CCM к линейным значениям RGB. Так что отмените гамма-коррекцию в вашем изображении сrgb2lin, примените CCM, а затем повторно примените гамма-коррекцию сlin2rgb.

Ваш ответ на вопрос