輕輕一按堪澎,你的相機(jī)就把光子轉(zhuǎn)換為了比特。于是一張相片就保存到了你的 iPhone 里缕陕。
讓我們假設(shè)一下你身處室外粱锐,環(huán)顧四周。三億里之外扛邑,太陽無時(shí)無刻不在發(fā)射光子怜浅。它們需要花上 8 分鐘之久才能到達(dá)我們舒適的星球。有一些光子撞擊到你周圍的物體,并反射到你眼睛的視網(wǎng)膜上恶座,這會(huì)使你的大腦以這些物體為基準(zhǔn)搀暑,創(chuàng)建一副圖像,我們將其稱之為視覺跨琳。
攝影要做的就是捕獲這幅圖像自点。攝影是在 200 年前被發(fā)明的,但在此之前的好幾千年里脉让,人類已經(jīng)通過繪畫的方式來捕捉他們所看到的東西了桂敛。
我們中的很多人其實(shí)每天都相機(jī)不離身:當(dāng)今智能手機(jī)已經(jīng)是最常用的相機(jī)之一了。在數(shù)碼攝影的時(shí)代之前侠鳄,攝影通常是記錄在紙上或者膠卷上的埠啃。而今天,攝影將光轉(zhuǎn)換為比特信息伟恶。
這篇文章將帶你探索這一切是怎么發(fā)生的:智能手機(jī)的相機(jī)到底是如何工作的碴开。
快門速度,感光度 (ISO)博秫,光圈
在我們深入將光子轉(zhuǎn)換為 JPEG 文件之前潦牛,我們先來看看相片的一些基本概念。這些概念不僅在過去的膠卷攝影時(shí)有效挡育,在今天也是同樣的巴碗。在不久之前,幾乎所有的攝影都是通過膠卷完成的即寒。與今天使用數(shù)碼感光器不同橡淆,那時(shí)候成像依賴的是受光照影響的生化反應(yīng)。但因?yàn)樵谂臄z相片中其他所有東西都遵循同樣的原則母赵,所以對(duì)笨重的膠卷相機(jī)和膠卷攝影適用的規(guī)律一樣會(huì)在使用 iPhone 拍攝時(shí)適用逸爵。
進(jìn)光量
拍攝一張相片的過程有時(shí)候被稱之為曝光。曝光也指單位面積上光的數(shù)量凹嘲。為了相片亮度合適师倔,光的數(shù)量也需要在一定的范圍內(nèi)。如果我們沒有捕獲足夠的光周蹭,那么相片就會(huì)欠曝- 圖像被湮沒在圖像傳感器或者膠卷的固有噪聲中趋艘。如果我們捕獲的光太多,圖像就會(huì)過曝- 圖片傳感器/膠卷所接受的光過于飽和凶朗,無法區(qū)分不同的光的數(shù)量瓷胧,這意味著幾乎所有區(qū)域看上去曝光程度都是一樣的。
當(dāng)拍攝照片時(shí)棚愤,我們必須將相機(jī)調(diào)整到光線的量既不太高也不太低抖单。下面是同一個(gè)場(chǎng)景中欠曝和過曝的樣本,右手邊的顯示了使用 Pixelmator 調(diào)整了曝光后的情況。這個(gè)例子說明了要是一張照片過度地過曝或者欠曝的話矛绘,是沒有辦法進(jìn)行修復(fù)的:
未調(diào)整已調(diào)整
在欠曝圖像中耍休,即使我們嘗試將它調(diào)亮,圖像的暗部依然被 “卡” 在黑色货矮,我們沒有辦法讓圖像中的筆確實(shí)擁有不同的顏色羊精。過曝圖像中也有大部分區(qū)域被卡在白色或者灰色:編織帶和硬幣細(xì)節(jié)已經(jīng)完全丟失了。
曝光檔數(shù)
有三個(gè)要素可以影響曝光的進(jìn)光量:快門速度囚玫,光圈和感光度 (ISO)喧锦。我們稍后會(huì)仔細(xì)談?wù)勊鼈儭?/p>
在攝影中,通過調(diào)整這三者中任意一個(gè)來讓進(jìn)光量翻倍或者減半抓督,就叫做改變了 “一檔” 曝光燃少。每一檔曝光對(duì)于這三者 (快門速度,光圈和曝光度) 來說對(duì)應(yīng)的是不同的數(shù)字變化铃在。但如果我們將快門速度調(diào)整一檔阵具,我們需要通過調(diào)整 ISO 或者光圈一檔來進(jìn)行補(bǔ)償,才能獲取同樣的進(jìn)光量定铜。我們之后會(huì)馬上提及一些細(xì)節(jié)阳液。
有趣的是所有這三者 (快門速度,光圈和 ISO) 也會(huì)在曝光上影響其他要素揣炕。這三個(gè)參數(shù)有著無數(shù)種組合來達(dá)到同樣進(jìn)光量的結(jié)果帘皿,我們來仔細(xì)研究下:
快門速度
當(dāng)我們捕捉圖片時(shí),圖像傳感器捕捉一段時(shí)間的光線畸陡。這段時(shí)間被叫做快門速度鹰溜,因?yàn)樗硎玖丝扉T打開和關(guān)閉的快慢。
比如 1/50 秒的快門速度會(huì)讓圖像傳感器進(jìn)行 1/50 秒 (= 0.02 秒或者 20ms) 光線捕捉丁恭。如果我們將快門速度改變至 1/25s (40ms) 時(shí)曹动,圖像傳感器將捕捉兩倍時(shí)間長度的光,也就是兩倍數(shù)量的光子涩惑,或者說兩倍的進(jìn)光量。
對(duì)于快門速度來說桑驱,一檔表示將快門速度加倍或者減半竭恬。從 1/50 秒到 1/25 秒調(diào)整了一檔。
iPhone 6 的快門速度可以在 1/8000 秒到 1/2 秒之間調(diào)整熬的。我們可以通過改變快門速度來調(diào)整進(jìn)光量痊硕,但這也會(huì)影響圖像的清晰度。如果我們?cè)谂恼諘r(shí)相機(jī)和場(chǎng)景是完全靜止的押框,我們可以使用任意長的曝光時(shí)間 (快門速度)岔绸,但是更多情況并非如此。我們身邊的東西都一直在移動(dòng),特別是對(duì)于 iPhone 來說盒揉,相機(jī)本身也一直在移動(dòng)晋被。
當(dāng)物體移動(dòng)的足夠快的時(shí)候,它在整個(gè)曝光時(shí)間里便不會(huì)只停留在某一個(gè)點(diǎn)刚盈,這會(huì)導(dǎo)致圖片模糊羡洛。一般來說我們希望畫面清晰、不模糊藕漱,因此我們通常希望快門速度在 1/100 秒或者更快/更短欲侮。對(duì)于高速運(yùn)動(dòng)的物體的攝影,我們可能還需要選擇一個(gè)更快的快門速度肋联。但是我們也可以有意地選擇一個(gè)長的快門速度來讓物體模糊威蕉,以強(qiáng)調(diào)其運(yùn)動(dòng)感。這種情況下最好把相機(jī)固定在三腳架或者類似的東西上橄仍,這樣可以確保場(chǎng)景中固定的物體仍然保持清晰纱新。
感光度 (ISO)
ISO 值也被稱作膠卷速度。在數(shù)碼攝影中伙狐,它被用來衡量圖像傳感器對(duì)光的靈敏程度抒钱,以及因此帶來的曝光噪音。實(shí)際上的細(xì)節(jié)非常復(fù)雜鼎天,Wikipedia 會(huì)給你一個(gè)更詳細(xì)的解釋舀奶。
iPhone 6 可以將相機(jī)在 ISO 32 至 ISO 1600 之間調(diào)整 ISO 值。一檔對(duì)應(yīng)翻倍或者減半 ISO 值斋射。每次我們將 ISO 加倍 (比如從 ISO 100 到 ISO 200)育勺,我們就只需要一半的進(jìn)光量。我們?yōu)榇耸且冻龅?b>代價(jià)的罗岖,那就是相片的噪點(diǎn)將會(huì)變多涧至。
在 ISO 32 時(shí),iPhone 傳感器得到的圖片將會(huì)有最少的噪點(diǎn)桑包,但是同時(shí)也需要最多的光南蓬。在 ISO 1600 時(shí),iPhone 圖像傳感器就只需要 1/50 (2%) 的進(jìn)光量哑了,但是圖片會(huì)有更多的噪點(diǎn)赘方。
這里有用三腳架架上 iPhone 6 后同樣場(chǎng)景的兩個(gè)樣本、這些圖片是從整幅相片中裁取的一小部分弱左。左邊的使用的是 ISO 32 和 1/3 秒曝光窄陡。右邊的是 ISO 1600 和 1/180 秒曝光。捕獲的進(jìn)光量基本是一致的拆火,但是左邊的噪點(diǎn)要比右邊的少跳夭。但是如果沒有三腳架的話涂圆,我們是無法使用 1/3 秒的曝光時(shí)間來拍出銳利的相片的。
ISO 32ISO 1600
光圈
最后币叹,相機(jī) (更確切地說是相機(jī)的鏡頭) 的光圈是用來衡量到達(dá)圖像感應(yīng)器的光所通過的通孔的大小的润歉。光圈值以F 比例 (焦比)來進(jìn)行標(biāo)定,比如 ?/5.6套硼,其中 5.6 表示鏡頭焦距與光圈 (也就是通孔) 的有效直徑的比例卡辰。
可能 F 比例會(huì)讓人有點(diǎn)迷惑。F 比例所對(duì)應(yīng)的一檔指的是當(dāng)前值與根號(hào) 2 (√? ? 1.4) 相乘或者相除邪意。在 ?/4 時(shí)九妈,我們所得到的光的量是 ?/2.8 時(shí)的一半。
當(dāng)使用 iPhone 相機(jī)時(shí)雾鬼,事情就變得簡單很多了萌朱,因?yàn)?iPhone 6 的光圈值是固定的,具體來說是 ?/2.2策菜。
除了影響進(jìn)光量晶疼,光圈還會(huì)對(duì)景深造成影響。這和對(duì)焦有關(guān)系又憨。相機(jī)中的光學(xué)系統(tǒng)會(huì)將與相機(jī)一定距離范圍內(nèi)的物體渲染清晰翠霍。當(dāng)我們改變光圈時(shí),這個(gè)距離范圍將變寬或者變窄蠢莺。我們可以用這個(gè)特性來達(dá)到一些很好的效果 (譯者注:比如人像的背景虛化等)寒匙。但很遺憾的是,我們不能調(diào)整 iPhone 的光圈大小躏将。
結(jié)合起來
在 iPhone 上锄弱,我們能調(diào)節(jié)的只有 ISO 和快門速度。因此我們需要在噪點(diǎn) (由 ISO 影響) 以及動(dòng)態(tài)模糊/銳利之間進(jìn)行權(quán)衡祸憋,同時(shí)保證相同檔次的曝光会宪。
這也解釋了為什么晚上拍出來的照片看起來要比白天拍出來的差:在晚上光線要少得多,為了仍然有一個(gè)可接受的快門速度蚯窥,自動(dòng)曝光系統(tǒng)將調(diào)高 ISO掸鹅,也許會(huì)被調(diào)到相機(jī)允許的最大值。要是即使這樣還是不能達(dá)到足夠的進(jìn)光拦赠,自動(dòng)曝光還會(huì)降低快門速度巍沙。這樣的組合就造成了畫面上更多的噪點(diǎn),以及圖像模糊矛紫。
有些iOS app可以讓你手動(dòng)調(diào)整曝光赎瞎。其中一種選擇是去調(diào)整EV (exposure value) 值(也就是曝光值)牌里。這種方式還是會(huì)使用相機(jī)的自動(dòng)曝光邏輯颊咬,但是你可以調(diào)整你想要的曝光程度务甥。-1 的 EV 值將會(huì)通過自動(dòng)曝光邏輯讓圖片欠曝一檔。自動(dòng)曝光邏輯仍然會(huì)自動(dòng)地選擇 ISO 和快門速度的組合 (因?yàn)樵?iPhone 相機(jī)上光圈是固定的)喳篇。
另一種選擇是使用快門優(yōu)先(通常被標(biāo)記為 S 或 Tv)敞临。這讓我們能都直接設(shè)置想要的快門速度,然后自動(dòng)曝光將自動(dòng)地調(diào)整 ISO 來達(dá)到合適的曝光麸澜。
最后挺尿,我們可以完全手動(dòng)控制曝光 (通常用 M 來表示),這種情況下我們需要自己調(diào)節(jié)快門速度和 ISO炊邦。當(dāng)這么做的時(shí)候编矾,我們通常會(huì)為了方便先自動(dòng)曝光一張,然后使用自動(dòng)曝光的參數(shù)來作為調(diào)節(jié)的起始點(diǎn)馁害。
那些允許你調(diào)整光圈的相機(jī)還有一種模式叫做光圈優(yōu)先(通常標(biāo)記為 A 或者 Av)窄俏。這種模式和快門優(yōu)先在概念上是對(duì)應(yīng)的,我們手動(dòng)控制光圈碘菜,然后讓自動(dòng)曝光邏輯去選擇快門速度 (以及 ISO 值凹蜈,除非它是固定的)。
有一些好辦法可以讓你獲取到好的自動(dòng)曝光忍啸。iOS 的自動(dòng)曝光邏輯將會(huì)檢查圖像的全部部分仰坦,然后去猜測(cè)你想要拍攝和曝光的主體是什么。如果畫面的一部分特別亮计雌,其他地方又特別暗的話悄晃,相機(jī)是不能把所有東西都曝光得很好的。所以在這種情況下自動(dòng)曝光必須選擇一些東西作為主體白粉,比如人的面部传泊。內(nèi)建的 iOS 相機(jī) app 也允許你通過點(diǎn)擊畫面來提示自動(dòng)曝光系統(tǒng)某個(gè)部分比較重要,應(yīng)該被良好曝光鸭巴,這會(huì)導(dǎo)致自動(dòng)曝光進(jìn)行調(diào)整眷细。相機(jī) app 還能讓你通過在屏幕上上下滑動(dòng)來調(diào)整曝光值。但是如果你想要直接去設(shè)置快門速度和/或 ISO 的話鹃祖,你就需要用另外的 app 了溪椎。
對(duì)焦
相機(jī)只能將離相機(jī)一定距離范圍內(nèi)的物體渲染清晰。在這個(gè)范圍內(nèi)的物體就是被聚焦的恬口,而如果太近或者太遠(yuǎn)而導(dǎo)致模糊的校读,它們就是失焦的。
包括 iPhone 在內(nèi)的大多數(shù)的相機(jī)都有自動(dòng)對(duì)焦 (AF)祖能,相機(jī)會(huì)猜測(cè)圖片的哪個(gè)部分需要被聚焦歉秫,并依此來調(diào)節(jié)焦距。iOS 內(nèi)建的相機(jī) app 允許用戶點(diǎn)擊某處來進(jìn)行對(duì)焦 - 有些 app 甚至可以讓用戶手動(dòng)調(diào)節(jié)焦距养铸。
光學(xué)組件
相機(jī)鏡頭是由一系列光學(xué)組件構(gòu)成的雁芙,它們負(fù)責(zé)引導(dǎo)和聚集光束轧膘。對(duì)相機(jī)焦距的調(diào)整,其實(shí)是通過物理移動(dòng)這些鏡頭組件來完成的兔甘。
模塊化相機(jī) - 比如單反- 可以讓你在不同的鏡頭間切換谎碍。即使是像 iPhone 這樣固定鏡頭的相機(jī),你也可以通過在內(nèi)建鏡頭前方再加裝額外鏡頭來調(diào)整相機(jī)的光學(xué)部分洞焙。
鏡頭系統(tǒng)最重要的指標(biāo)是它的焦距- 主要是它的放大倍率和視野角度蟆淀。一個(gè)廣角鏡頭的放大倍率比較低,因此可以讓相機(jī)捕捉更大的區(qū)域澡匪。而長焦鏡頭熔任,特別是遠(yuǎn)攝鏡頭的視角就窄得多,由于它的放大倍數(shù)很大唁情,它只能獲取廣角鏡頭中的一小部分區(qū)域笋敞。
鏡頭也影響圖像的其他部分。它可能會(huì)將一些你不想要的變形或者顏色失真引入到拍攝的圖片中荠瘪,比如色差就是一個(gè)典型的例子夯巷。
光滿四溢
現(xiàn)在我們知道一些基礎(chǔ)知識(shí)了,那么相機(jī)實(shí)際上是如何捕捉圖像的呢哀墓?
在你的 iPhone 相機(jī)里面趁餐,有一個(gè)圖像傳感器。這個(gè)部分就相當(dāng)于我們眼睛里的視網(wǎng)膜篮绰。圖像傳感器可以將光或者光子轉(zhuǎn)換為電信號(hào)后雷。
圖像傳感器是由海量的獨(dú)個(gè)的像素傳感器串起來的巨大矩形區(qū)域。我們可以將每個(gè)像素傳感器想象成一個(gè)裝電荷的桶吠各。當(dāng)光子撞擊到像素傳感器的光二極管時(shí)臀突,它們將在這個(gè)像素的桶中緩慢地積攢電荷。最后贾漏,每個(gè)像素都會(huì)有它自己的一小桶電子候学。這些電荷的數(shù)量是依賴于光子數(shù)量的 - 或者說是決定于打到這個(gè)特定的點(diǎn)上的光的強(qiáng)度。
因?yàn)槲覀冇幸粋€(gè)像素傳感器的二維陣列纵散,我們現(xiàn)在就擁有能夠反應(yīng)出所有這些位置的光的強(qiáng)度的一組二維電荷陣列了梳码。在 iPhone 6 上,我們有八百萬個(gè)這樣的微小的像素傳感器伍掀,以及它們所對(duì)應(yīng)的電荷桶掰茶。
現(xiàn)在,我們需要明白兩件事情:第一蜜笤,我們需要有重置這些電荷的能力濒蒋;其次,一旦像素傳感器曝光了把兔,我們需要能夠讀出這些電荷的數(shù)量沪伙。重置這件事情可以全局地對(duì)所有像素一起進(jìn)行甸各。但是對(duì)這樣的八百萬個(gè)小電荷,我們傾向于單獨(dú)處理焰坪,以將它們轉(zhuǎn)換為伏特量級(jí)的量,以方便讀取聘惦。
數(shù)碼相機(jī)通常會(huì)去移動(dòng)一行中的像素:圖像傳感器首先讀取一行中第一個(gè)電荷桶中的電荷某饰,然后所有的桶將它們中存放的電荷轉(zhuǎn)移給相鄰的前一個(gè)桶。這樣第一個(gè)電荷桶現(xiàn)在就保存了本來在第二個(gè)桶中的電荷善绎,并準(zhǔn)備好了再次被讀取黔漂。重復(fù)這樣的步驟,所有像素的值都將被讀入到傳感器的行中禀酱。
正在被讀取的桶炬守,或者說像素傳感器中的值將會(huì)被一個(gè)模數(shù)轉(zhuǎn)換器(ADC) 轉(zhuǎn)換為數(shù)字信號(hào)。ADC 的輸出是一個(gè)對(duì)應(yīng)每個(gè)像素傳感器所接收到的進(jìn)光量的數(shù)字剂跟。最終减途,這些值被傳遞到一個(gè)數(shù)字圖像處理器中進(jìn)行處理。對(duì)于數(shù)字圖像處理的過程曹洽,我們稍后再談鳍置。
像素尺寸,錙銖必較
知道了這些送淆,我們就明白為什么幾百萬或者上千萬像素中的幾百上千這個(gè)數(shù)字并不影響圖片質(zhì)量了税产。或者說偷崩,真正對(duì)圖片質(zhì)量有重大影響的是每個(gè)像素的尺寸辟拷。這些像素傳感器非常小,以 iPhone 6 為例阐斜,每個(gè)像素傳感器邊長為 1.5 μm (微米)衫冻。而在一個(gè)介于消費(fèi)級(jí)和專業(yè)級(jí)之間的單反相機(jī)上,它們的邊長有 9 μm 之大谒出。
隨著尺寸增加羽杰,有兩件事會(huì)發(fā)生。首先到推,像素越大考赛,撞擊它的光就越多,所生成的電荷也就越多莉测。我們擁有的電荷越多颜骤,也就意味著讀出時(shí)的噪聲越小。想象一下你在鄰著一條繁華的街道的屋子里聽音樂吧捣卤,如果你使用的是手機(jī)的內(nèi)置的揚(yáng)聲器的話忍抽,你基本上不可能聽得到什么八孝。但是如果你搬來一套大型環(huán)繞聲音響,那么街上的噪音就都消失了鸠项。像素中的電荷和圖像傳感器的噪點(diǎn)也是同樣干跛。像素越大越好,9 μm 的圖像像素將比 1.5 μm 的像素多收集 36 倍的光子祟绊。
第二點(diǎn)是更大的像素意味著濺射 (bleed) 的影響變小楼入。和 CPU 或者 RAM 一樣,圖像傳感器也是一個(gè)硅基的半導(dǎo)體部件牧抽。形象來說嘉熊,光打在傳感器上的時(shí)候就像水潑在被冰住的玻璃上一樣,它會(huì)濺射到鄰近的像素中去扬舒。隨著像素變小阐肤,濺射到鄰近像素中的光就會(huì)變多:實(shí)際打到了鄰近像素中的光越多地濺射到當(dāng)前像素的話,它的值所受到的影響也就越大讲坎。
快門
膠卷相機(jī)使用快門來控制曝光孕惜,這是處在膠卷前方的一個(gè)非常靈敏的機(jī)械部件:在曝光時(shí)它將會(huì)被打開,然后在快門速度所指定的時(shí)間之后關(guān)上晨炕。大一些的數(shù)碼相機(jī)仍然是使用機(jī)械快門诊赊,但是像智能手機(jī)和其他小的數(shù)碼相機(jī)使用的是電子快門。
包括 iOS 設(shè)備在內(nèi)的許多小型設(shè)備使用的是回轉(zhuǎn)快門 (rolling shutter)府瞄。它會(huì)一行一行地讀取圖片數(shù)據(jù)碧磅。因?yàn)槊恳恍衅鋵?shí)不是在同一時(shí)間讀取的,所以會(huì)導(dǎo)致有時(shí)候場(chǎng)景中高速移動(dòng)的物體變形得很奇怪遵馆。有些例子其實(shí)還蠻有趣的鲸郊。
顏色
現(xiàn)在我們知道 iPhone 是如何測(cè)量光打在每個(gè)像素上的多少了。但是通過這個(gè)我們僅只會(huì)得到一張黑白照片货邓。彩色照片還需要額外的技術(shù)秆撮。在我們深入之前,我們先來看看顏色是什么换况。我們會(huì)稍微偏點(diǎn)題职辨,來看看所謂顏色學(xué)的一些皮毛知識(shí)、
深綠色的森林的顏色是深綠色的戈二,淺黃色的自行車是淺黃色的舒裤,這似乎是天經(jīng)地義的。但是這種被叫做”顏色“的東西到底是什么的觉吭。在計(jì)算機(jī)領(lǐng)域腾供,我們也許可以回答說某種顏色就是特定量的紅,綠和藍(lán)的組合。但是在現(xiàn)實(shí)中伴鳖,要比這復(fù)雜得多节值。
有些人 (CIE) 試圖給顏色一個(gè)定義,但是最終卻只能終結(jié)在像這樣晦澀和讓人迷惑的詞句之中:
顏色是一種由有色或無色內(nèi)容進(jìn)行任意組合而構(gòu)成的視覺感知的屬性榜聂。這種屬性可以被色彩名字描述搞疗,例如黃色,橙色须肆,棕色匿乃,紅色,粉紅色休吠,綠色,藍(lán)色业簿,紫色之類瘤礁;或者被無色名字描述,例如白色梅尤,灰色柜思,黑色之類,并被像是深巷燥,淡赡盘,亮,暗這樣的名字或是組合進(jìn)行修飾缰揪。
注意:感知到的顏色依賴于顏色的視覺刺激的光譜分布陨享,這種分布包括尺寸,形狀钝腺,結(jié)構(gòu)以及視覺刺激本身周圍的環(huán)境抛姑,以及觀察者視覺系統(tǒng)的適應(yīng)性狀態(tài)。另外進(jìn)行觀察的個(gè)人的普世經(jīng)驗(yàn)以及類似場(chǎng)景也會(huì)對(duì)感知造成影響艳狐。
他們通過使用顏色自身來循環(huán)定義顏色定硝,雖然被他們叫做了色彩,但這其實(shí)只不過是顏色的另一種叫法而已毫目。
視覺感知
如果說要從上邊的定義里抽取一點(diǎn)什么的話蔬啡,”顏色是一種視覺感知“ 這句話算比較重要。一個(gè)人必須要看到之后镀虐,才能說有顏色箱蟆。顏色要是離開了我們的感知的話,也就不再存在了刮便。你必須要看到光源顽腾,或者某些反射光的東西,才能說出這個(gè)東西的顏色。
牛頓首先發(fā)現(xiàn)了光是一組顏色譜抄肖【眯牛可見光包含了波長大致在 380 至 720 納米的一組波。但是我們?cè)诳床煌ㄩL的光的時(shí)候感覺是不一樣的漓摩。
人類的眼睛是擁有光子探測(cè)器的裙士,其中一些被稱為視錐細(xì)胞。我們有三種不同類型的視錐:S管毙,M 和 L腿椎。每一種類型對(duì)不同波長的光會(huì)做出不同的響應(yīng)。這些視錐細(xì)胞有時(shí)候被稱為紅色夭咬,綠色和藍(lán)色的光感受器啃炸。其實(shí)這種說法有失偏頗,更精確的叫法應(yīng)該是赤色卓舵,稍微不那么赤的赤色南用,以及青色。如圖所示掏湾,其實(shí)它們響應(yīng)曲線有相當(dāng)大一部分是重疊的:
像燈泡這樣的光源擁有著特定的光譜 - 也就是每個(gè)波長的光都有特定的強(qiáng)度裹虫。相對(duì)應(yīng)的,一個(gè)物體融击,比如自行車的框架筑公,會(huì)按照不同的強(qiáng)度來反射或者吸收特定波長的光。對(duì)每一種情況尊浪,我們可以將光源光譜和物體的反射光譜以及視錐的響應(yīng)曲線相乘 (其實(shí)是沿波長做積分)匣屡。對(duì)每一個(gè)視錐細(xì)胞來說,這樣做會(huì)得到一個(gè)計(jì)算結(jié)果拇涤,S耸采,M 和 L 視錐的三個(gè)光刺激值就是感知到的顏色。我們的大腦會(huì)將青色工育,赤色和弱赤色的視錐的值組合起來虾宇,形成對(duì)顏色的感知。事實(shí)上如绸,顏色感知并不只依賴于這三個(gè)值的物延,還和空間和時(shí)間的信息有所關(guān)聯(lián)皮假。
指定顏色
現(xiàn)在我們知道顏色是怎么形成的了凯傲,但是我們?nèi)绾味x某個(gè)給定的顏色呢凹耙?我們要怎么描述某輛自行車上那種特定的紅色呢?
答案是扼脐,我們需要一種叫做色彩空間的東西來定義它岸军。我們可以將色彩空間理解成一種度量單位奋刽。
當(dāng)有人問 “大象能跑多快” 時(shí),"18" 或者 "2.8" 這樣的答案是毫無意義的艰赞。我們需要一套度量單位來衡量它佣谐,比如 “18 千米每小時(shí)”。對(duì)于顏色來說也是一樣的方妖。當(dāng)我們問 “這輛自行車是什么顏色” 的時(shí)候狭魂,我們也需要一套類似的 “度量單位” 來表述我們的答案。這套度量單位就是色彩空間党觅。
雖然細(xì)節(jié)很復(fù)雜雌澄,但是色彩空間的主要概念還是非常簡單的:如果我們用三個(gè)光源 - 一個(gè)紅色,一個(gè)綠色和一個(gè)藍(lán)色的光源 - 我們可以將它們以不同強(qiáng)度混合起來以得到各種顏色的光杯瞻。舉個(gè)例子镐牺,要是我們想要匹配在我們的臺(tái)燈反射下的香蕉的顏色的話,我們最后得到的值會(huì)是 10 份紅光魁莉,8 份綠光和 4 份藍(lán)光.天空的顏色可能是 4睬涧,8 和 10。這些值精確地依賴于我們所挑選的光源 (也就是基本值)沛厨,在這里是 4宙地,8 和 10摔认。要是我們挑選了另一組光源 (基準(zhǔn)值)逆皮,達(dá)到同樣的顏色結(jié)果時(shí)這個(gè)數(shù)字可能變?yōu)?11,9 和 2参袱。我們所挑選的基準(zhǔn)值其實(shí)就定義了我們的色彩空間电谣。
當(dāng)被問到 “這輛自行車是什么顏色” 時(shí),我們可以說這是在某一組三個(gè)特定的基準(zhǔn)值光源下抹蚀,將它們的光強(qiáng)調(diào)整到 23%剿牺,45% 和 53% 所得到顏色。其他擁有同樣的一組基準(zhǔn)光源的人就可以根據(jù)這個(gè)數(shù)字重新創(chuàng)建出這個(gè)顏色环壤。
在現(xiàn)在計(jì)算機(jī)晒来,包括 iOS 中,事實(shí)上所使用的默認(rèn)色彩空間是sRGB色彩空間郑现。它的三個(gè)基準(zhǔn)值是通過ITU-R BT.709標(biāo)準(zhǔn)定義的湃崩。除了通過三個(gè)基準(zhǔn)值之外,還有一些其他的不同方式來定義色彩空間接箫,但其實(shí)最終它們的概念都是相同的攒读。
值得指出的是,大部分的色彩空間只能對(duì)應(yīng)可見顏色的一個(gè)子集辛友””猓可以看看sRGB色彩空間的圖表:
馬鞍形的圖形區(qū)域代表了人眼可見的所有顏色。黑色三角形內(nèi)的區(qū)域表示能被sRGB色彩空間表達(dá)的顏色。三個(gè)頂點(diǎn)是這個(gè)色彩空間的基準(zhǔn)值 - 也就是只有其中一個(gè)基準(zhǔn)光源全開的情況邓梅。三角形區(qū)域之外的顏色可以被人眼感知脱盲,但卻不能被 sRGB 色彩空間表達(dá)。還有一點(diǎn)需要特別說明的是:這張圖里在三角形之外的顏色看起來好像和三角形邊緣的顏色非常相似震放。這是因?yàn)檫@張圖片本身是用 sRGB 色彩空間來表示的宾毒,三角形外的真實(shí)的顏色在圖片文件中是顯示不出來的,因此只能回滾到和這個(gè)真實(shí)顏色最接近的能表達(dá)的顏色去殿遂。
當(dāng)我們通過十六進(jìn)制 (比如#dde834) 或者是 UIKit 的 API (比如UIColor(red:0.867, green:0.910, blue:0.204, alpha:1.000)) 選取顏色時(shí)诈铛,我們所表達(dá)的其實(shí)是 86.7% 的 sRGB 紅色基準(zhǔn)值,91% 的 sRGB 綠色基準(zhǔn)值以及 20.4% 的 sRGB 藍(lán)色基準(zhǔn)值所混合的顏色墨礁。
RGB 色彩空間和 sRGB 相比有更大的全色域幢竹,也就是所能表達(dá)更多的可見顏色。CIELUV (也被叫做 CIELAB) 色彩空間就是一個(gè)基于 RGB 基準(zhǔn)的色彩空間的例子恩静。它也由三個(gè)組成部分:代表亮度的L焕毫,以及代表顏色對(duì)立維度的u和v(有時(shí)候也被叫做a和b)。
更多信息請(qǐng)去看看 Wikipedia 上關(guān)于色彩空間的文章驶乾,另外嘗試用用 OS X 里的顏色實(shí)用工具也是熟悉色彩空間的好辦法邑飒。
白非白
還有一件事情讓顏色變得很復(fù)雜,那就是我們的大腦其實(shí)做了很多處理级乐,來讓東西看上去是 “正掣硐蹋” 的 - 這種處理中很大一部分和白平衡有關(guān)。我們都知道白色和灰色是什么意思风科。但是當(dāng)我們看到什么東西是灰色的時(shí)候撒轮,事實(shí)上在絕大多數(shù)情況下其實(shí)它并不真的是灰色。但是我們的大腦會(huì) “指出” 在這個(gè)光照條件下贼穆,它就應(yīng)該是灰色题山,所以我們認(rèn)為我們看到了灰色。
從一幢白色的建筑物上反射出來的光在早上和晚上其實(shí)是大不相同的故痊。但是我們的大腦指出建筑物的顏色并沒有從一種變換到另一種顶瞳。這乍看上去很明顯,因?yàn)槲覀円呀?jīng)習(xí)慣了我們的大腦無時(shí)無刻不在處理這些事情愕秫。
我們的大腦有能力進(jìn)行色彩調(diào)節(jié) - 它通過調(diào)整每種視錐類型的靈敏程度來進(jìn)行色彩平衡慨菱。另外,除了簡單的調(diào)整以外豫领,我們的大腦還有一些非常復(fù)雜的機(jī)制抡柿。大腦是如何截取那些來自視錐,但又依賴于環(huán)境等恐,時(shí)間和空間影響的信號(hào)的洲劣?Akiyoshi 關(guān)于視覺的頁面展示了一些證明大腦處理能力的令人精神錯(cuò)亂的例子备蚓。但是當(dāng)事情來到相片和顏色時(shí),要記住的是相機(jī)只能簡單地記錄它所看到的東西囱稽,正因如此郊尝,有時(shí)候?qū)ξ覀儊碚f,拍到的東西和它本身看起來的就有可能偏離很遠(yuǎn)战惊。
當(dāng)我們使用相機(jī)拍照時(shí)流昏,相機(jī)可沒我們的大腦那么聰明。但是相機(jī)也有一套自動(dòng)的白平衡算法來嘗試找出場(chǎng)景中的中性顏色 (也就是灰系色)吞获。之后相機(jī)的圖像傳感器將嘗試將相片中的所有顏色都按照這個(gè)結(jié)果來進(jìn)行調(diào)整况凉。有時(shí)候這很好使,但也有失敗的時(shí)候各拷。失敗一般是因?yàn)槠婀值墓庹諚l件刁绒,比如場(chǎng)景的一部分被一種光源照亮,而另一部分被另一種光源照亮烤黍。
有了以上這些知識(shí)知市,我們就可以來看看我們的數(shù)碼相機(jī)是怎么看到這些顏色的了。
數(shù)碼顏色傳感器
像素傳感器自身并不會(huì)因?yàn)楣獾牟ㄩL不同而有什么區(qū)別速蕊。但是如果在它們前面放一個(gè)顏色濾鏡的話嫂丙,像素傳感器的響應(yīng)曲線就會(huì)根據(jù)光的波長的不同而發(fā)生分離變化。
如果我們使用綠色规哲,紅色以及藍(lán)色的顏色濾鏡跟啤,那么有些像素傳感器將只接收綠光,有些只接收紅光媳叨,而有些只接收藍(lán)光 (在現(xiàn)實(shí)中腥光,它們將擁有和我們眼睛的視錐細(xì)胞相似的響應(yīng)曲線)关顷。當(dāng)今的相機(jī)幾乎無一例外地使用了一種稱為拜爾濾鏡 (Bayer filter)的裝置糊秆。如果使用這種濾鏡的話,綠色的像素傳感器的數(shù)量將會(huì)是紅色或者藍(lán)色的兩倍议双。它看上去是這樣的:
現(xiàn)在數(shù)碼相機(jī)有顏色信息了痘番,但是同時(shí)它也丟失了很多信息。我們只知道所有像素中的 1/4 的部分的紅色的值平痰。藍(lán)色也類似汞舱。而對(duì)于綠色,我們知道 1/2 的像素的值宗雇。換句話說昂芜,66% 的數(shù)據(jù)丟失了。將所有像素的全部的顏色信息進(jìn)行還原的過程叫做逆拜爾化 (debayering)赔蒲。與之相伴的高級(jí)算法將將通過為已存在的信息進(jìn)行插值泌神,來得到一張全分辨率的彩色圖像良漱。
即使是一個(gè)簡單的插值算法也可能要花上很多努力來得到,而隨著時(shí)間流逝欢际,越來越多的逆拜爾化方法被開發(fā)出來解決這個(gè)問題母市。但是也存在一些問題問題,來舉例說明:大部分的逆拜爾化算法非常依賴綠色像素的流明數(shù) (光強(qiáng)度)损趋。這樣導(dǎo)致的結(jié)果是幾乎所有這些逆拜爾化算法在幾乎全紅色的區(qū)域表現(xiàn)不佳患久。這里截取了一張 iPhone 6 拍攝的照片:
注意相比起小冊(cè)子上的黑色文字來說,iPad 保護(hù)殼上寫的 “PRODUCT” 的大字中的 C 和 T 字母是非常不清楚的浑槽。這是由于圖像在 iPad 保護(hù)殼的部分缺少綠色信息而導(dǎo)致逆拜爾化的去噪部分無法得到準(zhǔn)確信息蒋失,從而圖像模糊。
缺陷補(bǔ)償
除了重建顏色信息桐玻,相機(jī)里的圖像處理器還對(duì)圖像做了一系列的其他調(diào)整高镐。
隨著圖像傳感器的像素?cái)?shù)越來越多,某些像素中產(chǎn)生缺陷的可能性也越來越高畸冲。通常相機(jī)里都會(huì)有一系列的像素 (通常是整排) 是無法正常工作的嫉髓。在對(duì)原始圖像數(shù)據(jù)進(jìn)行處理的時(shí)候,圖像處理器將去修復(fù)那些死掉的像素邑闲。
圖像傳感器有一部分區(qū)域的像素的位置是在相機(jī)接收可見光的區(qū)域之外的算行。這些圖像傳感器的像素將永遠(yuǎn)是黑色的。但是它們讀出的數(shù)據(jù)卻不是 0苫耸。利用這些像素州邢,圖像處理器可以通過用包含實(shí)際圖片的那些像素的值減去它們,來調(diào)整圖像的明暗程度褪子。通過這個(gè)方式量淌,圖像處理器也可以補(bǔ)償大部分圖像傳感器 (和/或 ADC) 中的內(nèi)在誤差。
文件格式
數(shù)碼相機(jī)的最后一步是將圖像數(shù)據(jù)寫入一個(gè)文件中嫌褪。在大部分情況下呀枢,數(shù)碼相片被保存為 JPEG 格式。JEPG 壓縮會(huì)調(diào)整圖像數(shù)據(jù)以追求高的壓縮比笼痛。iPhone 6 所拍攝的一張圖片的像素?cái)?shù)據(jù)大約為 23 MB (3.264 x 2.448 x 3 = 23.970.816)裙秋,但是這樣一張圖片對(duì)應(yīng)的 JPEG 文件通常只有 1.5 到 2.5 MB。通過閱讀話題 #3 的這篇文章來了解關(guān)于 JPEG 的更多信息缨伊。
有些數(shù)碼相機(jī)允許用戶存儲(chǔ)一種叫 RAW 格式的文件摘刑。相機(jī)的圖像處理器仍然會(huì)對(duì)從傳感器拿到的原始圖像數(shù)據(jù)做一些處理,但是這個(gè)文件所包含的數(shù)據(jù)將非常接近于真實(shí)的像素值刻坊。這么做的好處是我們可以在之后的時(shí)間點(diǎn)對(duì)它做逆拜爾化枷恕。
舉個(gè)例子,OS X 上的逆拜爾化比大部分單反相機(jī)上的要強(qiáng)力谭胚。與操作 JPEG 文件相比徐块,對(duì)支持的相機(jī)的 RAW 文件進(jìn)行操作隶校,可以讓我們?cè)诓粨p失畫質(zhì)的前提下做更多的調(diào)整。Core Image 中的 RAW 圖像處理將把用戶定義的各種調(diào)整作為逆拜爾化的一部分蛹锰。相比起來深胳,在操作 JPEG 圖像時(shí),調(diào)整僅只是事后工作铜犬。
想了解更多細(xì)節(jié)的話舞终,可以查看 OS X SDK 中的CoreImage/CIRAWFilter.h文件,以及WWDC 2014 session 514的 32:40 的部分癣猾。
結(jié)語
我們今天使用的數(shù)碼相機(jī)是數(shù)十年研究和工程的結(jié)晶敛劝。我們?cè)谶@篇文章里勉強(qiáng)勾勒了它所使用到的科技的輪廓。通過這篇文章纷宇,我們希望你能夠更了解你的 (iPhone) 相機(jī)... 以及為 iOS 和 OSX 制作出更好的相片 app夸盟。