作者 | Marc Levoy、Yael Pritch
譯者 | 劉旭坤
整理 | Jane
出品 | AI科技大學營
【導讀】随着智能手機的不斷發展成熟,為了尋找差異化的廠商不斷增加攝像頭的數量。然而,攝像頭的數量越多,就代表拍照的品質越好嗎?
Google Pixel 手機一直堅持單攝,雖然硬體不算頂尖,但是憑借着強大的算法,Pixel 手機的照相水準非常突出。上個月,Pixel 3 釋出會的 Keynote 顯示其暗光拍照的成像效果甚至完虐 iPhone XS,讓人驚歎不已。
近日,Google 又為自己的相機應用增加了“Night Sight”功能(夜視功能),使用者無需三腳架和閃光燈就能在夜間拍出銳利幹淨的照片,并獲得了衆多評測部落客的好評。本文就将為讀者介紹弱光條件下拍照的難點以及機器學習在這一問題中的應用。
弱光拍攝的難點
大家如果在夜晚拍過照片的話,肯定會發現拍出的照片上有很多噪點,使得照片看起來顔色和亮度都很不均勻。噪點或者叫噪聲的來源有兩個:散粒噪聲和讀取噪聲。散粒噪聲指進入感光元件的光子數量太少造成可觀測的光子數量不均。散粒噪聲的出現與我們所使用感光元件的品質沒有關系,不過智能手機的感光元件太小,是以受散粒噪聲影響比普通相機更大。讀取噪聲則是由将電信号轉換成讀數時的随機錯誤造成的。感光元件的品質越好那麼讀取噪聲也就越小。
把所有噪聲的來源都考慮進去我們可以得出一個信噪比,信噪比越高則意味着我們拍出的照片品質越好。感光元件大小不變的情況下信噪比和曝光時間成正比,是以看來隻要練成鐵手就能完美地解決這個問題。然而還是想簡單了,就算拍攝者能長時間穩穩地舉着手機被拍的對象也沒法保持長時間不動。
2014 年釋出的 HDR+ 功能改善了散粒噪聲和讀取噪聲的問題,不過 HDR+ 的本意如它的名字一樣是為了提高照片的動态範圍。HDR+ 的原理是連拍很多張照片,然後通過圖像識别把多張照片進行疊加成一張照片。每張照片的曝光時間能根據使用者手抖的程度和拍攝目标的移動自動調節來保證照片的銳度,這樣就在保證銳度的前提下增加了曝光時間,是以照片的信噪比也能提高了。
看起來弱光拍照的問題已經完美解決了,就連拍幾十張後合并成一張就行了。然而實際的情況是就算用多張照片合并的方法還是對光照有要求,光照低于一定的标準就算再多拍效果也不好。标示光源亮度的實體量是光通量,它的機關是流明。機關面積接收到的光通量叫做照度,機關是勒克斯。他們之間的關系大家可以參照壓力與壓強的關系來了解。為了讓大家能直覺地了解不同勒克斯的概念,下面表中用生活中的場景與勒克斯數值做了對比:
普通的手機相機從 30 勒克斯開始就不太行了,如果使用 HDR+ 或者類似合成多張照片的技術大概能降到 3 勒克斯但再低也就不行了。我們開發夜視功能的目标是讓手機在 0.3 到 3 勒克斯之間不補光隻按一次快門也能拍出好照片,而要實作這一目标最重要的手段就是盡可能多地捕獲光子。
曝光時間限制和模糊問題
延長曝光時間雖然能提高信噪比拍出更幹淨的照片,但也同時帶來了兩個問題。Pixel 手機預設的拍攝模式是零快門延遲,意思是說使用者一打開相機應用其實相機就開始拍照存儲在緩存裡了。當使用者按下快門的時候手機會提取最新拍攝的 9 至 15 張相片來進行合成,這樣就能保證拍到的是使用者按快門的那一刻。
使用者在拍照時手機會顯示預覽,為了維持最低 15 幀的顯示重新整理,HDR+ 能實作的最慢快門速度也隻有 66 毫秒。是以為了進一步延長曝光時間,夜視功能改變了拍攝模式。使用者使用夜視功能拍照時按下快門後相機才會開始拍攝,是以使用者必須維持一小段時間盡量不動。
延長曝光帶來的第二個問題是畫面模糊。雖然 Pixel 2 和 Pixel 3 配備了光學防抖鏡頭但最多隻能支援到 1/8 秒快門。Pixel 3 為了解決這一問題應用了所謂的動作測量技術,也就是使用光流法來判斷畫面的移動,然後再動态調整快門速度來讓畫面盡量清楚。Pixel 1 和 Pixel 2 雖然不會預設使用動作測量,不過使用者開啟夜視模式時它們也會使用動作測量。這樣如果使用者畫面晃動不大的話每張照片的曝光時間最多能到 333 毫秒。這項技術也針對 Pixel 1 和使用了腳架的情況進行了優化。Pixel 1 沒有光學防抖,是以快門的時間就稍微短一些而如果手機完全沒有移動的話快門時間最高可達一秒。
除了快門時間,應用也會根據情況調整所拍的照片張數來減少使用者等待的時間。如果使用三腳架隻拍 6 張就可以合成了,若為手持則最多會拍 15 張。是以使用 Pixel 手機拍照,根據相機是前置還是後置、手持穩定性、畫面穩定性和亮度的不同,合成前所拍攝的照片在 15 張 1/15 秒快門照片和 6 張 1 秒快門的照片之間。下面的圖中我們可以看到一點差別:
左圖我們可以看到狗頭部的動作。中間圖為動作測量關閉狀态下拍攝,快門為 73 毫秒,能明顯看到模糊。右圖為動作測量開啟狀态下拍攝,快門為 48 毫秒,比關閉動作測量清楚一些。
下面的圖是手持和三腳架拍攝的不同效果:
左圖為手持拍攝,略微有抖動。拍攝了 15 張快門 333 毫秒的照片進行合成。右圖為手機判斷無抖動是以拍攝了 6 張快門 1 秒的照片進行合成。
對齊與合成
拍攝多張照片進行合成不是什麼新鮮的方法,在天文和微距攝影上都有很廣泛的應用。雖然原理聽起來很容易,但将手持拍攝的照片對齊就很困難。我們從 2010 年就開始進行對齊與合成相關的研究,最早的成果是 iOS 平台一個叫做 Synthcam 的應用。
夜視功能的原理其實和 Synthcam 差不多,但提高了照片的分辨率。Pixel 1 和 2 中使用的 HDR+ 融合算法提高了剔除無效照片的能力,Pixel 3 中使用的超高分辨率變焦技術雖說并不是為減少噪點所開發但客觀上也實作了除噪點的效果。這項技術某些條件下效果優于 HDR+ 但對計算能力要求更高,是以沒有應用在 Pixel 1 和 Pixel 2 上。
其他難題
原理聽起來挺簡單,但開發夜視功能的過程中還是碰到了不少難題。
▌1.弱光條件下自動白平衡失效
自動白平衡的目的是将不同色溫條件下拍攝的照片都調整為白光下拍攝的顔色,否則人眼在回看照片時會發現明顯的色差。
白平衡在數學上屬于不适定問題。比如感光元件判斷拍到的雪花是藍色的,但無法判斷雪花到底是真的藍還是天的藍色映在雪花上。現在的自動白平衡算法在強光條件下效果不錯,但在弱光拍攝時就非常不準了。
為此我們訓練了一個模型來判斷照片的白平衡是否正常并作出矯正。為了訓練這個模型我們使用 Pixel 手機在各種光照條件了拍了很多照片并手工對白平衡進行調整。下圖中我們能看到應用模型前後的明顯差別。
▌2.色調映射
人眼在弱光下是分不清楚顔色的,因為隻有不能判斷顔色的視杆細胞才能在晚上工作。但人眼看不到并不表示到晚上顔色就沒有了,是以夜視功能想超越人眼的極限必須在夜間也能拍出清晰的顔色。
下面這張圖就是在夜間通過長時間曝光所拍攝的(注意天空中可以看到星星)。雖然偶爾拍拍這種把晚上拍成白天的效果也不錯,但恐怕大家還是想能把晚上拍成晚上。
其實藝術家們很早就發現了讓觀衆感覺所畫的是夜間的方法,如下圖所示:
畫家提高畫面的對比度并把陰影部分直接塗黑來營造出夜間的效果。我們也使用了類似的方法,比如使用 S 形色調映射。不過怎麼把握其中的度還是挺值得思考的,下面這張用 Pixel 3 拍的照片就非常成功:
夜視模式的極限
當照度低于 0.3 勒克斯時手機的自動對焦功能會失效,是以我們在 Pixel 3 的夜視模式增加了兩個手動對焦按鈕:近和遠。近模式的對焦距離約為 1.2 米,遠模式則在約 3.6 米處對焦。在遠模式下景深是從 1.8 米到無窮遠。雖然照度低于 0.3 勒克斯也能拍出好照片,但就必須借助三腳架和第三方應用了。
那麼理論上對攝影來說照度能低到什麼程度呢?我想當捕捉到的光子會受到讀取噪音影響時就差不多了。另外還有其他的噪聲來源,比如受溫度影響的暗電流,不過我可不建議大家為了降噪點把手機泡到液氮裡。就算這些問題全都解決了也會有風吹樹搖,超長曝光攝影還是很困難。
注意事項
用夜視功能拍照很有趣,如果使用得當的話能夠拍出效果非常好的照片。夜視功能在 Pixel 3 上面的效果是最好的,一方面是因為它晶片速度最快,另外自動白平衡算法也是以 Pixel 3 為基礎訓練的。不過就算用的不是 Pixel 3 夜視功能也能讓你在弱光下拍出好照片(預覽裡的噪點并不會出現在完成的照片上)。文章最後就給大家一些更好地使用夜視功能的注意事項吧:
- 完全黑暗的地方夜視功能也拍不到什麼東西
- 柔和均勻的光照條件下拍攝效果更好
- 不要對着光源拍,否則會有炫光
- 可以點預覽螢幕來調整曝光
- 如果是單純地想降低曝光是可以通過軟體後期實作的,而且沒那麼多噪點
- 對着畫面上有顔色或者亮度對比的地方比較容易自動對上焦
- 還是對不上焦就試試手動對焦(如下圖)
- 靠着牆可以增加手持的穩定性有助于提升照片銳度
- 用前置鏡頭自拍也可以用夜視功能,而且手機螢幕還能補光
——【完】——