颜色空间RGB与HSV HSL 的转换
一般的3D編程只需要使用RGB顏色空間就好了,但其實美術(shù)人員更多的是使用HSV(HSL),因為可以方便的調(diào)整飽和度和亮度。
有時候美術(shù)需要程序幫助調(diào)整飽和度來達(dá)到特定風(fēng)格的渲染效果,這時候就需要轉(zhuǎn)換顏色空間了。
出處:http://zh.wikipedia.org/wiki/HSL%E5%92%8CHSV%E8%89%B2%E5%BD%A9%E7%A9%BA%E9%97%B4
HSL 和HSV(也叫做 HSB)是對RGB 色彩空間中點的兩種有關(guān)系的表示,它們嘗試描述比 RGB 更準(zhǔn)確的感知顏色聯(lián)系,并仍保持在計算上簡單。HSL?表示 hue(色相)、saturation(飽和度)、lightness(亮度),HSV?表示 hue、saturation、value(色調(diào)) 而 HSB 表示hue、saturation、brightness(明度)。
HSL 和 HSV 二者都把顏色描述在圓柱體內(nèi)的點,這個圓柱的中心軸取值為自底部的黑色到頂部的白色而在它們中間是的灰色,繞這個軸的角度對應(yīng)于“色相”,到這個軸的距離對應(yīng)于“飽和度”,而沿著這個軸的距離對應(yīng)于“亮度”,“色調(diào)”或“明度”。
這兩種表示在用目的上類似,但在方法上有區(qū)別。二者在數(shù)學(xué)上都是圓柱,但 HSV(色相,飽和度,明度)在概念上可以被認(rèn)為是顏色的倒圓錐體(黑點在下頂點,白色在上底面圓心),HSL?在概念上表示了一個雙圓錐體和圓球體(白色在上頂點,黑色在下頂點,最大橫切面的圓心是半程灰色)。注意盡管在 HSL 和 HSV 中“色相”指稱相同的性質(zhì),它們的“飽和度”的定義是明顯不同的。
因為 HSL 和 HSV 是設(shè)備依賴的 RGB 的簡單變換,(h,s, l) 或 (h, s, v) 三元組定義的顏色依賴于所使用的特定紅色、綠色和藍(lán)色“加法原色”。每個獨(dú)特的?RGB 設(shè)備都伴隨著一個獨(dú)特的 HSL 和 HSV 空間。但是 (h, s, l) 或 (h,s, v) 三元組在被約束于特定 RGB 空間比如 sRGB 的時候就變成明確的了。
HSV 模型在 1978 年由埃爾維·雷·史密斯創(chuàng)立。
動機(jī)
藝術(shù)家有時偏好使用 HSV 顏色模型而不選擇RGB 或 CMYK 模型,因為它類似于人類感覺顏色的方式。RGB 和 CMYK 分別是加法原色和減法原色模型,以原色組合的方式定義顏色,而?HSV 以人類更熟悉的方式封裝了關(guān)于顏色的信息:“這是什么顏色?深淺如何?明暗如何?”。HSL 顏色空間類似于 HSV,在某些方面甚至比它還好。
[編輯]用途
HSV 色輪允許用戶快速的選擇眾多顏色。 HSV 模型的圓錐表示適合于在一個單一物體中展示整個 HSV 色彩空間。HSV 模型通常用于計算機(jī)圖形應(yīng)用中。在用戶必須選擇一個顏色應(yīng)用于特定圖形元素各種應(yīng)用環(huán)境中,經(jīng)常使用?HSV 色輪。在其中,色相表示為圓環(huán);可以使用一個獨(dú)立的三角形來表示飽和度和明度。典型的,這個三角形的垂直軸指示飽和度,而水平軸表示明度。在這種方式下,選擇顏色可以首先在圓環(huán)中選擇色相,在從三角形中選擇想要的飽和度和明度。
HSV 模型的另一種可視方法是圓錐體。在這種表示中,色相被表示為繞圓錐中心軸的角度,飽和度被表示為從圓錐的橫截面的圓心到這個點的距離,明度被表示為從圓錐的橫截面的圓心到頂點的距離。某些表示使用了六棱錐體。這種方法更適合在一個單一物體中展示這個 HSV 色彩空間;但是由于它的三維本質(zhì),它不適合在二維計算機(jī)界面中選擇顏色。
HSV 色彩空間還可以表示為類似于上述圓錐體的圓柱體,色相沿著圓柱體的外圓周變化,飽和度沿著從橫截面的圓心的距離變化,明度沿著橫截面到底面和頂面的距離而變化。這種表示可能被認(rèn)為是 HSV 色彩空間的更精確的數(shù)學(xué)模型;但是在實際中可區(qū)分出的飽和度和色相的級別數(shù)目隨著明度接近黑色而減少。此外計算機(jī)典型的用有限精度范圍來存儲 RGB 值;這約束了精度,再加上人類顏色感知的限制,使圓錐體表示在多數(shù)情況下更實用。
[編輯]HSL?與 HSV 的比較
HSL 和 HSV 色彩空間比較。HSL 類似于 HSV。對于一些人,HSL 更好的反映了“飽和度”和“亮度”作為兩個獨(dú)立參數(shù)的直覺觀念,但是對于另一些人,它的飽和度定義是錯誤的,因為非常柔和的幾乎白色的顏色在 HSL 可以被定義為是完全飽和的。對于 HSV 還是 HSL 更適合于人類用戶界面是有爭議的。
W3C 的CSS3 規(guī)定聲稱“HSL 的優(yōu)點是它對稱于亮與暗(HSV 就不是這樣)…”,這意味著:
- 在 HSL 中,飽和度分量總是從完全飽和色變化到等價的灰色(在 HSV 中,在極大值 V 的時候,飽和度從全飽和色變化到白色,這可以被認(rèn)為是反直覺的)。
- 在 HSL 中,亮度跨越從黑色過選擇的色相到白色的完整范圍(在 HSV 中,V 分量只走一半行程,從黑到選擇的色相)。
在軟件中,通常以一個線性或圓形色相選擇器和在其中為選定的色相選取飽和度和明度/亮度的一個二維區(qū)域(通常為方形或三角形)形式提供給用戶基于色相的顏色模型(HSV 或 HSL)。通過這種表示,在 HSV 和 HSL 之間的區(qū)別就無關(guān)緊要了。但是很多程序還允許你通過線性滑塊或數(shù)值錄入框來選擇顏色的明度/亮度,而對于這些控件通常使用要么 HSL 要么 HSV(而非二者)。HSV 傳統(tǒng)上更常用。下面是一些例子:
GIMP 支持在 HSV 色彩空間內(nèi)的選取顏色的多種方法,包括帶有色相滑塊的色輪和色方。- 使用 HSV (HSB)的應(yīng)用:
- Apple Mac OS X 系統(tǒng)顏色選擇器(有一個 H/S 顏色碟和一個 V 滑塊)
- Xara Xtreme
- Paint.NET(有一個 H/S 顏色碟和一個 V 滑塊)
- Adobe 圖形應(yīng)用程序(Illustrator,Photoshop,等等)
- Turbo Photo
- 使用 HSL 的應(yīng)用:
- CSS3 規(guī)定
- Inkscape(從版本 0.42 開始)
- Macromedia Studio
- Microsoft Windows 系統(tǒng)顏色選擇器(包括Microsoft Paint)
- Paint Shop Pro
- ImageMagick
- 使用 HSV 和 HSL 二者的應(yīng)用:
- Pixel image editor(從 Beta5 開始)
- Pixia
- Bryce
- GIMP(HSV 用于顏色選擇,HSL 用于顏色調(diào)整)
[編輯]與其他顏色模型的比較
HSV 顏色空間在技術(shù)上不支持到輻射測定中測量的物理能量譜密度的一一映射。所以一般不建議做在?HSV 坐標(biāo)和物理光性質(zhì)如波長和振幅之間的直接比較。
[編輯]形式定義
HSL 和 HSV 在數(shù)學(xué)上定義為在 RGB 空間中的顏色的R, G 和 B 的坐標(biāo)的變換。
[編輯]從?RGB 到 HSL 或 HSV 的轉(zhuǎn)換
設(shè) (r,g, b) 分別是一個顏色的紅、綠和藍(lán)坐標(biāo),它們的值是在 0 到 1 之間的實數(shù)。設(shè) max 等價于 r, g 和 b 中的最大者。設(shè) min 等于這些值中的最小者。要找到在 HSL 空間中的 (h,s, l) 值,這里的 h ∈ [0, 360)是角度的色相角,而 s, l ∈ [0,1] 是飽和度和亮度,計算為:
h 的值通常規(guī)范化到位于 0 到 360°之間。而 h = 0 用于 max = min 的(就是灰色)時候而不是留下h 未定義。
HSL 和 HSV 有同樣的色相定義,但是其他分量不同。HSV 顏色的s 和 v 的值定義如下:
[編輯]從?HSL 到 RGB 的轉(zhuǎn)換
給定 HSL 空間中的 (h,s, l) 值定義的一個顏色,帶有 h 在指示色相角度的值域 [0, 360)中,分別表示飽和度和亮度的s 和l 在值域 [0, 1] 中,相應(yīng)在 RGB 空間中的 (r, g, b) 三原色,帶有分別對應(yīng)于紅色、綠色和藍(lán)色的r, g 和 b 也在值域 [0, 1] 中,它們可計算為:
首先,如果 s = 0,則結(jié)果的顏色是非彩色的、或灰色的。在這個特殊情況,r,g 和 b 都等于 l。注意 h 的值在這種情況下是未定義的。
當(dāng) s ≠ 0 的時候,可以使用下列過程:[1]
對于每個顏色向量Color = (ColorR,ColorG, ColorB) = (r,g, b),
[編輯]從?HSV 到 RGB 的轉(zhuǎn)換
類似的,給定在 HSV 中 (h,s, v) 值定義的一個顏色,帶有如上的 h,和分別表示飽和度和明度的 s 和 v 變化于 0 到 1 之間,在 RGB 空間中對應(yīng)的 (r,g, b) 三原色可以計算為:
對于每個顏色向量 (r, g, b),
[編輯]例子
展示的 RGB 值的范圍是 0.0 到 1.0。
(1, 0, 0) | (0°, 1, 0.5) | (0°, 1, 1) | ? |
(0.5, 1, 0.5) | (120°, 1, 0.75) | (120°, 0.5, 1) | ? |
(0, 0, 0.5) | (240°, 1, 0.25) | (240°, 1, 0.5) | ? |
?
?
HSV顏色空間
HSV(hue,saturation,value)顏色空間的模型對應(yīng)于圓柱坐標(biāo)系中的一個圓錐形子集,圓錐的頂面對應(yīng)于V=1。它包含RGB模型中的R=1,G=1,B=1三個面,所代表的顏色較亮。色彩H由繞V軸的旋轉(zhuǎn)角給定。紅色對應(yīng)于角度0°,綠色對應(yīng)于角度120°,藍(lán)色對應(yīng)于角度240°。在HSV顏色模型中,每一種顏色和它的補(bǔ)色相差180°。飽和度S取值從0到1,所以圓錐頂面的半徑為1。HSV顏色模型所代表的顏色域是CIE色度圖的一個子集,這個模型中飽和度為百分之百的顏色,其純度一般小于百分之百。在圓錐的頂點(即原點)處,V=0,H和S無定義,代表黑色。圓錐的頂面中心處S=0,V=1,H無定義,代表白色。從該點到原點代表亮度漸暗的灰色,即具有不同灰度的灰色。對于這些點,S=0,H的值無定義。可以說,HSV模型中的V軸對應(yīng)于RGB顏色空間中的主對角線。在圓錐頂面的圓周上的顏色,V=1,S=1,這種顏色是純色。HSV模型對應(yīng)于畫家配色的方法。畫家用改變色濃和色深的方法從某種純色獲得不同色調(diào)的顏色,在一種純色中加入白色以改變色濃,加入黑色以改變色深,同時加入不同比例的白色,黑色即可獲得各種不同的色調(diào)。
HSV顏色空間可以用一個圓錐空間模型來描述。
從 RGB 到HSV 的轉(zhuǎn)換
設(shè) (r, g, b) 分別是一個顏色的紅、綠和藍(lán)坐標(biāo),它們的值是在 0 到 1 之間的實數(shù)。設(shè) max 等價于 r,g 和 b 中的最大者。設(shè) min 等于這些值中的最小者。要找到在 HSV 空間中的 (h,s, v) 值,這里的 h ∈ [0, 360)是角度的色相角,而 s, v ∈ [0,1] 是飽和度和亮度,計算為:
max=max(R,G,B)
min=min(R,G,B)
if R = max, H = (G-B)/(max-min)
if G = max, H = 2 + (B-R)/(max-min)
if B = max, H = 4 + (R-G)/(max-min)
H = H * 60
if H < 0, H = H + 360
V=max(R,G,B)
S=(max-min)/max
h 的值通常規(guī)范化到位于 0 到 360°之間。而 h = 0 用于max = min 的(就是灰色)時候而不是留下 h 未定義。
以下為相應(yīng)的VC代碼:
void Rgb2Hsv(float R, float G, float B, float& H, float& S, float&V)
{
// r,g,b values are from 0 to 1
// h = [0,360], s = [0,1], v = [0,1]
// if s == 0, then h = -1 (undefined)
float min, max, delta,tmp;
tmp = min(R, G);
min = min( tmp, B );
tmp = max( R, G);
max = max(tmp, B );
V = max; // v
delta = max - min;
if( max != 0 )
S = delta / max; // s
else
{
// r = g = b = 0 // s = 0, v is undefined
S = 0;
H = UNDEFINEDCOLOR;
return;
}
if( R == max )
H = ( G - B ) / delta; // between yellow & magenta
else if( G == max )
H = 2 + ( B - R ) / delta; // between cyan & yellow
else
H = 4 + ( R - G ) / delta; // between magenta & cyan
H *= 60; // degrees
if( H < 0 )
H += 360;
}
YUV顏色空間
YUV(亦稱YCrCb)是被歐洲電視系統(tǒng)所采用的一種顏色編碼方法(屬于PAL)。在現(xiàn)代彩色電視系統(tǒng)中,通常采用三管彩色攝影機(jī)或彩色CCD攝影機(jī)進(jìn)行取像,然后把取得的彩色圖像信號經(jīng)分色、分別放大校正后得到RGB,再經(jīng)過矩陣變換電路得到亮度信號Y和兩個色差信號R-Y(即U)、B-Y(即V),最后發(fā)送端將亮度和色差三個信號分別進(jìn)行編碼,用同一信道發(fā)送出去。這種色彩的表示方法就是所謂的YUV色彩空間表示。采用YUV色彩空間的重要性是它的亮度信號Y和色度信號U、V是分離的。如果只有?Y信號分量而沒有U、V信號分量,那么這樣表示的圖像就是黑白灰度圖像。彩色電視采用YUV空間正是為了用亮度信號Y解決彩色電視機(jī)與黑白電視機(jī)的相容問題,使黑白電視機(jī)也能接收彩色電視信號。
優(yōu)點作用
YUV主要用于優(yōu)化彩色視頻信號的傳輸,使其向后相容老式黑白電視。與RGB視頻信號傳輸相比,它最大的優(yōu)點在于只需占用極少的頻寬(RGB要求三個獨(dú)立的視頻信號同時傳輸)。其中“Y”表示明亮度(Luminance或Luma),也就是灰階值;而“U”和“V” 表示的則是色度(Chrominance或Chroma),作用是描述影像色彩及飽和度,用于指定像素的顏色。“亮度”是透過RGB輸入信號來建立的,方法是將RGB信號的特定部分疊加到一起。“色度”則定義了顏色的兩個方面─色調(diào)與飽和度,分別用Cr和CB來表示。其中,Cr反映了GB輸入信號紅色部分與RGB信號亮度值之間的差異。而CB反映的是RGB輸入信號藍(lán)色部分與RGB信號亮度值之同的差異。
采用YUV色彩空間的重要性是它的亮度信號Y和色度信號U、V是分離的。如果只有Y信號分量而沒有U、V分量,那么這樣表示的圖像就是黑白灰度圖像。彩色電視采用YUV空間正是為了用亮度信號Y解決彩色電視機(jī)與黑白電視機(jī)的兼容問題,使黑白電視機(jī)也能接收彩色電視信號。
YUV與RGB相互轉(zhuǎn)換的公式如下(RGB取值范圍均為0-255)︰
Y = 0.299R + 0.587G + 0.114B
U = -0.147R - 0.289G + 0.436B
V = 0.615R - 0.515G - 0.100B
R = Y + 1.14V
G = Y - 0.39U - 0.58V
B = Y + 2.03U
?
???????????再分享一下我老師大神的人工智能教程吧。零基礎(chǔ)!通俗易懂!風(fēng)趣幽默!還帶黃段子!希望你也加入到我們?nèi)斯ぶ悄艿年犖橹衼?#xff01;https://blog.csdn.net/jiangjunshow
總結(jié)
以上是生活随笔為你收集整理的颜色空间RGB与HSV HSL 的转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SuperMapr测量地图面积
- 下一篇: u盘启动会进入w ndows安装程序,将