颜色空间那些事儿
本文為原創作品,轉載請注明出處
歡迎關注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/
?????? 只有經過幾年的準備之后,年輕的藝術家才應接觸顏色,不是用顏色描述,而是作為人的情感表達手段——畢加索
?????? ?彩色和光是造物主的偉大發明,這里面包含的學科和課題在一篇博文中無法全部闡明,本博文主要是介紹一下幾種顏色空間,整理了各顏色空間的與RGB空間的轉換公式,作為顏色空間處理的入門知識。
??????? 人類對顏色的感知是一種復雜的生理和心理現象,這一現象還遠遠未被完全了解,但是顏色的物理性質可以由一些實驗和理論結果支持表示出來。從初中物理學就學過,一個不透明物體所表現出來的顏色,有該物體所反射的光的性質決定。如,綠葉反射波長為500~570nm的綠光。
??????? 人眼的錐狀細胞是負責彩色視覺的傳感器。人眼中有600~700萬個錐狀細胞,它們可分為3類,分別感覺紅光(65%),綠光(33%),藍光(2%),雖然比例少,但是藍錐狀細胞卻對藍光更加敏感。所以被看到的顏色就是所謂的原色紅,綠,藍的組合。
RGB顏色空間
???????? RGB彩色模型主要是面向硬件的模型,如彩色監視器和一大類的彩色視頻攝像機。這個彩色模型利用的是三原色疊加從而產生不同的顏色。但是三原色疊加并不能產生所有的顏色。這個模型為每一個顏色通道分配0~255,256個級別的灰度值,這樣總共就可以產生種顏色。所有這些顏色包含在下圖所示的一個正方體中,該正方體內部的每一個點都能由三個通道的坐標確定。對角線是三個分量相等的顏色,就成為一個沒有顏色的灰度圖。
CMY和CMYK模型
???????? CMY模型和RGB模型具有相似的特點,它也是一種面向硬件設備(彩色打印機,復印機)的顏色模型,CMY代表青色,深紅色和黃色(顏料原色)的組合。這三種顏色是RGB的二次色,用的是另一種方式定義。如青色表示用白光照射時,反射光是白光減去紅光,而白光是紅綠藍光的組合。因此呢就有了RGB和CMY的轉換:假設所有的顏色值歸一化到(0,1)之間。
表示了青色表面不反射紅光,深紅色不反射綠色,純黃色不反射藍色。等量的顏料原色組合可以產生黑色,但是為了打印組合產生的黑色往往不會很純,因此為了產生真正的黑色,加入了第四種顏色黑色,于是就有了CMYK模型。
HSI彩色模型
???????? RGB彩色模型和CMY模型對硬件設備的實現是很理想的,而且RGB模型可以和人眼感受三原色的事實相匹配。但是很遺憾,這些顏色模型很難適應人對顏色的解釋。HIS彩色空間正是為了適應人眼對顏色的感知和描述發展的顏色模型。它是開發基于彩色描述的圖像處理方法的理想工具,這個模型利用色調(H),飽和度(S)強度(I)來描述色彩。其中HSI彩色模型和RGB彩色模型轉換公式如下所示:
給定一個RGB圖像,轉換到HIS
此處:
飽和度如下:
強度分量:
?說明:角度是以紅色為起始的基準軸來度量的。
???????? HIS到RGB空間的轉換:此處HSI為歸一化的值在[0,1]之間。先把H乘,把色調值還原到[0,],把H分為三個扇區進行討論,
RG扇區:
GB扇區:
然后計算:
BR扇區:
然后計算:
到此為止HIS空間的知識完畢!一般圖片都是RGB模型,上面的轉換公式為我們提供了在HIS空間處理圖像的工具。
在這里分享一段RGB轉HSI的matlab代碼
function hsi = rgb2hsi(rgb) %RGB2HSI Converts an RGB image to HSI. % HSI = RGB2HSI(RGB) converts an RGB image to HSI. The input image % is assumed to be of size M-by-N-by-3, where the third dimension % accounts for three image planes: red, green, and blue, in that % order. If all RGB component images are equal, the HSI conversion % is undefined. The input image can be of class double (with values % in the range [0, 1]), uint8, or uint16. % % The output image, HSI, is of class double, where: % hsi(:, :, 1) = hue image normalized to the range [0, 1] by % dividing all angle values by 2*pi. % hsi(:, :, 2) = saturation image, in the range [0, 1]. % hsi(:, :, 3) = intensity image, in the range [0, 1]. rgb = im2double(rgb); r = rgb(:, :, 1); g = rgb(:, :, 2); b = rgb(:, :, 3); % Implement the conversion equations. num = 0.5*((r - g) + (r - b)); den = sqrt((r - g).^2 + (r - b).*(g - b)); theta = acos(num./(den + eps)); H = theta; H(b > g) = 2*pi - H(b > g); H = H/(2*pi); num = min(min(r, g), b); den = r + g + b; den(den == 0) = eps; S = 1 - 3.* num./den; H(S == 0) = 0; I = (r + g + b)/3; % Combine all three results into an hsi image. hsi = cat(3, H, S, I); %%組成HSI圖片 % figure % imshow(H);title('H空間'); % figure % imshow(S);title('S空間'); % figure % imshow(I);title('I空間');a=0;
LAB空間
??????? LAB空間也是一種以數字化的方式來描述人對色彩的的視覺感覺,與設備無關,自然界中的任何一種顏色都可以在LAB空間中表示出來,當然RGB空間中的任何一種顏色都能在LAB空間中找到對應值。LAB空間中,L表示亮度;a表示紅色綠色軸,正數表示紅色,負端代表綠色;b的正數代表黃色,負數代表藍色。
從RGB到LAB空間的轉換需要通過中間變量XYZ
?????? 設一張圖片的RGB三個通道的值分別為(r,g,b)
?????? 1首先經過一次gamma校正,該函數是用來對圖像進行非線性色調的編輯,用來提高對圖像的對比度。
其中gamma函數定義為:
?
?????? 2計算XYZ
其中M為一個矩陣:
?
????? 3計算LAB
其中
Ohta顏色空間
??????? Ohta顏色空間是1980年Ohta 等人提出的顏色空間,該空間中三個顏色分量,I1,I2,I3,為一組正交的顏色特征集,它們也可由RGB顏色空間轉換得到,三個分量各自互相獨立。
利用該模型也可以對彩色圖像進行分割,可以得到很好的效果(黃色的圖像背景)
福利答謝大家!
感謝您閱讀本篇文章,對此特別發放一個無門檻的現金紅包,打開支付寶掃碼領取,可以領到錢的哦!
總結
- 上一篇: C++编译链接的那些小事
- 下一篇: 第二十节:一个缺失已久的特性 — mod