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

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。

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

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)

本人均按照上述步骤,实现了基于不同彩色空间的图像融合:

0818b9ca8b590ca3270a3433284dd417.png

基于HSV的图像融合

0818b9ca8b590ca3270a3433284dd417.png

基于HSI的图像融合

0818b9ca8b590ca3270a3433284dd417.png

基于HSL的图像融合

你可能感兴趣的:(matlab中rgb转hsv)