超解析度成像法(Super-resolution,以下稱SR)其實人如其名,就是一種提升原始影像解析度的演算法。許多跟影像有關的應用程式都會使用到SR,例如當我們使用小畫家放大圖片的時候,就是一種SR(雖然效果極差)。
這是因為小畫家使用的是最近鄰插值(Nearest Interpolation),舉例來說,一張2x2的影像
在放大成4x4的影像後,會多出12個空白的像素點
最近鄰插值即直接把臨近像素的值帶入新的像素點
如此簡單暴力的方法可以想見幾乎不會對影像有任何品質提升,馬賽克效應非常嚴重。因此在許多影像應用軟體中,會使用雙線性插值(Bilinear Interpolation)作為預設提升解析度的方法,原理是用鄰近像素點的值來內差得到新像素點的值,效果如下圖。詳細的公式我們會在未來用程式語言實作示範。
上圖就顯得比最近鄰插值的效果好許多,至少以人眼來看會覺得較為平滑及自然。數位影像是以離散的值呈現,無論解析度再高,像素點之間永遠會有一個遺失的像素點,超解析度成像就是為了還原這個遺失的資訊而出現。
假設原本的圖片是以照相機拍攝的4像素影像(ABCD),在像素A與B之間的真值未必就是A與B直接做內差,要如何估算A與B之間像素的值會往A還是往B靠近一點,就是不同SR演算法展現優劣的地方了。
下圖為遙測影像應用超解析度成像法比較。左:原始影像,中:雙立方插值(Bicubic interpolation),右:ZSSR(AI-Based)
在卷積神經網路(Convolutional neural network, CNN)廣泛運用於電腦視覺後,基於CNN的超解析度成像法也不斷在發展,本系列挑戰就是要檢驗這些深度學習方法在還原影像解析度上的成效,以衛星影像作為測試對象,因為衛星影像的解析度受遙測衛星光學元件的硬體限制,AI超解析度成像可能是以較低成本提升解析度的有效方法。
本系列文章主要會以Jupyter notebook及Python作為影像處理的工具,內容主要分為兩大項
下一篇,我們就要開始實作影像差值法來了解超解析度成像的運作方式。