【opencv】颜色空间总结
顏色空間總結RGB、HSV、YUV,LAB
什么是顏色
Wiki是這樣說的:顏色或色彩是通過眼、腦和我們的生活經驗所產生的一種對光的視覺效應。嗯,簡單點說,顏色就是人對光的一種感覺,由大腦產生的一種感覺。感覺是一個很主觀的東西,你怎么確定你看到的紅色和我看到的是一樣的呢?這個視頻解釋的很不錯。我們需要先假設正常人對于同一種光產生的感覺基本是一致的,討論才能繼續下去。
人的視網膜上布滿了感光細胞,當有光線傳入人眼時,這些細胞就會將刺激轉化為視神經的電信號,最終在大腦得到解釋。視網膜上有兩類感光細胞:視錐細胞和視桿細胞。
視錐細胞大都集中在視網膜的中央,每個視網膜大概有700萬個左右。每個視錐細胞包含有一種感光色素,分別對紅、綠、藍三種光敏感。這類細胞能在較明亮的環境中提供辨別顏色和形成精細視覺的功能。
視桿細胞分散分布在視網膜上,每個視網膜大概有1億個以上。這類細胞對光線更為敏感(敏感程度是視錐細胞的100多倍),一個光子就足以激發它的活動。視桿細胞不能感受顏色、分辨精細的空間,但在較弱的光線下可以提供對環境的分辨能力(比如夜里看到物體的黑白輪廓)。
當一束光線進入人眼后,視細胞會產生4個不同強度的信號:三種視錐細胞的信號(紅綠藍)和視感細胞的信號。這其中,只有視錐細胞產生的信號能轉化為顏色的感覺。三種視錐細胞(S、M和L類型)對波長長度不同的光線會有不同的反應,每種細胞對某一段波長的光會更加敏感,如下圖。這些信號的組合就是人眼能分辨的顏色總和。?
?
這里有一個重要的理論:我們可以用3種精心選擇的單色光來刺激視錐細胞,模擬出人眼所能感知的幾乎所有的顏色(例如紅綠光的混合光,和單色黃光,刺激視錐細胞產生的視神經信號是等效的),這就是三色加法模型。所以說”三原色”的原理是由生理因素造成的。
顏色的數字化
根據上面的理論,只需要選定三原色,并且對三原色進行量化,那就可以將人的顏色知覺量化為數字信號了。三色加法模型中,如果某一種顏色(C),和另外一種三色混合色,給人的感覺相同時,這三種顏色的份量就稱為該顏色(C)的三色刺激值。對于如何選定三原色、如何量化、如何確定刺激值等問題,國際上有一套標準——CIE標準色度學系統。
CIE(國際照明委員會)是位于歐洲的一個國際學術研究機構,1931年,CIE在會議上根據之前的實驗成果提出了一個標準——CIE1931-RGB標準色度系統。
CIE1931-RGB系統選擇了700nm(R) 546.1nm(G) 435.8nm(B) 三種波長的單色光作為三原色。之所以選這三種顏色是因為比較容易精確地產生出來(汞弧光譜濾波產生,色度穩定準確)。
?
從上圖可以看到,三個顏色的刺激值R、G、B如何構成某一種顏色:例如580nm左右(紅綠線交叉點)的黃色光,可以用1:1(經過亮度換算..)的紅綠兩種原色混合來模擬.?
如果要根據三個刺激值R、G、B來表現可視顏色,繪制的可視圖形需要是三維的。為了能在二維平面上表現顏色空間,這里需要做一些轉換。顏色的概念可以分為兩部分:亮度(光的振幅,即明暗程度)、色度(光的波長組合,即具體某種顏色)。我們將光的亮度(Y)變量分離出來,之后用比例來表示三色刺激值:?
這樣就能得出r+g+b=1。由此可見,色度坐標r、g、b中只有兩個變量是獨立的。這樣我們就把刺激值R、G、B轉換成r、g、Y(亮度)三個值,把r、g兩個值繪制到二維空間得到的圖就是色域圖。? ?
上圖中,馬蹄形曲線就表示單色的光譜(即光譜軌跡)。例如540nm的單色光,可以看到由r=0、g=1、b=(1-r-g)=0三個原色的分量組成。再例如380-540nm波段的單色光,由于顏色匹配實驗結果中紅色存在負值的原因,該段色域落在了r軸的負區間內。自然界中,人眼可分辨的顏色,都落在光譜曲線包圍的范圍內。
CIE1931-RGB標準是根據實驗結果制定的,出現的負值在計算和轉換時非常不便。CIE假定人對色彩的感知是線性的,因此對上面的r-g色域圖進行了線性變換,將可見光色域變換到正數區域內。CIE在CIE1931-RGB色域中選擇了一個三角形,該三角形覆蓋了所有可見色域,之后將該三角形進行如下的線性變換,將可見色域變換到(0,0)(0,1)(1,0)的正數區域內。即假想出三原色X、Y、Z,它們不存在于自然界中,但更方便計算。?
???XYZ???=1b21???b11b21b31b12b22b32b13b23b33??????RGB???=10.17697???0.490.176970.000.310.812400.010.200.010630.99??????RGB???[XYZ]=1b21[b11b12b13b21b22b23b31b32b33][RGB]=10.17697[0.490.310.200.176970.812400.010630.000.010.99][RGB]得到的結果就是下圖:? ?
注意這里的顏色只是示意,事實上沒有設備能完全還上面所有的自然色域
這個圖有些有意思的性質:
該色度圖所示意的顏色包含了一般人可見的所有顏色,即人類視覺的色域。色域的馬蹄形弧線邊界對應自然界中的單色光。色域下方直線的邊界只能由多種單色光混合成。?
在該圖中任意選定兩點,兩點間直線上的顏色可由這兩點的顏色混合成。給定三個點,三點構成的三角形內顏色可由這三個點顏色混合成。?
給定三個真實光源,混合得出的色域只能是三角形(例如液晶顯示器的評測結果),絕對不可能完全覆蓋人類視覺色域。?
這就是CIE1931-XYZ標準色度學系統。該系統是國際上色度計算、顏色測量和顏色表征的統一標準,是幾乎所有測色儀器的設計與制造依據。
常見顏色模型
顏色模型就是描述用一組數值來描述顏色的數學模型。例如coding時最常見的RGB模型,就是用RGB三個數值來描述顏色。通常顏色模型分為兩類:設備相關和設備無關。
設備無關的顏色模型:這類顏色模型是基于人眼對色彩感知的度量建立的數學模型,例如上面提到的CIE-RGB、CIE-XYZ顏色模型,再比如由此衍生的CIE-xyY、CIE-L*u*v、CIE-L*a*b等顏色模型。這些顏色模型主要用于計算和測量。
設備相關的顏色模型:以最長見的RGB模型為例,一組確定的RGB數值,在一個液晶屏上顯示,最終會作用到三色LED的電壓上。這樣一組值在不同設備上解釋時,得到的顏色可能并不相同。再比如CMYK模型需要依賴打印設備解釋。常見的設備相關模型有:RGB、CMYK、YUV、HSL、HSB(HSV)、YCbCr等。這類顏色模型主要用于設備顯示、數據傳輸等。
下面就對這些顏色模型一一作出解釋。
CIE-RGB
正如上面寫的,這個模型是由真實的人眼顏色匹配實驗得出的模型,RGB分別表示那三個固定波長的光的份量。?
CIE-XYZ
上面也有,就是根據CIE-RGB進行變換得到的顏色模型,XYZ分別表示三個假想色的光的份量。通常簡寫為XYZ顏色模型。?
CIE-Yxy
該模型由CIE-XYZ衍生得來。其中x=XX+Y+Z,y=YX+Y+Zx=XX+Y+Z,y=YX+Y+Z, Yxy中的Y表示光的亮度。這個模型投影到x-y平面上即上面的CIE1931-XYZ色度圖。其中x、y分量的取值范圍是[0,1]。有時該模型也被稱作CIE-xyY。?
?
還有許多,不再詳盡說明。
RGB
最常見的顏色模型,設備相關。三個數值代表R、G、B分量,取值均為[0,255]。?
?
通常設備(例如筆記本的液晶顯示屏)能表現的色域大概是下面這樣。?
CMYK、CMY
這個顏色模型常用于印刷出版。CMYK表示青(Cyan)品紅(Magenta)黃(Yellow)黑(BlacK)四種顏料。由于顏料的特性,該模型也是與設備相關的。相對于RGB的加色混色模型,CMY是減色混色模型,顏色混在一起,亮度會降低。之所以加入黑色是因為打印時由品紅、黃、青構成的黑色不夠純粹。?
HSL、HSV
HSL和HSV的顏色模型比較相近,它們用來描述顏色相對于RGB等模型顯得更加自然。電腦繪畫時,這兩個模型非常受到歡迎。
HSL和HSV中,H都表示色相(Hue)。通常該值取值范圍是[0°,360°],對應紅橙黃綠青藍紫-紅這樣順序的顏色,構成一個首尾相接的色相環。色相的物理意義就是光的波長,不同波長的光呈現了不同的色相。
HSL和HSV中,S都表示飽和度(Saturation)(有時也稱為色度、彩度)即色彩的純凈程度。例如龍袍的金黃色飽和度就比屎黃色高。對應到到物理意義上:即一束光可能由很多種不同波長的單色光構成,波長越多越分散,則色彩的純凈程度越低,而單色的光構成的色彩純凈度就很高。
兩個顏色模型不同的就是最后一個份量。?
HSL中的L表示亮度(Lightness/Luminance/Intensity)。根據縮寫不同HSL有時也稱作HLS或HSI(就是說HSL、HLS、HSI是一回事)。?
HSV中的V表示明度(Value/Brightness)。根據縮寫不同,HSV有時也被稱作HSB(就是說HSV和HSB是一回事)。
至于亮度和明度的區別,可以看下面的圖。一種純色的明度是白色的明度,而純色的亮度等于中灰色的亮度。?
?
下面的圖能更好的對比HSL和HSV的區別:在圓柱體外圍是純色(紅黃綠藍紫…)HSL中,這圈純色位于亮度(L)等于1/2的部位,而在HSV中是在明度(Value)等于1的部位。?
?
將上面的圓柱體裁掉無用的部分,得到的是如下的錐形,就能更明顯的看出HSL和HSV的區別了。?
YUV、YCbCr(YCC)、YPbPr、YDbDr、YIQ
這些顏色模型大都是用在電視系統、數位攝影等地方。其中的Y分量都表示的是明亮度(Luminance、Luma)。
YUV顏色模型中,U、V表示的是色度(Chrominance/Chroma)。YUV是歐洲電視系統所采用的顏色模型(屬于PAL制式),顏色被分為一個亮度信號和兩個色差信號進行傳輸。
YCbCr(簡稱YCC)中,Cb和Cr藍色(blue)和紅色(red)的色度。YCbCr是YUV的壓縮和偏移的版本。
YPbPr類似YCbCr,與之不同的是,YPbPr選用的CIE色度坐標略有不同。一般SDTV傳輸的色差信號被稱作Cb、Cr,而HDTV傳輸的色差信號被稱作Pb、Pr。
YDbDr也類似YCbCr,同樣也是色度坐標不同。YDbDr是SECAM制式電視系統所用的顏色模型。
YIQ也和上面的類似。。是用在了NTSC制式的的電視系統里。?
全球電視系統制式分布,PAL用YUV、SECAM用YDbDr、NTSC用YIQ
下面再說一些人聽懂的話:?
YCbCr顏色空間,也就是YUV,YUV主要用于優化彩色視頻信號的傳輸,使其向后相容老式黑白電視。與RGB視頻信號傳輸相比,它最大的優點在于只需占用極少的頻寬(RGB要求三個獨立的視頻信號同時傳輸)。其中“Y”表示明亮度(Luminance或Luma),也就是灰階值;而“U”和“V” 表示的則是色度(Chrominance或Chroma),作用是描述影像色彩及飽和度,用于指定像素的顏色。“亮度”是透過RGB輸入信號來建立的,方法是將RGB信號的特定部分疊加到一起。“色度”則定義了顏色的兩個方面─色調與飽和度,分別用Cr和CB來表示。其中,Cr反映了GB輸入信號紅色部分與RGB信號亮度值之間的差異。而CB反映的是RGB輸入信號藍色部分與RGB信號亮度值之同的差異。?
采用YUV色彩空間的重要性是它的亮度信號Y和色度信號U、V是分離的。如果只有Y信號分量而沒有U、V分量,那么這樣表示的圖像就是黑白灰度圖像。彩色電視采用YUV空間正是為了用亮度信號Y解決彩色電視機與黑白電視機的兼容問題,使黑白電視機也能接收彩色電視信號。?
?
Y代表的灰度級較高,而CrCb則相對灰度值要少些。?
?
從上圖可以看出區別,Y對應的就是灰度或者說是亮度,而Cb、Cr則相對灰度級較少,人眼分辨差異較大。
補充:
YCrCb即YUV,主要用于優化彩色視頻信號的傳輸,使其向后相容老式黑白電視。與RGB視頻信號傳輸相比,它最大的優點在于只需占用極少的頻寬(RGB要求三個獨立的視頻信號同時傳輸)。其中“Y”表示明亮度(Luminance或Luma),也就是灰階值;而“U”和“V” 表示的則是色度(Chrominance或Chroma),作用是描述影像色彩及飽和度,用于指定像素的顏色。“亮度”是透過RGB輸入信號來建立的,方法是將RGB信號的特定部分疊加到一起。“色度”則定義了顏色的兩個方面─色調與飽和度,分別用Cr和CB來表示。其中,Cr反映了RGB輸入信號紅色部分與RGB信號亮度值之間的差異。而CB反映的是RGB輸入信號藍色部分與RGB信號亮度值之間的差異。 采用YUV色彩空間的重要性是它的亮度信號Y和色度信號U、V是分離的。如果只有Y信號分量而沒有U、V分量,那么這樣表示的圖像就是黑白灰度圖像。彩色電視采用YUV空間正是為了用亮度信號Y解決彩色電視機與黑白電視機的兼容問題,使黑白電視機也能接收彩色電視信號。
YUV與RGB相互轉換的公式如下(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
在DirectShow中,常見的RGB格式有RGB1、RGB4、RGB8、RGB565、RGB555、RGB24、RGB32、ARGB32等;常見的YUV格式有YUY2、YUYV、YVYU、UYVY、AYUV、Y41P、Y411、Y211、IF09、IYUV、YV12、YVU9、YUV411、YUV420等。
在人臉檢測中也常常用到YCrCb空間,因為一般的圖像都是基于RGB空間的,在RGB空間里人臉的膚色受亮度影響相當大,所以膚色點很難從非膚色點中分離出來,也就是說在此空間經過處理后,膚色點是離散的點,中間嵌有很多非膚色,這為膚色區域標定(人臉標定、眼睛等)帶來了難題。如果把RGB轉為YCrCb空間的話,可以忽略Y(亮度)的影響,因為該空間受亮度影響很小,膚色會產生很好的類聚。
這樣就把三維的空間將為二維的CrCb,膚色點會形成一定得形狀,如:人臉的話會看到一個人臉的區域,手臂的話會看到一條手臂的形態,對處理模式識別很有好處,根據經驗某點的CrCb值滿足:133≤Cr≤173,77≤Cb≤127 那么該點被認為是膚色點,其他的就為非膚色點。
Lab顏色
同RGB顏色空間相比,Lab是一種不常用的色彩空間。它是在1931年國際照明委員會(CIE)制定的顏色度量國際標準的基礎上建立起來的。1976年,經修改后被正式命名為CIELab。它是一種設備無關的顏色系統,也是一種基于生理特征的顏色系統。這也就意味著,它是用數字化的方法來描述人的視覺感應。Lab顏色空間中的L分量用于表示像素的亮度,取值范圍是[0,100],表示從純黑到純白;a表示從紅色到綠色的范圍,取值范圍是[127,-128];b表示從黃色到藍色的范圍,取值范圍是[127,-128]。下圖所示為Lab顏色空間的圖示;
? ? 需要提醒的是,Lab顏色空間比計算機顯示器、打印機甚至比人類視覺的色域都要大,表示為?Lab?的位圖比?RGB?或?CMYK?位圖獲得同樣的精度要求更多的每像素數據。雖然我們在生活中使用RGB顏色空間更多一些,但也并非Lab顏色空間真的一無所有。例如,在?Adobe?Photoshop圖像處理軟件中,TIFF格式文件中,PDF文檔中,都可以見到Lab顏色空間的身影。而在計算機視覺中,尤其是顏色識別相關的算法設計中,rgb,hsv,lab顏色空間混用更是常用的方法。
為了使用顏色空間,首先應該了解各種顏色空間的特性。顏色空間的分類有多種方法。
1.按使用類別分類
彩色色度學模型:CIE-RGB、CIE-XYZ、均勻色差彩色模型(CIE 1976Luv和CIE Lab)
工業彩色模型:RGB彩色顯示模型、CMYK彩色印制模型、彩色傳輸模型YUV(PAL)、YIQ(NTSC)、YCrCb(數字高清晰度電視)
視覺彩色模型:HVC(孟賽爾)、HSB(Photoshop)、HLS(Windows畫圖和Apple Color Picker)、HSI(圖像分割)、HSY(電視)、Ohta(圖像分割)等。
2.按顏色感知分類
混合顏色模型:按3種基色的比例混合而成的顏色。RGB、CMYK、XYZ等
非線形亮度/色度顏色模型:用一個分量表示非色彩的感知,用兩個分量表示色彩的感知,這兩個分量都是色差屬性。L*a*b、L*u*v、YUV、YIQ等。
強度/飽和度/色調模型:用強度描述亮度或灰度等光強的感知,用飽和度和色調描述色彩的感知,這兩個分量接近人眼對顏色的感覺。如HIS、HSL、HSV、LCH等
總結
以上是生活随笔為你收集整理的【opencv】颜色空间总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring基于AspectJ实现AOP
- 下一篇: [招贤纳士 ]Gcoge.Com(Bin