色彩转换——RGB & HSL
2014-04-15 19:33
387 查看
RGB to HSL
The R,G,B values are divided by 255 to change the range from 0..255 to0..1:
R' = R/255
G' = G/255
B' = B/255
Cmax = max(R', G', B')
Cmin = min(R', G', B')
Δ = Cmax - Cmin
Hue calculation:
Saturation calculation:
Lightness calculation:
L = (Cmax + Cmin) / 2
HSL to RGB
When 0 ≤ H < 360, 0 ≤ S ≤ 1 and 0 ≤ L ≤ 1:C = (1 - |2L - 1|) × S
X = C × (1 - |(H / 60º) mod 2 - 1|)
m = L - C/2
(R,G,B) = (R'+m, G'+m, B'+m)
算法参考来源:http://www.rapidtables.com/convert/color/index.htm
Code:
RGB TO HSL
function [H,S,L]=RgbToHsl(Image_Input)
Image_Input=double(Image_Input)/255;
R_Input=Image_Input(:,:,1);
G_Input=Image_Input(:,:,2);
B_Input=Image_Input(:,:,3);
[heigth,width]=size(R_Input);
S(1:heigth,1:width)=0;
H(1:heigth,1:width)=0;
L(1:heigth,1:width)=0;
for i=1:heigth
for j=1:width
temp=[R_Input(i,j),G_Input(i,j),B_Input(i,j)];
Max_value=max(temp);
Min_value=min(temp);
C_value=Max_value-Min_value;
L(i,j)=(Max_value+Min_value)/2;
if(C_value==0)
S(i,j)=0;
else
S(i,j)=C_value/(1-abs(2*L(i,j)-1));
end
X=R_Input(i,j);
Y=G_Input(i,j);
Z=B_Input(i,j);
if(C_value==0)
continue;
end
if(Max_value==X)
H(i,j)=mod((Y-Z)/C_value,6);
elseif(Max_value==Y)
H(i,j)=(Z-X)/C_value+2;
else
H(i,j)=(X-Y)/C_value+4;
end
H(i,j)=H(i,j)/6;
end
end
HSL to RGB
function Image_out=HslToRgb(H,S,L)
%% H(0,1),S(0,1),L(0,1)
[height,width]=size(H);
R(1:height,1:width)=0;
G(1:height,1:width)=0;
B(1:height,1:width)=0;
for i=1:height
for j=1:width
C=(1-abs(2*L(i,j)-1))*S(i,j);
X=C*(1-abs(mod(H(i,j)*6,2)-1));
m=L(i,j)-C/2;
temp=floor(H(i,j)*6+1);
switch(temp)
case 1
R(i,j)=C+m;
G(i,j)=X+m;
B(i,j)=m;
case 2
R(i,j)=X+m;
G(i,j)=C+m;
B(i,j)=m;
case 3
R(i,j)=m;
G(i,j)=C+m;
B(i,j)=X+m;
case 4
R(i,j)=m;
G(i,j)=X+m;
B(i,j)=C+m;
case 5
R(i,j)=X+m;
G(i,j)=m;
B(i,j)=C+m;
case 6
R(i,j)=C+m;
G(i,j)=m;
B(i,j)=X+m;
end
end
end
Image_out(:,:,1)=R;
Image_out(:,:,2)=G;
Image_out(:,:,3)=B;
相关文章推荐
- 色彩转换——RGB & HSL
- RGB和HSL色彩的相互转换
- RGB和HSL色彩的相互转换
- 色彩转换——RGB & HSV
- 色彩转换——RGB & HSI
- YUV色彩模型 & YUV与RGB的转换公式 & YUV420的存储格式
- 色彩转换——RGB & HSV
- 色彩转换——RGB & HSI
- RGB和HSL色彩的相互转换
- RGB和HSL色彩的相互转换
- 颜色空间RGB与HSV(HSL)的转换
- Atitit rgb yuv hsv HSL 模式和 HSV(HSB) 图像色彩空间的区别
- » RGB与HSV(HSB)的转换公式 mybeky’s blog
- C# RGB颜色与HSL颜色相互转换和应用
- RGB和HSL颜色转换
- 基于OpenCV的RGB和HSV色彩空间相互转换C++程序
- RGB、HSB、HSL 互相转换算法
- RGB、HSB\HSV、HSL三种颜色空间的原理理解与转换
- 【shaderforge学习笔记】 RGB to HSV、HSV to RGB节点(色彩空间转换节点)
- 颜色空间RGB 与 HSL 空间转换代码