單攝夜拍照樣「碾壓」iPhone?Google 的「夜視」功能是如何做到的
令人無語的設計(o皿o)、糟糕的品控、各種奇奇怪怪的軟體 bug……今年的 Pixel 3 在「翻車」這件事情上絲毫不輸去年那款使用一週便「燒屏」的 Pixel 2 XL。
因此從某種程度上來說,Pixel 其實是一款除了系統和相機便一無是處的手機。但既然說到了相機,我們不妨就來聊一聊上週正式向全系 Pixel 使用者推送的「夜視(Night Sight)」模式。
你可以用它拍星星
Google 在 Pixel 3 釋出會上用了這樣一張圖來展示 Pixel 3 的「夜視」模式:

就是這樣一張圖,將「大哥」仍然坐在 DxOMark 排行榜第二的 iPhone XS 黑得無地自容——至少在夜拍效果上,Google 這一張 PPT 不僅讓很多「果粉」看了表示不能接受,連一些「谷吹」都開始重新審視自己是不是「對 Google 的力量一無所知」。
那「夜視」模式究竟有沒有 Google 所宣傳的那麼厲害?
答案也許在命名裡——早前 Night Sight 還只能藉助部分 XDA 開發者修改過的 Google Camera 應用開啟時,這個功能的中文翻譯還僅僅是簡單的「夜間」二字,而 Night Sight 上週正式上線後,中文譯名已經變成了「夜視」。
從 Google 上週收集而來的樣張 1 來看,「夜視」功能在夜拍過程中的實際表現的確媲美夜視儀(以下樣張均為手持拍攝),從黃昏時分華燈初上的繁榮市區到夜間人來人往的聖潘克拉斯酒店大門,從日落後的大峽谷到優勝美地,從都柏林塞繆爾貝克特大橋到米蘭的斯爾夫扎城堡……不管是光線條件複雜的城市街道、結構複雜的橋樑建築還是層次分明的自然風光,在「夜視」功能的加持下,Pixel 能夠勝任的拍攝任務顯然更多了。



我們甚至可以藉助這個功能手持拍星星——對當前市面上的絕大多數智慧手機而言,這幾乎還是一個不可能完成的任務。

在此基礎上加上三腳架,我們甚至還能更進一步得到質量更好的星空照片:在這個過程中,由於曝光時間的延長,相機捕獲到的光線也更多,我們最終得以在照片上看到更多的星星。

HDR+ 再進化
在解開「夜視」功能背後的奧祕之前,我們必須先聊一聊與之密切相關的長曝光。

想象一下,如果我們在一場淅淅瀝瀝的小雨中如圖所示立好四根管子並立即蓋上蓋子,由於雨點灑落並不均勻,這四根管子收集到的雨量也相差迥異;而如果我們將蓋子敞開放上一段時間,四根管子內收集到的雨量仍有差異,但都不會太少。

光線同樣也有其內在的隨機性 2 ,這種隨機性表現為 散粒噪聲 (shot noise)——雖然人腦無法在鋪面而來的巨量光子中分辨出光線的不均勻,但相機內的影象感測器卻可以,這種不均勻表現在照片上,就是老式電視機雪花屏一樣的 噪點 。

而隨著快門時間(即上圖管蓋敞開時間)的延長,噪點問題可以隨著不斷提高的信噪比(SNR,訊號與噪聲的比例)得到緩解。
這也是一般而言我們需要藉助三腳架才能獲得畫面純淨、細節清晰的夜景照片的原因。
但以計算攝影學見長的 Google 早在兩年前推出第一代 Pixel 手機時就對 HDR+ 3 的可能性進行了探索:通過捕捉多幀畫面並對畫面中的畫素進行演算法對齊,HDR+ 一直以來都是 Pixel 手機在拍照這件事情上的王牌保障。但長久以來人們也意識到,HDR+ 不僅能夠輸出更高的動態範圍,畫面的銳度和純淨度相較一般照片也更高。

換句話說,HDR+ 的思路其實也可以用在「夜視」功能上,只是為了應對手持夜拍過程中的具體問題並儘可能照顧到 Pixel 手機上的零快門延遲(ZSL)體驗,Google 對「夜視」功能的 HDR+ 演算法進行了進一步改進。
據 Google 計算攝影產品經理 Alexander Schiffhauer 介紹,他們在「夜視」中引入了與 HDR+ 類似的多幀合成策略,即一次性拍攝 15 幀短曝光照片,然後藉助演算法進行多幀合成再輸出一張等效的長曝光照片。
但考慮到手持拍攝的穩定性,「夜視」功能在正式拍攝前就會提前開始運動測量(motion metering)——藉助計算機視覺和運動影象分析中常用的光流法(optic flow) 4 ,相機會提前對握持抖動、環境光線強度和畫面內物體移動進行判斷,這個判斷過程不僅有利於 Super Res Zoom 進行畫素對齊(我們將在後續文章中詳解),還將決定用於「夜視」成像的 15 幀畫面所需要的總體曝光時間。

最終,視具體拍攝裝置、抖動狀況、場景運動量和光線環境的不同,「夜視」功能會捕捉每幀曝光時間在 1/15s~1/6s 的 15 幀連續照片。
演算法堆疊以及一些額外挑戰
對手機上的夜間拍攝而言,1/15~1/6s 的曝光時間是 Google 找到的平衡點,但即便是在運動檢測和 HDR+ 演算法的加持下,這 15 幀連續照片的銳度和畫面純淨度都難以滿足最終的「夜視」效果要求。
因此接下來「夜拍」還需要對這 15 幀照片進行對齊與合併,這裡 Google 用到了堆疊,與少數派作者 @廣陵止息 在《 ofollow,noindex">利用堆疊獲得長曝光效果 》一文中分享的方法類似,但更加複雜:在初代 Pixel 和 Pixel 2 上,「夜視」利用重新調教過的定製版 HDR+ 演算法來排除那些難以進行畫素對齊的錯位幀,而在今年推出的 Pixel 3 上,這個錯位幀排除過程則由 Super Res Zoom 完成。

在這個對齊與合併過程中,Super Res Zoom 的效果要比 HDR+ 更好,但對處理器效能的要求更高。
演算法堆疊完成後,一張「夜視」照片最終也就展現在我們眼前了。但事實上,在成片輸出前,使用「夜視」在極限條件下進行拍攝往往還需要面臨兩個額外的挑戰。
首先,自動白平衡(AWB)在弱光環境下會失效。
和戴著太陽眼鏡都能分辨物體顏色的人類不同,自動白平衡從數學層面而言其實是一個不適定問題 5 ,換句話說,在光線不足的情況下,自動白平衡很再難將一張昏黃燈光照耀下的 A4 紙顏色認定為白色。
為此,「夜視」在這裡運用到了一個基於早前由 Google AI 公佈的「快速傅立葉色彩恆常(FFCC)」技術 7 的自動白平衡演算法,這個演算法通過對大量白平衡正常和白平衡失常照片的區分學習,能夠在極暗條件下自動調整成像白平衡來讓照片色彩看上去更加自然。

其次,「夜視」還需要對成片進行適當的色調對映(tone mapping) 。
在暗光環境中,人眼中用於感知光刺激的光錐細胞開始失效,而仍在工作的光桿細胞難以區分波長且空間敏銳度低下,因此我們在夜間往往難以分清物體顏色甚至看清物體的細節。
「夜視」追求的效果則與之相反——藉助上述方法,「夜視」最終會生成一張細節豐富、色彩明亮的照片,但這種長曝光和演算法堆疊另一方面也會帶來畫面不真實的問題,比如下面這張由單反拍攝的照片,當我們把它發到朋友圈,顯然會有人懷疑這張照片是否真的拍攝於夜間。

藝術創作和 HDR 顯示中常用的色調對映手法在這裡派上了用場,通過專門為夜間拍攝調教的色調對映,每一張「夜視」照片都能像下面這張樣片一樣,既能讓你感受到魔法般的夜拍效果,又能保證純粹的夜景氛圍。

發掘「夜視」的更多玩法
「夜拍」目前已經向所有 Pixel 機型進行推送,非 Pixel 機型可前往 這個網站 檢索適合自己機型的移植版本進行嚐鮮(不保證效果和穩定性)。
最後,附上派小隊在實際使用過程中總結而來的小貼士:
- 初代 Pixel 由於不具備光學防抖和 Pixel Visual Core,「夜視」拍攝會比較吃力
- 「夜視」也適用於前置攝像頭。在一片漆黑中,螢幕的亮光是「夜視」拍攝的理想光源

- 但儘量使用「夜視」拍攝夜景或對對焦要求較低的場景,因為自動對焦在弱光環境中效能會驟降
- 但 Pixel 3 仍然可以在「夜視」模式下進行手動對焦(獨佔)

- 「夜視」同樣適用於日間拍攝,在長曝光堆疊和 Super Res Zoom 的幫助下,日間拍攝使用「夜視」能夠極大提升畫面細節和暗部純淨度

(題圖來自 Google 官方部落格 )
> 下載少數派客戶端、關注少數派公眾號,發現更多系統背後的故事 :iphone: