El código para la conversión de RGB a CIE LAB y viceversa está disponible gratuitamente en C, MATLAB, python y muchos otros formatos.
Realicemos ingeniería inversa del script MATLAB en Matlab Central para ver cómo ocurre la conversión.
Los valores RGB (0 a 255) se normalizan primero al rango de 0 a 1.
- ¿Siempre te gustó y sobresaliste en matemáticas?
- ¿Cuál es la intuición detrás de la conjugación de radicales en matemáticas?
- ¿Cuál es el significado del teorema de Artin-Wedderburn?
- ¿Cómo se encuentra la longitud de la curva descrita por las ecuaciones paramétricas [matemáticas] x = e ^ t \ sen t [/ matemáticas] y [matemáticas] y = e ^ t \ cos t [/ matemáticas] para [matemáticas] 0 \ le t \ le \ pi [/ math]?
- ¿Cuál es la historia de las matemáticas védicas?
A continuación, se usa una matriz de transformación para convertir RGB a XYZ.
La matriz de transformación está disponible en el código adjunto a continuación.
A continuación, los valores XYZ se normalizan al punto blanco D65.
Estos valores normalizados se comparan con un umbral preestablecido.
A continuación, estos valores intermedios se convierten en sus homólogos LAB utilizando la expresión dada en el código a continuación.
Los valores LAB se ordenan finalmente en una matriz cuadrada.
El script MATLAB (por Mark Ruzon) se adjunta a continuación como referencia.
función [L, a, b] = RGB2Lab (R, G, B) % RGB2LAB Convierte una imagen de RGB a CIELAB % % función [L, a, b] = RGB2Lab (R, G, B) % función [L, a, b] = RGB2Lab (I) % función I = RGB2Lab (...) % % RGB2Lab toma matrices rojas, verdes y azules, o una sola imagen M x N x 3, % y devuelve una imagen en el espacio de color CIELAB. Los valores RGB pueden ser % entre 0 y 1 o entre 0 y 255. Los valores para L están en el % rango [0,100] mientras que ayb están aproximadamente en el rango [-110,110]. los El% de salida es de tipo doble. % % Esta transformación se basa en la Recomendación UIT-R BT.709 utilizando el D65 % de referencia de punto blanco. El error al transformar RGB -> Lab -> RGB es % aproximadamente 10 ^ -5. % % Ver también LAB2RGB. % Por Mark Ruzon del código C por Yossi Rubner, 23 de septiembre de 1997. % Actualizado para MATLAB 5 el 28 de enero de 1998. % Actualizado para MATLAB 7 30 de marzo de 2009. si nargin == 1 B = doble (R (:,:, 3)); G = doble (R (:,:, 2)); R = doble (R (:,:, 1)); final si max (max (R))> 1.0 || max (max (G))> 1.0 || max (max (B))> 1.0 R = doble (R) / 255; G = doble (G) / 255; B = doble (B) / 255; final % Establecer un umbral T = 0,008856; [M, N] = tamaño (R); s = M * N; RGB = [remodelar (R, 1, s); remodelar (G, 1, s); remodelar (B, 1, s)]; % RGB a XYZ MAT = [0.412453 0.357580 0.180423; 0.212671 0.715160 0.072169; 0,019334 0,119193 0,950227]; XYZ = MAT * RGB; % Normalizar para el punto blanco D65 X = XYZ (1, :) / 0.950456; Y = XYZ (2, :); Z = XYZ (3, :) / 1.088754; XT = X> T; YT = Y> T; ZT = Z> T; Y3 = Y. ^ (1/3); fX = XT. * X. ^ (1/3) + (~ XT). * (7.787. * X + 16/116); fY = YT. * Y3 + (~ YT). * (7.787. * Y + 16/116); fZ = ZT. * Z. ^ (1/3) + (~ ZT). * (7.787. * Z + 16/116); L = remodelar (YT. * (116 * Y3 - 16.0) + (~ YT). * (903.3 * Y), M, N); a = remodelar (500 * (fX - fY), M, N); b = remodelar (200 * (fY - fZ), M, N); si nargout <2 L = gato (3, L, a, b); final