• 2

Pixel相機黑科技怎麼來的? 來看技術解密



即便現在手機多鏡頭當道,但Google還是在Pixel手機上展現超越單鏡頭的實力,以硬體+軟體+AI帶來如HDR+、景深肖像模式、超高解析度(Super Res Zoom)及夜視等幾項要以多鏡頭才能完成的模式,相信大家也很好奇背後到底運用了哪些技術? Google先前特別邀請傑出工程師Marc Levoy來台,為大家一一解密,有的之前在Google AI Blog發表過,有的則多提到一些觀念,這裡也綜合先前的採訪,以及Google AI Blog上的文章,整理分享給大家。。

Macr Levoy是史丹佛大學電腦科學榮譽退休教授(該職由VMware創辦人所支持),以及Google傑出工程師。Macr Levoy在史丹佛大學教授電腦繪圖學、數位攝影學和藝術科學,目前他在Google帶領的團隊負責了Pixel手機的HDR+模式、肖像模式、夜視、Jump光場相機以及Halide圖像處理語言程式,對計算攝影(Computational Photography)領域相當有研究。


Macr Levoy首先跟我們分享手機相機的趨勢,硬體上畫素/感光元件、鏡頭品質越來越好,光圈也越來越大,以及已成為主流的多鏡頭趨勢,但一般人可能還沒觀察到,手機攝影的重心正從硬體往軟體轉移。
包含以計算攝影整合連拍幀數做多框合成,以及在及演算成像時導入機器學習,在訓練機器學習的過程中,又得到更多可投入訓練的資訊,一環環來提升計算攝影的品質。

Macr Levoy也提到,好的手機相機程式,要遵守幾項原則:
◾執行要迅速:
比方取景螢幕刷新率要高於15fps,快門延遲也要低於150毫秒,拍好之後照片成像時間也要少於5秒,且不能讓手機在過程中感覺到發熱。

◾預設模式絕不能失敗:
過程要是可靠的,如有可靠的曝光、對焦、自動白平衡,且要避免拍到鬼影或殘影。

◾要重視使用者在攝影時會遇到的特殊狀況:
當然有可能遇到困難場景,預設模式也拍不好或偵測錯誤。Macr Levoy舉例他們有套臉部偵測,準確率有96%,但有時遇到戴深色墨鏡的人會偵測失準,導致測光參數也失準,後來他們用機器學習和更好的繪圖數據來修正這個問題。
不過特殊模式下,若有偶發的幽默意外,結果是可以被接受的,比方拍全景時遇到狗狗走動中,可能會就拍到這種臘腸狗體...


手機因為感光元件小,又多半是手持拍,所以面臨幾個較大的問題是:低光雜訊噪點、手持易晃動、動態範圍小...等,所以可以發現很多演算法都是在解決這些問題。
Pixel手機上有四個計算攝影帶來的功能,可能有點燒腦,所以建議直接點擊轉跳,看完一個休息一下,不要連著看,比較不會累...
■ HDR+
■ 人像模式
■ 高解析變焦
■ 夜視模式

 

▌HDR+

現在大家對HDR的原理應該都很清楚,典型的作法是以包圍曝光拍攝多幀不同亮度的影像,短曝光的高光部位比較清楚,長曝光的則是暗部清楚,接著就取這些有細節的部分,合成出最後的影像。
但它的問題是,若是手持拍攝,可能因為晃動,或物體有移動,在合成時像素會難以對齊,
而且畫面中若有過曝到一片白的地方,會讓演算錯誤,最後畫面出現鬼影、疊影、偽像等問題。


Google的解決辦法是:連拍短曝光的多張影像,盡量讓每一張的曝光都跟第一張一樣,這些影像高光處有細節,也因為曝光相似,疊合時更容易對齊。
但你可能會想說:拍短曝光,那暗部不就偏暗嗎?
HDR+的作法是採用色調映射(Tonemap)來增強暗部,降低亮部,犧牲一點整體的色調和對比度,來保留局部的對比,讓畫面裡亮暗部可以呈現出細節。(左:單張拍攝 右:HDR+)


那增強的暗部不就會看到很多雜訊?
有個公式是訊噪比(SNR)和連拍幀數的平方根成正比,連拍幀數越多,訊噪比越高,表示雜訊越少,連拍多張後,有足夠的畫面做合成,就可以減少暗部的噪點。
也因為疊合多張畫面做降噪,所以低光畫質也會比較好。(左:單張拍攝 右:HDR+)



▌人像模式

現在手機上的人像模式,都是演算而來的「合成景深」。
不像單眼,手機的光圈是固定的,而且鏡頭焦距偏廣角,除非近拍,否則難以產生景深,但如果知道相機到畫面上每個點之間的距離,就具備區分前景背景的基本條件,再透過演算,將背景作模糊效果達到「合成景深」。

那麼手機怎麼測量場景中每個點的距離呢?
最普遍的方法是用兩顆鏡頭,在相似的焦點下捕捉視角相近的兩個影像,找到兩個影像匹配的像素後透過三角測量算出深度,這就是所謂的「立體算法」( stereo algorithm),然後將一個平面上的點保持清晰,平面外的點,就做模糊效果,這模糊效果採集鄰近像素色彩的平均值,而程度則取決於這個點對焦和平面之間的距離,軟體甚至可以控制散景的形狀,雖然是用算的,但可以做到讓大部分人看起來覺得和光學景深照一樣。
這是手機產生景深照一個比較簡單的概念,但Pixel系列都只有單鏡頭,怎麼測量距離/ 深度,算出景深呢? 這裡稍微仔細一點來說Pixel 2及Pixel 3上的作法,基本上有四個步驟。

第一步:先拍一張HDR+的照片
肖像模式照片以一張泛焦,什麼都清楚的HDR+圖像為基礎,前面提到,HDR+有動態範圍高、低噪點、細節清楚等優點,有了HDR+照片後,就可以進入下一步。

第二步:區分前後景
有了HDR+照片之後,就要決定哪些像素是前景,哪些是背景,這裡利用了機器學習。
以前景拿著咖啡杯的人為例。

(圖片來源:Google AI Blog)

Google訓練了一套以TensorFlow撰寫的「卷積神經網路」(CNN),讓它計算哪些像素是人,哪些不是,它分階段先區別了顏色和邊緣等簡單特徵,後段篩選臉部、身體等特徵,結合兩種階段的過程很重要,因為不只要測量畫面中有沒有人,還要確實定義哪個像素也屬於這個人物。
Google用超過百萬張人物和配件照片訓練出機器學習模型,包含了戴帽子、吃甜筒...等,這套神經網路系統辨識出手上的茶杯也屬於前景。
這是神經網路辨識後區別出了人物、背景遮罩,並利用數學計算中的「邊緣感知雙邊求解器」(Edge-aware Bilateral Solver)讓人物分割的邊緣更銳利。

第三步:計算深度圖
前面提到Pixel手機用機器學習區分出何為人物、何為背景,但如果拍的是物件呢?
非人物就無法用機器學習辨識,Google在這裡用了Dual-Pixel 雙像素技術(即PDAF相位對焦)來預估出深度圖,一來解決Pixel手機單鏡頭問題,二來也藉此區分哪些物件是前景,哪些是背景。

▼PDAF像素可以在單張快照裡,透過左側和右側的像素提供訊息(或是如果你正直拿手機,就是鏡頭的上側跟下側),透過很小,只約1mm的基線,讓影像立體化,提供判斷場景深度的線索。

(轉載自Google AI Blog,圖片來源 Markus Kohlpaintner)

第四步:結合上面分割圖及深度圖渲染出成品
最後就是將PDAF圖像輸入訓練好的卷積神經網路,結合機器學習分割技術,將主體保持清晰,並根據主體和背景的距離,按比例模糊。


專業相機會依照和對焦平面的距離,產生漸進的散景,真實情況是,可能對焦在眼睛上,鼻子就會模糊。而機器學習算出的距離,則會保持主體一致的清晰,或許不符合物理真實,但可讓一般人更容易就拍出帶自然散景的照片。

訓練辨識PDAF圖像的神經網路,看來一句話輕描淡寫,但訓練過程並不簡單,Google將Pixel 3的訓練模型又做了優化。
要訓練機器辨識PDAF圖像的深度,就要提供大量的PDAF圖像,Google用一套以五台Pixel 3組成的機器(五眼怪?),用WiFi控制他們能同步拍攝,拍出成千上萬的照片後,透過機器學習中的Ground Truth來訓練Dual-Pixel技術產生品質更好的深度圖。


比方一些原本與基線平行的水平線,會因為較難察覺有距離的差異,在計算深度時被忽略,而沒有模糊到,這在Pixel 3新的模型跟算法中就得以獲得改善。
為了能讓用戶拍攝時無須等待太久,快速做完計算,Google用了TensorFlow Lite這個針對行動裝置和嵌入式裝置的模型,以及Pixel 3更強大的GPU一起工作,讓模型可以快速運行。

但是前相機沒有Dual Pixel,為何還是能拍出景深照呢?
前相機就沒有使用Dual Pixel來計算深度圖,而是使用機器學習辨識人物、背景。(可以發現用前相機+肖像模式拍非人的物體時沒有景深)



▌高解析變焦

Google在Pixel 3上提出了「Super Res Zoom」高解析變焦這功能。當大家都以多搭載一顆長焦鏡來拍清晰變焦時,Google仍想嘗試能否用一顆鏡頭,搭配計算攝影技術來做到一樣的事。
最後Pixel 3上形成的高解析變焦功能,雖然背後並沒有搭載人工智慧或機器學習技術,而是將多層影響合成高解析照片,提升了照片的細節,但結果與很多搭載2x光學變焦鏡頭的手機不相上下。
  
放大圖像中某部份產生的數位變焦,一定會損失細節,因此如何重建出好的,清晰的細節,是高解析變焦最要克服的事情。
同學們應該聽過,現在的感光元件濾色片,都是這樣的拜爾陣列(Bayer filter array),並不是每顆像素上都有三原色,而是以2x2像素為一組,這兩個像素是綠色、那個是紅色,那個是藍色,排列而成。
如此下圖中問號部份的像素(缺失的資訊),實際上是什麼色彩、什麼細節,就要做重建,這過程稱為「去馬賽克」(Demosaicing),一種用鄰近像素的資訊,重建缺失色彩的過程,Macr Levoy跟我們提到,一張影像中,可能有2/3的資訊,是透過插值重建出來的。


所以如果像素上的訊息不夠完整,那重建出來的品質就不會太好,手機感光元件小,像素紀錄的細節本就比單眼少,如果又是用補插值後的像素,再補插值算一次,那品質會更糟糕,細節更不清晰。
這時候,多張合成就是一種神救援的技術。
前面提到HDR+就是利用多張合成後,產生一張亮暗部的像素細節都很好的照片。高解析變焦也用了同樣的原理。
當我們手持拍照時,即使你沒發現,還是會有些細微的晃動,而讓連拍的每張畫面,會有些微的位置差異,這些不同位置的差異,剛好就可以填補缺失的畫素,就不用執行去馬賽克,用猜的來重建缺失。
最理想的狀況是想這樣,四張各向上下左右偏移一像素的畫面,合成後剛好填補上缺失的訊息。


但現實狀況是,手機多半是手持拍照,在拍高解析變焦時,就可把手持的小晃動連拍,轉成補上缺失像素的優勢(超出OIS可補償的大晃動就沒辦法了)。過程中要將連拍的畫面,以其中一張為參考做對齊,對齊之後,就形成一張大致的圖像。
但手震通常不會偏移得那麼剛好,要將這單鏡頭高解析變焦方案用在手機上,還是有點挑戰,且還需要開發特別的演算法。
比方連拍的每個單張仍會包含噪點,演算法需要辨識出來,並正確做降噪,另外場景中移動的物件(風吹的樹葉、走動的人們等),也會影響畫面對齊品質。
為了有效合併連拍畫面,Google在Pixel 3上開發了一套連拍解析度增強模式,去注意到畫面上屬於「邊緣」的部份,沿著邊緣的方向融合像素,讓照片在降噪導致畫面失去銳利感,以及增加細節和解析度間做權衡。

(圖片來源:Google AI Blog

至於畫面中移動的物件,比方人、車、風吹的樹葉、水波...等,Google則開發了一套穩定的模型,可以檢測並減輕對齊時的誤差。他們選擇一張畫面當作參考影像,並確定在其他畫面找到正確的對應特徵時,才會做對齊融合,這方法可以避免如鬼影、運動模糊...等合併誤差。
這相簿裡包含了一系列高解析變交的成果可以參考。

可能有同學想說:那上腳架時,還能拍出偏移的畫面嗎?
這種狀況下,還是可以強制開啟光學防手震控制器,相反的製造鏡頭晃動來模擬手震,因為晃動的幅度很小,並不會干擾照片成像。
如果你有Pixel 3手機,可以把手機貼到門窗的玻璃上,開啟相機,然後把畫面拉到最大,就可以看到這種規律連續的晃動。


這動畫簡單了展示Pixel 3上如何形成高解析變焦,它利用手持自然的晃動,拍出一連串位置些微不同照片,然後融合再一沏增加最後成品的細節。




▌夜視模式

當初設計夜視模式,是為了改善0.3 lux~3 lux亮度下手持、不需閃光燈的拍照品質,3 lux大概是晚上只有路燈照亮的人行道,0.3 lux則是不開燈,已經找不到地上鑰匙的那種亮度了。

我們知道低光下手持拍攝時,快門時間越長,就越能捕捉光線,但也越會手震,Pixel手機上也是利用多張合成來解決這兩種矛盾。
手持+夜視模式,就運用到前面提到的HDR+技術,以及Pixel 3還有加上高解析變焦的技術來提高清晰度、以及對齊/ 融合像素。
針對晃動問題,Pixel手機還會搭配移動測量技術,看是手持還是上腳架,若偵測到手機穩定,拍攝張數就會少一點,但每張曝光時間長一點,手持、或是偵測到畫面中有移動的東西,則是拍攝張數較多,每張的曝光時間變短。根據Google AI Blog的文章提到,拍攝多少張及多長的曝光時間,會視不同型號的Pixel手機,以及手持、移動場景而定,可能會介於快門1/15秒(或更短)連拍15張,以及快門1秒連拍6張之間。
不過夜視模式還會遇到低光時白平衡以及色調失真的問題。

改善低光時的白平衡
人在彩色的照明,或是戴著墨鏡看東西時,還是能正確感知色彩,但當我們在一種光線下拍照,在另一種不同的光線下瀏覽時,照片通常像被染過色一樣,我們就很難判斷物件實際的顏色,為了糾正這種狀況,相機通常會用自動白平衡來校正,就是部份或全局校正色溫,讓顏色看起來像是在自然光(通常是白光)照明下呈現的樣子。
雖然自動白平衡在非夜視模式裡做得還不錯,但在非常暗,或是強烈色彩的照明下,就很難偵測光源到底是什麼顏色。
為了解決這問題,Google開發了「學習式白平衡」,訓練模型區別好的白平衡,以及不好的白平衡,當我們拍照遇到不好的白平衡時,算法會建議怎麼調整成更自然的色調。
要訓練這個算法,需要用Pixel手機拍攝各種場景,然後在色彩校準螢幕上查看照片時,手動校正白平衡。從下面的例子可以看到在低光時,學習式白平衡修正的差別:
左邊是以Pixel 3+預設模式拍的,右邊則是Pixel 3+夜視模式拍的,預設模式下,相機不知道這海濱小木屋的光源有多黃,右邊則是學習式白平衡算過之後,還原出一個較自然的白平衡。

 (圖片來源:Google AI Blog)

正確表達夜間調性
前面提到夜視模式是為了改善0.3 lux~3 lux亮度下手持、不需閃光燈的拍照品質。
但在很低光時,人眼都看不到場景裡的顏色了,相機又如何捕捉並漂亮的呈現呢? 
拍攝低光夜景時,不管是單眼或手機,多半會用長曝光,或是多張合成,拍出這樣的照片,有對的顏色、有細節,以及因為月光照成的陰影,而且有星星,效果很不錯,但它看起來太像白天了,會造成讀者的困惑,不覺得這是要表達夜晚場景,也可能這並不是拍攝者想要的樣子。


Google從古典畫作得到靈感,他們發現畫家利用強化對比度、深色包圍場景,以及把陰影部份描繪成黑色三種方法,來表現這是低光場景。於是在夜視模式的演算法裡,也採用了一樣的技巧來表現低光場景。不過要用夜視模式拍出亮度跟細節,同時還讓觀賞的人知道這照片是夜間場景,還是有點困難的,這張是還不錯的成果。


夜視模式這樣的好物,會開放讓其他手機也能安裝下載嗎?
關於這問題Macr Levoy提到,目前還是優先放在Pixel手機上,開放與否除了技術外,還有很多複雜的因素,未來會不會有計畫,他也不能予以置評。


▌關於計算攝影的一些QA

上面這些計算攝影技術,目前都還是作用在靜態照片上,Macr Levoy表示,若要將這些軟體技術用在影片上,需要更好的硬體加速來支撐,未來還是可以考慮作用在影片上。(不過Pixel 3的錄影時防手震倒是有用到演算法)
目前的計算攝影仍面臨一些限制,硬體方面,也是每一家廠商都會面臨到的,比方想要更長的焦距,機身就會更厚,儘管現在廠商有很多創新技術,但還是無法避免會遇到這些物理限制。軟體上,也有運算能力及記憶體的天花板有待突破,比方更進階的機器學習模型,需要更大的記憶體...等。
Macr Levoy也提到,雖然計算攝影的運算變得更複雜,但這也意味著他們可以透過一次次的更新,取得更好的拍攝功能(或體驗),他們也希望每次更新都可以擴及到歷代Pixel手機上,對團隊來說,這是一項持續工作,但優點是,不用等到新硬體出來,就可以推出更進階的功能。

就算是單眼相機,也多少有多張合成、軟體演算在運作,只是看起來沒有現代手機那麼全面跟深入。
對於在拍攝時套用很多演算法,有人會覺得不要過多修飾鏡頭跟感光元件紀錄的當下,才是真實的拍攝行為(紀錄影像);
也有人覺得透過軟體還原眼睛能看到,但鏡頭無法好好紀錄的樣子,是必要的(比方很多攝影師還是會修圖後再拿出成品),
也有人覺得用AI演算讓畫面更漂亮更穩定更討喜,解決手機硬體的限制,也無不可,
不僅是你我,每家廠商對計算攝影也都有不同的喜好跟品味,演算法要多用力干涉成像這件事,我想沒有答案,各位同學覺得呢?

如果你有興趣,可以參考Google AI Blog裡的許多原文:
HDR+: Low Light and High Dynamic Range photography in the Google Camera App
Portrait mode on the Pixel 2 and Pixel 2 XL smartphones
Learning to Predict Depth on the Pixel 3 Phones
See Better and Further with Super Res Zoom on the Pixel 3
Night Sight: Seeing in the Dark on Pixel Phones

#所以多鏡頭的Pixel手機還會怎麼進化?
#個人猜測Pixel 4會多一顆超廣角鏡頭
2019-06-18 14:55 發佈
頭香 我推

都PO這麼久了 技術文都沒人看嗎


nicole543543 wrote:
頭香 我推都PO這...(恕刪)


學習了! 難怪單鏡頭還這麼厲害,原來用到深度學習啊!
即使數十萬的單眼處理器還差pixel3一大截
努力的方向很不相同,總之個其所好囉
終於全部看完了...

所以GCam就是一種影像演算法
只要手機感光元件有一定的水準
都可以藉由Gcam達到高素質的拍照品質效果
信我者天堂近了!!

Nanako0625 wrote:
即便現在手機多鏡頭...(恕刪)
健人就是腳勤
資訊知識滿滿好文 感謝
Nanako0625 wrote:
即便現在手機多鏡頭...(恕刪)


等之後來看


pixel感覺就很厲害


終於看完了,一篇簡單易懂的好文,先收一下
Nanako0625 wrote:


即便現在手機多鏡...(恕刪)


看完這篇文章還特地去找原文,
沒想到原文當中真的是使用lux而非nits

事實上這篇文章的一小瑕疵在於原文為了讓讀者容易理解,
在Human eye perception 的那表格裡用的是illuminance,
然而正確的應該是luminance,
只有luminance才能表達人眼感受。

撇開上述題外話,
這篇的確是相當精彩的文章。
  • 2
限制級
您即將進入之討論頁 需滿18歲 方可瀏覽。
根據「電腦網路內容分級處理辦法」修正條文第六條第三款規定,已於該限制級網頁,依台灣網站分級推廣基金會規定作標示。
評分
複製連結