sRGB色彩空間
此條目需要補充更多來源。 (2018年9月8日) |
sRGB色彩空間(standard Red Green Blue,標準紅綠藍色彩空間)是惠普與微軟於1996年一起開發的用於顯示器、印表機以及互聯網的一種標準RGB色彩空間。這種標準得到了W3C、Exif、英特爾、Pantone、Corel以及其它許多業界廠商的支援,在GIMP這樣的開放原始碼軟件也支援這種標準,另外一些專有的或者像SVG這樣的開放圖形檔案格式中也有應用。
sRGB最初設計的目的是作為生成在互聯網以及萬維網上瀏覽的圖像的通用色彩空間,最後選擇的是使用Gamma校準係數為2.2的色彩空間,即CRT顯示器在這種情況下的平均線性電壓響應。
這裏值得重視的是sRGB的設計與當時(1996年)不算理想色彩空間的CRT顯示器相匹配。當時大量的專業或者個人電腦軟件,使用8位元深度的圖檔,並且不經轉換就在8位元/通道的顯示器上顯示。許多時髦的非CRT硬件,如LCD、數碼相機以及印表機,儘管本身並不生成sRGB曲線,但是都帶有補償電路或者軟件以遵循這個標準。在一些高端的專業裝置上可能並不遵循這個標準。因此,我們可以假定任何不帶顏色組態表或者其它資訊的8位元圖檔、8位元圖像API或者裝置介面,都處於sRGB色彩空間。
綜述[編輯]
sRGB定義了紅色、綠色與藍色三原色的顏色,即在其它兩種顏色值都為零時該顏色的最大值。在CIE xy顏色坐標系中紅色位於[0.6400, 0.3300]、綠色位於[0.3000, 0.6000]、藍色位於[0.1500, 0.0600]、白色是位於[0.3127,0.3290]的D65。對於任何的RGB色彩空間來說,非負的R、G、B都不可能表示超出原色定義的三角形即色域範圍,它剛好在人眼的色彩感知範圍之內。
sRGB還定義了原色強度與實際儲存的數值之間的非線性變換。這個曲線類似於CRT顯示器的gamma響應。重現這條曲線要比sRGB圖像在顯示器上正確顯示更加重要。這個非線性變換意味着sRGB非常高效地使圖檔中的整數值表示了人眼可以分辨的顏色。
sRGB由於它的色域不夠大,尤其是藍-綠顏色色域無法表示CMYK印刷中的所有顏色,所以通常印刷行業的專業人員不用這種模型。而Adobe RGB是印刷行業經常使用的色彩空間。
變換的規範[編輯]
從CIE xyY或者CIE XYZ到sRGB的前向變換[編輯]
從CIE xyY坐標系計算sRGB中的三原色首先需要將它變換到CIE XYZ三值模式。[1]
- <math>X = Y x / y,\,</math>
- <math>Z = Y (1- x - y)/y\,</math>
這樣XYZ值就可以用矩陣轉換到線性的RGB值,這些線性值並不是最終的結果。
- <math>
\begin{bmatrix} R_{linear}\\G_{linear}\\B_{linear}\end{bmatrix}= \begin{bmatrix} 3.2410&-1.5374&-0.4986\\ -0.9692&1.8760&0.0416\\ 0.0556&-0.2040&1.0570 \end{bmatrix} \begin{bmatrix} X \\ Y \\ Z \end{bmatrix} </math>
<math>R_{linear}</math>、<math>G_{linear}</math>與<math>B_{linear}</math>的取值範圍為[0,1]。sRGB是反映真實世界gamma為2.2的典型顯示器的效果,因此使用下面的變換公式將線性值轉換到sRGB。設<math>C_{linear}</math>為<math>R_{linear}</math>、<math>G_{linear}</math>或者<math>B_{linear}</math>,<math>C_{srgb}</math>為<math>R_{srgb}</math>、<math>G_{srgb}</math>或者<math>B_{srgb}</math>:
- 如果<math>C_{linear} <= 0.00304\,</math>則<math>C_{srgb}=12.92 C_{linear}\,</math>
- 如果<math>C_{linear} > 0.00304\,</math>則<math>C_{srgb}=(1+a)C_{linear}^{1/2.4}-a\,</math>
- <math>a = 0.055\,</math>
這些經過gamma校正的值範圍為0到1。如果需要0到255的取值範圍,如用於影片顯示或者8位元圖形,通常將它乘以255然後取整。
逆向變換[編輯]
假設sRGB分量的值<math>R_{srgb}</math>、<math>G_{srgb}</math>、<math>B_{srgb}</math>的取值範圍為0到1。
- <math>
\begin{bmatrix} X\\Y\\Z\end{bmatrix}= \begin{bmatrix} 0.4124&0.3576&0.1805\\ 0.2126&0.7152&0.0722\\ 0.0193&0.1192&0.9505 \end{bmatrix} \begin{bmatrix} g(R_{srgb})\\ g(G_{srgb})\\ g(B_{srgb})\end{bmatrix} </math>
其中
- 對於<math>K>0.04045\,</math>有<math>g(K) = \left(\frac{K+a}{1+a}\right)^\gamma</math>
- 否則<math>g(K) = \frac{K}{12.92}\,</math>
變換的理論基礎[編輯]
變換的非線性部分是為了逼近2.2的gamma校正而設計的,但是在K=0斜率不為0,這樣可能會產生數值計算的問題。對於sRGB變換來說這大致正確。在<math>K_0</math>處的g(K)為:
- <math>\left(\frac{K_0+a}{1+a}\right)^\gamma=\frac{K_0}{\phi}</math>
使用上面的標準值<math>\phi=12.92</math>,得到<math>K_0</math>=0.04045...這就是常用的變換。如果我們要求斜率也要匹配,那麼需要:
- <math>\gamma\left(\frac{K_0+a}{1+a}\right)^{\gamma-1}\left(\frac{1}{1+a}\right)=\frac{1}{\phi}</math>
這樣就得到兩個方程。假設未知變量為<math>K_0</math>與<math>\phi</math>,這樣就得到<math>K_0</math>=0.03928...與<math>\phi</math>=12.9232.... sRGB規範中有時也使用這些值進行計算,但是它們並不屬於標準的一部分。
應用[編輯]
作為互聯網上推薦使用的色彩空間,在編輯、儲存用於WWW的圖像的時候要sRGB標準,但是由於與其它色彩空間相比它的色域較小,因此用於專業印刷的圖像如印前輸出則可以使用Adobe RGB那樣有較大色域的色彩空間。在一些先進的硬件上的另外一種替代方法是仍然使用sRGB原色模式但是使用負值或者超過1的亮度,這樣就可以無限擴大色域。
用其它色彩空間生成的用於互聯網的圖像在使用合適的圖像編輯軟件進行編輯的時候可以將它們轉換成sRGB,這些軟件有Corel Paint Shop Pro以及Adobe Photoshop等等。儘管最初的非sRGB檔案可以儲存並轉換為sRGB,但是由於這個轉換過程可能會遺失圖像資訊,所以建議儲存為另外的檔案以儲存原始的非sRGB圖檔。
由於在互聯網上的廣泛應用,以及許多中低階的消費型數碼相機、掃描器都使用sRGB模型作為預設模式或者是僅有的色彩空間,同時由於噴墨印表機的應用,因此許多人認為sRGB色彩空間對於家庭應用來說已經足夠了。
兩種佔據主導位置的三維圖形編程介面OpenGL與Direct3D都整合有sRGB。OpenGL 2.1中包含有首次在EXT_texture_sRGB擴充中引入的sRGB紋理。OpenGL的EXT_texture_sRGB擴充支援線性或者sRGB色彩空間的渲染緩衝。DirectX 9支援sRGB紋理以及用Direct3D渲染成sRGB表面。
參考文獻[編輯]
- ↑ A Standard Default Color Space for the Internet - sRGB(頁面存檔備份,存於互聯網檔案館),其中包含XYZ空間的轉換公式
標準[編輯]
- IEC 61966-2-1:1999是官方正式的sRGB規範。它定義了檢視所需環境、編碼以及色度計量的規範。
- A1:2003修正案 (頁面存檔備份,存於互聯網檔案館)針對IEC 61966-2-1:1999描述了YCbCr色彩空間的sYCC編碼,擴充色域RGB編碼,和CIELAB編碼轉換。
- sRGB (頁面存檔備份,存於互聯網檔案館),出自國際色彩聯盟
- IEC 61966-2-1 2CD部分的第4版草案可從網絡取得(存檔),並非完善的標準
- sRGB.com的網頁存檔,關於sRGB的設計、準則和使用