憑單攝完虐iPhone XS 揭秘谷歌相機夜視功能
Google Pixel手機一直堅持單攝,雖然硬件不算頂尖,但是憑藉著強大的算法,Pixel手機的照相水平非常突出。上個月,Pixel 3發布會的Keynote顯示其暗光拍照的成像效果甚至完虐iPhone XS,讓人驚嘆不已。近日,Google又為自己的相機應用增加了“Night Sight”功能(夜視功能),用戶無需三腳架和閃光燈就能在夜間拍出銳利乾淨的照片,並獲得了眾多評測博主的好評。
本文就將為讀者介紹弱光條件下拍照的難點以及機器學習在這一問題中的應用。
01.弱光拍攝的難點
大家如果在夜晚拍過照片的話,肯定會發現拍出的照片上有很多噪點,使得照片看起來顏色和亮度都很不均勻。噪點或者叫噪聲的來源有兩個:散粒噪聲和讀取噪聲。散粒噪聲指進入感光元件的光子數量太少造成可觀測的光子數量不均。散粒噪聲的出現與我們所使用感光元件的質量沒有關係,不過智能手機的感光元件太小,所以受散粒噪聲影響比普通相機更大。讀取噪聲則是由將電信號轉換成讀數時的隨機錯誤造成的。感光元件的質量越好那麼讀取噪聲也就越小。
把所有噪聲的來源都考慮進去我們可以得出一個信噪比,信噪比越高則意味著我們拍出的照片質量越好。感光元件大小不變的情況下信噪比和曝光時間成正比,所以看來只要練成鐵手就能完美地解決這個問題。然而還是想簡單了,就算拍攝者能長時間穩穩地舉著手機被拍的對像也沒法保持長時間不動。
2014年發布的HDR+ 功能改善了散粒噪聲和讀取噪聲的問題,不過HDR+ 的本意如它的名字一樣是為了提高照片的動態範圍。HDR+ 的原理是連拍很多張照片,然後通過圖像識別把多張照片進行疊加成一張照片。每張照片的曝光時間能根據用戶手抖的程度和拍攝目標的移動自動調節來保證照片的銳度,這樣就在保證銳度的前提下增加了曝光時間,所以照片的信噪比也能提高了。
看起來弱光拍照的問題已經完美解決了,就連拍幾十張後合併成一張就行了。然而實際的情況是就算用多張照片合併的方法還是對光照有要求,光照低於一定的標準就算再多拍效果也不好。標示光源亮度的物理量是光通量,它的單位是流明。單位面積接收到的光通量叫做照度,單位是勒克斯。他們之間的關係大家可以參照壓力與壓強的關係來理解。為了讓大家能直觀地了解不同勒克斯的概念,下面表中用生活中的場景與勒克斯數值做了對比:
普通的手機相機從30勒克斯開始就不太行了,如果使用HDR+或者類似合成多張照片的技術大概能降到3勒克斯但再低也就不行了。我們夜視功能的目標是讓手機在0.3到3勒克斯之間不補光只按一次快門也能拍出好照片,而要實現這一目標最重要的手段就是盡可能多地捕獲光子。
02.曝光時間限制和模糊問題
延長曝光時間雖然能提高信噪比拍出更乾淨的照片,但也同時帶來了兩個問題。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 秒的照片進行合成。
03.對齊與合成
拍攝多張照片進行合成不是什麼新鮮的方法,在天文和微距攝影上都有很廣泛的應用。雖然原理聽起來很容易,但將手持拍攝的照片對齊就很困難。我們從2010 年就開始進行對齊與合成相關的研究,最早的成果是iOS 平台一個叫做Synthcam 的應用。
夜視功能的原理其實和Synthcam 差不多,但提高了照片的分辨率。Pixel 1 和2 中使用的HDR+ 融合算法提高了剔除無效照片的能力,Pixel 3 中使用的超高分辨率變焦技術雖說並不是為減少噪點所開發但客觀上也實現了除噪點的效果。這項技術某些條件下效果優於HDR+ 但對計算能力要求更高,所以沒有應用在Pixel 1 和Pixel 2 上。
04.其他難題
原理聽起來挺簡單,但開發夜視功能的過程中還是碰到了不少難題。
|1.弱光條件下自動白平衡失效
自動白平衡的目的是將不同色溫條件下拍攝的照片都調整為白光下拍攝的顏色,否則人眼在回看照片時會發現明顯的色差。
白平衡在數學上屬於不適定問題。比如感光元件判斷拍到的雪花是藍色的,但無法判斷雪花到底是真的藍還是天的藍色映在雪花上。現在的自動白平衡算法在強光條件下效果不錯,但在弱光拍攝時就非常不准了。
為此我們訓練了一個模型來判斷照片的白平衡是否正常並作出矯正。為了訓練這個模型我們使用Pixel 手機在各種光照條件了拍了很多照片並手工對白平衡進行調整。下圖中我們能看到應用模型前後的明顯區別。
| 2.色調映射
人眼在弱光下是分不清楚顏色的,因為只有不能判斷顏色的視桿細胞才能在晚上工作。但人眼看不到並不表示到晚上顏色就沒有了,所以夜視功能想超越人眼的極限必須在夜間也能拍出清晰的顏色。
下面這張圖就是在夜間通過長時間曝光所拍攝的(注意天空中可以看到星星)。雖然偶爾拍拍這種把晚上拍成白天的效果也不錯,但恐怕大家還是想能把晚上拍成晚上。
其實藝術家們很早就發現了讓觀眾感覺所畫的是夜間的方法,如下圖所示:
畫家提高畫面的對比度並把陰影部分直接塗黑來營造出夜間的效果。我們也使用了類似的方法,比如使用S 形色調映射。不過怎麼把握其中的度還是挺值得思考的,下面這張用Pixel 3 拍的照片就非常成功:
05.夜視模式的極限
當照度低於0.3 勒克斯時手機的自動對焦功能會失效,所以我們在Pixel 3 的夜視模式增加了兩個手動對焦按鈕:近和遠。近模式的對焦距離約為1.2 米,遠模式則在約3.6 米處對焦。在遠模式下景深是從1.8 米到無窮遠。雖然照度低於0.3 勒克斯也能拍出好照片,但就必須藉助三腳架和第三方應用了。
那麼理論上對攝影來說照度能低到什麼程度呢?我想當捕捉到的光子會受到讀取噪音影響時就差不多了。另外還有其他的噪聲來源,比如受溫度影響的暗電流,不過我可不建議大家為了降噪點把手機泡到液氮裡。就算這些問題全都解決了也會有風吹樹搖,超長曝光攝影還是很困難。
06.注意事項
用夜視功能拍照很有趣,如果使用得當的話能夠拍出效果非常好的照片。夜視功能在Pixel 3 上面的效果是最好的,一方面是因為它芯片速度最快,另外自動白平衡算法也是以Pixel 3 為基礎訓練的。不過就算用的不是Pixel 3 夜視功能也能讓你在弱光下拍出好照片(預覽裡的噪點並不會出現在完成的照片上)。文章最後就給大家一些更好地使用夜視功能的注意事項吧:
- 完全黑暗的地方夜視功能也拍不到什麼東西
- 柔和均勻的光照條件下拍攝效果更好
- 不要對著光源拍,否則會有炫光
- 可以點預覽屏幕來調整曝光
- 如果是單純地想降低曝光是可以通過軟件後期實現的,而且沒那麼多噪點
- 對著畫面上有顏色或者亮度對比的地方比較容易自動對上焦
- 還是對不上焦就試試手動對焦(如下圖)
- 靠著牆可以增加手持的穩定性有助於提升照片銳度
- 用前置鏡頭自拍也可以用夜視功能,而且手機屏幕還能補光