HSL颜色空间类似于HSV颜色空间,HSL颜色空间一直被Tektronix公司所使用。由于HSL空间的三个分量能在较大范围内满足彩色图像处理的要求,而且它们与人眼的颜色感觉相对应,因此可以借助于HSL颜色空间可以有目的地进行处理,因而在彩色图像处理中具有比其它颜色空间更好的优越性。 HSL颜色空间,H表示色调(Hue)、S表示饱和度(Saturation),L表示亮度(Lightness)。色调(H)是一种颜色区别于另一种颜色的要素,如通常所说的红(R)、绿(G)、蓝(B)、黄(Y)等,饱和度(S)就是颜色纯度,亮度(L)即光的强度。
RGB —> HSL
- var_R = ( R / 255 ) //RGB from 0 to 255
- var_G = ( G / 255 )
- var_B = ( B / 255 )
- var_Min = min( var_R, var_G, var_B ) //Min. value of RGB
- var_Max = max( var_R, var_G, var_B ) //Max. value of RGB
- del_Max = var_Max - var_Min //Delta RGB value
- L = ( var_Max + var_Min ) / 2
- if ( del_Max == 0 ) //This is a gray, no chroma...
- {
- H = 0 //HSL results from 0 to 1
- S = 0
- }
- else //Chromatic data...
- {
- if ( L < 0.5 ) S = del_Max / ( var_Max + var_Min )
- else S = del_Max / ( 2 - var_Max - var_Min )
- del_R = ( ( ( var_Max - var_R ) / 6 ) + ( del_Max / 2 ) ) / del_Max
- del_G = ( ( ( var_Max - var_G ) / 6 ) + ( del_Max / 2 ) ) / del_Max
- del_B = ( ( ( var_Max - var_B ) / 6 ) + ( del_Max / 2 ) ) / del_Max
- if ( var_R == var_Max ) H = del_B - del_G
- else if ( var_G == var_Max ) H = ( 1 / 3 ) + del_R - del_B
- else if ( var_B == var_Max ) H = ( 2 / 3 ) + del_G - del_R
- if ( H < 0 ) H += 1
- if ( H > 1 ) H -= 1
- }
复制代码 HSL —> RGB
- if ( S == 0 ) //HSL from 0 to 1
- {
- R = L * 255 //RGB results from 0 to 255
- G = L * 255
- B = L * 255
- }
- else
- {
- if ( L < 0.5 ) var_2 = L * ( 1 + S )
- else var_2 = ( L + S ) - ( S * L )
- var_1 = 2 * L - var_2
- R = 255 * Hue_2_RGB( var_1, var_2, H + ( 1 / 3 ) )
- G = 255 * Hue_2_RGB( var_1, var_2, H )
- B = 255 * Hue_2_RGB( var_1, var_2, H - ( 1 / 3 ) )
- }
- Hue_2_RGB( v1, v2, vH ) //Function Hue_2_RGB
- {
- if ( vH < 0 ) vH += 1
- if ( vH > 1 ) vH -= 1
- if ( ( 6 * vH ) < 1 ) return ( v1 + ( v2 - v1 ) * 6 * vH )
- if ( ( 2 * vH ) < 1 ) return ( v2 )
- if ( ( 3 * vH ) < 2 ) return ( v1 + ( v2 - v1 ) * ( ( 2 / 3 ) - vH ) * 6 )
- return ( v1 )
- }
复制代码
|