Google在去年12月的時候,在Google相簿中加入電影照片(Cinematic Photo)功能,而Google現在對外揭露該功能背後的原理。電影照片是一種為了要重現照片拍攝當下的沈浸感,透過模擬相機的運動,還有圖像中視差,所產生的動態照片。

由於電影照片需要深度圖,許多較新的手機攝影功能,都能夠透過同時捕捉不同視點的多張照片,來解決深度問題,但為了讓現存的照片,也能呈現電影照片的效果,因此不能夠從多視角立體方法取得深度資訊,因此Google訓練了具有編碼器和解碼器的卷積神經網路,只從單一張RGB圖像,就能預測深度圖,該神經網路會透過物體的相對大小、線性透視或是錯焦模糊,使用單眼線索(Monocular Cues)來估測深度。

不過Google卻無法使用現成的資料集來訓練這個神經網路,Google解釋,單眼深度估計資料集通常用於AR、機器人和自動駕駛等領域,因此這些資料集大多為街道和室內場景,缺少休閒攝影常出現的人、寵物和物體等物體,於是Google自己創建了兩個資料集,一個是由5臺相機所拍攝的照片資料集,以及手機Pixel 4所拍攝的肖像照資料集。藉由混合資料集,使得模型更適應各種場景和相機硬體,提高對野外照片的預測能力。

但因為這樣,也帶來了另外一個挑戰,不同資料集的深度資訊,可能經過縮放和位移,無法放在一起比較,而Google使用相對深度來解決這個問題,使得產生電影照片的計算,不需要使用絕對深度。

Google提到,電影照片效果在人物的邊界處特別難處理,因為深度圖錯誤會使得最終渲染產生偽影,為了減少這樣的問題,Google使用邊緣偵測常用的降噪技術中值濾波器進行處理,並使用DeepLab分隔模型計算照片中人物的遮罩,找出被錯誤預測為背景的像素。

要創建電影照片,另一個要解決的大問題便是攝影機的運鏡路徑,Google需要找出虛擬攝影機的最佳定軸點,才能產生最好的效果。重建圖像的3D場景第一步,就是要將RGB圖像拉伸到深度圖上創建網格,但是網格中的相鄰點,可能存在較大的深度差,雖然在正面視圖不太看得出來,但是當虛擬攝影機移動幅度較大時,就可以看到跨越較大深度變化的多邊形,像是貼圖被拉扯一樣。

而且用戶的照片千百種,不可能在所有電影照片都使用同樣的攝影機軌跡,因此Google定義了一個損失函數,捕捉在最終動畫裡可被看到的延展程度,對每張照片最佳化相機參數,也就是說,相機路徑最佳化的目標,就是要替攝影機選擇一條會產生最少偽影的路徑。

Google使用人體姿勢網路產生分割遮罩,將每張人像照分為3個不同的區域,頭、身體和背景,每個區域有不同的權重,用來調整各區塊偽影可忍受的程度,像是偽影出現在背景區域,就比出現在人物旁還要好,藉此找出每張照片最佳的攝影機路徑,產生效果良好的電影照片。

熱門新聞

Advertisement