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 corrigida