¿Cómo estimar y aplicar la matriz de corrección de color usando una tarjeta de color de 24 bloques?
Tengo una tarjeta de color de 24 bloques y estoy tratando de estimar una matriz de corrección de color para las imágenes capturadas con dicha tarjeta de color. He estimado manualmente unCCM
utilizando laleast squares
método y no está produciendo resultados deseables. Algunas imágenes obtienen un tono extraño después de aplicarCCM
.
Revisé mi código dos veces pero no pude encontrar ningún problema técnico. Estoy buscando implementaciones basadas en opencv / matlab o de código abierto donde pueda proporcionar los valores de color capturados y los valores de color reales y pueda calcular y aplicar CCM para mí para asegurarme de que sea mi implementación la que tenga problemas o al menos El método de cuadrados no es muy efectivo.
Nota: No estoy aplicando ninguna linealización a la imagen antes de aplicar CCM. Sugiera cualquier recurso en el que esto pueda probarse rápidamente.
PD: El siguiente es el código MATLAB que estoy usando para estimar y aplicar la Matriz de corrección de color (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
así es como estoy aplicando el CCM a la imagen
[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);
Aquí están mis resultados:
Imagen corregida