matlab实现RGB与HSV(HSB)、HSL和HSI的色彩空间互转

matlab实现RGB与HSV(HSB)、HSL和HSI的色彩空间互转  


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的图像融合

你可能感兴趣的:(图像处理,理论)