本文來自Google AI博客,介紹了傳統去除馬賽克的方法,以及如何通過多幀畫面去除馬賽克的原理。但在手機上應用這一技術,需要面對不少挑戰。感謝快手圖像算法工程師章佳傑的翻譯。

文 / Bartlomiej Wronski

譯 / 章佳傑

原文:http://ai.googleblog.com/2018/10/see-better-and-further-with-super-res.html

一直以來, 對移動設備上的數碼相機來說, 數碼變焦 (非光學變焦) 就是一個 "醜小鴨". 相對數碼單反的光學變焦能力而言, 移動設備上的數碼變焦拍攝的圖片質量是無法與單反相機的光學變焦的圖片質量相提並論的。傳統觀點認爲, 單反變焦鏡頭的複雜光學和機械結構有其優越性, 更緊湊的移動設備上的數碼相機即使加上聰明的算法也並不能取代之.

有了 Pixel 3 上全新的超分辨變焦 (Super Res Zoom) 技術, 我們正在挑戰這一傳統觀點。

Pixel 3上的超分辨變焦技術優於以前的數碼變焦技術是由於它可以直接將多幀圖像合成爲一張高分辨率圖像,而不是像之前的數碼變焦技術僅僅基於單張圖片的裁剪並放大的策略。這種多幀圖像的合成技術可以得到細節大幅提升的結果, 幾乎可以與其他智能手機上 2x 光學變焦的結果相媲美。超分辨變焦意味着, 與先按下快門然後裁剪放大相比, 先捏指縮放畫面來變焦, 然後按下快門, 你能得到更多的細節。

Pixel 3的超分辨變焦技術

2x 變焦對比: Pixel 2 vs. Pixel 3 上的超分辨變焦

數碼變焦的難點

數碼變焦是一項困難的工作, 因爲一個好的算法必須從一個低分辨率的圖像出發, 可靠地 "重構" 出丟失的細節。典型的數碼變焦是對單張圖像的一小部分進行裁剪並放大而得到一張更大的圖像。傳統算法是用線性插值的方法來完成的,線性插值嘗試生成原圖中沒有的細節, 但是這帶來了模糊, 或者稱之爲 "塑料感", 缺乏細節和紋理。相對而言, 大多數現代的單圖放大算法使用了機器學習的手段 (包括我們早先的工作,RAISR)。這些方法能放大特定的圖像特徵, 比如直線邊緣, 甚至可以合成一些紋理, 但是不能恢復出高分辨率的自然細節。雖然我們仍舊在用 RAISR 對圖像視覺質量進行增強, 但是分辨率方面的提升 (至少對大多數變焦倍數比如 2-3x), 更多的來自於我們的多幀方法, 超分辨變焦技術。

色彩濾鏡陣列與去馬賽克

重建精細細節是非常困難的, 因爲數碼照片本身是不完整的, 一張數碼照片實際上是從一部分的顏色信息重建而來的, 這稱爲去馬賽克的過程。在典型的消費級數碼相機中, 相機傳感器元件僅能記錄光的強度, 而不是直接記錄顏色。爲了捕捉場景中存在的真實顏色, 相機使用放在傳感器前面的色彩濾鏡陣列, 以便每個像素僅記錄單一顏色 (紅色, 綠色或藍色),這些濾鏡以拜耳模式(Bayer Pattern)排列, 如下圖所示。

Pixel 3的超分辨變焦技術

拜耳色彩濾鏡馬賽克陣列示意圖:每一個 2x2 的像素組通過一個特定的色彩濾鏡記錄光線的顏色,兩個綠色像素 (因爲人的眼睛對綠色的光線更敏感), 一個紅色像素, 一個藍色像素. 這種模式不斷重複, 填滿整個畫面。

然後相機內部的處理流程必須重建真實顏色和所有像素的所有細節。(注:值得注意的是, 在某種程度上這個情況與我們的視覺系統相似。在人類和其他哺乳動物的眼睛中, 不同的視錐細胞對不同的顏色敏感, 最後大腦填充了剩下的細節以重建完整的圖像。) 算法通常會從附近像素中的顏色進行插值, 對缺失的顏色信息進行最佳猜測, 以此來完成去馬賽克的過程, 這意味着 RGB 數碼照片的三分之二像素實際上是通過重建得到的!

Pixel 3的超分辨變焦技術

去馬賽克的過程, 使用了相鄰像素來重建丟失的顏色信息。

在最簡單的情形中, 去馬賽克可以通過對相鄰像素值進行平均來實現。雖說大多數真正的去馬賽克算法比這更爲複雜, 但受限於本質上的信息不完整, 這些算法仍然會導致不完美的結果和僞像。這種情況即使是大畫幅的數碼單反相機也存在, 但是它們的傳感器和鏡頭更大, 在典型情況下, 單反能比移動設備相機記錄更多的細節。

如果你在移動設備上捏指縮放進行變焦 (數碼變焦), 算法不得不從附近像素再一次插值來構成更多信息, 情況會變得更差。但 (在成像過程中) 並非所有信息都丟失了, 即使受到移動設備光學系統限制, 也可以使用連拍攝影和多幀圖像融合來實現超分辨率。

從連拍攝影到多幀超分

雖然單幅圖片不能提供足夠的信息來填充缺失的顏色, 但我們可以從連續拍攝的多幀圖像中獲取一些缺少的信息。拍攝並融合多幀連續照片的過程稱爲連拍攝影,在 Nexus 和 Pixel 手機上成功應用的谷歌 HDR+ 算法就使用了多幀的信息, 使手機拍攝的照片能達到更大傳感器的畫質水平。我們是否可以採用類似的方法來提高圖像分辨率?

其實這個方法已經有十多年的歷史, 在包括天文學領域。其基本概念被稱爲 "drizzle", 對從略微不同的位置拍攝的多個圖像進行融合, 在 2x 低放大率下或 3x 而照明條件良好的情況下, 可以產生相當於光學變焦的分辨率。這就是多幀超分辨率算法, 通常的思路是將低分辨率連拍攝影的圖像直接進行對齊, 然後合併到所需 (更高) 分辨率的像素網格上。以下是理想化的多幀超分辨率算法如何工作的示例:

Pixel 3的超分辨變焦技術

標準去馬賽克過程 (最上一排) 需要對確實的顏色進行差值。與此相比, 理想情況下, 每一幀圖像水平或垂直移動一個像素, (多幀超分辨率算法) 可以從這些圖像獲得信息來填充缺失的顏色。

在上面的例子中, 我們拍攝了 4 幀, 其中三幀正好移動了一個像素, 分別是水平方向, 垂直方向, 水平和垂直兩個方向。這樣的話, (利用這些移動了的圖像上的像素值) 所有缺失的顏色都會得到補充, 根本不需要任何去馬賽克的過程! 實際上, 一些數碼單反相機就支持這種操作, 但只有當相機在三腳架上時, 傳感器/光學器件纔會主動移動到不同位置,這有時被稱爲 "microstepping"。

多年來, 這種用於更高分辨率成像的 "超分辨率" 方法的實際應用仍主要限於實驗室用途, 或用於某些受控環境下, 傳感器和拍攝主體之間可以對齊, 人們可以控制或嚴格限制它們之間的移動。例如, 在天文攝影中, 望遠鏡是固定的, 望遠鏡拍攝的天空區域是移動的, 而天空的移動是可預測的。但在像現代智能手機這樣廣泛使用的成像設備上, 在需要放大的場合 (如移動相機數碼變焦) 實際使用超分辨率算法, 仍然大部分情況下都無法實現。

部分原因是, 爲了使算法正常工作, 需要滿足某些條件。首先, 也是最重要的一點是, 鏡頭分辨率要比使用的傳感器本身更高 (相比之下, 你可以想象這樣一種情況, 即鏡頭的設計非常糟糕, 以至於採用更好的傳感器不會帶來任何好處)。這種特性通常帶來我們不喜歡的圖像瑕疵,也就是數碼相機中的混疊現象。

圖像混疊

當相機傳感器無法忠實地記錄場景中存在的所有圖案和細節時, 會產生混疊效應。混疊的一個很好的例子是摩爾紋, 有時可以在電視上看到, 由於不幸地選擇了一件條紋衣服, 拍攝的畫面中有明顯的摩爾紋 (https://www.youtube.com/watch?v=jXEgnRWRJfg)。此外, 當物體在場景中移動時, 物理特徵 (例如桌子的邊緣) 的混疊效果會發生變化。你可以在以下連拍序列中觀察到這一點, 其中, 連拍序列期間相機的輕微運動會產生時變混疊效果:

Pixel 3的超分辨變焦技術

左圖: 高分辨率單圖, 桌子的邊緣與高頻模式的背景。右圖: 連拍序列中的不同幀。不同幀之間, 混疊效應和摩爾紋現象很明顯, 像素看起來在跳動, 產生了不同的彩色條紋。

然而, 這種現象對我們來說是一種幸運。如果我們分析產生的條紋, 可以知道它提供了不同像素的顏色和亮度值信息, 正如前一節所述,我們可以藉此實現超分辨率。雖說如此, 許多挑戰仍然存在. 因爲實際上用戶會手持手機, 拍攝一組連拍序列, 超級分辨率算法需要在任何情況下都能奏效。

利用手震進行實際超分辨率合成

如前所述, 一些數碼單反相機提供了特殊的三腳架超分辨率模式, 其工作方式與我們到目前爲止所描述的方式類似。這些方法依賴於相機內部的傳感器和光學器件的物理移動, 但是這些方法需要相機完全穩定, 而這在移動設備中是不切實際的。移動設備幾乎總是手持的,這似乎給移動平臺上的超分辨率成像製造了一個障礙。

然而, 我們通過利用人手的自然動作來克服這種困境。當我們用手持相機或手機拍攝一連串照片時, 每一幀的圖片之間總會有一些移動,光學防抖 (OIS) 系統可以補償大的相機運動, 比如相隔 1/30 秒的連續幀之間通常爲 5-20 像素, 但無法完全消除更快, 更低幅度, 自然的手震。這種手震所有人都有 (即使是那些 "鐵手" 也會有輕微的手震)。當使用高分辨率傳感器的手機拍攝照片時, 手震的幅度僅爲幾個像素。

Pixel 3的超分辨變焦技術

對多幀圖像全局對齊, 裁剪之後, 很明顯能看出手震效應。

爲了利用手震, 我們首先需要將圖像對齊在一起。我們選擇連拍中的單幀圖像作爲 "基礎" 或參考幀, 並相對於它對齊其餘每幀。對齊後, 圖像大致組合在一起, 如前文所示。當然,手震不太可能恰好把圖像移動單個像素, 因此我們在將顏色填入參考幀的像素網格之前, 需要在每個新幀中的相鄰像素之間進行插值。

即使當設備完全穩定 (例如放置在三腳架上) 而不存在手震時, 我們仍然可以通過強制 "搖晃" 相機來強制 OIS 模塊在鏡頭之間輕微移動來模擬自然手震。這種動作非常小, 不會干擾正常照片,但你可以這樣來觀察到, 將手機完全靜止, 例如將其按在窗戶上, 然後在取景器裏捏指縮放到最大放大率, 在 Pixel 3 上自行觀察, 在遠處的物體中可以看到一個微小但連續的橢圓運動, 如下圖所示。

Pixel 3的超分辨變焦技術

克服超分辨率的難點

我們上面給出的理想過程的描述聽起來很簡單, 但超分辨率並不那麼容易。有很多原因導致它沒有被廣泛用於手機等消費產品, 我們需要在算法上進行重要的創新。難點包括:

1. 即使在良好的照明條件下, 連拍序列中的單個圖像也會產生噪聲。對一個實用的超分辨率算法來說, 算法需要知道這種噪聲, 並儘量忽略這些噪聲。我們不希望得到一個高分辨率的帶噪聲圖像, 我們的目標是既增加分辨率又產生更少噪聲的結果。

Pixel 3的超分辨變焦技術

2. 連拍圖像之間的運動不僅限於相機的運動。場景中可能會有複雜的運動, 例如風吹過的樹葉, 在水面上移動的漣漪, 汽車, 移動的人, 人也會改變他們的面部表情, 或者火焰的閃爍, 甚至有一些不能進行單一的運動估計的情況, 有些物體是透明的或多層的, 例如煙霧或玻璃. 完全可靠的局部對齊通常是不現實的, 即使運動估計不完美, 超分辨率算法也需要運算正確。

3. 由於大部分運動是隨機的, 即使存在良好的對齊, 數據在圖像的某些區域可能是密集的, 而在另一些區域則是稀疏的。超分辨率的關鍵是一個複雜的插值問題, 而算法的目標是在整個像素網格的所有部分都中生成更高分辨率的圖像, 數據的不規則散佈使得這項任務變得更具有挑戰性。

Pixel 3的超分辨變焦技術

所有上述困難似乎使現實世界的超分辨率在實踐中不可行, 或者至多僅限於靜態場景和放置在三腳架上的相機. 藉助 Pixel 3 上的超分辨變焦技術, 我們開發出一種穩定而準確的方法, 用於連拍照片分辨率提升, 該方法使用自然的手部動作, 並且足夠穩健且高效, 可以部署在手機上。

以下是我們對其中一些困難是如何克服的:

1. 爲了有效地合併連拍中的幀, 併爲每個像素生成紅綠藍像素值值, 從而不需要去馬賽克, 我們開發了一種在幀之間融合信息的方法。該方法自適應地考慮了圖像的邊緣信息。具體來說, 我們分析輸入幀, 調整融合的方法, 在增加細節和分辨率, 與減少噪聲和平滑圖像之間做權衡。我們通過沿着明顯邊緣的方向合併像素, 而不是跨越邊緣來實現這一點。實際效果是我們的多幀方法在降噪和細節增強之間提供了最佳的平衡。


Pixel 3的超分辨變焦技術

左圖: 降噪和超分辨之間沒有達到最優權衡。右圖: 降噪和超分辨之間更好的權衡。

2. 爲了使算法可靠地處理具有複雜局部運動 (人, 車, 水或樹葉移動) 的場景, 我們開發了一種魯棒的模型, 用於檢測對齊誤差並將其減小。我們選擇一個幀作爲 "參考圖像", 並當我們確定找到了正確的相應特徵時纔將來自其他幀的信息合併到其中。通過這種方式,我們可以避免諸如 "重影" 或運動模糊之類的僞像, 以及圖像被錯誤融合的部分。

Pixel 3的超分辨變焦技術

一個快速移動巴士的場景。左圖: 沒有使用魯棒融合模型。右圖: 使用了魯棒融合模型。

讓手機攝影更上一層樓

去年的人像模式, 以及之前的 HDR+ 算法, 展示了手機攝影可以達到的優秀程度。今年, 我們在變焦方面做出了同樣的工作。這是推動計算攝影學發展的又一進步, 同時縮小了手機攝影和數碼單反相機之間的畫質差距。這裏有一份包含原始視角圖像的圖集, 以及採用超分辨變焦技術拍攝的圖像 (https://photos.app.goo.gl/E8LZW9LRBdFV8kXD8)。請注意, 此圖集中的超分辨變焦圖像未被裁剪, 拍攝的時候使用捏指縮放直接在手機上進行拍攝。

Pixel 3的超分辨變焦技術

左圖: Pixel 2 上裁剪並進行 7x 放大的圖像。右圖: Pixel 3 上同樣視角使用超分辨變焦技術的圖像。

超分辨率的想法比智能手機的出現早了至少十年,幾乎同樣早的, 這種技術就通過電影和電視的虛構情節出現在公衆面前。在學術期刊和會議上, 有成千上萬篇論文對此進行研究,而現在, 它已經成爲現實, 就在你手中的 Pixel 3 裏。

相关文章