Buku Pengolahan Citra Digital dengan Matlab-Code untuk Konversi RGB ke Lab

Print Friendly, PDF & Email

Sinopsis

Ada banyak format gambar yang digunakan diantaranya binary, grayscale, RGB, XYZ, Lab. Setiap format dapat di convert koq. Misalkan yang akan dibahas kali ini yaitu mengubah format RGB to 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. Berikut Code untuk Konversi RGB ke Lab yang bisa kalian simpan dalam bentuk function RGB2Lab.m

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

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *

+ 27 = 28