超分辨率

**超解析度成像**（Super-resolution imaging，縮寫 SR），是一種提高影片解析度的技術。在一些稱為「光學 SR」的 SR 技術中，系統的繞射極限被超越；而在其他所謂的「幾何 SR」中，數位感光元件的解析度因而提高。超解析度成像技術用於一般圖像處理和超高解析度顯微鏡。

## 小波變換相關技術

在 2000 年以來，小波變換的技術被使用在提高影像的解析度。

### **DASR**

DASR (Demirel-Anbarjafari Super Resolution) 是使用離散小波變換（Discrete wavelet transform）來進行超解析度成像的方法。當時，超解析度成像通常是以內插影像的像素值來完成，而作者認為，對影像中的高頻部份進行內插是造成品質降低的主要理由，因為內插高頻部份讓物體的邊界變得模糊且平滑，於是提出使用離散小波變換的算法來減輕這個問題。

影像可以表示成二維的訊號，經過二維的離散小波變換，可以被分解成四個不同頻段的影像，分別是：low-low (LL), low-high (LH), high-low (HL) 和 high-high (HH)，各自代表在不同維度是高頻或低頻，舉例來說，LH 就是在原影像的第一維 (x 軸) 是低頻而在第二維 (y 軸) 是高頻的分解後結果。

將原影像分解為 LL, LH, HL 和 HH 後，DASR 會對高頻段的三張影像 LH, HL 和 HH 分別做內插，以產生高解析度的 LH, HL 和 HH。這是由於作者認為，將不同的高頻影像各自做內插，能夠避免彼此干擾，進而保留更多的高頻資訊。DASR 不會內插 LL，而是內插原圖來當作高解析度的 LL，因為原圖比 LL 含有更多資訊。取得四張高解析度的 LL, LH, HL 和 HH 後，DASR 將四張影像經過逆離散小波變換 (Inversed discrete wavelet transform)，來生成最終的成像結果。

DASR 當時在 Lena, Elaine, Pepper 和 Baboon 上取得 State-of-the-art 的結果，並超越傳統使用內插和其它使用離散小波變換的方法。

## 深度神經網路相關技術

隨著神經網路的流行，相關技術也被應用在提高圖片解析度。

### SRCNN

SRCNN (Super-resolution convolution neural network) 是一個神經網路，輸入是一個低解析度（視覺上）的圖像，而輸出是一個高解析度的圖像，這裡需要注意的是，在將圖像餵進神經網路前，需要先經過一個預處理 bicubic interpolation，將原始圖片變成跟想要的高解析度圖像一樣大小後，再餵進神經網路中。而神經網路做的事情，主要分成三個步驟區塊特徵抽取與表達（Patch extraction and representation）、非線性對應（non-linear mapping）以及重建（reconstruction）。

#### 區塊特徵抽取與表達（Patch extraction and representation）

這一步就如同一般的 CNN (convolution neural network)，只是沒有經過 max-pooling，公式如下。

 $F_{1}(Y)=\max(0,W_{1}\ast Y+B_{1})$
 $Y$ 代表已經經過 bicubic interpolation 的圖像， $F_{1}(Y)$ 則為這層神經網路的輸出， $W_{1}$ 代表 $n_{1}$ 個 $c\times f_{1}\times f_{1}$ 的 filter（ $c$ 是圖像的 channel 數量，而 $f_{1}$ 則為 filter 的大小）， $\ast $ 代表卷積（convolution）， $B_{1}$ 是偏移量（bias），最後的 $\max $ 則代表激活函數 RELU。

#### 非線性對應（non-linear mapping）

非線性對應，基本上就是持續利用一般 CNN 的方式將前一步每一塊的 $n_{1}$ 維的特徵向量，分別轉換成 $n_{2}$ 維的特徵向量，公式如下。

 $F_{2}(Y)=\max(0,W_{2}\ast F_{1}(Y)+B_{2})$

#### 重建（reconstruction）

在重建的步驟中，我們要考慮的是每一個像素所要的值是多少，這個步驟可以想成在多個相關的高維度的特徵向量中，取一個平均，很湊巧的，這剛好也很像一般的卷積層（convolution layer），公式如下。

 $F(Y)=W_{3}\ast F_{2}(Y)+B_{3}$

#### 訓練方法

在 SRCNN 中所採用的差異函數（Loss Function）是簡單的平均方根差（Mean Square Error），定義為重建後的相片每一個像素與真正的圖片的每一個像素的差異，公式如下。

 $L(\theta )={\frac {1}{n}}\sum _{i=1}^{n}\|F(Y_{i};\theta )-X_{i}\|^{2}$
 $\theta $ 為 SRCNN 的參數， $F(Y_{i};\theta )$ 為給定的 SRCNN 重建 $Y_{i}$ 的圖像， $X_{i}$ 則為真正的高解析度圖像， $n$ 為拿來訓練神經網路的圖像數量或者是一個 batch 中所有的圖像數量。

### "Perceptual Losses for Real-Time Style Transfer and Super-Resolution" （頁面存檔備份，存於網際網路檔案館）

這篇論文提供了一個做法，可以應用在圖像風格轉移（Style Transfer）以及超高解析度（Super-resolution）。

整個系統由兩個神經網路組成，其中一個是圖像轉移網路 $f_{W}$ ，另一個則是可以用來定義各種差異的差異網路 $\phi $ 。

#### 圖像轉移網路 $f_{W}$

圖像轉移網路的輸入為一張圖像，輸出也是一張圖像，而這個網路的參數以 $W$ 表示。

這個圖像轉移網路由 5 個 residual block 所組成，而所有非 residual 的 convolution layer 後面都會接上 batch normalization。激活函數（activation function）的部分，除了在最後的輸出層（output layer）使用 scaled tanh 使得輸出的數值在 0 到 255 之間，其他都是使用 RELU。

convolution layer 的 filter（kernel）的數量上，第一層和最後一層使用 $9\times 9$ 個，其他層則是使用 $3\times 3$ 個。

#### 差異網路 $\phi $

差異網路定義了各種差異函數（loss function），輸入為兩張圖像，一張來自圖像轉移網路，一張則是真正的高解析度影像，輸出為一個實數（scalar）。

而這篇論文所使用的差異網路是 16 層的 VGG 網路，並事先利用 Image Net 訓練過。差異函數的部分，使用了兩個不同於傳統簡單的差異函數。（CHW 代表 feature map 各個維度的數值）

##### 特徵重建差異（Feature Reconstruction Loss）

這個差異函數的設計理念在於，當我們在看兩張圖片像不像時，我們並不是一個一個像素的比較，而是比較兩張圖片中的特徵像不像。因此，他拿差異網路中某一層的輸出，當作一個圖片特徵值，再以兩張圖片的特徵值的 Euclidean Distance 當作差異。

 $l_{feat}^{\phi ,j}({\hat {y}},y)={\frac {1}{C_{j}H_{j}W_{j}}}\|\phi _{j}({\hat {y}})-\phi _{j}(y)\|_{2}^{2}$

##### 風格重建差異（Style Reconstruction Loss）

除了一般的特徵以外，我們也會需要圖像轉移網路正確的重建顏色、材質等等的內容，因此必須再加上風格重建差異函數。
在定義風格重建差異之前，我們先定義 Gram 矩陣 $G_{j}^{\phi }(x)_{c,c'}$ 。

 $G_{j}^{\phi }(x)_{c,c'}={\frac {1}{C_{j}H_{j}W_{j}}}\sum _{h=1}^{H_{j}}\sum _{w=1}^{W_{j}}\phi _{j}(x)_{h,w,c}\phi _{j}(x)_{h,w,c'}$
接著差異函數就可以定義為

 $l_{style}^{\phi ,j}({\hat {y}},y)=\|G_{j}^{\phi }({\hat {y}})-G_{j}^{\phi }(y)\|_{F}^{2}$
而一般比較每一個像素差異的差異函數，則可以寫為

 $l_{pixel}({\hat {y}},y)=\|{\hat {y}}-y\|_{2}^{2}/CHW$
有了這兩個網路後，訓練圖像轉移網路的方法則是最小化各式差異函數的權重和（weighted sum），優化的方法是梯度下降法（Stochastic Gradient Descent（l () 是差異函數（loss function）））。

 $W^{*}=arg\min _{W}E_{x,\{y_{i}\}}[\sum _{i=1}\lambda _{i}l_{i}(f_{W}(x),y_{i})]$
這篇論文在高解析度圖像這個傳統問題上，給了一個快速且有效的解法，快速的原因在於，在遇到一張新的圖片時，只需要把圖像餵進圖像轉移網路就好（一次 forward pass）。而在結果上，也大大的超越了之前的做法（一樣使用深度神經網路）SRCNN。

## 參見條目

* 超解析度顯微鏡
* 光學解析度
* 混疊
* 過採樣
* 壓縮感知
* 核磁共振成像（MRI）
* 迭代稀疏漸近最小方差算法

## 參考資料