拍下純淨夜空滿天星斗,Google Pixel 4 的天文攝影演算法是如何架構的?

作者 | 發布日期 2019 年 11 月 28 日 12:05 | 分類 Google , 天文 , 手機 follow us in feedly


今年 iPhone 三鏡頭系統及中國幾支主打拍照功能的手機面前,一直靠演算法打天下的 Pixel 4 確實不像以前搶眼了。

「祖傳」的 IMX363 到今天規格只能淪為別家的副攝,新增的 2 倍長焦在別人已經上到 3 倍、5 倍的情況下也不太夠看,還缺少實用性更高的超廣角。

但在發表會有個功能還是讓人很驚豔──天文攝影,讓人好奇 Google 是怎麼做出來的,演算法改進了什麼。

(Source:Google blog,下同)

要挖掘這些祕密,Google 部落格是最好的資料館,Google 在 Pixel 4 手機發表後已經在部落格發表多篇功能詳解的文章,天文攝影功能就是最新一篇

自從 Night Sight(夜視)功能推出以來,Google 就在一直研究室外暗光拍攝。除了普通景物,Google 意識到拍攝夜晚天空可能也是一種拍攝場景,並開發了天文攝影功能。

暗光拍攝有個大敵就是噪點問題,進光量不足的情況下,夜晚拍攝的照片會出現讓人無法容忍的噪點。解決方法當然是增加進光量,至於如何增加增加進光量,延長曝光時間是最直接簡單的方法,但隨之而來的問題就是會因場景物體的運動和手持不穩定導致模糊。

克服的方法是使用多幀合成提亮降噪,將連續曝光分為多幀後,每幀透過較短曝光,然後對齊幀並補償場景內的物體運動和手持晃動,之後再透過演算法仔細處理沒有完美對齊的地方,儘管單幀看起來可能非常粗糙,但多幀合成後亮度、清晰度和純淨度都會大幅提升。

上述就是現在大多數手機暗光拍攝時會做的事,無論 AI 自動判斷的夜景還是手動切換夜景模式,本質都是這套流程,但要天文攝影需要更精確的限制,比如限制總幀數要多少張、每幀最大曝光時間限制多少秒。

為了在拍攝效果和拍攝體驗獲得平衡,Google 做了大量曝光時間實驗。就像 Night Sight,夜間拍攝必須考慮物體的運動情況,比如樹木在風中搖曳,雲朵在天空飄蕩,月亮和星星也會逐漸升起和落下。且拍攝者也沒有耐心等太久。

最後 Google 決定將一次 Night Sight 多幀合成限制為 15 幀,每幀最大曝光時間為16 秒,拍攝總時間最大限制為 4 分鐘。

至於 CMOS 本身因暗電流產生的熱噪點,Google 透過比較幀序列相鄰畫素的值篩查異常的噪點,一旦檢測到離群值,就用鄰域的平均值替換以隱藏,雖然會遺失一點點畫面訊息,但最後生成的照片純淨許多。

為了讓攝影師即時構圖和判斷,手機螢幕當作取景器一般至少每秒更新 15 次畫面,將曝光時間限制為 66 毫秒,但在極黑暗的環境下,這樣的曝光時間根本不足以看清畫面,取景器可能漆黑一片,或只有一點點模糊的影像。

為了幫助在暗光環境構圖,Night Sight 會將曝光的每幀顯示於取景器,最高 16 秒曝光可清晰看到景物,攝影師可依此構圖,並在完全調整好的情況下拍攝第 2 張照片。

夜空拍攝還有另一個問題,有時曝光時間太久,螢幕看到的樣張會比實際環境亮非常多,我們常說某些手機「把夜晚拍成白天」或「夜視儀」就是如此,但天文攝影的天空並不需太明亮,而是和星光形成反差。為此 Google 使用神經網路和機器學習訓練,透過追蹤天空的輪廓並人工標記超過 10 萬張照片,進而將畫面畫素標記為「天空」或「不是天空」。

透過以上一系列操作,Pixel 4 能在三腳架上獲得非常不錯的星空表現,或藉助遠處光源,比如月光和路燈拍出較明亮清晰的照片。Google 團隊還將人馬座當成無月星空下的天空拍攝標準,最後得到比人眼所見更多的星空細節,這就是 Pixel 的天文攝影。

(本文由 愛范兒 授權轉載;首圖來源:科技新報)