歡迎關注“創事記”的微信訂閱號:sinachuangshiji
來源:量子位(ID:QbitAI)
文/蕭簫 發自 凹非寺
景色很好看,可是手機相機分辨率太低,照不出清晰的照片?
沒關系,試試這個超分辨率算法,讓AI“自動”幫你調整分辨率。
經過算法調整后,照片幾乎立刻就清晰了數倍,連角落里模糊的文字都看得清:
這是來自谷歌的一個手機超分辨率算法,此前登上過SIGGRAPH 2019頂會,闡述的是自家手機Pixel 3中使用的超分技術。
現在,這個算法確實被復現了出來,然而,方法卻與論文不全一致(復現的作者Michael Kunz認為,論文有些地方寫錯了)。
來看看這是怎么回事。
多幀合一幀,效果更清晰
論文中,這個用手機實現超分辨率的原理,是這樣的:
在用手機拍照的過程中,手部會出現輕微的震顫。
這導致在連續拍攝同一景象的過程中,每張照片都會有一個微小的偏移量,這些小偏移量,恰好能提供超分辨率所需要的亞像素信息。
然后,將這些彼此之間略有差異的圖像幀,進行對齊、融合,就可以得到一張每個像素位置都有紅、綠、藍三通道值的圖像。
具體算法是這樣的:
首先,獲取多幀RAW圖像;然后,選擇其中一幀作為基準幀,其余圖像進行局部對齊,并通過核回歸,估計每一幀對結果的局部貢獻度;最后,分成RGB三種顏色通道,將貢獻進行疊加。
在訓練過程中,圖像的局部特征會對核形狀進行調整,并對采樣值進行加權。
最后,對每個顏色通道進行歸一化,獲得最后的RGB圖像。
整體來說,就是用多幀融合算法,代替了去馬賽克的傳統超分辨率算法。
然而,聽起來非常完美的算法,有人在復現的過程中,卻發現了一些問題。
實際復現并不容易
項目的作者表示,在復現這篇論文的過程中,發現了一些bug,但目前論文原作者、發行方都還沒回應他。
再來看看這個算法:
首先,在圖像幀的獲取上,如果采用谷歌相機的單反模式進行拍攝,由于時間間隔較長,手部產生的“震顫”可能比想象得大,需要再通過全局的預對齊來彌補缺陷。
然后,主要的問題出在b、c兩個步驟上。
第一個不準確的問題,是具體采用的幀數。論文表明“通過分析每個幀的局部梯度結構張量,來計算核的協方差矩陣”,然而作者發現,對每一幀都這樣操作其實毫無意義。
作者放棄了像論文所述那樣進行采樣,選擇了5×5而非3×3的核,并對梯度進行了高斯平滑,在全分辨率下計算每個像素的結構張量。
此外,則是步驟d的情況,經過長時間曝光的圖像,包含許多低頻噪聲,使得精確跟蹤無法實現。因此,作者在跟蹤步驟前面還加入了一個高通濾波器。
然而,論文卻完全沒有提到“高通濾波器”這種東西。
到了步驟e和f,谷歌論文的作者用了一個專業術語“Wiener shrinkage” ,但這個術語在引用論文中完全沒有出現,無法得知具體含義。
因此,復現的作者,只能根據自己的猜測,結合引用的論文來復現。
其他還有一些細節上的錯誤,例如把公式搞錯了的情況也有發生:
好在,最后他還是將這篇論文復現了出來:
而且做成了一個完整的項目,來看看具體效果。
具體效果
先來看看論文中所展示的效果,看上去還是非常不錯的:
不僅噪點去除了不少,邊緣也很平滑,沒有放大后物體輪廓凸顯的棱角。
而且,看起來也比其他的論文算法要更好:
那么,實際上復現出來的效果如何呢?
整體好像不太看得出效果,放大一點試試:
單棟大樓的窗子確實清晰了不少,原本是模糊一片,現在幾乎能數得出數量了。
不過,相比于論文中的效果,復現出來的實際結果,似乎并沒有那么“完美”。
但用來拍攝風景,效果還挺好:
拍照如果手抖的話,可以將它裝到手機里試一試了~
項目地址:
https://github.com/kunzmi/ImageStackAlignator
論文地址:
https://dl.acm.org/doi/10.1145/3306346.3323024
(聲明:本文僅代表作者觀點,不代表新浪網立場。)