色彩模型(Color Model)
色彩模型是一種抽象的數學模型,通過一組數字來描述顏色。當站在不同的角度對顏色建模時就得到不同的數學模型。
- 機器視角
- RGB(Red、Green、Blue),used with color CRT monitors
- YIQ,broadcast TV color system
- CMY(Cyan(青色), Magenta(品紅), Yellow),color printing
- CMYK(Cyan, Magenta, Yellow,Black),color printing
- IRODORI,six-primary-color projection system
- 用戶視角:
- HSV(Hue, Saturation, Value)
- HSB(Hue, Saturation, Brightness),和HSV是一樣的,只是叫法不同
- HSL (Hue, Saturation,Lightness)
- The Munsell system
- CIE Lab
顏色分類
自然界物體的顏色有兩種:光源色(light source color)和表面色(surface color)。
-
光源色(可以自己發光的物體)——紅色R、綠色G、藍色B——加法混色原理;
-
表面色(自己不能發光,只能反射光)——品紅M、黃色Y、青色C——減法混色原理。
RGB模型
RGB是一種加法混色模型,它描述那些由不同顏色的光混合形成新顏色的情形,顏色越加越亮。生活中也有直觀的感受,例如室內燈開得越多,室內就越亮。因爲亮度是累加的,所以是加法混色。
RGB是通過空間笛卡爾座標系來建模的,如下圖所示:每種顏色由空間中的一個座標來表示。每個座標有三個分量,每個分量共有256種取值,所以RGB一共有 種顏色。注意:OpenCV中分量的順序爲BGR,即 (B,G,R)
計算機中的顯示模式:
- 24比特模式:圖片中的每個像素使用三個8位無符號整數(0到255)表示紅色、綠色和藍色的強度。
- 16比特模式:16比特模式分配給每種原色各爲5比特,其中綠色爲6比特,因爲人眼對綠色分辨的色調更精確。但某些情況下每種原色各佔5比特,餘下的1比特不使用。
- 32比特模式:實際就是24比特模式,餘下的8比特不分配到像素中,這種模式是爲了提高數據輸送的速度。同樣在一些特殊情況下,如DirectX、OpenGL等環境,餘下的8比特用來表示象素的透明度(Alpha)。
CMY模型
CMY模型是一種減法混色模型,該模型解釋了塗料,染料,墨水和天然色素的混合物產生的顏色,每個顏色會減去(即吸收)某些波長的光並反射其它光。例如顏料不發光,看到的顏色其實是沒被吸收而被反射出來的光的顏色。所以顏料吸收的顏色就是我們看到顏料顏色的補色。因爲看到的顏色是白光減去看到顏色的補色,所以是減法模型。CMY模型主要應用在印刷行業,理論上只要CMY等比例混合就能得到黑色,但是因爲目前製造工藝水平的限制,製造出來的油墨純度都不夠高,CMY相加的結果實際只是一種暗紅色。又因爲在印刷業中黑色的使用頻率非常高,所以往往還會加入黑色(black)油墨,這就是CMYK色彩混合模式的由來。
青色C(紅色R的補色) 是因爲吸收光中的紅光R,剩下的綠光G和藍光B被反射出來,形成青色C
青色C= 白色- 紅色R = 綠色G+ 藍色B
品紅M(綠色G的補色) 是因爲吸收光中的綠光G,剩下的紅光R和藍光B被反射出來,形成品紅M
品紅M= 白色 - 綠色G =紅色R+ 藍色B
黃色Y(藍色B的補色) 是因爲吸收光中的藍光B,剩下的紅光R和綠光G被反射出來,形成黃色Y
黃色Y= 白色 - 藍色B = 紅色R + 綠色G
HSB(HSV)模型
HSB(HSV)模型是站在人的角度對顏色建模,我們對色彩的認識往往是:
-
是什麼顏色?
由色相(色彩相貌)H決定,決定了是什麼顏色?是紅色?綠色?還是什麼顏色?
-
顏色鮮豔不鮮豔?
由飽和度S,即顏色的濃度決定。
-
顏色是亮還是暗?
由明度 B 決定,可以理解爲照在顏色上光線的強度,光線越強,顏色越亮,反之,越暗。
Photoshop中拾色器的HSB如下圖所示:
灰度圖
灰度圖是指圖片中每個像素 R、G、B 三個分量的取值相同。因爲三個分量的取值相同,所以一共有256種灰度。當採用不同的算法時,得到的灰度圖不同。例如,可以取三個分量的最大值、最小值、平均值等作爲灰度:
Example:假設某個像素的取值爲:(60,120,180)
取最小值作爲分量:(60,60,60)
取最大值作爲分量:(180,180,180)
取平均值作爲分量:(60+120+180)/3=120-->(120,120,120)
OpenCV中RGB轉灰度圖(cvtColor(src, bwsrc, cv::COLOR_RGB2GRAY)
的算法爲:
Gray=0.299*R+0.587*G+0.114*B
通道
下面通過例子來理解通道的含義。注意:不同顯示器顯示效果有差異,所以當你使用拾色器拾取顏色時,可能和下面不一樣。
原圖片:
小圓圈的RGB顏色分別爲:
(60,0,0)、(120,0,0)、(180,0,0)、(240,0,0)
(0,60,0)、(0,120,0)、(0,180,0)、(0,240,0)
(0,0,60)、(0,0,120)、(0,0,180)、(0,0,240)
(60,60,0)、(120,120,0)、(180,180,0)、(240,240,0)
(60,0,60)、(120,0,120)、(180,0,120)、(240,0,120)
(0,60,60)、(0,120,120)、(0,180,180)、(0,180,180)
字體的RGB顏色爲:(80,160,240)
紅色通道:
小圓圈的RGB顏色分別爲:
(60,60,60)、(120,120,120)、(180,180,180)、(240,240,240)
(0,0,0)、(0,0,0)、(0,0,0)、(0,0,0)
(0,0,0)、(0,0,0)、(0,0,0)、(0,0,0)
(60,60,60)、(120,120,120)、(180,180,180)、(240,240,240)
(60,60,60)、(120,120,120)、(180,180,180)、(240,240,240)
(0,0,0)、(0,0,0)、(0,0,0)、(0,0,0)
字體的RGB顏色爲:(80,80,80)
綠色通道:
小圓圈的RGB顏色分別爲:
(0,0,0)、(0,0,0)、(0,0,0)、(0,0,0)
(60,60,60)、(120,120,120)、(180,180,180)、(240,240,240)
(0,0,0)、(0,0,0)、(0,0,0)、(0,0,0)
(60,60,60)、(120,120,120)、(180,180,180)、(240,240,240)
(0,0,0)、(0,0,0)、(0,0,0)、(0,0,0)
(60,60,60)、(120,120,120)、(180,180,180)、(240,240,240)
字體的RGB顏色爲:(160,160,160)
藍色通道:
小圓圈的RGB顏色分別爲:
(0,0,0)、(0,0,0)、(0,0,0)、(0,0,0)
(0,0,0)、(0,0,0)、(0,0,0)、(0,0,0)
(60,60,60)、(120,120,120)、(180,180,180)、(240,240,240)
(0,0,0)、(0,0,0)、(0,0,0)、(0,0,0)
(60,60,60)、(120,120,120)、(180,180,180)、(240,240,240)
(60,60,60)、(120,120,120)、(180,180,180)、(240,240,240)
字體的RGB顏色爲:(240,240,240)
結論: RGB顏色模型是由空間笛卡爾直角座標系建模的,有三個軸 R、G、B,每個軸代表一個通道。由上面實驗結果可以看出,紅色通道、綠色通道、藍色通道都是一張灰度圖。RGB通道灰度圖生成策略爲:
紅色通道:(R,G,B)-->(R,R,R)以紅色分量去填充其他分量
綠色通道:(R,G,B)-->(G,G,G)以綠色分量去填充其他分量
藍色通道:(R,G,B)-->(B,B,B)以藍色分量去填充其他分量