RGB<->HSV(HSB):
rgb2hsv,hsv2rgb
RGB<->(HSL)
1. RGB→HSL的算法描述
步骤1: 把RGB值转换成[0,1]中数值
例:R=0.83, G=0.07, B=0.07
步骤2: 找出R, G和B中的最大值
本例中,maxcolor = 0.83, mincolor=0.07
步骤3: L = (maxcolor + mincolor)/2
本例中,L = (0.83+0.07)/2 =0.45
步骤4: 如果最大和最小的颜色值相同,即表示灰色,那么S定义为0,而H未定义并在程序中通常写成0。
步骤5: 否则, 测试L:
If L < 0.5, S=(maxcolor-mincolor)/(maxcolor+mincolor)
If L >=0.5, S=(maxcolor-mincolor)/(2.0-maxcolor-mincolor)
本例中,L=0.45,因此,S=(0.83-0.07)/(0.83+0.07) = 0.84
步骤6: If R=maxcolor, H = (G-B)/(maxcolor-mincolor)
If G=maxcolor, H = 2.0 + (B-R)/(maxcolor-mincolor)
If B=maxcolor, H = 4.0 + (R-G)/(maxcolor-mincolor)
本例中,R=maxcolor,所以H = (0.07-0.07)/(0.83-0.07) = 0
步骤7: 从第6步的计算看,H分成0~6区域。RGB颜色空间是一个立方体,而HSL颜色空间是两个六角形锥体,其中的L是RGB立方体的主对角线。因此,RGB立方体的顶点:红、黄、绿、青、蓝和品红就成为HSL六角形的顶点,而数值0~6就告诉我们H在哪个部分。H用[0o, 360o]中的数值表示,因此, H = H*60.0.如果H为负值,则加360o。
(算法引自:http://blas.cis.mcmaster.ca/~monger/hsl-rgb.html )
2. HSL→RGB的算法描述
步骤1: If S=0, 表示灰色,定义R, G和B都为L
步骤2: 否则, 测试L:
If L < 0.5, temp2= L*(1.0+S)
If L >= 0.5, temp2= L+S - L*S
转换 例如,如果H=120, S=0.79, L=0.52, 则,
temp2= (0.52+0.79) - (0.52*0.79) = 0.899
步骤3: temp1= 2.0*L -temp2
在本例中, temp1= 2.0*0.52 - 0.899 = 0.141
步骤4: 把H转换到0~1
在本例中,H=120/360 = 0.33
步骤5: 对于R, G, B, 计算另外的临时值 。方法如下:
for R, = H+1.0/3.0
for G, = H
for B, = H-1.0/3.0
if temp3 < 0, temp3= temp3+ 1.0
if temp3> 1, temp3 = temp3 - 1.0
在本例中,R = 0.33+0.33 = 0.66, G = 0.33, B= 0.33-0.33=0
步骤6: 对于R, G, B, 做如下测试:
If 6.0* temp3 < 1, color = temp1 +( temp2- temp1)*6.0* temp3 ;
Else if 2.0* temp3 < 1, color = temp2;
Else if 3.0* temp3 < 2, color = temp1+( temp2- temp1)*((2.0/3.0) - temp3)*6.0
Else color = temp1
在本例中,
3.0* Rtemp3< 2,因此 R=0.141+(0.899-0.141)*((2.0/3.0-0.66)*6.0=0.141
2.0* Gtemp3< 1,因此 G=0.899
6.0* Btemp3< 1,因此 B=0.141+(0.899-0.141)*6.0*0=0.141
(算法引自:http://blas.cis.mcmaster.ca/~monger/hsl-rgb.html )
RGB<->(HSI)
1. RGB→HSI (Gonzalez and Woods)算法描述
RGB→HSI(Gonzalez and Woods)的算法如下:
I = 1/3(R+G+B)
S = 1 - (3/(R+G+B))*a //其中的a=min(R, G, B)
H = cos^(-1)((0.5*((R-G)+(R-B))) / ((R-G)^2 + (R-B)*(G-B))^(0.5))
If S = 0, H=0 //表示H无意义
If (B/I) > (G/I) then
H = 360–H//H用角度表示,并用H=H/360进行标称化处理
2. HSI→RGB算法描述
HSI→RGB(Gonzalez and Woods)的算法如下:
首先用H=360*H把H换算成用角度表示。
If 0 < H <= 120 then
B = 1/3(1-S)
R = 1/3(1+ ((S cos H) / (cos(60 - H))))
G = 1 - (B+R)
If 120 < H <= 240 then
H = H – 120
R = 1/3(1-S)
G = 1/3(1+ ((S cos H) / (cos(60 - H))))
B = 1 - (R+G)
If 240 < H <= 360 then
H = H – 240
G = 1/3(1-S)
B = 1/3(1+ ((S cos H) / (cos(60 - H))))
R = 1 - (G+B)
本人均按照上述步骤,实现了基于不同彩色空间的图像融合:
基于HSV的图像融合
基于HSI的图像融合
基于HSL的图像融合