顏色匹配中,我們常見的顯示設備是通過每個像素點混合紅綠藍三色按照不同強度比值來模擬出彩色圖像的。這是因為我們人眼底部有三種不同類型的視錐細胞,他們分別對紅色,綠色和藍色敏感,產生強度。當任意波長的光進入到眼睛裡,三種細胞對其產生不同程度的響應,疊加輸出到我們的大腦中,形成了「顏色」。
(三種視錐細胞S,M,L的可見光波長響應曲線 from wikipedia)
因此,我們可以通過人為控制三種顏色的疊加來『模擬』出所需要的可見光波長的視覺效果。這三種顏色即常說的」三原色「(RGB),比如紅+綠=黃。以三原色作為『基』,構成一個三維的組合空間即『色彩空間』。選用不同的基我們可以獲得不同的色彩空間範圍。R,G,B作為』基『的匹配函數如下:
(CIE-RGB系統的匹配函數,橫坐標為波長,縱坐標為需要獲得單色該原色需要的對應波長強度 from wikipedia)
先要說明的一點是,不光是RGB還是其他的'基',他們構成的人眼可識別的空間都是較大的。所謂較大的意思是,人眼能看到的所有範圍是要大於顯示設備能夠顯示的範圍的。顯示設備顏色匹配的空間要小於人眼的響應空間。一種很流行的顏色空間是sRGB。sRGB因為選擇的『基』簡單,很多設備都能滿足,但是它色域有限。那麼問題來了,什麼是色域?色域其實就是顯示出來的顏色範圍所能覆蓋的人眼可響應範圍的大小。前面我們提到了『基』。選擇不同的『基』可以張成不同的色彩空間。因為視錐細胞的感受響應曲線是具有重疊範圍的,色彩空間的基也就不可能是完全正交的正交基。那麼很容易能理解,『基』在一定程度上體現了一個顏色向量在某個方向上的極限。'基'在人眼響應空間裡『伸展』越開,其構成的色彩空間也就越大,色域越廣。
那為什麼不選擇雷射那樣的尖峰作為『基』呢?因為人眼的響應也不是正交的,普通的顯示設備也不能實現全部像素點都輸出尖峰的光。我們需要的是顯示設備輸出的顏色能覆蓋我們需要用的範圍。
CIR-RGB系統匹配函數(也叫三刺激值),是CIE利用規定的三原色結合317位正常視覺人類的實驗數據得到的。但現實生活中因為不存在光強的負值,為了更直觀體現亮度的特徵,CIE通過數學變換把RGB的『基』換成了x,y,z,類似直角坐標轉換極坐標,通過矩陣變換我們可以把RGB convert到XYZ
(RGB 轉換 XYZ from wikipedia)
由x,y,z『基』構成的全部彩色空間,即CIE-XYZ 1931。
(CIE-XYZ系統的匹配函數,from wikipedia)
我們用數學一點的語言來描述一個光的顏色:
L(λ)是我們的光譜,即強度-波長函數。光譜圖和對應的XYZ匹配函數全積分就得到對應的XYZ值,一般我們光譜數據都是離散的數組,所以通常把三刺激值矩陣和光譜矩陣點乘就得到X,Y,Z的值。(比如500nm光強是5,500nm的X匹配函數值是0.2,那就5*0.2=1,類似的對380-780nm全乘一遍再相加就得到了X的值。)
那我們經常看到的那個色度坐標圖(就封面那張圖)又是怎麼回事呢?為了衡量不同顯示設備,不同發光之間顏色的純度,或者說色度,我們通常是不考慮其光強度的。因此就需要將x,y,z進行歸一化處理。
歸一化以後,x+y+z =1,於是用x,y兩個值便能表示出一個特定的顏色。在色彩空間上,就像把一個三維的空間投影到x+y+z=1的平面上,而二維的色坐標圖又是這個平面在x-y平面的投影。以上就是CIE1931的基礎知識。
我們來看一下實際的可見光光譜如何轉換出其色度坐標。下圖是一個典型的材料螢光光譜曲線圖,橫坐標為波長,縱坐標為對應波長強度。從發射波長位置來看應該是一個藍綠色發光的材料。
為了求其色度坐標,我們首先需要CIE-XYZ三刺激值的數據。
(CIE-XYZ三刺激值表)
我們用python裡的excel處理方法把三刺激值數據矩陣化。
這樣一個函數返回三刺激值矩陣。
接著我們把光譜讀取了返回一個對應維度的強度列表
通過上面兩個函數,我們獲得了3×81的三刺激值矩陣和81×1的光譜強度向量。矩陣點乘得到3×1的X,Y,Z值向量。然後歸一化處理,坐標值創建文件保存輸出。
到此為止我們就完成了光譜轉色度坐標的處理。對兩個光譜數據利用上面的程序獲得色度坐標如下,第一個點即上文提到的那個材料的色度數據。
我們在CIE上可以plot這個點的位置。
可見這點位於藍綠區域偏藍色。到此為止我們就完成了光譜到CIE色度坐標的轉換。
多插一句講一下顯示色域的事。前面有講過一個叫sRGB的色彩空間,其實還有NTSC,adobeRGB,PLS等等好幾種色彩空間,而sRGB其實是裡面CIE色域最小的。
我們都有一個直觀的感受,同一張圖片,在不同的顯示器,手機屏幕,甚至不同的顯卡,色彩會有完全不同的感受,甚至有非常明顯的偏差,而這可能就是由於採用了不同色彩空間標準的原因。為了管理不同的計算機上的顯示效果,為了得到統一的現實效果,業界才制定了這麼多色彩管理標準。很多顯示設備的廠商(手機,平板)常常喜歡用sRGB的覆蓋率來吹自己的屏幕色域範圍廣,什麼100%sRGB覆蓋甚至125%覆蓋。其實就是把圖中藍色那個三角給覆蓋了,遠遠不到CIE全部範圍的一半。為了賣好產品,吹也很過分了。現在普遍流行的是用NTSC覆蓋率來衡量色域範圍,能做到70%以上其實範圍就很廣了遠遠大於我們人眼常見的範圍。當然如果顯示光源的三基色越'基『,峰寬越窄,那麼mix後的色域範圍將會越廣。
寬色域帶給你的直觀感受大概是什麼呢?大概長這樣,當然會受到你現在看到的顯示設備的影響,但是大概就是這種感覺。
補充一個思考的問題:如果我們拿到一幅光譜圖,僅僅是等比例的增加或減少總體強度(縱向拉伸)來改變光的亮度,是否會在CIE的色度坐標會發生改變呢?