人像模式運作原理 ,Google 發表 Pixel 2 與 Pixel 2 XL 後立刻拿下目前 DxO 行動裝置最高分,拍照能力也立即成為這兩支最受關注的焦點,除了照片成像如何外,雖然它們只有一顆鏡頭,但透過軟體運算方式,卻也能實現不錯的 Portrait Mode 人像模式效果,這點最近網路上也被討論非常熱烈,為了讓大家更了解其運作原理,昨日 Google 就在官方部落格上詳細解釋一般。你可能會想不就是讓軟體分辨出被攝主體跟背景?整體這麼說是沒錯,但如何讓軟體能正確辨識以及工作,這裡面可是要下不少工夫,Google 透過 HDR+ 與 4 大步驟才完成。

Google 公布 Pixel 2 與 Pixel 2 XL 人像模式運作原理

如果你還沒看到過 Pixel 2 與 Pixel 2 XL 的人像模式拍照效果,沒關係,下面者兩張就是最經典的案例,左側是用 HDR+ 拍出的照片,右側則是人像模式。人像模式可讓觀賞者更專注在被攝主體上,不受背景影響(點我看原圖):
Google 公布 Pixel 2 與 Pixel 2 XL 人像模式運作原理

什麼是淺景深照片

淺景深的意思是指被攝主體在一定距離內畫面是銳利的,前面物體與後面的背景則變成模糊,這是一個能吸引觀賞者專注在被攝主體,或避免混亂背景被注意非常好的方式。而 SLR 單眼相機有一顆大鏡頭,能創作出淺景深的效果,因此用它來拍攝人像時,攝影師就能透過這種拍攝技巧,呈現他們的個人特色藝術風格。

而淺景深照片中影響模糊程度的條件主要有兩個:“深度” 以及 “鏡頭的尺寸”。深度指的是離對焦區塊越遠物體,模糊量也會越多。鏡頭尺寸我們以一顆 50mm f/2.0 鏡頭為例子,50mm/2 = 25mm 為鏡頭的直徑,用這樣的鏡頭來拍攝,即使物體離於對焦區塊只有幾英吋的差距,一樣會變得很柔軟(模糊)。

淺景深還有另一個值得了解的知識,就是 “散景”,散景也就是照片中光線打在模糊點上產生的形狀。這形狀是取決於鏡頭的光圈結構,圓形?還是六角形(由六個光圈葉片組成)?攝影師們一直以來也不斷爭論哪個形狀能構成好的或壞的散景。

合成淺景深照片

跟單眼相機不同,手機的鏡頭非常小且尺寸固定,所以沒辦法產生淺景深效果,至少能讓照片有正常對焦。不過,如果我們能知道相機與拍攝場景的距離,就可以利用模糊效果來覆蓋照片中的每一個像素,模糊效果將會取決於這像素顏色與週邊的平均值,模糊量則是與對焦區塊的距離而定。另外我們也能控制模糊的形狀,也就是產生散景效果。

但要如何才能讓手機計算出鏡頭與場景中每一點的距離?最常見的方法就是使用兩顆靠近的鏡頭,也就是所謂的雙鏡頭手機,接著在左右拍出的照片成像中,找出相符合的點,而獲得的位置資訊就能透過三角測量方式計算出場景深度,這種尋找配對方式稱作立體演算法(stereo algorithm),工作原理跟我們的兩隻眼睛非常類似。

合成方式其實還有一個更簡單的作法,就是使用一些單鏡頭手機的應用工具,將一個圖像分成兩個圖層:”前景“(通常是一個人)中的每一個像素,以及剩下其他每一個像素的 ”背景“。這種分離方式有時候稱作語義分割(Semantic Segmentation),讓你能模糊背景,但它沒有深度的概念,沒辦法呈現不同的模糊程度。另外如果物體在人的前方,也就是更靠近相機,是不會有模糊效果的,即使是真正的相機都有可能發生。

無論使用立體還是分割,這種人為模糊背景的方式都稱作合成淺景深或合成背景散焦,這跟 SLR 單眼相機的光學模糊是不一樣,但對大多數人來說看起來非常相似。

Pixel 2 系列的 人像模式運作原理 是如何工作

Google Pixel 2 的人像模式前後鏡頭都有提供這功能,但前鏡頭只使用語義分割(Semantic Segmentation),後鏡頭則是語義分割(Semantic Segmentation)與立體演算法(stereo algorithm)兩個都有。不過這邊就有一個問題,Pixel 2 只有一顆後鏡頭,那怎麼能使用立體演算法?總共需要 4 大步驟:

步驟 1. 製作 HDR+ 照片

人像模式是從一張非常清晰的照片開始。所以我們使用了 HDR+ ,這是 Google 用來提升照片品質所使用的計算攝影學科技,近期每一台 Nexus 與 Pixel 手機都有。HDR+ 會拍攝一系列曝光不足的照片,透過校準以及平均細節方式,來減少陰暗處的噪點,當整體對比度合理減少時,藉由保持局部的對比度,來提升陰影區域的品質。即使在燈光昏暗的環境下,這張照片也具備高動態範圍、低噪點、以及銳利清晰的細節。

這種透過校準與平均細節減少噪點的方式,在天文攝影學中已經應用好幾十年,但 Google 的方式有些不同,因為我們是使用手機拍攝,需要更小心避免攝影者拿的不穩,或場景物體移動時所產生的晃動影像。下面是使用 HDR+ 拍攝的範例照片。

使用 Pixel 2 拍攝,左為沒開啟 HDR+;右則有開啟,可以注意看 HDR+ 如何避免天空與庭院過曝的同時,依舊保留走道天花板上方黑暗處的細節(點我看原圖):
Google 公布 Pixel 2 與 Pixel 2 XL 人像模式運作原理

步驟 2. 基於機器學習的前景與後景分割

HDR+ 照片完成後,下一步就要決定哪些像素為前景(通常為一個人)、哪些像素為背景。這是一個非常棘手的步驟,因為不像電影中的 chroma keying 色键(如:綠幕)這麼簡單,我們沒辦法猜測背景是什麼顏色,因此就必須透過機器學習技術來實現。

特別的是,我們已經使用 TensorFlow 訓練出一個神經網路,用來分辨及估計照片中哪些像素為人物、哪些像素不是。具體來說,我們使用的是網路是,帶有跳躍式連結(skip connection)的卷積神經網絡(CNN)。卷積的意思是指採用學習網路組件的過濾器(每個像素周圍的加權和),你可以想成這網路是用來過濾圖片,接著還是一直過濾圖片。而跳躍式連結則是允許資訊在早期、後期都能輕鬆傳遞、流動,早期階段推算比較簡單的特徵,如:顏色、邊緣線條,後期階段則是高難度的特徵,如:臉部、身體部位,這兩個階段的結合是非常重要,不僅僅辨識出照片中有沒有人,還要準確鑑別哪些像素是屬於人。

在這之前,我們的 CNN 已經接受一百萬張有人物照片的訓練(以及他們的帽子、太陽眼鏡、冰淇淋甜筒)。下是使用 TensorFlow 手機所推算出的遮色片範例。

左原圖,使用 HDR+ 所生成的圖片;右邊則是我們的神經網路輸出圖,白色部分被認定為前景,黑色則是背景(點我看原圖):
Google 公布 Pixel 2 與 Pixel 2 XL 人像模式運作原理

這個遮色片有多棒?還不錯,我們的神經網路成功辨識出女性頭髮以及手拿的茶杯為前景,所以可以保持它們銳利,如果我們根據這遮色片產生模糊照片,就會變成下圖:
Google 公布 Pixel 2 與 Pixel 2 XL 人像模式運作原理

這結果也顯示出幾件事情。首先,即使背景物件的深度都不一樣,模糊程度也都是一致的。第二,如果這張是用單眼相機拍攝,盤子以及上面餅乾都會出現模糊效果,因為它們離鏡頭很近。

我們的神經網路知道餅乾不是人物一部分(位於遮色片黑色區塊),但它又是在人物的下方,因此也不能認作是背景的一部分,當我們偵測出這種情況時,會保持這些像素銳利。不幸的是,這種方式並不是每次都適合,像在這張範例下,我們應該讓這些像素變得更模糊一些。

 

步驟 3. 從雙像素到一張深度圖

為了改善結果,這會幫助了解場景中每一個點的深度,我們使用立體演算法(stereo algorithm)來計算深度。Pixel 2 不是一台雙鏡頭手機,但它擁有 Phase-Detect Auto-Focus (PDAF) 相位對焦技術,有時候也稱作 dual-pixel autofocus (DPAF)。想像把手機裡的主鏡頭拆成兩半,用鏡頭左側看到的畫面會跟鏡頭右側有些不同。而這兩個視角只有 1mm 的差距(大約是鏡頭直徑),不足以使用立體演算來產生深度圖。相機的光學元件運作方式,是將圖像感測晶片上的每個像素,分成兩個較小像素並並排一起,接著個別讀取它們,如下圖所示:
Google 公布 Pixel 2 與 Pixel 2 XL 人像模式運作原理

就如上圖,PDAF 像素在一張快照中可以給你左右兩側不同的視角。或者這樣看,如果你手機拿直的拍照,它就是鏡頭的上下兩個部分。下圖就是實際例子,左為上半部拍攝,中是下半部,看起來幾乎一樣對不對?但事實上有一些為不同,右是這兩張圖拉近製作出的 GIF 檔(點我看原圖):
Google 公布 Pixel 2 與 Pixel 2 XL 人像模式運作原理

PDAF 相位對焦技術很多相機都有,當然也包括 SLR 單眼相機,幫助它們在錄影時對焦能更加快速。我們則透過這技術來計算深度圖,具體來說,我們使用左側以及右側影像(或上下),透過 Google 的 Jump Assembler 作為立體演算法的輸入。這算法式會先執行基於瓦片的對齊讓子像素精準,來產生出低解析度的深度圖,接著透過雙向求解器(bilateral solver)轉變成高解析度,類似 Google 之前使用的鏡頭模糊功能。

另外一個細節:由於 Pixel 2 主相機的左側與右側視角非常接近,所以我們獲得的深度資訊是不準確的,別是在低光源下,圖像會有非常多噪點,為了解決這問題以及提高深度準度,我們快拍左側與右側的圖像,在使用立體演算法之前,進行對齊以及平均。當然,這步驟要非常小心,就跟 HDR+ 一樣避免出現任何錯誤,要不然深度圖就會出現殘影的狀況。

左圖是使用在立體演算法的深度圖,經由上半部與下半部鏡頭拍攝,越亮的地方也代表越靠近鏡頭;右圖則是用來決定每個像素的模糊程度,黑色為不需要模糊,位於對焦區域(也就是他的臉)背後的紅色場景,越亮代表模糊量越多(點我看原圖):
Google 公布 Pixel 2 與 Pixel 2 XL 人像模式運作原理

步驟 4. 拼接並完成最終照片

最後一步是將步驟 2 的分割遮色片,以及步驟 3 的深度圖組合起來,決定步驟 1 這張 HDR+ 相片中每一個像素要有多少的模糊量。我們結合深度與遮色片的方式是不能說秘密,不過大致來說,我們想要屬於人物的場景(遮色片白色區塊)保持銳利,我們認爲屬於背景的場景(遮色片黑色區塊),模糊成依據它們離對焦區域有多遠的距離,而這距離可以從深度圖找出,像是上圖的紅色範圍。

事實上,改變成模糊是最簡單的部分,每一個像素替換成具有相同顏色但大小不同的半透明磁盤(translucent disk)。如果我們按照深度順序來替換所有磁盤(ㄋdisk),就會變成跟之前所探討的平均值一樣,跟真正光學模糊差不多的效果。合成散焦有一個好處是,由於我們是利用軟體,可以獲得更完美形狀的瓷盤散景,不需攜帶數個笨重的相機鏡頭。另外有趣的是,透過軟體就沒有什麼理由需要再去堅持現實主義,我們能使散景變成任何想要的形狀。

關於示範範例,下圖是最終的人像模式照片,如果你跟步驟 2 合成的淺景深照片相比,你會看到盤子上的餅乾變成模糊了,就跟 SLR 單眼相機一樣:
Google 公布 Pixel 2 與 Pixel 2 XL 人像模式運作原理

以上就是 Google 解釋的人像模式運作原理,除此之外,Google 在這篇文章中還有教導如何拍攝微距、自拍、以及透過人像模式來創作更多照片,有興趣的朋友可以點我閱讀更多

閱讀全文