很多人認為,只要拿起相機,按下快門,我們想拍攝的東西,就會——
透過某種神奇的程序——
完整地進入相機的儲存卡。所以,攝影者要做的,只是把這個儲存檔案顯示在螢幕上,或直接印出來,就可以得到如同眼睛所見場景一模一樣的影像或照片。這種概念還有另一層含意:相機所擷取的資料,如果經過電腦軟體加工,影像就不再「真實」,蘊含某種程度的「欺騙」,也是正統攝影者所不該做的。
真是如此嗎?
目前這篇文章就是想討論這個主題:「數位影像究竟是如何產生的?」換言之,本文主題是所謂的「數位影像處理程序」(
image processing pipeline
)。
*****
***** *****
數位相機所擷取的資料究竟是什麼?
當我們按下快門,相機究竟拍到什麼東西?(這篇文章的內容取材自我部落格的一篇文章『數位影像為何需要經過後製』。)
數位相機的感應器(
sensors
),佈滿一系列方格狀的「畫素」,它們就像水桶收集雨水一樣,用以收集光線的「光子」(
photons
)。當光線落在感應器上,每個畫素都會收集光線的能量構成元素「光子」。然後,感應器計算每個畫素所收集的光子數量,經由對於光線敏感的光電兩極體(
photodiode
),將光子數量轉換為電荷。電荷再轉換為電壓,電壓經過擴大,又經由「類比
-
數位轉換器」(
analog
to digital converter
,簡稱
ADC
),把類比訊號轉換為電腦軟體能夠處理的數位訊號(由
0
與
1
構成的資料)。這就我們按下快門,相機所擷取的資訊:由
0
與
1
構成的一系列
亮度
資訊(甚至沒有色彩),也是一般所謂的
raw
檔。
請注意,目前的數位相機大多採用貝爾型態的感應器(參考圖
01
),只能夠透過畫素配備的光電兩極體衡量光線亮度,不能區別光線波長(所以
數位相機根本沒有能力直接擷取場景的色彩
)。因此,感應器之上,必須裝置「彩色濾片陣列」(
color filter
array
,簡稱
CFA
),這也是圖
01
顯示的馬賽克型態彩色濾片,讓它們濾出落在該畫素位址之光線的紅色、綠色或藍色成分。圖
01
顯示的這種
CFA
,是由
25
%的紅色、
50
%的綠色與
25
%的藍色濾片構成,稱為
GRGB
貝爾型態(
GRGB Bayer Pattern
)。請特別注意,
每個畫素上的濾片都只有 一種顏色
(或是紅色,或是綠色,或是藍色),所以每個畫素偵測的亮度資訊,只夾帶一種色彩的資料,完全沒有另外兩種色彩的資訊;在
RGB
色彩系統裡,由於任何色彩都是由
R-G-B
共同形成的,所欠缺的另外兩種色彩資料,必須根據附近其他畫素的資料進行估計(詳見後文的「解馬賽克程序」)。
圖 001
每當我們按下快門,數位相機就會根據前述程序擷取資料,內容包括感應器每個畫素的亮度資訊,夾帶著
CFA
的色彩資訊(每個畫素只有紅
-
綠
-
藍濾片之中的一種顏色),這就是所謂的
raw
檔(特別強調,相機真正擷取的資訊,只有
亮度
資訊)。
Raw檔如何轉化為一般影像?
任何數位相機都只能拍攝
raw
檔。至於數位相機拍攝的
raw
檔,如何才能產生色彩,然後演變為一般可觀賞影像,則需要透過電腦軟體的一系列後續製作與解釋。這也是此處想要討論的「影像處理程序」。圖
02
呈現的只是大體上的概念,因為每種
raw
檔轉換軟體的實際處理程序都未必相同。
圖
02
讓我們稍微解釋這個流程圖。首先是解馬賽克程序(
demosaicing
process
)。相機拍攝取得
raw
檔,其中包含每個畫素的亮度資訊,夾帶著
CFA
的色彩資訊。請參考圖
03
,裝置在相機感應器前面
GRGB
的
CFA
,使得每個畫素只能產生
R-G-B
之中的
一種
色彩讀數,另外兩種色彩資訊則是經過插補(
interpolation
)或解馬賽克程序估計取得的。唯有透過解馬賽克程序,每個畫素才有完整的
R-G-B
色彩資料。這個程序,請參考圖
03
。
圖 03
CFA
濾鏡上,對應每個畫素的濾片,其中通常有
25
%為紅色,
50
%為綠色,還有
25
%為藍色。綠色濾片的數量最多,因為人類肉眼對於綠色最敏感。由於紅色濾片只佔整個感應器畫素的
25
%,所以整個影像的紅色資訊,
有75%是經由電腦軟體估計得來的
;同理,有
50
%的綠色資訊與
75
%的藍色資訊都是經過估計或解釋得來的。
由於每個畫素的另外兩種色彩資訊,都必須根據周遭畫素的資料進行估計,這涉及插補的程序,因此而造成影像的銳利程度下降,這稱為「解馬賽克假影」(
demosaicing artifacts
)。換言之,畫素經過插補而呈現的色彩,雖然很接近理論上應該呈現的精確色彩,但畢竟不會完全相同,這種現象最在色彩差異很大的邊界區域尤其明顯(請參考圖
04
)。
圖04
紅色蓮花與綠水的邊界畫素,原本應該是「紅」「綠」分明的,但「解馬賽克運算」造成紅色侵入綠色部分,綠色也侵入紅色部分,請注意黃線圈起來的
2
×
2
畫素範圍。可是,隨著感應器畫素增加,再加上軟體進步,這種「解馬賽克假影」的影響已經愈來愈小了。
請注意,每家相機製造商或
raw
檔轉換軟體的解馬賽克運算都不盡相同;所以,即使相機感應器相同,影像性質也可能顯著不同。
讓我們回到圖
02
。
Raw
檔經過解馬賽克程序之後,這些數據必須經過線性化。大體上來說,數位相機感應器本身就是線性的。現在,每個畫素都有
R-G-B
的資訊,但這些紅
-
綠
-
藍究竟是怎麼樣的紅(綠或藍),如果沒已經過明確的定義,只是很模糊的概念。所以,對於這些色彩讀數所代表的真正色彩,我們必須給予明確的定義,這通常是透過一個
3
×
3
的矩陣,把相機
RGB
讀數,映射到
CIE XYZ
之類的色彩空間(這類空間的色彩具有明確定義)。前述映射過程,要考慮曝光亮度與白平衡的調整。然後,影像再由
CIEXYZ
轉換到特定
Gamma
的一般
RGB
空間(譬如:
AdobeRGB
或
sRGB
)。
此處有幾點特別值得注意。數位相機擷取的資料,基本上線性資料(場景的實際亮度與相機記載的讀數,兩者之間成固定比例關係,場景亮度增加一倍,記錄讀數也增加一倍)。這和人類視覺或其他感覺系統是完全不同的。所以,由
raw
檔轉換出來的一般影像,需要映射到比較符合人類視覺之亮度變動比例關係的色彩空間(通常是
gamma
為
1.8
或
2.2
)。
關於圖
02
顯示的程序,攝影者雖然能夠選擇採用哪種
raw
檔轉換軟體,但對於轉換程序內的某些動作,原則上是沒有辦法控制,譬如:解馬賽克程序與線性化。可是,關於另外一些行動,攝影者是可以控制的,例如:白平衡設定、曝光補償調整、選擇影像的
RGB
空間、其他非線性調整、階調曲線、雜訊、銳利化…等。真正講究的人,甚至可以透過相機校正來控制相機
RGB
轉換到
CIE XYZ
的程序等,讓影像儘可能顯示場景的真實色彩。
總結:數位相機只能拍攝
raw
檔。換言之,數位相機每有辦法直接拍攝影像,它只能透過感應器上包含的每個畫素,擷取的亮度資料(夾帶
CFA
的不完整色彩資訊)。所以,
raw
檔只是一種數碼檔案;除非經過後續製作與處理,這個數碼檔才能變成肉眼看得見的影像。(這個世界上沒有數位相機直接拍攝而不需要後續處理編輯的影像。)
進一步討論
這方面幾乎有討論不完的話題(這應該也是攝影之所以有趣的部份原因),歡迎有興趣的人可以做進一步延伸:
1.
拍攝
raw
檔與
Jpeg
檔,兩者有什麼差別?
2.
相較於傳統底片,數位攝影有什麼值得特別注意之處?
3.
如何建構自己的影像處理程序(
workflow
)?應該考慮什麼?
4.
如何儘可能取得「對應真實場景」(
scene-referred
)的影像?
5.
………