色彩(颜色)空间原理(中)
色彩(顏色)空間原理(中)
顏色的線性變換
現(xiàn)在我們知道如何定義RGB顏色空間,以及如何使用伽瑪曲線在線性和伽瑪校正值之間進(jìn)行轉(zhuǎn)換。剩下的最后一步是將線性RGB顏色轉(zhuǎn)換為XYZ顏色。一旦進(jìn)入XYZ空間,我們就可以轉(zhuǎn)換回我們選擇的任何RGB空間,但這實(shí)際上只是開始。因?yàn)閄YZ空間是定義其他顏色的標(biāo)準(zhǔn)顏色空間,所以我們可以選擇轉(zhuǎn)換為許多非RGB顏色空間,例如在感知上更統(tǒng)一的Lab顏色空間或生物驅(qū)動(dòng)的LMS顏色空間。
線性RGB空間和XYZ空間之間轉(zhuǎn)換的基本部分是認(rèn)識到它們都是矢量空間。這基本上意味著數(shù)字以線性方式縮放。相反,經(jīng)伽瑪校正的sRGB空間以非線性方式縮放亮度,因此不是亮度的矢量空間。如果您有某種數(shù)學(xué)迷信并且想更深入地研究該主題,請查閱 格拉斯曼定律,該定律將色彩感知視為線性組合。
知道我們在向量空間內(nèi)工作時(shí),便可以使用各種線性代數(shù)工具。我們將使用的線性代數(shù)中的一種這樣的工具是根據(jù)另一種顏色空間定義一種顏色空間的基礎(chǔ)。這類似于在3d空間中定義對象的變換。
正如我們前面所討論的,RGB顏色空間是通過將三種原色相加而建立的。第一個(gè)原色靠近光譜的紅色部分。第二個(gè)接近綠色。第三個(gè)接近藍(lán)色。為了獲得黃色,我們將紅色和綠色原色相加。此操作可以視為3維矢量加法。讓向量一世一世, ?? 和 ?? 分別等于我們的原色紅色,綠色和藍(lán)色,這樣
看來我們已經(jīng)使局勢復(fù)雜化了,但它會(huì)有所收獲。首先,讓我們來看一些以這種方式定義顏色的示例。
在上面的例子中,RGB原色i、j和k是根據(jù)它們自己的RGB顏色空間定義的,這使得這些值相當(dāng)簡單。當(dāng)我們開始處理不同的顏色空間(如XYZ)時(shí),事情變得更加有趣。
目標(biāo)是找到與線性RGB空間的原色相匹配的三種XYZ顏色。一旦在XYZ空間中有了i、j和k,就可以使用相同的r、g和b標(biāo)量來找到RGB顏色的XYZ值。我會(huì)馬上討論如何推導(dǎo)這些新的初值,但首先我們假設(shè)我們已經(jīng)知道它們的值,這樣我們就可以用一個(gè)例子來說明這個(gè)過程。設(shè)l是XYZ空間中的紅色主元素,m是XYZ空間中的綠色主元素,n是XYZ空間中的藍(lán)色邊緣元素。
我們現(xiàn)在可以計(jì)算XYZ空間中的任何線性RGB顏色,將其作為XYZ空間中主色的線性組合。
推導(dǎo)變換矩陣
如先前所示,從線性RGB空間到XYZ空間的轉(zhuǎn)換矩陣具有從XYZ空間中的主要RGB顏色構(gòu)建的列。為了找到這些值,我們需要將RGB空間的xy色度坐標(biāo)用于紅色,綠色,藍(lán)色和白色。注意,我們只有x和y坐標(biāo)。如前所述,我們可以根據(jù)x和y計(jì)算z坐標(biāo),但是我們需要X,Y或Z才能轉(zhuǎn)換回XYZ坐標(biāo)。就目前而言,我們沒有足夠的信息從xy色度空間到XYZ空間,但是按照我們轉(zhuǎn)換的意圖,我們可以再做一個(gè)假設(shè)。
讓我們澄清一下此轉(zhuǎn)換的目的。前面我提到過眼睛如何適應(yīng)照明環(huán)境,以選擇應(yīng)被視為白色的顏色。為了我們的目的,我們希望將感知到的白色視為最大亮度。這意味著,如果我們從RGB空間A轉(zhuǎn)換為XYZ空間然后再轉(zhuǎn)換為RGB空間B,我們希望RGB空間A中的白色保持RGB空間B中的亮度。我們要做的就是確保當(dāng)RGB空間轉(zhuǎn)換為XYZ空間時(shí),白色值始終以一致的Y(即一致的相對亮度)結(jié)束。
我提到過,只要我們保持一致,就可以為白點(diǎn)選擇任何Y發(fā)光度,但是標(biāo)準(zhǔn)做法是使用Y值為1以獲得全亮度。有時(shí),您可能會(huì)看到100的Y表示全亮度,但是在這種情況下,標(biāo)準(zhǔn)值為1。有了白色的目標(biāo)Y值,我們現(xiàn)在有足夠的約束來求解矩陣。讓我們列出我們開始的變量。
目標(biāo)是求解列主變換矩陣M,它將從線性RGB空間轉(zhuǎn)換到XYZ空間。第一步是使用前面討論的方程z=1?x?y將所有xy色度坐標(biāo)轉(zhuǎn)換為xyz色度坐標(biāo)。
我們知道所有的xyz初值,因此知道上面等式中的左矩陣。我們的未知數(shù)現(xiàn)在降到構(gòu)成右矩陣的三個(gè)標(biāo)量值。請注意,雖然每個(gè)標(biāo)量都被寫成X、Y和Z分量的和,但我們真正關(guān)心的只是求和結(jié)果,而不是各個(gè)部分。這就是為什么我說只有三個(gè)未知數(shù),而不是九個(gè)。為了解決這三個(gè)未知數(shù),我們將使用已知的白點(diǎn)RGB和XYZ值。因?yàn)镸從RGB變換到XYZ空間,所以我們可以聲明如下等式:
現(xiàn)在我們將把方程的每邊乘以剩下的3x3矩陣的逆。這將把我們所有的已知值放在方程的左邊,我們的未知值放在右邊。如果您不熟悉3x3矩陣的逆運(yùn)算,我將在本文的末尾提供代碼,但出于理智起見,這里不會(huì)編寫完整的推導(dǎo)。Google應(yīng)該提供大量關(guān)于這個(gè)過程的結(jié)果,包括Wikipedia和Mathwords的這一個(gè)。
我們現(xiàn)在可以重建我們的RGB到XYZ轉(zhuǎn)換矩陣M。將wXYZ向量乘以上述3x3矩陣的倒數(shù)將得到將主XYZ坐標(biāo)轉(zhuǎn)換為XYZ坐標(biāo)的標(biāo)量值。這是我們從M中分解出來的標(biāo)量矩陣的三個(gè)未知數(shù)。
為了得到相反方向的矩陣變換(從XYZ空間到線性RGB空間),我們可以使用M的逆矩陣。我們也可以用與上面類似的方式來推導(dǎo)矩陣,但是在這么多類型化之后,僅僅使用逆似乎是一種更簡單的方法。
總結(jié)
以上是生活随笔為你收集整理的色彩(颜色)空间原理(中)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 色彩(颜色)空间原理(上)
- 下一篇: 色彩(颜色)空间原理(下)