1. 程式人生 > >基於字典的影象超解析度實現

基於字典的影象超解析度實現

簡介

  這段時間在看基於字典的單幀影象超解析度重建,本篇主要是對這塊做個筆記記錄。

基本原理

預處理

     1、準備好用於字典訓練的低解析度影象LR及與之對應的高解析度圖片HR。
     2、將低解析度影象雙線性或者三次方插值到高解析度影象相同大小,得到MR。
     3、將MR影象分成若干個3x3或者5x5之類的小塊,小塊之間有1x1或者2x2之類的重疊區域,對應的高解析度影象同樣對應座標位置,分成這個多塊。
     4、對MR的影象塊做特徵提取操作,可以是每個塊減去該塊平均值、或者是每個塊做梯度散度提取。

非稀疏字典處理

方法一

     1、MR特徵塊集合作為低解析度字典,對應的高解析度塊集合作為高解析度字典。
     2、輸入待處理的低解析度影象,並用和字典訓練一樣的塊大小做分割。
     3、所有低解析度影象分割塊做特徵提取。
     4、每個特徵塊X,在低解析度字典中找到最接近的K個塊。
     5、通過這K個塊,擬合得到最接近該特徵塊的權重係數A。
     6、找到高解析度字典上對應的該K個塊,乘上權重係數A,得到低解析度塊X對應的高解析度影象塊Y。
     7、迴圈計算,直到所有低解析度塊都得到對應高解析度塊。
     8、所有高解析度塊,根據之前分割座標,反向貼合(塊與塊之間重合區域,直接平均),得到結果的高解析度影象。
     參考論文:Super-Resolution Through Neighbor Embedding

方法二

     1、MR特徵塊集合作為低解析度字典,對應的高解析度塊集合作為高解析度字典。
     2、將所有低解析度塊和高解析度塊集合,通過歐式距離,分成1024或者4096個類。
     3、每個類中,使用最小二程法之類,計算對應所屬的低解析度塊到高解析度塊之間的投影矩陣。
     4、輸入待處理的低解析度影象,並用和字典訓練一樣的塊大小做分割。
     5、所有低解析度影象分割塊做特徵提取。
     6、找到每個低解析度特徵塊X與字典中哪個類最接近,直接使用該類所屬的投影矩陣,得到對應高解析度塊Y。
     7、迴圈計算,直到所有低解析度塊都得到對應高解析度塊。
     8、所有高解析度塊,根據之前分割座標,反向貼合(塊與塊之間重合區域,直接平均),得到結果的高解析度影象。
     參考論文:Fast Direct Super-Resolution by Simple Functions

稀疏字典處理

   常規稀疏字典訓練:
     1、首先通過DCT之內演算法,得到一個初始字典。
     2、預處理得到的低解析度特徵塊,在初始字典中找到最相關原子。
     3、該塊和原子相減,得到殘差,繼續在字典中找到和該殘差最接近的原子,繼續相減,不斷迴圈,直到殘差對於設定閥值或者迴圈次數超過一定範圍,所有對應原子位置,存入稀疏矩陣A中。
     4、迴圈處理,直到計算出所有塊的稀疏矩陣A。
     5、保持所有稀疏矩陣A不變,迭代更新字典,每次更新之後保證所有稀疏矩陣A和字典生成的塊與原始低解析度特徵塊,誤差更小。
     6、當誤差小於某個閥值之後,便得到對應低解析度訓練字典。
     注意:用來去噪之類的字典可以這麼訓練,但是超解析度重建需要高低解析度字典聯合訓練,分別得到低解析度字典和高解析度字典,在這基礎上,更復雜一點。
     參考論文:On Single Image Scale-Up Using Sparse-Representations.
   方法一:
     1、輸入待處理的低解析度影象,並用和字典訓練一樣的塊大小做分割。
     2、所有低解析度影象分割塊做特徵提取。
     3、每個特徵塊,在低解析度字典中找到最接近原子。
     4、該塊和原子相減,得到殘差,繼續在字典中找到和該殘差最接近的原子,繼續相減,不斷迴圈,直到殘差對於設定閥值或者迴圈次數超過一定範圍,所有對應原子位置,存入稀疏矩陣A中。
     5、對應高解析度字典和稀疏矩形A相乘,得到高解析度影象塊。
     6、迴圈計算,直到所有低解析度塊都得到對應高解析度塊。
     7、所有高解析度塊,根據之前分割座標,反向貼合(塊與塊之間重合區域,直接平均),得到結果的高解析度影象。
     參考論文:1、Image super-resolution as sparse representation of raw image patches.
               2、On Single Image Scale-Up Using Sparse-Representations.
   方法二:
     1、在低解析度字典中,每個原子找到若干個和它最接近的原子;高解析度字典中,同樣取出對應的這些原子。
     2、使用最小二程法之類,計算這些低解析度塊、高解析度原子之間的投影矩陣。
     3、遍歷完整個字典原子,最終每個原子,對應都有一團鄰居原子及投影矩陣。
     4、輸入待處理的低解析度影象,並用和字典訓練一樣的塊大小做分割。
     5、所有低解析度影象分割塊做特徵提取。
     6、找到每個低解析度特徵塊X與字典中哪個類最接近,直接使用該類所屬的投影矩陣,得到對應高解析度塊Y。
     7、迴圈計算,直到所有低解析度塊都得到對應高解析度塊。
     8、所有高解析度塊,根據之前分割座標,反向貼合(塊與塊之間重合區域,直接平均),得到結果的高解析度影象。
     參考論文:Anchored Neighborhood Regression for Fast Example-Based Super Resolution.
   方法三:
     與方法二類似,區別在於:計算投影矩陣時候,每個原子尋找鄰居不是找其他原子,而是在訓練用的低解析度、高解析度塊中找,論文中建議是2048個。
   如此,計算出來的投影矩陣,得到的高解析度影象,比方法二效果更好。
    參考論文:A+: Adjusted Anchored Neighborhood Regression for Fast Super-Resolution

效果演示

    4倍插值效果比較(左邊為opencv雙線性插值效果, 右邊為低配版方法三效果)