數值是如何工作的
我們暫且中斷一下我們的討論,轉而考察一下我們在計算機里如何以數字的形式來描述顏色,或更精確地說,是編碼的方法。我們將利用這個機會澄清一些經常使人們犯糊涂的問題。這些問題是數字化顏色的基礎,不弄清這些問題就有可能將這些糊涂觀念傳遞給色彩管理的使用,造成進一步的混淆。即使你非常熟悉有關二進制單位、字節、階調和顏色這一些基本概念,這一節也值得回顧一下。因為我們將要提出幾個關鍵性問題,是有關用數字表示的顏色與“真實世界”中的顏色,地者之間差別方面的體驗。
計算機用數字將顏色進行編碼的體系實際上非常簡單:顏色值由幾個通道的數據組成,而每一個通道又被分割為不同的階調等級。就是這么簡單!我們從一個簡單的顏色感覺模型開始。事實上,所有顏色都是由紅、綠、藍色的光以不同強度混合而成的,我們按這樣一個顏色模型進行編碼,使之可以有效地存儲、計算和傳輸顏色。在我們的編碼系統中,通道數一般為三個,基本與我們感知顏色時使用的三原色方式相對應。編碼系統中的階調等級通常是256,對應于能夠使我們產生連續調感覺所需要的最少階調數量,也就是為了避免產生諸如條杠或階調跳躍等贗像,不使觀察者從圖像中看出從一個階調到下一個階調之間出現明顯不連續過渡感覺所需要的階調等級數量。
為什么是256級
256這個數字在某些人看起來似乎是很武斷和不可理解的。但是,這個數字在計算機和顏色的討論中出現得太頻繁了,因此值得將它的意義搞清楚。它并非那么神秘。我們只是期望能夠表現出足夠的階調等級,保證觀察者不會看出兩個相鄰階調等級之間的階調差別。研究表明,對于多數人來說,能夠產租平滑漸變效果的階調等級數量大約需要200級左右。那么,為什么不就只編碼成200級呢?為什么是256級呢?這里有兩個原因。
留出余量。在實際應用中,讓數據留有額外的階調等級余量是非常有用的,這是因為在復制過程的每一階段(掃描、顯示、編輯、轉換、計算、打印),都不可避免地會發生階調損失,階調等級余量可以保證不會因為階調損失而出現條杠,這一點對色彩管理來說是非常關鍵的。
二進制位。第二個原因就是我們使用數字位(比特)來表示這些階調等級的值。7位二進制數字位僅能編碼出128個階調等級(27),肯定會使圖像中的天空出現條杠,在時裝模特的面頰上出現斑點。8位編碼能有256個階調等級(28),不僅可以滿足階調等級的需要,而且還有小小的余量。第三個采用8位的理由是,計算機是以字節能單位進行存儲的,8個二進制位正好是一個字節。由8位構成的數量已經有很多用途了。例如,它非常適合存儲一種字體的外形,可以容納256個不同的字符形狀,包括所有西文字母、數字和標點符號。一個字節的存儲量對于編碼階調等級也是非常優秀的,這個數量與人類視覺系統對階調的分辨等級正好吻合,這看起來似乎是一種不可思議的巧合,可工程師們太喜歡這種不可思議了。
數百萬種顏色
于是,用8位編碼,可以形成每個顏色通道256個階調等級,這睚好符使用們希望在每個通道內存儲的最小階調等級數量。就RGB圖像而言,三個通道的每一個都用8位存儲,合起來就是24位(這正是為何許多人交替使用“8位顏色”和“24位顏色”兩種術語來表示這同一件事情的原因)。如果三個通道的每一個通道都是256個階調等級的話,則顏色編碼的總數就是256×256×256,或者(拿出你的計算器)大約是1680萬種顏色!我們用24位存儲量(或小小的三個字節)就能編碼出這么多種不同的顏色啊!
盡管這種基于3個通道、每通道8位的編碼方式是常用的方法,因為它是以人類感知顏色的方式為基礎的,但我們在需要的時候也可以很輕易地將它進行擴展。為能夠比人眼識別更多顏色的設備提供顏色編碼,這種擴展可以通過增加通道數量或增加每一通道內的存儲字節來實現。例如,當我們為一臺CMYK打印機準備一幅圖像時,我們將通道由三個增加為四個通道編碼,這并不是因為我們需要得到更多的可編碼顏色數(實際上,我們需要的會更少),而是因為要為四色油墨的每一色分配一個通道,這是很自然的事情。
類似地,當要存儲由一臺顏色識別能力超過256級的RGB掃描儀所采集的圖像時,我們經常將8位編碼擴展,更高為16位編碼(即所謂的“10位”、“12位”和“14位”掃描儀。盡管如此,因為我們都用整數字節來存儲文件,所以實際上并不存在“10位”、“12位”和“14位”的文件格式,而只有8位和16位的文件格式)。
一人需要記住的關鍵問題是,我們這里談論的所有內容都是關于編碼的,也就是使用一系列可以利用的數值來對顏色進行定義的方法。然而,計算機可編碼的顏色數量遠遠超出了實際可復制的顏色數量。實際上,它也遠遠遠地超出了可感知顏色的數量。類似高端掃描儀這樣的設備,能夠比人類眼睛“感知”到更多的階調等級,我們通常就可以通過擴展編碼位數來解決編碼問題。編碼要解決的所有問題在于,每一種顏色都必須具有惟一的編碼,因而可編碼的數量總要多于我們實際所需要的顏色數量,就像電話公司必須保證每部電話有惟一的號碼,于是就要準備多于實際使用電話數量的號碼一樣。
我們之所以要討論這個問題,是因為它是理解用抽象的數字所表示的顏色,與用“真實世界”的復制設備,如打印機、顯示器、掃描儀等,將這些數值能再現的相應顏色感覺之間的差別。要是你考察一下在實際中那些顏色數值是如何被設備翻譯成“真實世界”顏色感覺的話,你就會發現,顏色值與所再現的顏色感覺二者的差別是非常大的。
正由于這些內容有助于理解顏色數值是如何工作,解釋為什么我們到處都可見到像256或1680萬這樣的數字。但請不要忘記,直到它們被彩色設備翻譯成真正的顏色感覺以前,它們只不過是一些純粹的數字而已。
顏色定義與顏色
許多人都將定義顏色的數值與顏色的數值搞混淆。例如,我們說發送給CMYK打印機的顏色自然要編碼為四個通道的數據,那么,8位編碼的CMYK顏色真能達到256×256×256或43億個不同顏色嗎?理論上是的。任意四個通道都能產生43億個編碼,但當我們為這四個通道賦予C、M、Y和K數值的時候,我們并不能通過第四個通道(K)增加更多的實際顏色。事實上,許多CMYK編碼表示的是相同的顏色。例如,50C、50M、50Y、0K組成的顏色,在理論上與0C、0M、0Y、50K產生的是同樣的暗灰色。因此顏色編碼有許多是多余的。這樣一來,可能就會有人爭論,是否增加了額外的K值就真能夠比使用CMY三個顏色通道得到更多的階調層次。但是這樣會使我們現在要討論的問題更復雜化了,還是讓我們只簡單地說,8位CMYK編碼的實際顏色總數遠遠要少于43億吧。
另一個例子是,我們曾經說到,有的掃描儀聲稱能夠識別出遠遠多于8位編碼的256個階調層次。他們聲稱能夠達到10位、12位,甚至14位的分辨能力。許多人都將這個顏色編碼與掃描儀的密度動態范圍弄混。密度動態范圍是指掃描儀從能夠可靠分辨層次的最亮白色,到能夠可靠分辨層次的最暗黑色所構成的階調范圍。很多掃描儀制造廠家都聲稱這些“高比特”掃描儀能夠提供比8位更大的密度動態范圍,這種說法都是在混淆視聽。密度動態范圍是圖像采集設備能獲取模擬信號的界限范圍,無論如何與編碼位深度沒有任何關系。高比特僅僅將設備的密度動態范圍劃分為更多的不連續梯級,使我們在編輯圖像時具有更大的選擇余地。你可以將密度動態范圍理解為樓層的高度,而顏色位深則是樓梯所包含的臺階數量。顯然,如果我們想要梯級盡可能小(這樣做是為了避免階調的跳變或條杠),密度動態范圍大的要比密度動態范圍小的需要更多的梯級,但密度動態范圍與梯級這兩者之間并沒有直接和必然的關系。