Como estimar e aplicar a matriz de correção de cores usando um cartão de cores de 24 blocos?

Eu tenho um cartão colorido de 24 blocos e estou tentando estimar uma matriz de correção de cores para as imagens capturadas com o referido cartão colorido. Estimei manualmente umCCM usando oleast squares método e não está produzindo resultados desejáveis. Algumas imagens ficam com um tom estranho após a aplicaçãoCCM.
Eu verifiquei meu código duas vezes, mas não consegui encontrar nenhuma falha. Estou procurando por quaisquer implementações baseadas em opencv / matlab ou qualquer fonte aberta em que eu possa fornecer os valores de cores capturados e os valores de cores reais, e ele possa calcular e aplicar o CCM para ter certeza de que é a minha implementação que tem problemas ou menos o método dos quadrados não é muito eficaz.

Nota: Não estou aplicando nenhuma linearização à imagem antes de aplicar o CCM. Por favor, sugira quaisquer recursos onde isso possa ser testado rapidamente.

PS: A seguir está o código MATLAB que estou usando para estimar e aplicar a Matriz de correção de cores (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

aqui está como eu estou aplicando o CCM à imagem

[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);

Aqui estão meus resultados:

Imagem original

Imagem corrigida

questionAnswers(2)

yourAnswerToTheQuestion