Konversi RGB ke Lab. Pengolahan citra digital banyak melibatkan beberapa format warna diantaranya binary, grayscale, RGB, XYZ, Lab. Penggunaan masing-masing format warna tersebut dapat disesuaikan dengan kebutuhan yang ada. Paling sering digunakan adalam format warna RGB yang merupakan warna dasar dari 3 komponen warna yaitu red, green, dan blue. Namun ketika kita membutuhkan warna lainnya seperti Lab maka setiap format dapat di convert koq. Misalkan yang akan dibahas kali ini yaitu Konversi RGB ke Lab. Format RGB bisa kita lakukan transformasi kedalam format yang lainnya, salah satu dari tersebut ke format Lab, berikut penulis sajikan code yang dicomot dari https://www.eecs.berkeley.edu/ dalam bentuk code di matlab atau juga bisa menggunakan calculator online di http://colormine.org/convert/rgb-to-lab.
Untuk mempermudah penggunaannya, saya akan membuat sebuah function dengan nama RGB2Lab.m yang terdiri dari 3 argument input yaitu array serta output argumen
function [L,a,b] = RGB2Lab(R,G,B) % function [L, a, b] = RGB2Lab(R, G, B) % RGB2Lab takes matrices corresponding to Red, Green, and Blue, and % transforms them into CIELab. This transform is based on ITU-R % Recommendation BT.709 using the D65 white point reference. % The error in transforming RGB -> Lab -> RGB is approximately % 10^-5. RGB values can be either between 0 and 1 or between 0 and 255. % By Mark Ruzon from C code by Yossi Rubner, 23 September 1997. % Updated for MATLAB 5 28 January 1998. if (nargin == 1) B = double(R(:,:,3)); G = double(R(:,:,2)); R = double(R(:,:,1)); end if ((max(max(R)) > 1.0) | (max(max(G)) > 1.0) | (max(max(B)) > 1.0)) R = R/255; G = G/255; B = B/255; end [M, N] = size(R); s = M*N; % Set a threshold T = 0.008856; RGB = [reshape(R,1,s); reshape(G,1,s); reshape(B,1,s)]; % RGB to XYZ MAT = [0.412453 0.357580 0.180423; 0.212671 0.715160 0.072169; 0.019334 0.119193 0.950227]; XYZ = MAT * RGB; X = XYZ(1,:) / 0.950456; Y = XYZ(2,:); Z = XYZ(3,:) / 1.088754; XT = X > T; YT = Y > T; ZT = Z > T; fX = XT .* X.^(1/3) + (~XT) .* (7.787 .* X + 16/116); % Compute L Y3 = Y.^(1/3); fY = YT .* Y3 + (~YT) .* (7.787 .* Y + 16/116); L = YT .* (116 * Y3 - 16.0) + (~YT) .* (903.3 * Y); fZ = ZT .* Z.^(1/3) + (~ZT) .* (7.787 .* Z + 16/116); % Compute a and b a = 500 * (fX - fY); b = 200 * (fY - fZ); L = reshape(L, M, N); a = reshape(a, M, N); b = reshape(b, M, N); if ((nargout == 1) | (nargout == 0)) L = cat(3,L,a,b); end
Untuk penggunaanya Code untuk Konversi RGB ke Lab dengan cara memilih terlebih dahulu channel RBG pada format truecolor, oiya jangan lupa untuk menampilkan dalam format gambar diperlukan casting ke uint8(). Berikut cara penggunaan Code untuk Konversi RGB ke Lab
I = imread('gambar.jpg'); if ndim(I)==3 [L,a,b] = RGB2Lab(I(:,:,1),I(:,:,2),I(:,:,3)); %bila ingin ditampilkan dalam figure LAB(:,:,1) = uint8(L); LAB(:,:,2) = uint8(a); LAB(:,:,3) = uint8(b); figure imshow(LAB) end
Code diatas diambil dari link https://www.eecs.berkeley.edu/Research/Projects/CS/vision/bsds/code/Util/RGB2Lab.m Penjelasan mengenai Lab pada link http://www.colourphil.co.uk/lab_lch_colour_space.shtml